(parse_rsa_private_key): make working for one password.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@17134 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		@@ -137,9 +137,23 @@ parse_rsa_private_key(hx509_context context, struct hx509_collector *c,
 | 
				
			|||||||
	ssize_t ssize, size;
 | 
						ssize_t ssize, size;
 | 
				
			||||||
	void *ivdata;
 | 
						void *ivdata;
 | 
				
			||||||
	const EVP_CIPHER *cipher;
 | 
						const EVP_CIPHER *cipher;
 | 
				
			||||||
	void *key = "foobar";
 | 
						const void *password;
 | 
				
			||||||
	size_t keylen = 6;
 | 
						size_t passwordlen;
 | 
				
			||||||
	
 | 
						void *key;
 | 
				
			||||||
 | 
						const struct _hx509_password *pw;
 | 
				
			||||||
 | 
						hx509_lock lock;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						lock = _hx509_collector_get_lock(c);
 | 
				
			||||||
 | 
						if (lock == NULL)
 | 
				
			||||||
 | 
						    return EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pw = _hx509_lock_get_passwords(lock);
 | 
				
			||||||
 | 
						if (pw == NULL || pw->len < 1)
 | 
				
			||||||
 | 
						    return EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						password = pw->val[0];
 | 
				
			||||||
 | 
						passwordlen = strlen(password);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (strcmp(enc, "4,ENCRYPTED") != 0)
 | 
						if (strcmp(enc, "4,ENCRYPTED") != 0)
 | 
				
			||||||
	    return EINVAL;
 | 
						    return EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -155,8 +169,8 @@ parse_rsa_private_key(hx509_context context, struct hx509_collector *c,
 | 
				
			|||||||
	if (iv)
 | 
						if (iv)
 | 
				
			||||||
	    *iv++ = '\0';
 | 
						    *iv++ = '\0';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* printf("type: %s iv: %s\n", type, iv); */
 | 
						/* printf("type: %s iv: %s\n", type, iv); */
 | 
				
			||||||
	/* XXX handle use EVP_BytesToKey() and decrypt */
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	size = strlen(iv);
 | 
						size = strlen(iv);
 | 
				
			||||||
	ivdata = malloc(size);
 | 
						ivdata = malloc(size);
 | 
				
			||||||
@@ -176,10 +190,19 @@ parse_rsa_private_key(hx509_context context, struct hx509_collector *c,
 | 
				
			|||||||
	    return EINVAL;
 | 
						    return EINVAL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	ret = EVP_BytesToKey(cipher, EVP_md5(), ivdata, key, keylen,
 | 
						key = malloc(EVP_CIPHER_key_length(cipher));
 | 
				
			||||||
 | 
						if (key == NULL) {
 | 
				
			||||||
 | 
						    free(type);
 | 
				
			||||||
 | 
						    free(ivdata);
 | 
				
			||||||
 | 
						    return ENOMEM;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ret = EVP_BytesToKey(cipher, EVP_md5(), ivdata,
 | 
				
			||||||
 | 
								     password, passwordlen,
 | 
				
			||||||
			     1, key, NULL);
 | 
								     1, key, NULL);
 | 
				
			||||||
	free(type);
 | 
						free(type);
 | 
				
			||||||
	if (ret != 1) {
 | 
						if (ret <= 0) {
 | 
				
			||||||
 | 
						    free(key);
 | 
				
			||||||
	    free(ivdata);
 | 
						    free(ivdata);
 | 
				
			||||||
	    return EINVAL;
 | 
						    return EINVAL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -195,6 +218,7 @@ parse_rsa_private_key(hx509_context context, struct hx509_collector *c,
 | 
				
			|||||||
	    EVP_CIPHER_CTX_cleanup(&ctx);
 | 
						    EVP_CIPHER_CTX_cleanup(&ctx);
 | 
				
			||||||
	}	
 | 
						}	
 | 
				
			||||||
	free(ivdata);
 | 
						free(ivdata);
 | 
				
			||||||
 | 
						free(key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
	keydata.data = rk_UNCONST(data);
 | 
						keydata.data = rk_UNCONST(data);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user