@@ -55653,20 +55653,42 @@ static int test_wolfSSL_X509_check_host(void)
5565355653 && !defined(NO_SHA) && !defined(NO_RSA)
5565455654 X509* x509 = NULL;
5565555655 const char altName[] = "example.com";
55656+ const char badAltName[] = "a.example.com";
5565655657
55658+ /* cliCertFile has subjectAltName set to 'example.com', '127.0.0.1' */
5565755659 ExpectNotNull(x509 = wolfSSL_X509_load_certificate_file(cliCertFile,
5565855660 SSL_FILETYPE_PEM));
5565955661
5566055662 ExpectIntEQ(X509_check_host(x509, altName, XSTRLEN(altName), 0, NULL),
5566155663 WOLFSSL_SUCCESS);
5566255664
55665+ ExpectIntEQ(X509_check_host(x509, badAltName, XSTRLEN(badAltName), 0, NULL),
55666+ WC_NO_ERR_TRACE(WOLFSSL_FAILURE));
55667+
5566355668 ExpectIntEQ(X509_check_host(x509, NULL, 0, 0, NULL),
5566455669 WC_NO_ERR_TRACE(WOLFSSL_FAILURE));
5566555670
55671+ /* Check WOLFSSL_LEFT_MOST_WILDCARD_ONLY flag set */
55672+ ExpectIntEQ(X509_check_host(x509, altName, XSTRLEN(altName),
55673+ WOLFSSL_LEFT_MOST_WILDCARD_ONLY, NULL), WOLFSSL_SUCCESS);
55674+
55675+ ExpectIntEQ(X509_check_host(x509, NULL, 0,
55676+ WOLFSSL_LEFT_MOST_WILDCARD_ONLY, NULL),
55677+ WC_NO_ERR_TRACE(WOLFSSL_FAILURE));
55678+
55679+ ExpectIntEQ(X509_check_host(x509, badAltName, XSTRLEN(badAltName),
55680+ WOLFSSL_LEFT_MOST_WILDCARD_ONLY, NULL),
55681+ WC_NO_ERR_TRACE(WOLFSSL_FAILURE));
55682+
5566655683 X509_free(x509);
5566755684
5566855685 ExpectIntEQ(X509_check_host(NULL, altName, XSTRLEN(altName), 0, NULL),
5566955686 WC_NO_ERR_TRACE(WOLFSSL_FAILURE));
55687+
55688+ /* Check again with WOLFSSL_LEFT_MOST_WILDCARD_ONLY flag set */
55689+ ExpectIntEQ(X509_check_host(NULL, altName, XSTRLEN(altName),
55690+ WOLFSSL_LEFT_MOST_WILDCARD_ONLY, NULL),
55691+ WC_NO_ERR_TRACE(WOLFSSL_FAILURE));
5567055692#endif
5567155693 return EXPECT_RESULT();
5567255694}
@@ -63360,6 +63382,12 @@ static int test_wolfSSL_X509_bad_altname(void)
6336063382 * name of "a*\0*". Ensure that it does not match "aaaaa" */
6336163383 ExpectIntNE(wolfSSL_X509_check_host(x509, name, nameLen,
6336263384 WOLFSSL_ALWAYS_CHECK_SUBJECT, NULL), 1);
63385+
63386+ /* Also make sure WOLFSSL_LEFT_MOST_WILDCARD_ONLY fails too */
63387+ ExpectIntNE(wolfSSL_X509_check_host(x509, name, nameLen,
63388+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63389+ NULL), 1);
63390+
6336363391 X509_free(x509);
6336463392
6336563393#endif
@@ -63480,6 +63508,26 @@ static int test_wolfSSL_X509_name_match(void)
6348063508 ExpectIntNE(wolfSSL_X509_check_host(x509, name4, nameLen4,
6348163509 WOLFSSL_ALWAYS_CHECK_SUBJECT, NULL), 1);
6348263510
63511+ /* WOLFSSL_LEFT_MOST_WILDCARD_ONLY flag should fail on all cases, since
63512+ * 'a*' alt name does not have wildcard left-most */
63513+
63514+ /* Ensure that "a*" does not match "aaaaa" */
63515+ ExpectIntNE(wolfSSL_X509_check_host(x509, name1, nameLen1,
63516+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63517+ NULL), WOLFSSL_SUCCESS);
63518+ /* Ensure that "a*" does not match "a" */
63519+ ExpectIntNE(wolfSSL_X509_check_host(x509, name2, nameLen2,
63520+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63521+ NULL), WOLFSSL_SUCCESS);
63522+ /* Ensure that "a*" does not match "abbbb" */
63523+ ExpectIntNE(wolfSSL_X509_check_host(x509, name3, nameLen3,
63524+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63525+ NULL), WOLFSSL_SUCCESS);
63526+ /* Ensure that "a*" does not match "bbb" */
63527+ ExpectIntNE(wolfSSL_X509_check_host(x509, name4, nameLen4,
63528+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63529+ NULL), WOLFSSL_SUCCESS);
63530+
6348363531 wolfSSL_X509_free(x509);
6348463532
6348563533#endif
@@ -63602,6 +63650,21 @@ static int test_wolfSSL_X509_name_match2(void)
6360263650 ExpectIntNE(wolfSSL_X509_check_host(x509, name4, nameLen4,
6360363651 WOLFSSL_ALWAYS_CHECK_SUBJECT, NULL), WOLFSSL_SUCCESS);
6360463652
63653+ /* WOLFSSL_LEFT_MOST_WILDCARD_ONLY flag should fail on all cases, since
63654+ * 'a*b*' alt name does not have wildcard left-most */
63655+ ExpectIntEQ(wolfSSL_X509_check_host(x509, name1, nameLen1,
63656+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63657+ NULL), WOLFSSL_FAILURE);
63658+ ExpectIntEQ(wolfSSL_X509_check_host(x509, name2, nameLen2,
63659+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63660+ NULL), WOLFSSL_FAILURE);
63661+ ExpectIntEQ(wolfSSL_X509_check_host(x509, name3, nameLen3,
63662+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63663+ NULL), WOLFSSL_FAILURE);
63664+ ExpectIntEQ(wolfSSL_X509_check_host(x509, name4, nameLen4,
63665+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63666+ NULL), WOLFSSL_FAILURE);
63667+
6360563668 /* Ensure that "a*b*" matches "ab", testing openssl behavior replication
6360663669 * on check len input handling, 0 for len is OK as it should then use
6360763670 * strlen(name1) */
@@ -63715,6 +63778,8 @@ static int test_wolfSSL_X509_name_match3(void)
6371563778 int nameLen1 = (int)(XSTRLEN(name1));
6371663779 const char *name2 = "x.y.example.com";
6371763780 int nameLen2 = (int)(XSTRLEN(name2));
63781+ const char *name3 = "example.com";
63782+ int nameLen3 = (int)(XSTRLEN(name3));
6371863783
6371963784 ExpectNotNull(x509 = wolfSSL_X509_load_certificate_buffer(
6372063785 cert_der, certSize, WOLFSSL_FILETYPE_ASN1));
@@ -63725,6 +63790,22 @@ static int test_wolfSSL_X509_name_match3(void)
6372563790 /* Ensure that "*.example.com" does NOT match "x.y.example.com" */
6372663791 ExpectIntNE(wolfSSL_X509_check_host(x509, name2, nameLen2,
6372763792 WOLFSSL_ALWAYS_CHECK_SUBJECT, NULL), WOLFSSL_SUCCESS);
63793+ /* Ensure that "*.example.com" does NOT match "example.com" */
63794+ ExpectIntNE(wolfSSL_X509_check_host(x509, name3, nameLen3,
63795+ WOLFSSL_ALWAYS_CHECK_SUBJECT, NULL), WOLFSSL_SUCCESS);
63796+
63797+ /* WOLFSSL_LEFT_MOST_WILDCARD_ONLY, should match "foo.example.com" */
63798+ ExpectIntEQ(wolfSSL_X509_check_host(x509, name1, nameLen1,
63799+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63800+ NULL), WOLFSSL_SUCCESS);
63801+ /* WOLFSSL_LEFT_MOST_WILDCARD_ONLY, should NOT match "x.y.example.com" */
63802+ ExpectIntNE(wolfSSL_X509_check_host(x509, name2, nameLen2,
63803+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63804+ NULL), WOLFSSL_SUCCESS);
63805+ /* WOLFSSL_LEFT_MOST_WILDCARD_ONLY, should NOT match "example.com" */
63806+ ExpectIntNE(wolfSSL_X509_check_host(x509, name3, nameLen3,
63807+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63808+ NULL), WOLFSSL_SUCCESS);
6372863809
6372963810 wolfSSL_X509_free(x509);
6373063811
0 commit comments