373 lines
9.3 KiB
Diff
373 lines
9.3 KiB
Diff
From 94ece6af0c89d596f9c5221b7df7d6582168c8ba Mon Sep 17 00:00:00 2001
|
|
From: Matt Caswell <matt@openssl.org>
|
|
Date: Mon, 30 Nov 2020 13:50:52 +0000
|
|
Subject: [PATCH 05/31] Add a test for GENERAL_NAME_cmp
|
|
|
|
Based on a boringssl test contributed by David Benjamin
|
|
|
|
Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
|
|
---
|
|
test/v3nametest.c | 344 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
1 file changed, 344 insertions(+)
|
|
|
|
diff --git a/test/v3nametest.c b/test/v3nametest.c
|
|
index 86f3829..4c8af92 100644
|
|
--- a/test/v3nametest.c
|
|
+++ b/test/v3nametest.c
|
|
@@ -359,8 +359,352 @@ static int call_run_cert(int i)
|
|
return failed == 0;
|
|
}
|
|
|
|
+struct gennamedata {
|
|
+ const unsigned char der[22];
|
|
+ size_t derlen;
|
|
+} gennames[] = {
|
|
+ {
|
|
+ /*
|
|
+ * [0] {
|
|
+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
|
|
+ * [0] {
|
|
+ * SEQUENCE {}
|
|
+ * }
|
|
+ * }
|
|
+ */
|
|
+ {
|
|
+ 0xa0, 0x13, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
|
|
+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x02, 0x30, 0x00
|
|
+ },
|
|
+ 21
|
|
+ }, {
|
|
+ /*
|
|
+ * [0] {
|
|
+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
|
|
+ * [0] {
|
|
+ * [APPLICATION 0] {}
|
|
+ * }
|
|
+ * }
|
|
+ */
|
|
+ {
|
|
+ 0xa0, 0x13, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
|
|
+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x02, 0x60, 0x00
|
|
+ },
|
|
+ 21
|
|
+ }, {
|
|
+ /*
|
|
+ * [0] {
|
|
+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
|
|
+ * [0] {
|
|
+ * UTF8String { "a" }
|
|
+ * }
|
|
+ * }
|
|
+ */
|
|
+ {
|
|
+ 0xa0, 0x14, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
|
|
+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x03, 0x0c, 0x01, 0x61
|
|
+ },
|
|
+ 22
|
|
+ }, {
|
|
+ /*
|
|
+ * [0] {
|
|
+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.2 }
|
|
+ * [0] {
|
|
+ * UTF8String { "a" }
|
|
+ * }
|
|
+ * }
|
|
+ */
|
|
+ {
|
|
+ 0xa0, 0x14, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
|
|
+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x02, 0xa0, 0x03, 0x0c, 0x01, 0x61
|
|
+ },
|
|
+ 22
|
|
+ }, {
|
|
+ /*
|
|
+ * [0] {
|
|
+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
|
|
+ * [0] {
|
|
+ * UTF8String { "b" }
|
|
+ * }
|
|
+ * }
|
|
+ */
|
|
+ {
|
|
+ 0xa0, 0x14, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
|
|
+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x03, 0x0c, 0x01, 0x62
|
|
+ },
|
|
+ 22
|
|
+ }, {
|
|
+ /*
|
|
+ * [0] {
|
|
+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
|
|
+ * [0] {
|
|
+ * BOOLEAN { TRUE }
|
|
+ * }
|
|
+ * }
|
|
+ */
|
|
+ {
|
|
+ 0xa0, 0x14, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
|
|
+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x03, 0x01, 0x01, 0xff
|
|
+ },
|
|
+ 22
|
|
+ }, {
|
|
+ /*
|
|
+ * [0] {
|
|
+ * OBJECT_IDENTIFIER { 1.2.840.113554.4.1.72585.2.1 }
|
|
+ * [0] {
|
|
+ * BOOLEAN { FALSE }
|
|
+ * }
|
|
+ * }
|
|
+ */
|
|
+ {
|
|
+ 0xa0, 0x14, 0x06, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04,
|
|
+ 0x01, 0x84, 0xb7, 0x09, 0x02, 0x01, 0xa0, 0x03, 0x01, 0x01, 0x00
|
|
+ },
|
|
+ 22
|
|
+ }, {
|
|
+ /* [1 PRIMITIVE] { "a" } */
|
|
+ {
|
|
+ 0x81, 0x01, 0x61
|
|
+ },
|
|
+ 3
|
|
+ }, {
|
|
+ /* [1 PRIMITIVE] { "b" } */
|
|
+ {
|
|
+ 0x81, 0x01, 0x62
|
|
+ },
|
|
+ 3
|
|
+ }, {
|
|
+ /* [2 PRIMITIVE] { "a" } */
|
|
+ {
|
|
+ 0x82, 0x01, 0x61
|
|
+ },
|
|
+ 3
|
|
+ }, {
|
|
+ /* [2 PRIMITIVE] { "b" } */
|
|
+ {
|
|
+ 0x82, 0x01, 0x62
|
|
+ },
|
|
+ 3
|
|
+ }, {
|
|
+ /*
|
|
+ * [4] {
|
|
+ * SEQUENCE {
|
|
+ * SET {
|
|
+ * SEQUENCE {
|
|
+ * # commonName
|
|
+ * OBJECT_IDENTIFIER { 2.5.4.3 }
|
|
+ * UTF8String { "a" }
|
|
+ * }
|
|
+ * }
|
|
+ * }
|
|
+ * }
|
|
+ */
|
|
+ {
|
|
+ 0xa4, 0x0e, 0x30, 0x0c, 0x31, 0x0a, 0x30, 0x08, 0x06, 0x03, 0x55,
|
|
+ 0x04, 0x03, 0x0c, 0x01, 0x61
|
|
+ },
|
|
+ 16
|
|
+ }, {
|
|
+ /*
|
|
+ * [4] {
|
|
+ * SEQUENCE {
|
|
+ * SET {
|
|
+ * SEQUENCE {
|
|
+ * # commonName
|
|
+ * OBJECT_IDENTIFIER { 2.5.4.3 }
|
|
+ * UTF8String { "b" }
|
|
+ * }
|
|
+ * }
|
|
+ * }
|
|
+ * }
|
|
+ */
|
|
+ {
|
|
+ 0xa4, 0x0e, 0x30, 0x0c, 0x31, 0x0a, 0x30, 0x08, 0x06, 0x03, 0x55,
|
|
+ 0x04, 0x03, 0x0c, 0x01, 0x62
|
|
+ },
|
|
+ 16
|
|
+ }, {
|
|
+ /*
|
|
+ * [5] {
|
|
+ * [1] {
|
|
+ * UTF8String { "a" }
|
|
+ * }
|
|
+ * }
|
|
+ */
|
|
+ {
|
|
+ 0xa5, 0x05, 0xa1, 0x03, 0x0c, 0x01, 0x61
|
|
+ },
|
|
+ 7
|
|
+ }, {
|
|
+ /*
|
|
+ * [5] {
|
|
+ * [1] {
|
|
+ * UTF8String { "b" }
|
|
+ * }
|
|
+ * }
|
|
+ */
|
|
+ {
|
|
+ 0xa5, 0x05, 0xa1, 0x03, 0x0c, 0x01, 0x62
|
|
+ },
|
|
+ 7
|
|
+ }, {
|
|
+ /*
|
|
+ * [5] {
|
|
+ * [0] {
|
|
+ * UTF8String {}
|
|
+ * }
|
|
+ * [1] {
|
|
+ * UTF8String { "a" }
|
|
+ * }
|
|
+ * }
|
|
+ */
|
|
+ {
|
|
+ 0xa5, 0x09, 0xa0, 0x02, 0x0c, 0x00, 0xa1, 0x03, 0x0c, 0x01, 0x61
|
|
+ },
|
|
+ 11
|
|
+ }, {
|
|
+ /*
|
|
+ * [5] {
|
|
+ * [0] {
|
|
+ * UTF8String { "a" }
|
|
+ * }
|
|
+ * [1] {
|
|
+ * UTF8String { "a" }
|
|
+ * }
|
|
+ * }
|
|
+ */
|
|
+ {
|
|
+ 0xa5, 0x0a, 0xa0, 0x03, 0x0c, 0x01, 0x61, 0xa1, 0x03, 0x0c, 0x01,
|
|
+ 0x61
|
|
+ },
|
|
+ 12
|
|
+ }, {
|
|
+ /*
|
|
+ * [5] {
|
|
+ * [0] {
|
|
+ * UTF8String { "b" }
|
|
+ * }
|
|
+ * [1] {
|
|
+ * UTF8String { "a" }
|
|
+ * }
|
|
+ * }
|
|
+ */
|
|
+ {
|
|
+ 0xa5, 0x0a, 0xa0, 0x03, 0x0c, 0x01, 0x62, 0xa1, 0x03, 0x0c, 0x01,
|
|
+ 0x61
|
|
+ },
|
|
+ 12
|
|
+ }, {
|
|
+ /* [6 PRIMITIVE] { "a" } */
|
|
+ {
|
|
+ 0x86, 0x01, 0x61
|
|
+ },
|
|
+ 3
|
|
+ }, {
|
|
+ /* [6 PRIMITIVE] { "b" } */
|
|
+ {
|
|
+ 0x86, 0x01, 0x62
|
|
+ },
|
|
+ 3
|
|
+ }, {
|
|
+ /* [7 PRIMITIVE] { `11111111` } */
|
|
+ {
|
|
+ 0x87, 0x04, 0x11, 0x11, 0x11, 0x11
|
|
+ },
|
|
+ 6
|
|
+ }, {
|
|
+ /* [7 PRIMITIVE] { `22222222`} */
|
|
+ {
|
|
+ 0x87, 0x04, 0x22, 0x22, 0x22, 0x22
|
|
+ },
|
|
+ 6
|
|
+ }, {
|
|
+ /* [7 PRIMITIVE] { `11111111111111111111111111111111` } */
|
|
+ {
|
|
+ 0x87, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
|
|
+ 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11
|
|
+ },
|
|
+ 18
|
|
+ }, {
|
|
+ /* [7 PRIMITIVE] { `22222222222222222222222222222222` } */
|
|
+ {
|
|
+ 0x87, 0x10, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
|
|
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22
|
|
+ },
|
|
+ 18
|
|
+ }, {
|
|
+ /* [8 PRIMITIVE] { 1.2.840.113554.4.1.72585.2.1 } */
|
|
+ {
|
|
+ 0x88, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84,
|
|
+ 0xb7, 0x09, 0x02, 0x01
|
|
+ },
|
|
+ 15
|
|
+ }, {
|
|
+ /* [8 PRIMITIVE] { 1.2.840.113554.4.1.72585.2.2 } */
|
|
+ {
|
|
+ 0x88, 0x0d, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x12, 0x04, 0x01, 0x84,
|
|
+ 0xb7, 0x09, 0x02, 0x02
|
|
+ },
|
|
+ 15
|
|
+ }
|
|
+};
|
|
+
|
|
+static int test_GENERAL_NAME_cmp(void)
|
|
+{
|
|
+ size_t i, j;
|
|
+ GENERAL_NAME **namesa = OPENSSL_malloc(sizeof(*namesa)
|
|
+ * OSSL_NELEM(gennames));
|
|
+ GENERAL_NAME **namesb = OPENSSL_malloc(sizeof(*namesb)
|
|
+ * OSSL_NELEM(gennames));
|
|
+ int testresult = 0;
|
|
+
|
|
+ if (!TEST_ptr(namesa) || !TEST_ptr(namesb))
|
|
+ goto end;
|
|
+
|
|
+ for (i = 0; i < OSSL_NELEM(gennames); i++) {
|
|
+ const unsigned char *derp = gennames[i].der;
|
|
+
|
|
+ /*
|
|
+ * We create two versions of each GENERAL_NAME so that we ensure when
|
|
+ * we compare them they are always different pointers.
|
|
+ */
|
|
+ namesa[i] = d2i_GENERAL_NAME(NULL, &derp, gennames[i].derlen);
|
|
+ derp = gennames[i].der;
|
|
+ namesb[i] = d2i_GENERAL_NAME(NULL, &derp, gennames[i].derlen);
|
|
+ if (!TEST_ptr(namesa[i]) || !TEST_ptr(namesb[i]))
|
|
+ goto end;
|
|
+ }
|
|
+
|
|
+ /* Every name should be equal to itself and not equal to any others. */
|
|
+ for (i = 0; i < OSSL_NELEM(gennames); i++) {
|
|
+ for (j = 0; j < OSSL_NELEM(gennames); j++) {
|
|
+ if (i == j) {
|
|
+ if (!TEST_int_eq(GENERAL_NAME_cmp(namesa[i], namesb[j]), 0))
|
|
+ goto end;
|
|
+ } else {
|
|
+ if (!TEST_int_ne(GENERAL_NAME_cmp(namesa[i], namesb[j]), 0))
|
|
+ goto end;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+ testresult = 1;
|
|
+
|
|
+ end:
|
|
+ for (i = 0; i < OSSL_NELEM(gennames); i++) {
|
|
+ if (namesa != NULL)
|
|
+ GENERAL_NAME_free(namesa[i]);
|
|
+ if (namesb != NULL)
|
|
+ GENERAL_NAME_free(namesb[i]);
|
|
+ }
|
|
+ OPENSSL_free(namesa);
|
|
+ OPENSSL_free(namesb);
|
|
+
|
|
+ return testresult;
|
|
+}
|
|
+
|
|
int setup_tests(void)
|
|
{
|
|
ADD_ALL_TESTS(call_run_cert, OSSL_NELEM(name_fns));
|
|
+ ADD_TEST(test_GENERAL_NAME_cmp);
|
|
return 1;
|
|
}
|
|
--
|
|
1.8.3.1
|
|
|