diff options
author | jsing <> | 2022-03-02 17:39:56 +0000 |
---|---|---|
committer | jsing <> | 2022-03-02 17:39:56 +0000 |
commit | 3c79c749837de4487e6eab0f22760fffbf9ba76d (patch) | |
tree | ac01d0704bd7babc0decda0c1c8ae1cd0404d8a3 /src | |
parent | 3c3fcd217ad6d444723416dd9eca5e1dc42f4bed (diff) | |
download | openbsd-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.c | 130 |
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 | ||
72 | struct asn1_object_test asn1_object_tests[] = { | 72 | struct 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"); |