forked from wolfSSL/wolfssl
1. Reject DSA certificates instead of ignoring them.
2. Resolved potential crash when trying to calculate a Subject Key ID when the public key is missing from a certificate.
This commit is contained in:
@@ -1244,6 +1244,7 @@ int DsaPrivateKeyDecode(const byte* input, word32* inOutIdx, DsaKey* key,
|
|||||||
void InitDecodedCert(DecodedCert* cert, byte* source, word32 inSz, void* heap)
|
void InitDecodedCert(DecodedCert* cert, byte* source, word32 inSz, void* heap)
|
||||||
{
|
{
|
||||||
cert->publicKey = 0;
|
cert->publicKey = 0;
|
||||||
|
cert->pubKeySize = 0;
|
||||||
cert->pubKeyStored = 0;
|
cert->pubKeyStored = 0;
|
||||||
cert->signature = 0;
|
cert->signature = 0;
|
||||||
cert->subjectCN = 0;
|
cert->subjectCN = 0;
|
||||||
@@ -1419,9 +1420,6 @@ static int GetKey(DecodedCert* cert)
|
|||||||
return ASN_PARSE_E;
|
return ASN_PARSE_E;
|
||||||
|
|
||||||
switch (cert->keyOID) {
|
switch (cert->keyOID) {
|
||||||
case DSAk:
|
|
||||||
/* do nothing */
|
|
||||||
break;
|
|
||||||
#ifndef NO_RSA
|
#ifndef NO_RSA
|
||||||
case RSAk:
|
case RSAk:
|
||||||
{
|
{
|
||||||
@@ -2992,7 +2990,8 @@ int ParseCertRelative(DecodedCert* cert, int type, int verify, void* cm)
|
|||||||
return ASN_SIG_OID_E;
|
return ASN_SIG_OID_E;
|
||||||
|
|
||||||
#ifndef NO_SKID
|
#ifndef NO_SKID
|
||||||
if (cert->extSubjKeyIdSet == 0) {
|
if (cert->extSubjKeyIdSet == 0
|
||||||
|
&& cert->publicKey != NULL && cert->pubKeySize > 0) {
|
||||||
Sha sha;
|
Sha sha;
|
||||||
InitSha(&sha);
|
InitSha(&sha);
|
||||||
ShaUpdate(&sha, cert->publicKey, cert->pubKeySize);
|
ShaUpdate(&sha, cert->publicKey, cert->pubKeySize);
|
||||||
|
Reference in New Issue
Block a user