Index: mozilla/security/nss/lib/softoken/pkcs11c.c =================================================================== RCS file: /cvsroot/mozilla/security/nss/lib/softoken/pkcs11c.c,v retrieving revision 1.80 diff -pU60 -r1.80 mozilla/security/nss/lib/softoken/pkcs11c.c --- mozilla/security/nss/lib/softoken/pkcs11c.c +++ mozilla/security/nss/lib/softoken/pkcs11c.c @@ -2568,123 +2568,121 @@ nsc_parameter_gen(CK_KEY_TYPE key_type, { SFTKAttribute *attribute; CK_ULONG counter; unsigned int seedBits = 0; unsigned int primeBits; unsigned int j; CK_RV crv = CKR_OK; PQGParams *params = NULL; PQGVerify *vfy = NULL; SECStatus rv; attribute = sftk_FindAttribute(key, CKA_PRIME_BITS); if (attribute == NULL) { return CKR_TEMPLATE_INCOMPLETE; } primeBits = (unsigned int) *(CK_ULONG *)attribute->attrib.pValue; sftk_FreeAttribute(attribute); j = PQG_PBITS_TO_INDEX(primeBits); if (j == (unsigned int)-1) { return CKR_ATTRIBUTE_VALUE_INVALID; } attribute = sftk_FindAttribute(key, CKA_NETSCAPE_PQG_SEED_BITS); if (attribute != NULL) { seedBits = (unsigned int) *(CK_ULONG *)attribute->attrib.pValue; sftk_FreeAttribute(attribute); } sftk_DeleteAttributeType(key,CKA_PRIME_BITS); sftk_DeleteAttributeType(key,CKA_NETSCAPE_PQG_SEED_BITS); if (seedBits == 0) { rv = PQG_ParamGen(j, ¶ms, &vfy); } else { rv = PQG_ParamGenSeedLen(j,seedBits/8, ¶ms, &vfy); } if (rv != SECSuccess) { return CKR_DEVICE_ERROR; } crv = sftk_AddAttributeType(key,CKA_PRIME, params->prime.data, params->prime.len); if (crv != CKR_OK) goto loser; crv = sftk_AddAttributeType(key,CKA_SUBPRIME, params->subPrime.data, params->subPrime.len); if (crv != CKR_OK) goto loser; crv = sftk_AddAttributeType(key,CKA_BASE, params->base.data, params->base.len); if (crv != CKR_OK) goto loser; counter = vfy->counter; crv = sftk_AddAttributeType(key,CKA_NETSCAPE_PQG_COUNTER, &counter, sizeof(counter)); crv = sftk_AddAttributeType(key,CKA_NETSCAPE_PQG_SEED, vfy->seed.data, vfy->seed.len); if (crv != CKR_OK) goto loser; crv = sftk_AddAttributeType(key,CKA_NETSCAPE_PQG_H, vfy->h.data, vfy->h.len); if (crv != CKR_OK) goto loser; loser: - if (params) { - PQG_DestroyParams(params); - } + PQG_DestroyParams(params); if (vfy) { PQG_DestroyVerify(vfy); } return crv; } static CK_RV nsc_SetupBulkKeyGen(CK_MECHANISM_TYPE mechanism, CK_KEY_TYPE *key_type, CK_ULONG *key_length) { CK_RV crv = CKR_OK; switch (mechanism) { case CKM_RC2_KEY_GEN: *key_type = CKK_RC2; if (*key_length == 0) crv = CKR_TEMPLATE_INCOMPLETE; break; #if NSS_SOFTOKEN_DOES_RC5 case CKM_RC5_KEY_GEN: *key_type = CKK_RC5; if (*key_length == 0) crv = CKR_TEMPLATE_INCOMPLETE; break; #endif case CKM_RC4_KEY_GEN: *key_type = CKK_RC4; if (*key_length == 0) crv = CKR_TEMPLATE_INCOMPLETE; break; case CKM_GENERIC_SECRET_KEY_GEN: *key_type = CKK_GENERIC_SECRET; if (*key_length == 0) crv = CKR_TEMPLATE_INCOMPLETE; break; case CKM_CDMF_KEY_GEN: *key_type = CKK_CDMF; *key_length = 8; break; case CKM_DES_KEY_GEN: *key_type = CKK_DES; *key_length = 8; break; case CKM_DES2_KEY_GEN: *key_type = CKK_DES2; *key_length = 16; break; case CKM_DES3_KEY_GEN: *key_type = CKK_DES3; *key_length = 24; break; case CKM_AES_KEY_GEN: *key_type = CKK_AES; if (*key_length == 0) crv = CKR_TEMPLATE_INCOMPLETE; break; default: PORT_Assert(0); crv = CKR_MECHANISM_INVALID;