diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libcrypto/asn1/a_enum.c | 24 | ||||
| -rw-r--r-- | src/lib/libcrypto/asn1/asn1_locl.h | 4 | ||||
| -rw-r--r-- | src/lib/libcrypto/asn1/tasn_dec.c | 14 |
3 files changed, 33 insertions, 9 deletions
diff --git a/src/lib/libcrypto/asn1/a_enum.c b/src/lib/libcrypto/asn1/a_enum.c index b0b851028a..b35fe43666 100644 --- a/src/lib/libcrypto/asn1/a_enum.c +++ b/src/lib/libcrypto/asn1/a_enum.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: a_enum.c,v 1.26 2022/08/10 12:06:28 tb Exp $ */ | 1 | /* $OpenBSD: a_enum.c,v 1.27 2022/09/03 18:45:51 jsing Exp $ */ |
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 3 | * All rights reserved. |
| 4 | * | 4 | * |
| @@ -346,6 +346,28 @@ a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size) | |||
| 346 | } | 346 | } |
| 347 | 347 | ||
| 348 | int | 348 | int |
| 349 | c2i_ASN1_ENUMERATED_cbs(ASN1_ENUMERATED **out_aenum, CBS *cbs) | ||
| 350 | { | ||
| 351 | ASN1_ENUMERATED *aenum = NULL; | ||
| 352 | |||
| 353 | if (out_aenum == NULL) | ||
| 354 | return 0; | ||
| 355 | |||
| 356 | if (*out_aenum != NULL) { | ||
| 357 | ASN1_INTEGER_free(*out_aenum); | ||
| 358 | *out_aenum = NULL; | ||
| 359 | } | ||
| 360 | |||
| 361 | if (!c2i_ASN1_INTEGER_cbs((ASN1_INTEGER **)&aenum, cbs)) | ||
| 362 | return 0; | ||
| 363 | |||
| 364 | aenum->type = V_ASN1_ENUMERATED | (aenum->type & V_ASN1_NEG); | ||
| 365 | *out_aenum = aenum; | ||
| 366 | |||
| 367 | return 1; | ||
| 368 | } | ||
| 369 | |||
| 370 | int | ||
| 349 | i2d_ASN1_ENUMERATED(ASN1_ENUMERATED *a, unsigned char **out) | 371 | i2d_ASN1_ENUMERATED(ASN1_ENUMERATED *a, unsigned char **out) |
| 350 | { | 372 | { |
| 351 | return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_ENUMERATED_it); | 373 | return ASN1_item_i2d((ASN1_VALUE *)a, out, &ASN1_ENUMERATED_it); |
diff --git a/src/lib/libcrypto/asn1/asn1_locl.h b/src/lib/libcrypto/asn1/asn1_locl.h index ec853250f2..e2c57fd8c4 100644 --- a/src/lib/libcrypto/asn1/asn1_locl.h +++ b/src/lib/libcrypto/asn1/asn1_locl.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: asn1_locl.h,v 1.35 2022/06/29 08:56:44 beck Exp $ */ | 1 | /* $OpenBSD: asn1_locl.h,v 1.36 2022/09/03 18:45:51 jsing Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 2006. | 3 | * project 2006. |
| 4 | */ | 4 | */ |
| @@ -209,6 +209,8 @@ int asn1_tag2charwidth(int tag); | |||
| 209 | int asn1_abs_set_unused_bits(ASN1_BIT_STRING *abs, uint8_t unused_bits); | 209 | int asn1_abs_set_unused_bits(ASN1_BIT_STRING *abs, uint8_t unused_bits); |
| 210 | int c2i_ASN1_BIT_STRING_cbs(ASN1_BIT_STRING **out_abs, CBS *cbs); | 210 | int c2i_ASN1_BIT_STRING_cbs(ASN1_BIT_STRING **out_abs, CBS *cbs); |
| 211 | 211 | ||
| 212 | int c2i_ASN1_ENUMERATED_cbs(ASN1_ENUMERATED **out_aenum, CBS *cbs); | ||
| 213 | |||
| 212 | int asn1_aint_get_uint64(CBS *cbs, uint64_t *out_val); | 214 | int asn1_aint_get_uint64(CBS *cbs, uint64_t *out_val); |
| 213 | int asn1_aint_set_uint64(uint64_t val, uint8_t **out_data, int *out_len); | 215 | int asn1_aint_set_uint64(uint64_t val, uint8_t **out_data, int *out_len); |
| 214 | int asn1_aint_get_int64(CBS *cbs, int negative, int64_t *out_val); | 216 | int asn1_aint_get_int64(CBS *cbs, int negative, int64_t *out_val); |
diff --git a/src/lib/libcrypto/asn1/tasn_dec.c b/src/lib/libcrypto/asn1/tasn_dec.c index 235685484c..22d8006d0a 100644 --- a/src/lib/libcrypto/asn1/tasn_dec.c +++ b/src/lib/libcrypto/asn1/tasn_dec.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tasn_dec.c,v 1.78 2022/06/29 08:56:44 beck Exp $ */ | 1 | /* $OpenBSD: tasn_dec.c,v 1.79 2022/09/03 18:45:51 jsing Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 2000. | 3 | * project 2000. |
| 4 | */ | 4 | */ |
| @@ -277,7 +277,6 @@ static int | |||
| 277 | asn1_c2i_primitive(ASN1_VALUE **pval, CBS *content, int utype, const ASN1_ITEM *it) | 277 | asn1_c2i_primitive(ASN1_VALUE **pval, CBS *content, int utype, const ASN1_ITEM *it) |
| 278 | { | 278 | { |
| 279 | ASN1_STRING *stmp; | 279 | ASN1_STRING *stmp; |
| 280 | ASN1_INTEGER **tint; | ||
| 281 | ASN1_BOOLEAN *tbool; | 280 | ASN1_BOOLEAN *tbool; |
| 282 | uint8_t u8val; | 281 | uint8_t u8val; |
| 283 | int ret = 0; | 282 | int ret = 0; |
| @@ -318,13 +317,14 @@ asn1_c2i_primitive(ASN1_VALUE **pval, CBS *content, int utype, const ASN1_ITEM * | |||
| 318 | goto err; | 317 | goto err; |
| 319 | break; | 318 | break; |
| 320 | 319 | ||
| 321 | case V_ASN1_INTEGER: | ||
| 322 | case V_ASN1_ENUMERATED: | 320 | case V_ASN1_ENUMERATED: |
| 323 | tint = (ASN1_INTEGER **)pval; | 321 | if (!c2i_ASN1_ENUMERATED_cbs((ASN1_ENUMERATED **)pval, content)) |
| 324 | if (!c2i_ASN1_INTEGER_cbs(tint, content)) | 322 | goto err; |
| 323 | break; | ||
| 324 | |||
| 325 | case V_ASN1_INTEGER: | ||
| 326 | if (!c2i_ASN1_INTEGER_cbs((ASN1_INTEGER **)pval, content)) | ||
| 325 | goto err; | 327 | goto err; |
| 326 | /* Fixup type to match the expected form */ | ||
| 327 | (*tint)->type = utype | ((*tint)->type & V_ASN1_NEG); | ||
| 328 | break; | 328 | break; |
| 329 | 329 | ||
| 330 | case V_ASN1_OCTET_STRING: | 330 | case V_ASN1_OCTET_STRING: |
