diff options
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"); |
