|
3 | 3 | @@ -1535,6 +1535,9 @@ |
4 | 4 | Verify(root_cross_signed.get(), {cross_signing_root.get()}, {}, |
5 | 5 | /*crls=*/{}, /*flags=*/0, configure_callback)); |
6 | | - |
| 6 | + |
7 | 7 | +#ifdef BSSL_COMPAT // This next check fails for negative depths on OpenSSL |
8 | 8 | + if (depth < 0) continue; |
9 | 9 | +#endif |
10 | 10 | // An explicitly trusted self-signed certificate is unaffected by depth |
11 | 11 | // checks. |
12 | 12 | EXPECT_EQ(X509_V_OK, |
13 | | -@@ -2290,9 +2293,20 @@ |
| 13 | +@@ -2310,7 +2313,18 @@ |
14 | 14 | {GEN_URI, "foo:///not-a-url", "not-a-url", |
15 | | -- X509_V_ERR_UNSUPPORTED_NAME_SYNTAX, X509_V_ERR_UNSUPPORTED_NAME_SYNTAX}, |
| 15 | +- X509_V_ERR_UNSUPPORTED_NAME_SYNTAX}, |
16 | 16 | +#ifdef BSSL_COMPAT |
17 | 17 | + // OpenSSL considers "foo:///not-a-url" to be a valid URI |
18 | | -+ X509_V_ERR_PERMITTED_VIOLATION, X509_V_ERR_EXCLUDED_VIOLATION}, |
| 18 | ++ X509_V_ERR_PERMITTED_VIOLATION, SpecialCase::kExcludedViolation}, |
19 | 19 | +#else // BSSL_COMPAT |
20 | | -+ X509_V_ERR_UNSUPPORTED_NAME_SYNTAX, X509_V_ERR_UNSUPPORTED_NAME_SYNTAX}, |
| 20 | ++ X509_V_ERR_UNSUPPORTED_NAME_SYNTAX}, |
21 | 21 | +#endif // BSSL_COMPAT |
22 | 22 | {GEN_URI, "foo://:not-a-url", "not-a-url", |
23 | | - X509_V_ERR_UNSUPPORTED_NAME_SYNTAX, X509_V_ERR_UNSUPPORTED_NAME_SYNTAX}, |
24 | | -- {GEN_URI, "foo://", "not-a-url", X509_V_ERR_UNSUPPORTED_NAME_SYNTAX, |
25 | | -- X509_V_ERR_UNSUPPORTED_NAME_SYNTAX}, |
| 23 | + X509_V_ERR_UNSUPPORTED_NAME_SYNTAX}, |
| 24 | +- {GEN_URI, "foo://", "not-a-url", X509_V_ERR_UNSUPPORTED_NAME_SYNTAX}, |
26 | 25 | +#ifdef BSSL_COMPAT |
27 | 26 | + // OpenSSL considers "foo://" to be a valid URI |
28 | | -+ {GEN_URI, "foo://", "not-a-url", X509_V_ERR_PERMITTED_VIOLATION, |
29 | | -+ X509_V_ERR_EXCLUDED_VIOLATION}, |
| 27 | ++ {GEN_URI, "foo://", "not-a-url", |
| 28 | ++ X509_V_ERR_PERMITTED_VIOLATION, SpecialCase::kExcludedViolation}, |
30 | 29 | +#else // BSSL_COMPAT |
31 | | -+ {GEN_URI, "foo://", "not-a-url", X509_V_ERR_UNSUPPORTED_NAME_SYNTAX, |
32 | | -+ X509_V_ERR_UNSUPPORTED_NAME_SYNTAX}, |
| 30 | ++ {GEN_URI, "foo://", "not-a-url", X509_V_ERR_UNSUPPORTED_NAME_SYNTAX}, |
33 | 31 | +#endif // BSSL_COMPAT |
34 | 32 | // Hosts are an exact match. |
35 | | - {GEN_URI, "foo://example.com", "example.com", X509_V_OK, |
36 | | - X509_V_ERR_EXCLUDED_VIOLATION}, |
37 | | -@@ -2363,6 +2374,12 @@ |
| 33 | + {GEN_URI, "foo://example.com", "example.com", X509_V_OK}, |
| 34 | +@@ -2384,6 +2398,12 @@ |
38 | 35 | +#ifdef BSSL_COMPAT // FIXME: See StackTest.test4 |
39 | | -+ auto rule = |
40 | | -+ exclude ? &nc->excludedSubtrees : &nc->permittedSubtrees; |
41 | | -+ *rule = reinterpret_cast<std::remove_reference_t<decltype(*rule)>>(sk_GENERAL_SUBTREE_new_null()); |
| 36 | ++ auto rule = |
| 37 | ++ exclude ? &nc->excludedSubtrees : &nc->permittedSubtrees; |
| 38 | ++ *rule = reinterpret_cast<std::remove_reference_t<decltype(*rule)>>(sk_GENERAL_SUBTREE_new_null()); |
42 | 39 | +#else |
43 | | - STACK_OF(GENERAL_SUBTREE) **rule = |
44 | | - exclude ? &nc->excludedSubtrees : &nc->permittedSubtrees; |
45 | | -- *rule = sk_GENERAL_SUBTREE_new_null(); |
46 | | -+ *rule = sk_GENERAL_SUBTREE_new_null(); |
| 40 | + STACK_OF(GENERAL_SUBTREE) **rule = |
| 41 | + exclude ? &nc->excludedSubtrees : &nc->permittedSubtrees; |
| 42 | +- *rule = sk_GENERAL_SUBTREE_new_null(); |
| 43 | ++ *rule = sk_GENERAL_SUBTREE_new_null(); |
47 | 44 | +#endif |
48 | | - ASSERT_TRUE(*rule); |
49 | | - UniquePtr<GENERAL_SUBTREE> subtree(GENERAL_SUBTREE_new()); |
50 | | - ASSERT_TRUE(subtree); |
51 | | -@@ -2371,6 +2393,10 @@ |
52 | | - subtree->base = MakeGeneralName(t.type, t.constraint).release(); |
53 | | - ASSERT_TRUE(subtree->base); |
54 | | -- ASSERT_TRUE(PushToStack(*rule, std::move(subtree))); |
| 45 | + ASSERT_TRUE(*rule); |
| 46 | + UniquePtr<GENERAL_SUBTREE> subtree(GENERAL_SUBTREE_new()); |
| 47 | + ASSERT_TRUE(subtree); |
| 48 | +@@ -2392,6 +2412,10 @@ |
| 49 | + subtree->base = MakeGeneralName(t.type, t.constraint).release(); |
| 50 | + ASSERT_TRUE(subtree->base); |
| 51 | +- ASSERT_TRUE(PushToStack(*rule, std::move(subtree))); |
55 | 52 | +#ifdef BSSL_COMPAT // FIXME: |
56 | | -+ ASSERT_TRUE(PushToStack(reinterpret_cast<STACK_OF(GENERAL_SUBTREE)*>(*rule), std::move(subtree))); |
| 53 | ++ ASSERT_TRUE(PushToStack(reinterpret_cast<STACK_OF(GENERAL_SUBTREE)*>(*rule), std::move(subtree))); |
57 | 54 | +#else |
58 | | -+ ASSERT_TRUE(PushToStack(*rule, std::move(subtree))); |
| 55 | ++ ASSERT_TRUE(PushToStack(*rule, std::move(subtree))); |
59 | 56 | +#endif |
60 | | - |
61 | | - UniquePtr<X509> root = |
62 | | - MakeTestCert("Root", "Root", key.get(), /*is_ca=*/true); |
63 | | -@@ -3476,11 +3497,13 @@ |
| 57 | + |
| 58 | + UniquePtr<X509> root = |
| 59 | + MakeTestCert("Root", "Root", key.get(), /*is_ca=*/true); |
| 60 | +@@ -3476,11 +3500,13 @@ |
64 | 61 | // |X509_check_purpose| with |X509_PURPOSE_ANY| and purpose -1 do not check |
65 | 62 | // basicConstraints, but other purpose types do. (This is redundant with the |
66 | 63 | // actual basicConstraints check, but |X509_check_purpose| is public API.) |
|
72 | 69 | /*ca=*/1)); |
73 | 70 | +#endif // BSSL_COMPAT |
74 | 71 | } |
75 | | - |
| 72 | + |
76 | 73 | TEST(X509Test, NoBasicConstraintsNetscapeCA) { |
77 | | -@@ -4374,6 +4397,7 @@ |
| 74 | +@@ -4374,6 +4400,7 @@ |
78 | 75 | t6uPxHrmpUY= |
79 | 76 | -----END CERTIFICATE----- |
80 | 77 | )"; |
81 | 78 | +#ifndef BSSL_COMPAT |
82 | 79 | static const char kP256InvalidParam[] = R"( |
83 | 80 | -----BEGIN CERTIFICATE----- |
84 | 81 | MIIBMTCBz6ADAgECAgIE0jATBggqhkjOPQQDAgQHZ2FyYmFnZTAPMQ0wCwYDVQQD |
85 | | -@@ -4385,6 +4409,7 @@ |
| 82 | +@@ -4385,6 +4412,7 @@ |
86 | 83 | fLULTZnynuQUULQkRcF7S7T2WpIL |
87 | 84 | -----END CERTIFICATE----- |
88 | 85 | )"; |
89 | 86 | +#endif |
90 | 87 | static const char kRSANoParam[] = R"( |
91 | 88 | -----BEGIN CERTIFICATE----- |
92 | 89 | MIIBWzCBx6ADAgECAgIE0jALBgkqhkiG9w0BAQswDzENMAsGA1UEAxMEVGVzdDAg |
93 | | -@@ -4409,6 +4434,7 @@ |
| 90 | +@@ -4409,6 +4437,7 @@ |
94 | 91 | SwmQUz4bRpckRBj+sIyp1We+pg== |
95 | 92 | -----END CERTIFICATE----- |
96 | 93 | )"; |
97 | 94 | +#ifndef BSSL_COMPAT |
98 | 95 | static const char kRSAInvalidParam[] = R"( |
99 | 96 | -----BEGIN CERTIFICATE----- |
100 | 97 | MIIBbTCB0KADAgECAgIE0jAUBgkqhkiG9w0BAQsEB2dhcmJhZ2UwDzENMAsGA1UE |
101 | | -@@ -4421,7 +4447,7 @@ |
| 98 | +@@ -4421,7 +4450,7 @@ |
102 | 99 | 5OMNZ/ajVwOssw61GcAlScRqEHkZFBoGp7e+QpgB2tf9 |
103 | 100 | -----END CERTIFICATE----- |
104 | 101 | )"; |
|
107 | 104 | TEST(X509Test, AlgorithmParameters) { |
108 | 105 | // P-256 parameters should be omitted, but we accept NULL ones. |
109 | 106 | UniquePtr<EVP_PKEY> key = PrivateKeyFromPEM(kP256Key); |
110 | | -@@ -4435,11 +4461,13 @@ |
| 107 | +@@ -4435,11 +4464,13 @@ |
111 | 108 | ASSERT_TRUE(cert); |
112 | 109 | EXPECT_TRUE(X509_verify(cert.get(), key.get())); |
113 | | - |
| 110 | + |
114 | 111 | +#ifndef BSSL_COMPAT |
115 | 112 | cert = CertFromPEM(kP256InvalidParam); |
116 | 113 | ASSERT_TRUE(cert); |
117 | 114 | EXPECT_FALSE(X509_verify(cert.get(), key.get())); |
118 | 115 | EXPECT_TRUE( |
119 | 116 | ErrorEquals(ERR_get_error(), ERR_LIB_X509, X509_R_INVALID_PARAMETER)); |
120 | 117 | +#endif |
121 | | - |
| 118 | + |
122 | 119 | // RSA parameters should be NULL, but we accept omitted ones. |
123 | 120 | key = PrivateKeyFromPEM(kRSAKey); |
124 | | -@@ -4453,11 +4481,13 @@ |
| 121 | +@@ -4453,11 +4484,13 @@ |
125 | 122 | ASSERT_TRUE(cert); |
126 | 123 | EXPECT_TRUE(X509_verify(cert.get(), key.get())); |
127 | | - |
| 124 | + |
128 | 125 | +#ifndef BSSL_COMPAT |
129 | 126 | cert = CertFromPEM(kRSAInvalidParam); |
130 | 127 | ASSERT_TRUE(cert); |
|
133 | 130 | ErrorEquals(ERR_get_error(), ERR_LIB_X509, X509_R_INVALID_PARAMETER)); |
134 | 131 | +#endif |
135 | 132 | } |
136 | | - |
| 133 | + |
137 | 134 | TEST(X509Test, GeneralName) { |
0 commit comments