b70c8423a2
- manual merge from master
45 lines
1.6 KiB
Diff
45 lines
1.6 KiB
Diff
--- nss/lib/ckfw/pem/psession.c
|
|
+++ nss/lib/ckfw/pem/psession.c
|
|
@@ -230,6 +230,7 @@ pem_mdSession_Login
|
|
unsigned int len = 0;
|
|
NSSLOWKEYPrivateKey *lpk = NULL;
|
|
PLArenaPool *arena;
|
|
+ SECItem plain;
|
|
int i;
|
|
|
|
fwSlot = NSSCKFWToken_GetFWSlot(fwToken);
|
|
@@ -306,23 +321,27 @@ pem_mdSession_Login
|
|
lpk->keyType = NSSLOWKEYRSAKey;
|
|
prepare_low_rsa_priv_key_for_asn1(lpk);
|
|
|
|
- nss_ZFreeIf(io->u.key.key.privateKey->data);
|
|
- io->u.key.key.privateKey->len = len - output[len - 1];
|
|
- io->u.key.key.privateKey->data =
|
|
- (void *) nss_ZAlloc(NULL, io->u.key.key.privateKey->len);
|
|
- memcpy(io->u.key.key.privateKey->data, output, len - output[len - 1]);
|
|
|
|
/* Decode the resulting blob and see if it is a decodable DER that fits
|
|
* our private key template. If so we declare success and move on. If not
|
|
* then we return an error.
|
|
*/
|
|
+ memset(&plain, 0, sizeof(plain));
|
|
+ plain.data = output;
|
|
+ plain.len = len - output[len - 1];
|
|
rv = SEC_QuickDERDecodeItem(arena, lpk, pem_RSAPrivateKeyTemplate,
|
|
- io->u.key.key.privateKey);
|
|
+ &plain);
|
|
pem_DestroyPrivateKey(lpk);
|
|
arena = NULL;
|
|
if (rv != SECSuccess)
|
|
goto loser;
|
|
|
|
+ nss_ZFreeIf(io->u.key.key.privateKey->data);
|
|
+ io->u.key.key.privateKey->len = len - output[len - 1];
|
|
+ io->u.key.key.privateKey->data =
|
|
+ (void *) nss_ZAlloc(NULL, io->u.key.key.privateKey->len);
|
|
+ memcpy(io->u.key.key.privateKey->data, output, len - output[len - 1]);
|
|
+
|
|
rv = CKR_OK;
|
|
|
|
loser:
|