forked from wolfSSL/wolfssl
Fixes inspired by review by SparkiDev.
This commit is contained in:
@ -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);
|
||||||
|
Reference in New Issue
Block a user