summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/asn1_lib.c
diff options
context:
space:
mode:
authorjsing <>2022-05-05 19:18:56 +0000
committerjsing <>2022-05-05 19:18:56 +0000
commit042f0fcf9aec64b486e1a704c5fa90112a205cd6 (patch)
treebb642b1d6216d14ed0bb9a8798b12ddc7d1aca7f /src/lib/libcrypto/asn1/asn1_lib.c
parent312652dad90865975d03f83ace85775d21a4fce9 (diff)
downloadopenbsd-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.c16
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
79int 79int
80asn1_get_length_cbs(CBS *cbs, int der_mode, int *out_indefinite, 80asn1_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,
140int 140int
141asn1_get_object_cbs(CBS *cbs, int der_mode, uint8_t *out_tag_class, 141asn1_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