Fixes inspired by review by SparkiDev.

This commit is contained in:
Anthony Hu
2022-03-09 13:39:53 -05:00
parent 2cbe28fcf9
commit b043225dbd

View File

@ -16976,8 +16976,7 @@ end:
/* Decode the extension by type. */ /* Decode the extension by type. */
ret = DecodeExtensionType(input + idx, length, oid, critical, cert, ret = DecodeExtensionType(input + idx, length, oid, critical, cert,
&isUnknownExt); &isUnknownExt);
#if defined(WOLFSSL_CUSTOM_OID) && defined(WOLFSSL_ASN_TEMPLATE) \ #if defined(WOLFSSL_CUSTOM_OID) && defined(HAVE_OID_DECODING)
&& defined(HAVE_OID_DECODING)
if (isUnknownExt && (cert->unknownExtCallback != NULL)) { if (isUnknownExt && (cert->unknownExtCallback != NULL)) {
word16 decOid[16]; word16 decOid[16];
word32 decOidSz = sizeof(decOid); word32 decOidSz = sizeof(decOid);
@ -23347,6 +23346,12 @@ enum {
#define certExtsASN_Length ((sizeof(static_certExtsASN) / sizeof(ASNItem)) \ #define certExtsASN_Length ((sizeof(static_certExtsASN) / sizeof(ASNItem)) \
+ (NUM_CUSTOM_EXT * 4)) + (NUM_CUSTOM_EXT * 4))
static const ASNItem customExtASN[] = {
/* CUSTOM_SEQ */ { 0, ASN_SEQUENCE, 1, 1, 0 },
/* CUSTOM_OID */ { 1, ASN_OBJECT_ID, 0, 0, 0 },
/* CUSTOM_CRIT */ { 1, ASN_BOOLEAN, 0, 0, 0 },
/* CUSTOM_STR */ { 1, ASN_OCTET_STRING, 0, 0, 0 },
};
static int EncodeExtensions(Cert* cert, byte* output, word32 maxSz, static int EncodeExtensions(Cert* cert, byte* output, word32 maxSz,
int forRequest) int forRequest)
@ -23402,14 +23407,7 @@ static int EncodeExtensions(Cert* cert, byte* output, word32 maxSz,
XMEMCPY(certExtsASN, static_certExtsASN, sizeof(static_certExtsASN)); XMEMCPY(certExtsASN, static_certExtsASN, sizeof(static_certExtsASN));
for (i = sizeof(static_certExtsASN) / sizeof(ASNItem); for (i = sizeof(static_certExtsASN) / sizeof(ASNItem);
i < (int)(sizeof(certExtsASN) / sizeof(ASNItem)); i += 4) { i < (int)(sizeof(certExtsASN) / sizeof(ASNItem)); i += 4) {
/* CUSTOM_SEQ */ XMEMCPY(&certExtsASN[i], customExtASN, sizeof(customExtASN));
certExtsASN[i+0] = (ASNItem) { 0, ASN_SEQUENCE, 1, 1, 0 };
/* CUSTOM_OID */
certExtsASN[i+1] = (ASNItem) { 1, ASN_OBJECT_ID, 0, 0, 0 };
/* CUSTOM_CRIT */
certExtsASN[i+2] = (ASNItem) { 1, ASN_BOOLEAN, 0, 0, 0 };
/* CUSTOM_STR */
certExtsASN[i+3] = (ASNItem) { 1, ASN_OCTET_STRING, 0, 0, 0 };
} }
(void)forRequest; (void)forRequest;
@ -23570,7 +23568,8 @@ static int EncodeExtensions(Cert* cert, byte* output, word32 maxSz,
cert->extCustom.oid, cert->extCustom.oidSz); cert->extCustom.oid, cert->extCustom.oidSz);
SetASN_Buffer(&dataASN[CERTEXTSASN_IDX_CUSTOM_STR], SetASN_Buffer(&dataASN[CERTEXTSASN_IDX_CUSTOM_STR],
cert->extCustom.val, cert->extCustom.valSz); cert->extCustom.val, cert->extCustom.valSz);
} else }
else
#endif #endif
{ {
/* Don't write out custom OID. */ /* Don't write out custom OID. */
@ -23583,7 +23582,7 @@ static int EncodeExtensions(Cert* cert, byte* output, word32 maxSz,
for (; i < cert->customCertExtCount; i++) { for (; i < cert->customCertExtCount; i++) {
int idx = CERTEXTSASN_IDX_START_CUSTOM + (i * 4); int idx = CERTEXTSASN_IDX_START_CUSTOM + (i * 4);
word32 encodedOidSz = MAX_OID_SZ; word32 encodedOidSz = MAX_OID_SZ;
idx ++; /* Skip one for for SEQ. */ idx++; /* Skip one for for SEQ. */
/* EncodePolicyOID() will never return error since we parsed this /* EncodePolicyOID() will never return error since we parsed this
* OID when it was set. */ * OID when it was set. */
EncodePolicyOID(&encodedOids[i * MAX_OID_SZ], &encodedOidSz, EncodePolicyOID(&encodedOids[i * MAX_OID_SZ], &encodedOidSz,
@ -23591,7 +23590,11 @@ static int EncodeExtensions(Cert* cert, byte* output, word32 maxSz,
SetASN_Buffer(&dataASN[idx], &encodedOids[i * MAX_OID_SZ], SetASN_Buffer(&dataASN[idx], &encodedOids[i * MAX_OID_SZ],
encodedOidSz); encodedOidSz);
idx++; idx++;
SetASN_Boolean(&dataASN[idx], cert->customCertExt[i].crit); if (cert->customCertExt[i].crit) {
SetASN_Boolean(&dataASN[idx], 1);
} else {
dataASN[idx].noOut = 1;
}
idx++; idx++;
SetASN_Buffer(&dataASN[idx], cert->customCertExt[i].val, SetASN_Buffer(&dataASN[idx], cert->customCertExt[i].val,
cert->customCertExt[i].valSz); cert->customCertExt[i].valSz);