From 88dacd22f802ca037b09219bade17b94d492eec5 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Wed, 22 Mar 2023 14:19:36 +0100 Subject: [PATCH] src/openssl/ec.cpp: move helper functions/macros to internal.h and helpers.c files. --- CMakeLists.txt | 1 + src/openssl/ec.cpp | 22 +-------------------- src/openssl/helpers.c | 44 ++++++++++++++++++++++++++++++++++++++++++ src/openssl/internal.h | 42 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 21 deletions(-) create mode 100644 src/openssl/helpers.c create mode 100644 src/openssl/internal.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 5de4642..d3bfdd8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,6 +55,7 @@ include(OpenSSL) set (LIB_SOURCE ${LIB_SOURCE} src/openssl/ec.cpp src/openssl/hash.cpp + src/openssl/helpers.c ) add_library( ${LIB_NAME} STATIC ${LIB_SOURCE} ) diff --git a/src/openssl/ec.cpp b/src/openssl/ec.cpp index f58053b..c001c82 100644 --- a/src/openssl/ec.cpp +++ b/src/openssl/ec.cpp @@ -25,12 +25,10 @@ #include #include #include +#include "internal.h" namespace libeosio { -#define EC_POINT_encode(group, point, buf, len, ctx) \ - EC_POINT_point2oct((group), (point), POINT_CONVERSION_COMPRESSED, (buf), (len), (ctx)) - BN_CTX *ctx = NULL; EC_KEY *k = NULL; @@ -77,24 +75,6 @@ int ec_generate_privkey(ec_privkey_t *priv) { return 0; } -// Calcualte a public key from a EC_KEY object. -int calculate_pubkey(const EC_GROUP *group, const EC_KEY *ec_key, EC_POINT **point) { - const BIGNUM* pk; - - // Then get the private key number - if ((pk = EC_KEY_get0_private_key(ec_key)) == NULL) { - return 0; - } - - // Create a new point. - if ((*point = EC_POINT_new(group)) == NULL) { - return 0; - } - - // Multiply curve (group) and private key to get the public key. - return EC_POINT_mul(group, *point, pk, NULL, NULL, NULL); -} - int ec_get_publickey(const ec_privkey_t *priv, ec_pubkey_t* pub) { int rc = -1; diff --git a/src/openssl/helpers.c b/src/openssl/helpers.c new file mode 100644 index 0000000..e812749 --- /dev/null +++ b/src/openssl/helpers.c @@ -0,0 +1,44 @@ +/** + * MIT License + * + * Copyright (c) 2019-2021 EOS Sw/eden + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include + +// Calcualte a public key from a EC_KEY object. +int calculate_pubkey(const EC_GROUP *group, const EC_KEY *ec_key, EC_POINT **point) { + const BIGNUM* pk; + + // Then get the private key number + if ((pk = EC_KEY_get0_private_key(ec_key)) == NULL) { + return 0; + } + + // Create a new point. + if ((*point = EC_POINT_new(group)) == NULL) { + return 0; + } + + // Multiply curve (group) and private key to get the public key. + return EC_POINT_mul(group, *point, pk, NULL, NULL, NULL); +} \ No newline at end of file diff --git a/src/openssl/internal.h b/src/openssl/internal.h new file mode 100644 index 0000000..b4c2a63 --- /dev/null +++ b/src/openssl/internal.h @@ -0,0 +1,42 @@ +/** + * MIT License + * + * Copyright (c) 2019-2023 EOS Sw/eden + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +#include + +#ifndef LIBEOSIO_OPENSSL_INTERNAL_H +#define LIBEOSIO_OPENSSL_INTERNAL_H + +#define EC_POINT_encode(group, point, buf, len, ctx) \ + EC_POINT_point2oct((group), (point), POINT_CONVERSION_COMPRESSED, (buf), (len), (ctx)) + +#ifdef __cplusplus +extern "C" { +#endif + +int calculate_pubkey(const EC_GROUP *group, const EC_KEY *ec_key, EC_POINT **point); + +#ifdef __cplusplus +} +#endif + +#endif /* LIBEOSIO_OPENSSL_INTERNAL_H */ \ No newline at end of file