summaryrefslogtreecommitdiffstats
path: root/prsa.c
diff options
context:
space:
mode:
Diffstat (limited to 'prsa.c')
-rw-r--r--prsa.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/prsa.c b/prsa.c
index 0b79cd8..ad66f6c 100644
--- a/prsa.c
+++ b/prsa.c
@@ -113,6 +113,7 @@ pem_DestroyPrivateKey(pemLOWKEYPrivateKey * privk)
if (privk && privk->arena) {
PORT_FreeArena(privk->arena, PR_TRUE);
}
+ nss_ZFreeIf(privk);
}
void
@@ -124,11 +125,6 @@ pem_PopulateModulusExponent(pemInternalObject * io)
PLArenaPool *arena;
SECStatus rv;
- arena = PORT_NewArena(2048);
- if (!arena) {
- return;
- }
-
/* make sure we have the right objects */
if (((const NSSItem *) NULL == classItem) ||
(sizeof(CK_OBJECT_CLASS) != classItem->size) ||
@@ -139,6 +135,11 @@ pem_PopulateModulusExponent(pemInternalObject * io)
return;
}
+ arena = PORT_NewArena(2048);
+ if (!arena) {
+ return;
+ }
+
lpk = (pemLOWKEYPrivateKey *) nss_ZAlloc(NULL,
sizeof(pemLOWKEYPrivateKey));
if (lpk == NULL) {
@@ -159,12 +160,14 @@ pem_PopulateModulusExponent(pemInternalObject * io)
return;
}
+ nss_ZFreeIf(io->u.key.key.modulus.data);
io->u.key.key.modulus.data =
(void *) nss_ZAlloc(NULL, lpk->u.rsa.modulus.len);
io->u.key.key.modulus.size = lpk->u.rsa.modulus.len;
nsslibc_memcpy(io->u.key.key.modulus.data, lpk->u.rsa.modulus.data,
lpk->u.rsa.modulus.len);
+ nss_ZFreeIf(io->u.key.key.exponent.data);
io->u.key.key.exponent.data =
(void *) nss_ZAlloc(NULL, lpk->u.rsa.publicExponent.len);
io->u.key.key.exponent.size = lpk->u.rsa.publicExponent.len;
@@ -172,6 +175,7 @@ pem_PopulateModulusExponent(pemInternalObject * io)
lpk->u.rsa.publicExponent.data,
lpk->u.rsa.publicExponent.len);
+ nss_ZFreeIf(io->u.key.key.privateExponent.data);
io->u.key.key.privateExponent.data =
(void *) nss_ZAlloc(NULL, lpk->u.rsa.privateExponent.len);
io->u.key.key.privateExponent.size = lpk->u.rsa.privateExponent.len;
@@ -179,30 +183,35 @@ pem_PopulateModulusExponent(pemInternalObject * io)
lpk->u.rsa.privateExponent.data,
lpk->u.rsa.privateExponent.len);
+ nss_ZFreeIf(io->u.key.key.prime1.data);
io->u.key.key.prime1.data =
(void *) nss_ZAlloc(NULL, lpk->u.rsa.prime1.len);
io->u.key.key.prime1.size = lpk->u.rsa.prime1.len;
nsslibc_memcpy(io->u.key.key.prime1.data, lpk->u.rsa.prime1.data,
lpk->u.rsa.prime1.len);
+ nss_ZFreeIf(io->u.key.key.prime2.data);
io->u.key.key.prime2.data =
(void *) nss_ZAlloc(NULL, lpk->u.rsa.prime2.len);
io->u.key.key.prime2.size = lpk->u.rsa.prime2.len;
nsslibc_memcpy(io->u.key.key.prime2.data, lpk->u.rsa.prime2.data,
lpk->u.rsa.prime2.len);
+ nss_ZFreeIf(io->u.key.key.exponent1.data);
io->u.key.key.exponent1.data =
(void *) nss_ZAlloc(NULL, lpk->u.rsa.exponent1.len);
io->u.key.key.exponent1.size = lpk->u.rsa.exponent1.len;
nsslibc_memcpy(io->u.key.key.exponent1.data, lpk->u.rsa.exponent1.data,
lpk->u.rsa.exponent1.len);
+ nss_ZFreeIf(io->u.key.key.exponent2.data);
io->u.key.key.exponent2.data =
(void *) nss_ZAlloc(NULL, lpk->u.rsa.exponent2.len);
io->u.key.key.exponent2.size = lpk->u.rsa.exponent2.len;
nsslibc_memcpy(io->u.key.key.exponent2.data, lpk->u.rsa.exponent2.data,
lpk->u.rsa.exponent2.len);
+ nss_ZFreeIf(io->u.key.key.coefficient.data);
io->u.key.key.coefficient.data =
(void *) nss_ZAlloc(NULL, lpk->u.rsa.coefficient.len);
io->u.key.key.coefficient.size = lpk->u.rsa.coefficient.len;
@@ -271,6 +280,8 @@ pem_mdCryptoOperationRSAPriv_Create
lpk->arena = arena;
lpk->keyType = pemLOWKEYRSAKey;
prepare_low_rsa_priv_key_for_asn1(lpk);
+
+ nss_ZFreeIf(iKey->u.key.key.modulus.data);
iKey->u.key.key.modulus.data =
(void *) nss_ZAlloc(NULL, lpk->u.rsa.modulus.len);
iKey->u.key.key.modulus.size = lpk->u.rsa.modulus.len;