diff --git a/certs/ecc-rsa-server.p12 b/certs/ecc-rsa-server.p12 new file mode 100644 index 000000000..e1682b5cd Binary files /dev/null and b/certs/ecc-rsa-server.p12 differ diff --git a/certs/include.am b/certs/include.am index 192de5351..55e8632f2 100755 --- a/certs/include.am +++ b/certs/include.am @@ -35,6 +35,7 @@ EXTRA_DIST += \ certs/server-revoked-key.pem \ certs/wolfssl-website-ca.pem \ certs/test-servercert.p12 \ + certs/ecc-rsa-server.p12 \ certs/dsaparams.pem \ certs/ecc-privOnlyKey.pem \ certs/ecc-privOnlyCert.pem \ diff --git a/certs/renewcerts.sh b/certs/renewcerts.sh index ea45b8988..edc7ac164 100755 --- a/certs/renewcerts.sh +++ b/certs/renewcerts.sh @@ -274,12 +274,23 @@ function run_renewcerts(){ openssl x509 -inform PEM -in server-ecc.pem -outform DER -out server-ecc.der openssl x509 -inform PEM -in server-ecc-comp.pem -outform DER -out server-ecc-comp.der + ############################################################ + ###### update the ecc-rsa-server.p12 file ################## + ############################################################ + echo "Updating ecc-rsa-server.p12 (password is \"\")" + echo "" + echo "" | openssl pkcs12 -des3 -descert -export -in server-ecc-rsa.pem -inkey ecc-key.pem -certfile server-ecc.pem -out ecc-rsa-server.p12 -password stdin + + ############################################################ + ########## store DER files as buffers ###################### + ############################################################ echo "Changing directory to wolfssl root..." echo "" cd ../ echo "Execute ./gencertbuf.pl..." echo "" ./gencertbuf.pl + ############################################################ ########## generate the new crls ########################### ############################################################ diff --git a/tests/api.c b/tests/api.c index 500998b92..9e3659c9e 100644 --- a/tests/api.c +++ b/tests/api.c @@ -2527,7 +2527,9 @@ static void test_wolfSSL_PKCS12(void) !defined(NO_ASN) && !defined(NO_PWDBASED) && !defined(NO_RSA) byte buffer[5300]; char file[] = "./certs/test-servercert.p12"; + char order[] = "./certs/ecc-rsa-server.p12"; char pass[] = "a password"; + WOLFSSL_X509_NAME* subject; FILE *f; int bytes, ret; WOLFSSL_BIO *bio; @@ -2535,6 +2537,7 @@ static void test_wolfSSL_PKCS12(void) WC_PKCS12 *pkcs12; WC_PKCS12 *pkcs12_2; WOLFSSL_X509 *cert; + WOLFSSL_X509 *x509; WOLFSSL_X509 *tmp; WOLF_STACK_OF(WOLFSSL_X509) *ca; @@ -2647,6 +2650,54 @@ static void test_wolfSSL_PKCS12(void) PKCS12_free(pkcs12_2); sk_X509_free(ca); + + /* test order of parsing */ + f = fopen(order, "rb"); + AssertNotNull(f); + bytes = (int)fread(buffer, 1, sizeof(buffer), f); + fclose(f); + + AssertNotNull(bio = BIO_new_mem_buf((void*)buffer, bytes)); + AssertNotNull(pkcs12 = d2i_PKCS12_bio(bio, NULL)); + AssertIntEQ((ret = PKCS12_parse(pkcs12, "", &pkey, &cert, &ca)), + WOLFSSL_SUCCESS); + AssertNotNull(pkey); + AssertNotNull(cert); + AssertNotNull(ca); + + /* compare subject lines of certificates */ + AssertNotNull(subject = wolfSSL_X509_get_subject_name(cert)); + AssertNotNull(x509 = wolfSSL_X509_load_certificate_file(eccRsaCertFile, + SSL_FILETYPE_PEM)); + AssertIntEQ(wolfSSL_X509_NAME_cmp((const WOLFSSL_X509_NAME*)subject, + (const WOLFSSL_X509_NAME*)wolfSSL_X509_get_subject_name(x509)), 0); + X509_free(x509); + + /* test expected fail case */ + AssertNotNull(x509 = wolfSSL_X509_load_certificate_file(eccCertFile, + SSL_FILETYPE_PEM)); + AssertIntNE(wolfSSL_X509_NAME_cmp((const WOLFSSL_X509_NAME*)subject, + (const WOLFSSL_X509_NAME*)wolfSSL_X509_get_subject_name(x509)), 0); + X509_free(x509); + X509_free(cert); + + /* get subject line from ca stack */ + AssertNotNull(cert = sk_X509_pop(ca)); + AssertNotNull(subject = wolfSSL_X509_get_subject_name(cert)); + + /* compare subject from certificate in ca to expected */ + AssertNotNull(x509 = wolfSSL_X509_load_certificate_file(eccCertFile, + SSL_FILETYPE_PEM)); + AssertIntEQ(wolfSSL_X509_NAME_cmp((const WOLFSSL_X509_NAME*)subject, + (const WOLFSSL_X509_NAME*)wolfSSL_X509_get_subject_name(x509)), 0); + + EVP_PKEY_free(pkey); + X509_free(x509); + X509_free(cert); + BIO_free(bio); + PKCS12_free(pkcs12); + sk_X509_free(ca); + printf(resultFmt, passed); #endif /* OPENSSL_EXTRA */ } diff --git a/wolfssl/test.h b/wolfssl/test.h index f1e2c6bc4..2ca3d491b 100644 --- a/wolfssl/test.h +++ b/wolfssl/test.h @@ -258,6 +258,7 @@ #define caCertFile "certs/ca-cert.pem" #define eccCertFile "certs/server-ecc.pem" #define eccKeyFile "certs/ecc-key.pem" +#define eccRsaCertFile "certs/server-ecc-rsa.pem" #define svrCertFile "certs/server-cert.pem" #define svrKeyFile "certs/server-key.pem" #define cliCertFile "certs/client-cert.pem" @@ -277,6 +278,7 @@ #define caCertFile "./certs/ca-cert.pem" #define eccCertFile "./certs/server-ecc.pem" #define eccKeyFile "./certs/ecc-key.pem" +#define eccRsaCertFile "./certs/server-ecc-rsa.pem" #define svrCertFile "./certs/server-cert.pem" #define svrKeyFile "./certs/server-key.pem" #define cliCertFile "./certs/client-cert.pem"