@@ -23128,10 +23128,10 @@ static const ASNItem RPKCertASN[] = {
2312823128 /* Algorithm OBJECT IDENTIFIER */
2312923129 /* TBS_SPUBKEYINFO_ALGO_OID */ { 2, ASN_OBJECT_ID, 0, 0, 0 },
2313023130 /* parameters ANY defined by algorithm OPTIONAL */
23131- /* TBS_SPUBKEYINFO_ALGO_NULL */ { 2, ASN_TAG_NULL, 0, 0, 2 },
23132- /* TBS_SPUBKEYINFO_ALGO_CURVEID */ { 2, ASN_OBJECT_ID, 0, 0, 2 },
23131+ /* TBS_SPUBKEYINFO_ALGO_NULL */ { 2, ASN_TAG_NULL, 0, 0, 1 },
23132+ /* TBS_SPUBKEYINFO_ALGO_CURVEID */ { 2, ASN_OBJECT_ID, 0, 0, 1 },
2313323133#ifdef WC_RSA_PSS
23134- /* TBS_SPUBKEYINFO_ALGO_P_SEQ */ { 2, ASN_SEQUENCE, 1, 0, 2 },
23134+ /* TBS_SPUBKEYINFO_ALGO_P_SEQ */ { 2, ASN_SEQUENCE, 1, 0, 1 },
2313523135#endif
2313623136 /* subjectPublicKey BIT STRING */
2313723137 /* TBS_SPUBKEYINFO_PUBKEY */ { 1, ASN_BIT_STRING, 0, 0, 0 },
@@ -23372,6 +23372,20 @@ static int DecodeCertInternal(DecodedCert* cert, int verify, int* criticalExt,
2337223372 oidCurveType);
2337323373 ret = GetASN_Items(RPKCertASN, RPKdataASN, RPKCertASN_Length, 1,
2337423374 cert->source, &cert->srcIdx, cert->maxIdx);
23375+
23376+ if (ret == 0) {
23377+ if (( RPKdataASN[RPKCERTASN_IDX_SPUBKEYINFO_ALGO_NULL].length &&
23378+ RPKdataASN[RPKCERTASN_IDX_SPUBKEYINFO_ALGO_CURVEID].length)
23379+ #ifdef WC_RSA_PSS
23380+ || ( RPKdataASN[RPKCERTASN_IDX_SPUBKEYINFO_ALGO_P_SEQ].length &&
23381+ ( RPKdataASN[RPKCERTASN_IDX_SPUBKEYINFO_ALGO_NULL].length ||
23382+ RPKdataASN[RPKCERTASN_IDX_SPUBKEYINFO_ALGO_CURVEID].length))
23383+ #endif
23384+ ) {
23385+ WOLFSSL_MSG("Multiple RPK algorithm parameters set.");
23386+ ret = ASN_PARSE_E;
23387+ }
23388+ }
2337523389 if (ret == 0) {
2337623390 cert->keyOID =
2337723391 RPKdataASN[RPKCERTASN_IDX_SPUBKEYINFO_ALGO_OID].data.oid.sum;
0 commit comments