summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjsing <>2022-03-02 17:39:56 +0000
committerjsing <>2022-03-02 17:39:56 +0000
commit3c79c749837de4487e6eab0f22760fffbf9ba76d (patch)
treeac01d0704bd7babc0decda0c1c8ae1cd0404d8a3 /src
parent3c3fcd217ad6d444723416dd9eca5e1dc42f4bed (diff)
downloadopenbsd-3c79c749837de4487e6eab0f22760fffbf9ba76d.tar.gz
openbsd-3c79c749837de4487e6eab0f22760fffbf9ba76d.tar.bz2
openbsd-3c79c749837de4487e6eab0f22760fffbf9ba76d.zip
Provide additional ASN1_OBJECT test coverage.
Diffstat (limited to 'src')
-rw-r--r--src/regress/lib/libcrypto/asn1/asn1object.c130
1 files changed, 114 insertions, 16 deletions
diff --git a/src/regress/lib/libcrypto/asn1/asn1object.c b/src/regress/lib/libcrypto/asn1/asn1object.c
index 8a21ec39fb..0051f2c6e7 100644
--- a/src/regress/lib/libcrypto/asn1/asn1object.c
+++ b/src/regress/lib/libcrypto/asn1/asn1object.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: asn1object.c,v 1.1 2022/02/26 16:45:31 jsing Exp $ */ 1/* $OpenBSD: asn1object.c,v 1.2 2022/03/02 17:39:56 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2017, 2021, 2022 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2017, 2021, 2022 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -71,6 +71,30 @@ struct asn1_object_test {
71 71
72struct asn1_object_test asn1_object_tests[] = { 72struct asn1_object_test asn1_object_tests[] = {
73 { 73 {
74 .oid = "2.5",
75 .txt = "directory services (X.500)",
76 .content = {
77 0x55,
78 },
79 .content_len = 1,
80 .der = {
81 0x06, 0x01, 0x55,
82 },
83 .der_len = 3,
84 },
85 {
86 .oid = "2.5.4",
87 .txt = "X509",
88 .content = {
89 0x55, 0x04,
90 },
91 .content_len = 2,
92 .der = {
93 0x06, 0x02, 0x55, 0x04,
94 },
95 .der_len = 4,
96 },
97 {
74 .oid = "2.5.4.10", 98 .oid = "2.5.4.10",
75 .txt = "organizationName", 99 .txt = "organizationName",
76 .content = { 100 .content = {
@@ -95,6 +119,42 @@ struct asn1_object_test asn1_object_tests[] = {
95 .der_len = 5, 119 .der_len = 5,
96 }, 120 },
97 { 121 {
122 .oid = "2.5 4.10",
123 .txt = "organizationName",
124 .content = {
125 0x55, 0x04, 0x0a,
126 },
127 .content_len = 3,
128 .der = {
129 0x06, 0x03, 0x55, 0x04, 0x0a,
130 },
131 .der_len = 5,
132 },
133 {
134 .oid = "2.5.0.0",
135 .txt = "2.5.0.0",
136 .content = {
137 0x55, 0x00, 0x00,
138 },
139 .content_len = 3,
140 .der = {
141 0x06, 0x03, 0x55, 0x00, 0x00,
142 },
143 .der_len = 5,
144 },
145 {
146 .oid = "0.0.0.0",
147 .txt = "0.0.0.0",
148 .content = {
149 0x00, 0x00, 0x00,
150 },
151 .content_len = 3,
152 .der = {
153 0x06, 0x03, 0x00, 0x00, 0x00,
154 },
155 .der_len = 5,
156 },
157 {
98 .oid = "1.3.6.1.4.1.11129.2.4.5", 158 .oid = "1.3.6.1.4.1.11129.2.4.5",
99 .txt = "CT Certificate SCTs", 159 .txt = "CT Certificate SCTs",
100 .content = { 160 .content = {
@@ -109,13 +169,25 @@ struct asn1_object_test asn1_object_tests[] = {
109 .der_len = 12, 169 .der_len = 12,
110 }, 170 },
111 { 171 {
172 .oid = "2.00005.0000000000004.10",
173 .content = {
174 0x55, 0x04, 0x0a,
175 },
176 .content_len = 3,
177 .der = {
178 0x06, 0x03, 0x55, 0x04, 0x0a,
179 },
180 .der_len = 5,
181 .want_error = 0, /* XXX */
182 },
183 {
112 .oid = "2..5.4.10", 184 .oid = "2..5.4.10",
113 .content = { 185 .content = {
114 0x00, 0x00, 0x00, 0x00, 186 0x50, 0x05, 0x04, 0x0a,
115 }, 187 },
116 .content_len = 4, 188 .content_len = 4,
117 .der = { 189 .der = {
118 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 190 0x06, 0x04, 0x50, 0x05, 0x04, 0x0a,
119 }, 191 },
120 .der_len = 6, 192 .der_len = 6,
121 .want_error = 0, /* XXX */ 193 .want_error = 0, /* XXX */
@@ -123,11 +195,11 @@ struct asn1_object_test asn1_object_tests[] = {
123 { 195 {
124 .oid = "2.5..4.10", 196 .oid = "2.5..4.10",
125 .content = { 197 .content = {
126 0x00, 0x00, 0x00, 0x00, 198 0x55, 0x00, 0x04, 0x0a,
127 }, 199 },
128 .content_len = 4, 200 .content_len = 4,
129 .der = { 201 .der = {
130 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 202 0x06, 0x04, 0x55, 0x00, 0x04, 0x0a,
131 }, 203 },
132 .der_len = 6, 204 .der_len = 6,
133 .want_error = 0, /* XXX */ 205 .want_error = 0, /* XXX */
@@ -135,11 +207,11 @@ struct asn1_object_test asn1_object_tests[] = {
135 { 207 {
136 .oid = "2.5.4..10", 208 .oid = "2.5.4..10",
137 .content = { 209 .content = {
138 0x00, 0x00, 0x00, 0x00, 210 0x55, 0x04, 0x00, 0x0a,
139 }, 211 },
140 .content_len = 4, 212 .content_len = 4,
141 .der = { 213 .der = {
142 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 214 0x06, 0x04, 0x55, 0x04, 0x00, 0x0a,
143 }, 215 },
144 .der_len = 6, 216 .der_len = 6,
145 .want_error = 0, /* XXX */ 217 .want_error = 0, /* XXX */
@@ -147,11 +219,11 @@ struct asn1_object_test asn1_object_tests[] = {
147 { 219 {
148 .oid = "2.5.4.10.", 220 .oid = "2.5.4.10.",
149 .content = { 221 .content = {
150 0x00, 0x00, 0x00, 222 0x55, 0x04, 0x0a,
151 }, 223 },
152 .content_len = 3, 224 .content_len = 3,
153 .der = { 225 .der = {
154 0x06, 0x03, 0x00, 0x00, 0x00, 226 0x06, 0x03, 0x55, 0x04, 0x0a,
155 }, 227 },
156 .der_len = 5, 228 .der_len = 5,
157 .want_error = 0, /* XXX */ 229 .want_error = 0, /* XXX */
@@ -161,6 +233,14 @@ struct asn1_object_test asn1_object_tests[] = {
161 .want_error = ASN1_R_FIRST_NUM_TOO_LARGE, 233 .want_error = ASN1_R_FIRST_NUM_TOO_LARGE,
162 }, 234 },
163 { 235 {
236 .oid = "0.40.4.10",
237 .want_error = ASN1_R_SECOND_NUMBER_TOO_LARGE,
238 },
239 {
240 .oid = "1.40.4.10",
241 .want_error = ASN1_R_SECOND_NUMBER_TOO_LARGE,
242 },
243 {
164 .oid = "2", 244 .oid = "2",
165 .want_error = ASN1_R_MISSING_SECOND_NUMBER, 245 .want_error = ASN1_R_MISSING_SECOND_NUMBER,
166 }, 246 },
@@ -168,6 +248,14 @@ struct asn1_object_test asn1_object_tests[] = {
168 .oid = "2,5,4,10", 248 .oid = "2,5,4,10",
169 .want_error = ASN1_R_INVALID_SEPARATOR, 249 .want_error = ASN1_R_INVALID_SEPARATOR,
170 }, 250 },
251 {
252 .oid = "2.5,4.10",
253 .want_error = ASN1_R_INVALID_DIGIT,
254 },
255 {
256 .oid = "2.5a.4.10",
257 .want_error = ASN1_R_INVALID_DIGIT,
258 },
171}; 259};
172 260
173#define N_ASN1_OBJECT_TESTS \ 261#define N_ASN1_OBJECT_TESTS \
@@ -185,23 +273,33 @@ do_asn1_object_test(struct asn1_object_test *aot)
185 273
186 ERR_clear_error(); 274 ERR_clear_error();
187 275
276 ret = a2d_ASN1_OBJECT(NULL, 0, aot->oid, -1);
277 if (ret < 0 || (size_t)ret != aot->content_len) {
278 fprintf(stderr, "FAIL: a2d_ASN1_OBJECT('%s') = %d, want %zu\n",
279 aot->oid, ret, aot->content_len);
280 goto failed;
281 }
188 ret = a2d_ASN1_OBJECT(buf, sizeof(buf), aot->oid, -1); 282 ret = a2d_ASN1_OBJECT(buf, sizeof(buf), aot->oid, -1);
189 if (ret < 0 || (size_t)ret != aot->content_len) { 283 if (ret < 0 || (size_t)ret != aot->content_len) {
190 fprintf(stderr, "FAIL: a2d_ASN1_OBJECT() = %d, want %zu\n", 284 fprintf(stderr, "FAIL: a2d_ASN1_OBJECT('%s') = %d, want %zu\n",
191 ret, aot->content_len); 285 aot->oid, ret, aot->content_len);
192 goto failed; 286 goto failed;
193 } 287 }
194 if (aot->content_len == 0) { 288 if (aot->content_len == 0) {
195 err = ERR_peek_error(); 289 err = ERR_peek_error();
196 if (ERR_GET_REASON(err) != aot->want_error) { 290 if (ERR_GET_REASON(err) != aot->want_error) {
197 fprintf(stderr, "FAIL: Got error reason %d, " 291 fprintf(stderr, "FAIL: a2d_ASN1_OBJECT('%s') - got "
198 "want %d\n", ERR_GET_REASON(err), 292 "error reason %d, want %d\n", aot->oid,
199 aot->want_error); 293 ERR_GET_REASON(err), aot->want_error);
200 goto failed; 294 goto failed;
201 } 295 }
202 goto done; 296 goto done;
203 } 297 }
204 298
299 if (!asn1_compare_bytes("ASN1_OBJECT content", buf, ret, aot->content,
300 aot->content_len))
301 goto failed;
302
205 p = aot->content; 303 p = aot->content;
206 if ((aobj = c2i_ASN1_OBJECT(NULL, &p, aot->content_len)) == NULL) { 304 if ((aobj = c2i_ASN1_OBJECT(NULL, &p, aot->content_len)) == NULL) {
207 fprintf(stderr, "FAIL: c2i_ASN1_OBJECT() failed\n"); 305 fprintf(stderr, "FAIL: c2i_ASN1_OBJECT() failed\n");
@@ -320,8 +418,8 @@ asn1_object_txt_test(void)
320 goto failed; 418 goto failed;
321 } 419 }
322 420
323 p = &asn1_object_tests[0].der[0]; 421 p = &asn1_object_tests[2].der[0];
324 len = asn1_object_tests[0].der_len; 422 len = asn1_object_tests[2].der_len;
325 aobj = d2i_ASN1_OBJECT(NULL, &p, len); 423 aobj = d2i_ASN1_OBJECT(NULL, &p, len);
326 if (aobj == NULL) { 424 if (aobj == NULL) {
327 fprintf(stderr, "FAIL: d2i_ASN1_OBJECT() failed\n"); 425 fprintf(stderr, "FAIL: d2i_ASN1_OBJECT() failed\n");