@@ -22755,6 +22755,151 @@ static int test_wc_GetPubKeyDerFromCert(void)
2275522755 return EXPECT_RESULT();
2275622756}
2275722757
22758+ static int test_wc_GetSubjectPubKeyInfoDerFromCert(void)
22759+ {
22760+ EXPECT_DECLS;
22761+ #if !defined(NO_RSA) || defined(HAVE_ECC)
22762+ int ret;
22763+ word32 idx = 0;
22764+ byte keyDer[TWOK_BUF]; /* large enough for up to RSA 2048 */
22765+ word32 keyDerSz = (word32)sizeof(keyDer);
22766+ #if !defined(NO_RSA) && defined(WOLFSSL_CERT_REQ) && !defined(NO_FILESYSTEM)
22767+ byte certBuf[6000]; /* for PEM and CSR, client-cert.pem is 5-6kB */
22768+ word32 certBufSz = sizeof(certBuf);
22769+ #endif
22770+ #if ((!defined(USE_CERT_BUFFERS_2048) && !defined(USE_CERT_BUFFERS_1024)) || \
22771+ defined(WOLFSSL_CERT_REQ)) && !defined(NO_RSA) && !defined(NO_FILESYSTEM)
22772+ XFILE fp = XBADFILE;
22773+ #endif
22774+ #ifndef NO_RSA
22775+ RsaKey rsaKey;
22776+ #if defined(USE_CERT_BUFFERS_2048)
22777+ byte* rsaCertDer = (byte*)client_cert_der_2048;
22778+ word32 rsaCertDerSz = sizeof_client_cert_der_2048;
22779+ #elif defined(USE_CERT_BUFFERS_1024)
22780+ byte* rsaCertDer = (byte*)client_cert_der_1024;
22781+ word32 rsaCertDerSz = sizeof_client_cert_der_1024;
22782+ #else
22783+ unsigned char rsaCertDer[TWOK_BUF];
22784+ word32 rsaCertDerSz;
22785+ #endif
22786+ #endif
22787+ #ifdef HAVE_ECC
22788+ ecc_key eccKey;
22789+ #if defined(USE_CERT_BUFFERS_256)
22790+ byte* eccCert = (byte*)cliecc_cert_der_256;
22791+ word32 eccCertSz = sizeof_cliecc_cert_der_256;
22792+ #else
22793+ unsigned char eccCert[ONEK_BUF];
22794+ word32 eccCertSz;
22795+ XFILE fp2 = XBADFILE;
22796+ #endif
22797+ #endif
22798+
22799+ #ifndef NO_RSA
22800+
22801+ #if !defined(USE_CERT_BUFFERS_1024) && !defined(USE_CERT_BUFFERS_2048)
22802+ ExpectTrue((fp = XFOPEN("./certs/1024/client-cert.der", "rb")) != XBADFILE);
22803+ ExpectIntGT(rsaCertDerSz = (word32)XFREAD(rsaCertDer, 1, sizeof(rsaCertDer),
22804+ fp), 0);
22805+ if (fp != XBADFILE) {
22806+ XFCLOSE(fp);
22807+ fp = XBADFILE;
22808+ }
22809+ #endif
22810+
22811+ /* good test case - RSA DER cert */
22812+ ExpectIntEQ(wc_GetSubjectPubKeyInfoDerFromCert(rsaCertDer, rsaCertDerSz,
22813+ keyDer, &keyDerSz), 0);
22814+ ExpectIntGT(keyDerSz, 0);
22815+
22816+ /* sanity check, verify we can import DER public key */
22817+ ret = wc_InitRsaKey(&rsaKey, HEAP_HINT);
22818+ ExpectIntEQ(ret, 0);
22819+ ExpectIntEQ(wc_RsaPublicKeyDecode(keyDer, &idx, &rsaKey, keyDerSz), 0);
22820+ if (ret == 0) {
22821+ wc_FreeRsaKey(&rsaKey);
22822+ }
22823+
22824+ /* bad args: certDer */
22825+ keyDerSz = (word32)sizeof(keyDer);
22826+ ExpectIntEQ(wc_GetSubjectPubKeyInfoDerFromCert(NULL, rsaCertDerSz, keyDer,
22827+ &keyDerSz),
22828+ WC_NO_ERR_TRACE(BAD_FUNC_ARG));
22829+
22830+ /* bad args: 0 sized certSz */
22831+ keyDerSz = (word32)sizeof(keyDer);
22832+ ExpectIntEQ(wc_GetSubjectPubKeyInfoDerFromCert(rsaCertDer, 0, keyDer,
22833+ &keyDerSz),
22834+ WC_NO_ERR_TRACE(BAD_FUNC_ARG));
22835+
22836+ /* bad args: NULL inout size */
22837+ ExpectIntEQ(ret = wc_GetSubjectPubKeyInfoDerFromCert(rsaCertDer,
22838+ rsaCertDerSz, keyDer,
22839+ NULL),
22840+ WC_NO_ERR_TRACE(BAD_FUNC_ARG));
22841+
22842+ /* Certificate Request Tests */
22843+ #if defined(WOLFSSL_CERT_REQ) && !defined(NO_FILESYSTEM)
22844+ {
22845+ XMEMSET(certBuf, 0, sizeof(certBuf));
22846+ ExpectTrue((fp = XFOPEN("./certs/csr.signed.der", "rb")) != XBADFILE);
22847+ ExpectIntGT(certBufSz = (word32)XFREAD(certBuf, 1, certBufSz, fp), 0);
22848+ if (fp != XBADFILE) {
22849+ XFCLOSE(fp);
22850+ }
22851+
22852+ /* good test case - RSA DER certificate request */
22853+ keyDerSz = sizeof(keyDer);
22854+ ExpectIntEQ(ret = wc_GetSubjectPubKeyInfoDerFromCert(rsaCertDer,
22855+ rsaCertDerSz,
22856+ keyDer,
22857+ &keyDerSz), 0);
22858+ ExpectIntGT(keyDerSz, 0);
22859+
22860+ /* sanity check, verify we can import DER public key */
22861+ ret = wc_InitRsaKey(&rsaKey, HEAP_HINT);
22862+ ExpectIntEQ(ret, 0);
22863+ idx = 0;
22864+ ExpectIntEQ(wc_RsaPublicKeyDecode(keyDer, &idx, &rsaKey, keyDerSz), 0);
22865+ if (ret == 0) {
22866+ wc_FreeRsaKey(&rsaKey);
22867+ }
22868+ }
22869+ #endif /* WOLFSSL_CERT_REQ */
22870+ #endif /* NO_RSA */
22871+
22872+ #ifdef HAVE_ECC
22873+ #ifndef USE_CERT_BUFFERS_256
22874+ ExpectTrue((fp2 = XFOPEN("./certs/client-ecc-cert.der", "rb")) !=
22875+ XBADFILE);
22876+ ExpectIntGT(eccCertSz = (word32)XFREAD(eccCert, 1, ONEK_BUF, fp2), 0);
22877+ if (fp2 != XBADFILE) {
22878+ XFCLOSE(fp2);
22879+ }
22880+ #endif
22881+
22882+ /* good test case - ECC */
22883+ XMEMSET(keyDer, 0, sizeof(keyDer));
22884+ keyDerSz = sizeof(keyDer);
22885+ ExpectIntEQ(wc_GetSubjectPubKeyInfoDerFromCert(eccCert, eccCertSz, keyDer,
22886+ &keyDerSz), 0);
22887+ ExpectIntGT(keyDerSz, 0);
22888+
22889+ /* sanity check, verify we can import DER public key */
22890+ ret = wc_ecc_init(&eccKey);
22891+ ExpectIntEQ(ret, 0);
22892+ idx = 0; /* reset idx to 0, used above in RSA case */
22893+ ExpectIntEQ(wc_EccPublicKeyDecode(keyDer, &idx, &eccKey, keyDerSz), 0);
22894+ if (ret == 0) {
22895+ wc_ecc_free(&eccKey);
22896+ }
22897+
22898+ #endif
22899+ #endif /* !NO_RSA || HAVE_ECC */
22900+ return EXPECT_RESULT();
22901+ }
22902+
2275822903static int test_wc_CheckCertSigPubKey(void)
2275922904{
2276022905 EXPECT_DECLS;
@@ -66846,6 +66991,7 @@ TEST_CASE testCases[] = {
6684666991 TEST_DECL(test_wc_PubKeyPemToDer),
6684766992 TEST_DECL(test_wc_PemPubKeyToDer),
6684866993 TEST_DECL(test_wc_GetPubKeyDerFromCert),
66994+ TEST_DECL(test_wc_GetSubjectPubKeyInfoDerFromCert),
6684966995 TEST_DECL(test_wc_CheckCertSigPubKey),
6685066996
6685166997 /* wolfCrypt ASN tests */
0 commit comments