(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,8 +137,22 @@ 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