|
@@ -78,9 +78,9 @@ int rsa_import_pkcs8(const unsigned char *in, unsigned long inlen,
|
|
buf2 = XMALLOC(buf2len);
|
|
buf2 = XMALLOC(buf2len);
|
|
if (buf2 == NULL) { err = CRYPT_MEM; goto LBL_FREE1; }
|
|
if (buf2 == NULL) { err = CRYPT_MEM; goto LBL_FREE1; }
|
|
|
|
|
|
|
|
+ if ((err = mp_init_multi(&zero, &iter, NULL)) != CRYPT_OK) { goto LBL_FREE2; }
|
|
/* init key */
|
|
/* init key */
|
|
- err = mp_init_multi(&key->e, &key->d, &key->N, &key->dQ, &key->dP, &key->qP, &key->p, &key->q, &zero, &iter, NULL);
|
|
|
|
- if (err != CRYPT_OK) { goto LBL_FREE2; }
|
|
|
|
|
|
+ if ((err = rsa_init(key)) != CRYPT_OK) { goto LBL_FREE3; }
|
|
|
|
|
|
/* try to decode encrypted priv key */
|
|
/* try to decode encrypted priv key */
|
|
if ((err = pkcs8_decode_flexi(in, inlen, passwd, passwdlen, &l)) != CRYPT_OK) {
|
|
if ((err = pkcs8_decode_flexi(in, inlen, passwd, passwdlen, &l)) != CRYPT_OK) {
|
|
@@ -117,13 +117,14 @@ int rsa_import_pkcs8(const unsigned char *in, unsigned long inlen,
|
|
if (err != CRYPT_OK) { goto LBL_ERR; }
|
|
if (err != CRYPT_OK) { goto LBL_ERR; }
|
|
key->type = PK_PRIVATE;
|
|
key->type = PK_PRIVATE;
|
|
err = CRYPT_OK;
|
|
err = CRYPT_OK;
|
|
- goto LBL_FREE2;
|
|
|
|
|
|
+ goto LBL_FREE3;
|
|
|
|
|
|
LBL_ERR:
|
|
LBL_ERR:
|
|
rsa_free(key);
|
|
rsa_free(key);
|
|
-LBL_FREE2:
|
|
|
|
- if (l) der_free_sequence_flexi(l);
|
|
|
|
|
|
+LBL_FREE3:
|
|
mp_clear_multi(iter, zero, NULL);
|
|
mp_clear_multi(iter, zero, NULL);
|
|
|
|
+ if (l) der_free_sequence_flexi(l);
|
|
|
|
+LBL_FREE2:
|
|
XFREE(buf2);
|
|
XFREE(buf2);
|
|
LBL_FREE1:
|
|
LBL_FREE1:
|
|
XFREE(buf1);
|
|
XFREE(buf1);
|