From: FdaSilvaYY Date: Thu, 1 Aug 2024 20:51:25 +0000 (+0200) Subject: ssl: factorize and improved hex conversion code X-Git-Tag: openssl-3.4.0-alpha1~213 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f21ededc3c04a5c899ee8522f7162abf637849a1;p=thirdparty%2Fopenssl.git ssl: factorize and improved hex conversion code Add inline qualifier to avoid exporting a function for one unique use Reviewed-by: Tom Cosgrove Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/24968) --- diff --git a/include/internal/to_hex.h b/include/internal/to_hex.h new file mode 100644 index 00000000000..e37e9f0b439 --- /dev/null +++ b/include/internal/to_hex.h @@ -0,0 +1,27 @@ +/* + * Copyright 2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (the "License"). You may not use + * this file except in compliance with the License. You can obtain a copy + * in the file LICENSE in the source distribution or at + * https://www.openssl.org/source/license.html + */ + +#ifndef OSSL_INTERNAL_TO_HEX_H +# define OSSL_INTERNAL_TO_HEX_H +# pragma once + +static ossl_inline size_t to_hex(char *buf, uint8_t n, const char hexdig[17]) +{ + *buf++ = hexdig[(n >> 4) & 0xf]; + *buf = hexdig[n & 0xf]; + return 2; +} + +static ossl_inline size_t ossl_to_lowerhex(char *buf, uint8_t n) +{ + static const char hexdig[] = "0123456789abcdef"; + + return to_hex(buf, n, hexdig); +} +#endif diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index 96ec86a00aa..ba9fcec55c8 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -26,6 +26,7 @@ #include "internal/nelem.h" #include "internal/refcount.h" #include "internal/ktls.h" +#include "internal/to_hex.h" #include "quic/quic_local.h" static int ssl_undefined_function_3(SSL_CONNECTION *sc, unsigned char *r, @@ -6747,10 +6748,8 @@ static int nss_keylog_int(const char *prefix, const uint8_t *parameter_2, size_t parameter_2_len) { - static const char hexdig[] = "0123456789abcdef"; char *out = NULL; char *cursor = NULL; - const uint8_t *p; size_t out_len = 0, i, prefix_len; SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(sc); @@ -6774,16 +6773,12 @@ static int nss_keylog_int(const char *prefix, cursor += prefix_len; *cursor++ = ' '; - for (i = 0, p = parameter_1; i < parameter_1_len; i++, ++p) { - *cursor++ = hexdig[(*p >> 4) & 0xf]; - *cursor++ = hexdig[*p & 0xf]; - } + for (i = 0; i < parameter_1_len; ++i) + cursor += ossl_to_lowerhex(cursor, parameter_1[i]); *cursor++ = ' '; - for (i = 0, p = parameter_2; i < parameter_2_len; i++, ++p) { - *cursor++ = hexdig[(*p >> 4) & 0xf]; - *cursor++ = hexdig[*p & 0xf]; - } + for (i = 0; i < parameter_2_len; ++i) + cursor += ossl_to_lowerhex(cursor, parameter_2[i]); *cursor = '\0'; sctx->keylog_callback(SSL_CONNECTION_GET_SSL(sc), (const char *)out);