summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2023-07-22 17:20:50 +0000
committertb <>2023-07-22 17:20:50 +0000
commit7522b5e7ecfbecb152c67cbcb3d391407d2b9f46 (patch)
treee15f6f77238e76df3d53faa4988e79686c4df817
parente9a7e4bafe1b6b3afcaa49237b2409d6880f0d17 (diff)
downloadopenbsd-7522b5e7ecfbecb152c67cbcb3d391407d2b9f46.tar.gz
openbsd-7522b5e7ecfbecb152c67cbcb3d391407d2b9f46.tar.bz2
openbsd-7522b5e7ecfbecb152c67cbcb3d391407d2b9f46.zip
Adapt bn_print() for EdDSA key printing
This is essentially a reimplementation of ASN1_buf_print(). The latter was only added for these printing purposes and it will be removed again since nothing uses it. We can then simply remove t_pkey.c in the upcoming bump. ok jsing
-rw-r--r--src/lib/libcrypto/ec/ecx_methods.c47
1 files changed, 40 insertions, 7 deletions
diff --git a/src/lib/libcrypto/ec/ecx_methods.c b/src/lib/libcrypto/ec/ecx_methods.c
index 1040ee6fc3..55670c1a59 100644
--- a/src/lib/libcrypto/ec/ecx_methods.c
+++ b/src/lib/libcrypto/ec/ecx_methods.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ecx_methods.c,v 1.7 2023/07/05 20:56:29 bcook Exp $ */ 1/* $OpenBSD: ecx_methods.c,v 1.8 2023/07/22 17:20:50 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2022 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2022 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -292,6 +292,42 @@ ecx_pub_cmp(const EVP_PKEY *pkey1, const EVP_PKEY *pkey2)
292 pkey1->pkey.ecx->pub_key_len) == 0; 292 pkey1->pkey.ecx->pub_key_len) == 0;
293} 293}
294 294
295/* Reimplementation of ASN1_buf_print() that adds a secondary indent of 4. */
296static int
297ecx_buf_print(BIO *bio, const uint8_t *buf, size_t buf_len, int indent)
298{
299 uint8_t u8;
300 size_t octets = 0;
301 const char *sep = ":", *nl = "";
302 CBS cbs;
303
304 if (indent > 64)
305 indent = 64;
306 indent += 4;
307 if (indent < 0)
308 indent = 0;
309
310 CBS_init(&cbs, buf, buf_len);
311 while (CBS_len(&cbs) > 0) {
312 if (!CBS_get_u8(&cbs, &u8))
313 return 0;
314 if (octets++ % 15 == 0) {
315 if (BIO_printf(bio, "%s%*s", nl, indent, "") < 0)
316 return 0;
317 nl = "\n";
318 }
319 if (CBS_len(&cbs) == 0)
320 sep = "";
321 if (BIO_printf(bio, "%02x%s", u8, sep) <= 0)
322 return 0;
323 }
324
325 if (BIO_printf(bio, "\n") <= 0)
326 return 0;
327
328 return 1;
329}
330
295static int 331static int
296ecx_pub_print(BIO *bio, const EVP_PKEY *pkey, int indent, ASN1_PCTX *ctx) 332ecx_pub_print(BIO *bio, const EVP_PKEY *pkey, int indent, ASN1_PCTX *ctx)
297{ 333{
@@ -309,8 +345,7 @@ ecx_pub_print(BIO *bio, const EVP_PKEY *pkey, int indent, ASN1_PCTX *ctx)
309 return 0; 345 return 0;
310 if (BIO_printf(bio, "%*spub:\n", indent, "") <= 0) 346 if (BIO_printf(bio, "%*spub:\n", indent, "") <= 0)
311 return 0; 347 return 0;
312 if (ASN1_buf_print(bio, ecx_key->pub_key, ecx_key->pub_key_len, 348 if (!ecx_buf_print(bio, ecx_key->pub_key, ecx_key->pub_key_len, indent))
313 indent + 4) == 0)
314 return 0; 349 return 0;
315 350
316 return 1; 351 return 1;
@@ -422,13 +457,11 @@ ecx_priv_print(BIO *bio, const EVP_PKEY *pkey, int indent, ASN1_PCTX *ctx)
422 return 0; 457 return 0;
423 if (BIO_printf(bio, "%*spriv:\n", indent, "") <= 0) 458 if (BIO_printf(bio, "%*spriv:\n", indent, "") <= 0)
424 return 0; 459 return 0;
425 if (ASN1_buf_print(bio, ecx_key->priv_key, ecx_key->priv_key_len, 460 if (!ecx_buf_print(bio, ecx_key->priv_key, ecx_key->priv_key_len, indent))
426 indent + 4) == 0)
427 return 0; 461 return 0;
428 if (BIO_printf(bio, "%*spub:\n", indent, "") <= 0) 462 if (BIO_printf(bio, "%*spub:\n", indent, "") <= 0)
429 return 0; 463 return 0;
430 if (ASN1_buf_print(bio, ecx_key->pub_key, ecx_key->pub_key_len, 464 if (!ecx_buf_print(bio, ecx_key->pub_key, ecx_key->pub_key_len, indent))
431 indent + 4) == 0)
432 return 0; 465 return 0;
433 466
434 return 1; 467 return 1;