diff options
author | jsing <> | 2022-05-05 19:18:56 +0000 |
---|---|---|
committer | jsing <> | 2022-05-05 19:18:56 +0000 |
commit | 042f0fcf9aec64b486e1a704c5fa90112a205cd6 (patch) | |
tree | bb642b1d6216d14ed0bb9a8798b12ddc7d1aca7f /src/lib/libcrypto/asn1/asn1_lib.c | |
parent | 312652dad90865975d03f83ace85775d21a4fce9 (diff) | |
download | openbsd-042f0fcf9aec64b486e1a704c5fa90112a205cd6.tar.gz openbsd-042f0fcf9aec64b486e1a704c5fa90112a205cd6.tar.bz2 openbsd-042f0fcf9aec64b486e1a704c5fa90112a205cd6.zip |
Use size_t for ASN.1 lengths.
Change asn1_get_length_cbs() and asn1_get_object_cbs() to handle and return
a length as a size_t rather than a uint32_t. This makes it simpler and less
error prone in the callers.
Suggested by and ok tb@
Diffstat (limited to 'src/lib/libcrypto/asn1/asn1_lib.c')
-rw-r--r-- | src/lib/libcrypto/asn1/asn1_lib.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/lib/libcrypto/asn1/asn1_lib.c b/src/lib/libcrypto/asn1/asn1_lib.c index 97ce6caeef..ac8da0e61d 100644 --- a/src/lib/libcrypto/asn1/asn1_lib.c +++ b/src/lib/libcrypto/asn1/asn1_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: asn1_lib.c,v 1.53 2022/04/28 18:30:57 jsing Exp $ */ | 1 | /* $OpenBSD: asn1_lib.c,v 1.54 2022/05/05 19:18:56 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2021 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2021 Joel Sing <jsing@openbsd.org> |
4 | * | 4 | * |
@@ -78,10 +78,10 @@ asn1_get_identifier_cbs(CBS *cbs, int der_mode, uint8_t *out_class, | |||
78 | 78 | ||
79 | int | 79 | int |
80 | asn1_get_length_cbs(CBS *cbs, int der_mode, int *out_indefinite, | 80 | asn1_get_length_cbs(CBS *cbs, int der_mode, int *out_indefinite, |
81 | uint32_t *out_length) | 81 | size_t *out_length) |
82 | { | 82 | { |
83 | uint8_t len_bytes; | 83 | uint8_t len_bytes; |
84 | uint32_t length; | 84 | size_t length; |
85 | uint8_t val; | 85 | uint8_t val; |
86 | 86 | ||
87 | /* | 87 | /* |
@@ -127,7 +127,7 @@ asn1_get_length_cbs(CBS *cbs, int der_mode, int *out_indefinite, | |||
127 | return 0; | 127 | return 0; |
128 | if (der_mode && length == 0 && val == 0) | 128 | if (der_mode && length == 0 && val == 0) |
129 | return 0; | 129 | return 0; |
130 | if (length > (UINT32_MAX >> 8)) | 130 | if (length > (SIZE_MAX >> 8)) |
131 | return 0; | 131 | return 0; |
132 | length = (length << 8) | val; | 132 | length = (length << 8) | val; |
133 | } | 133 | } |
@@ -140,11 +140,12 @@ asn1_get_length_cbs(CBS *cbs, int der_mode, int *out_indefinite, | |||
140 | int | 140 | int |
141 | asn1_get_object_cbs(CBS *cbs, int der_mode, uint8_t *out_tag_class, | 141 | asn1_get_object_cbs(CBS *cbs, int der_mode, uint8_t *out_tag_class, |
142 | int *out_constructed, uint32_t *out_tag_number, int *out_indefinite, | 142 | int *out_constructed, uint32_t *out_tag_number, int *out_indefinite, |
143 | uint32_t *out_length) | 143 | size_t *out_length) |
144 | { | 144 | { |
145 | int constructed, indefinite; | 145 | int constructed, indefinite; |
146 | uint32_t tag_number, length; | 146 | uint32_t tag_number; |
147 | uint8_t tag_class; | 147 | uint8_t tag_class; |
148 | size_t length; | ||
148 | 149 | ||
149 | *out_tag_class = 0; | 150 | *out_tag_class = 0; |
150 | *out_constructed = 0; | 151 | *out_constructed = 0; |
@@ -176,8 +177,9 @@ asn1_get_primitive(CBS *cbs, int der_mode, uint32_t *out_tag_number, | |||
176 | CBS *out_content) | 177 | CBS *out_content) |
177 | { | 178 | { |
178 | int constructed, indefinite; | 179 | int constructed, indefinite; |
179 | uint32_t tag_number, length; | 180 | uint32_t tag_number; |
180 | uint8_t tag_class; | 181 | uint8_t tag_class; |
182 | size_t length; | ||
181 | 183 | ||
182 | *out_tag_number = 0; | 184 | *out_tag_number = 0; |
183 | 185 | ||