Skip to content

Commit

Permalink
Bug 944179 - Use QuickDER to decode DER-encoded DSA and ECDSA signatu…
Browse files Browse the repository at this point in the history
…res r=mt

Differential Revision: https://nss-review.dev.mozaws.net/D142
  • Loading branch information
Tim Taubert committed Jan 12, 2017
1 parent eb3782e commit 64eac98
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions lib/cryptohi/dsautil.c
Expand Up @@ -166,12 +166,16 @@ static SECItem *
common_DecodeDerSig(const SECItem *item, unsigned int len)
{
SECItem *result = NULL;
PORTCheapArenaPool arena;
SECStatus status;
DSA_ASN1Signature sig;
SECItem dst;

PORT_Memset(&sig, 0, sizeof(sig));

/* Make enough room for r + s. */
PORT_InitCheapArena(&arena, PR_MAX(2 * MAX_ECKEY_LEN, DSA_MAX_SIGNATURE_LEN));

result = PORT_ZNew(SECItem);
if (result == NULL)
goto loser;
Expand All @@ -183,7 +187,7 @@ common_DecodeDerSig(const SECItem *item, unsigned int len)

sig.r.type = siUnsignedInteger;
sig.s.type = siUnsignedInteger;
status = SEC_ASN1DecodeItem(NULL, &sig, DSA_SignatureTemplate, item);
status = SEC_QuickDERDecodeItem(&arena.arena, &sig, DSA_SignatureTemplate, item);
if (status != SECSuccess)
goto loser;

Expand All @@ -202,10 +206,7 @@ common_DecodeDerSig(const SECItem *item, unsigned int len)
goto loser;

done:
if (sig.r.data != NULL)
PORT_Free(sig.r.data);
if (sig.s.data != NULL)
PORT_Free(sig.s.data);
PORT_DestroyCheapArena(&arena);

return result;

Expand Down

0 comments on commit 64eac98

Please sign in to comment.