summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/ecdsa/ecs_lib.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lib/libcrypto/ecdsa/ecs_lib.c47
1 files changed, 22 insertions, 25 deletions
diff --git a/src/lib/libcrypto/ecdsa/ecs_lib.c b/src/lib/libcrypto/ecdsa/ecs_lib.c
index c688a95f3b..18eecba704 100644
--- a/src/lib/libcrypto/ecdsa/ecs_lib.c
+++ b/src/lib/libcrypto/ecdsa/ecs_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ecs_lib.c,v 1.13 2018/04/14 07:09:21 tb Exp $ */ 1/* $OpenBSD: ecs_lib.c,v 1.14 2022/08/31 13:01:01 tb Exp $ */
2/* ==================================================================== 2/* ====================================================================
3 * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. 3 * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved.
4 * 4 *
@@ -197,36 +197,33 @@ ecdsa_check(EC_KEY *key)
197int 197int
198ECDSA_size(const EC_KEY *r) 198ECDSA_size(const EC_KEY *r)
199{ 199{
200 int ret, i; 200 BIGNUM *order = NULL;
201 ASN1_INTEGER bs;
202 BIGNUM *order = NULL;
203 unsigned char buf[4];
204 const EC_GROUP *group; 201 const EC_GROUP *group;
202 ECDSA_SIG signature;
203 int ret = 0;
205 204
206 if (r == NULL) 205 if (r == NULL)
207 return 0; 206 goto err;
208 group = EC_KEY_get0_group(r); 207
209 if (group == NULL) 208 if ((group = EC_KEY_get0_group(r)) == NULL)
210 return 0; 209 goto err;
211 210
212 if ((order = BN_new()) == NULL) 211 if ((order = BN_new()) == NULL)
213 return 0; 212 goto err;
214 if (!EC_GROUP_get_order(group, order, NULL)) { 213
215 BN_clear_free(order); 214 if (!EC_GROUP_get_order(group, order, NULL))
216 return 0; 215 goto err;
217 } 216
218 i = BN_num_bits(order); 217 signature.r = order;
219 bs.length = (i + 7) / 8; 218 signature.s = order;
220 bs.data = buf; 219
221 bs.type = V_ASN1_INTEGER; 220 if ((ret = i2d_ECDSA_SIG(&signature, NULL)) < 0)
222 /* If the top bit is set the asn1 encoding is 1 larger. */ 221 ret = 0;
223 buf[0] = 0xff; 222
224 223 err:
225 i = i2d_ASN1_INTEGER(&bs, NULL);
226 i += i; /* r and s */
227 ret = ASN1_object_size(1, i, V_ASN1_SEQUENCE);
228 BN_clear_free(order); 224 BN_clear_free(order);
229 return (ret); 225
226 return ret;
230} 227}
231 228
232int 229int