@@ -55652,20 +55652,42 @@ static int test_wolfSSL_X509_check_host(void)
5565255652 && !defined(NO_SHA) && !defined(NO_RSA)
5565355653 X509* x509 = NULL;
5565455654 const char altName[] = "example.com";
55655+ const char badAltName[] = "a.example.com";
5565555656
55657+ /* cliCertFile has subjectAltName set to 'example.com', '127.0.0.1' */
5565655658 ExpectNotNull(x509 = wolfSSL_X509_load_certificate_file(cliCertFile,
5565755659 SSL_FILETYPE_PEM));
5565855660
5565955661 ExpectIntEQ(X509_check_host(x509, altName, XSTRLEN(altName), 0, NULL),
5566055662 WOLFSSL_SUCCESS);
5566155663
55664+ ExpectIntEQ(X509_check_host(x509, badAltName, XSTRLEN(badAltName), 0, NULL),
55665+ WC_NO_ERR_TRACE(WOLFSSL_FAILURE));
55666+
5566255667 ExpectIntEQ(X509_check_host(x509, NULL, 0, 0, NULL),
5566355668 WC_NO_ERR_TRACE(WOLFSSL_FAILURE));
5566455669
55670+ /* Check WOLFSSL_LEFT_MOST_WILDCARD_ONLY flag set */
55671+ ExpectIntEQ(X509_check_host(x509, altName, XSTRLEN(altName),
55672+ WOLFSSL_LEFT_MOST_WILDCARD_ONLY, NULL), WOLFSSL_SUCCESS);
55673+
55674+ ExpectIntEQ(X509_check_host(x509, NULL, 0,
55675+ WOLFSSL_LEFT_MOST_WILDCARD_ONLY, NULL),
55676+ WC_NO_ERR_TRACE(WOLFSSL_FAILURE));
55677+
55678+ ExpectIntEQ(X509_check_host(x509, badAltName, XSTRLEN(badAltName),
55679+ WOLFSSL_LEFT_MOST_WILDCARD_ONLY, NULL),
55680+ WC_NO_ERR_TRACE(WOLFSSL_FAILURE));
55681+
5566555682 X509_free(x509);
5566655683
5566755684 ExpectIntEQ(X509_check_host(NULL, altName, XSTRLEN(altName), 0, NULL),
5566855685 WC_NO_ERR_TRACE(WOLFSSL_FAILURE));
55686+
55687+ /* Check again with WOLFSSL_LEFT_MOST_WILDCARD_ONLY flag set */
55688+ ExpectIntEQ(X509_check_host(NULL, altName, XSTRLEN(altName),
55689+ WOLFSSL_LEFT_MOST_WILDCARD_ONLY, NULL),
55690+ WC_NO_ERR_TRACE(WOLFSSL_FAILURE));
5566955691#endif
5567055692 return EXPECT_RESULT();
5567155693}
@@ -63359,6 +63381,12 @@ static int test_wolfSSL_X509_bad_altname(void)
6335963381 * name of "a*\0*". Ensure that it does not match "aaaaa" */
6336063382 ExpectIntNE(wolfSSL_X509_check_host(x509, name, nameLen,
6336163383 WOLFSSL_ALWAYS_CHECK_SUBJECT, NULL), 1);
63384+
63385+ /* Also make sure WOLFSSL_LEFT_MOST_WILDCARD_ONLY fails too */
63386+ ExpectIntNE(wolfSSL_X509_check_host(x509, name, nameLen,
63387+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63388+ NULL), 1);
63389+
6336263390 X509_free(x509);
6336363391
6336463392#endif
@@ -63479,6 +63507,26 @@ static int test_wolfSSL_X509_name_match(void)
6347963507 ExpectIntNE(wolfSSL_X509_check_host(x509, name4, nameLen4,
6348063508 WOLFSSL_ALWAYS_CHECK_SUBJECT, NULL), 1);
6348163509
63510+ /* WOLFSSL_LEFT_MOST_WILDCARD_ONLY flag should fail on all cases, since
63511+ * 'a*' alt name does not have wildcard left-most */
63512+
63513+ /* Ensure that "a*" does not match "aaaaa" */
63514+ ExpectIntNE(wolfSSL_X509_check_host(x509, name1, nameLen1,
63515+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63516+ NULL), WOLFSSL_SUCCESS);
63517+ /* Ensure that "a*" does not match "a" */
63518+ ExpectIntNE(wolfSSL_X509_check_host(x509, name2, nameLen2,
63519+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63520+ NULL), WOLFSSL_SUCCESS);
63521+ /* Ensure that "a*" does not match "abbbb" */
63522+ ExpectIntNE(wolfSSL_X509_check_host(x509, name3, nameLen3,
63523+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63524+ NULL), WOLFSSL_SUCCESS);
63525+ /* Ensure that "a*" does not match "bbb" */
63526+ ExpectIntNE(wolfSSL_X509_check_host(x509, name4, nameLen4,
63527+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63528+ NULL), WOLFSSL_SUCCESS);
63529+
6348263530 wolfSSL_X509_free(x509);
6348363531
6348463532#endif
@@ -63601,6 +63649,21 @@ static int test_wolfSSL_X509_name_match2(void)
6360163649 ExpectIntNE(wolfSSL_X509_check_host(x509, name4, nameLen4,
6360263650 WOLFSSL_ALWAYS_CHECK_SUBJECT, NULL), WOLFSSL_SUCCESS);
6360363651
63652+ /* WOLFSSL_LEFT_MOST_WILDCARD_ONLY flag should fail on all cases, since
63653+ * 'a*b*' alt name does not have wildcard left-most */
63654+ ExpectIntEQ(wolfSSL_X509_check_host(x509, name1, nameLen1,
63655+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63656+ NULL), WOLFSSL_FAILURE);
63657+ ExpectIntEQ(wolfSSL_X509_check_host(x509, name2, nameLen2,
63658+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63659+ NULL), WOLFSSL_FAILURE);
63660+ ExpectIntEQ(wolfSSL_X509_check_host(x509, name3, nameLen3,
63661+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63662+ NULL), WOLFSSL_FAILURE);
63663+ ExpectIntEQ(wolfSSL_X509_check_host(x509, name4, nameLen4,
63664+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63665+ NULL), WOLFSSL_FAILURE);
63666+
6360463667 /* Ensure that "a*b*" matches "ab", testing openssl behavior replication
6360563668 * on check len input handling, 0 for len is OK as it should then use
6360663669 * strlen(name1) */
@@ -63714,6 +63777,8 @@ static int test_wolfSSL_X509_name_match3(void)
6371463777 int nameLen1 = (int)(XSTRLEN(name1));
6371563778 const char *name2 = "x.y.example.com";
6371663779 int nameLen2 = (int)(XSTRLEN(name2));
63780+ const char *name3 = "example.com";
63781+ int nameLen3 = (int)(XSTRLEN(name3));
6371763782
6371863783 ExpectNotNull(x509 = wolfSSL_X509_load_certificate_buffer(
6371963784 cert_der, certSize, WOLFSSL_FILETYPE_ASN1));
@@ -63724,6 +63789,22 @@ static int test_wolfSSL_X509_name_match3(void)
6372463789 /* Ensure that "*.example.com" does NOT match "x.y.example.com" */
6372563790 ExpectIntNE(wolfSSL_X509_check_host(x509, name2, nameLen2,
6372663791 WOLFSSL_ALWAYS_CHECK_SUBJECT, NULL), WOLFSSL_SUCCESS);
63792+ /* Ensure that "*.example.com" does NOT match "example.com" */
63793+ ExpectIntNE(wolfSSL_X509_check_host(x509, name3, nameLen3,
63794+ WOLFSSL_ALWAYS_CHECK_SUBJECT, NULL), WOLFSSL_SUCCESS);
63795+
63796+ /* WOLFSSL_LEFT_MOST_WILDCARD_ONLY, should match "foo.example.com" */
63797+ ExpectIntEQ(wolfSSL_X509_check_host(x509, name1, nameLen1,
63798+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63799+ NULL), WOLFSSL_SUCCESS);
63800+ /* WOLFSSL_LEFT_MOST_WILDCARD_ONLY, should NOT match "x.y.example.com" */
63801+ ExpectIntNE(wolfSSL_X509_check_host(x509, name2, nameLen2,
63802+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63803+ NULL), WOLFSSL_SUCCESS);
63804+ /* WOLFSSL_LEFT_MOST_WILDCARD_ONLY, should NOT match "example.com" */
63805+ ExpectIntNE(wolfSSL_X509_check_host(x509, name3, nameLen3,
63806+ WOLFSSL_ALWAYS_CHECK_SUBJECT | WOLFSSL_LEFT_MOST_WILDCARD_ONLY,
63807+ NULL), WOLFSSL_SUCCESS);
6372763808
6372863809 wolfSSL_X509_free(x509);
6372963810
0 commit comments