From 23ccf9300e496e115742a44d5f52490f431156f5 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Mon, 15 Feb 2021 00:45:40 +0100 Subject: [PATCH] Making a gost provider - Refactor the engine to become a backend The gost provider is planned to be a wrapper around the already existing functionality, designed for ENGINE use. The easiest way to do this is to let the gost ENGINE continue to exist within the gost provider, as an internal ENGINE. To do that, we make it possible to build gost_eng.c so it only populates the GOST ENGINE structure, but doesn't perform any of the ENGINE registration. That way, the GOST ENGINE structure becomes purely internal, and can be used as the actual implementation of the offered provider functionality, through diverse EVP calls that accept an ENGINE pointer. --- gost_eng.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/gost_eng.c b/gost_eng.c index 92af15e..006710c 100644 --- a/gost_eng.c +++ b/gost_eng.c @@ -312,7 +312,9 @@ static int gost_engine_destroy(ENGINE* e) { free_cached_groups(); +# ifndef BUILDING_GOST_PROVIDER ERR_unload_GOST_strings(); +# endif return 1; } @@ -322,7 +324,10 @@ static int gost_engine_destroy(ENGINE* e) { * binds it to OpenSSL libraries */ -static int populate_gost_engine(ENGINE* e) { +# ifndef BUILDING_GOST_PROVIDER +static +# endif +int populate_gost_engine(ENGINE* e) { int ret = 0; if (e == NULL) @@ -391,6 +396,7 @@ static int populate_gost_engine(ENGINE* e) { return ret; } +#ifndef BUILDING_GOST_PROVIDER static int bind_gost_engine(ENGINE* e) { int ret = 0; @@ -454,7 +460,6 @@ IMPLEMENT_DYNAMIC_CHECK_FN() * it must manually call ENGINE_load_gost() for it to bind itself into the * libcrypto libraries. */ - void ENGINE_load_gost(void) { ENGINE* toadd; int ret = 0; @@ -466,6 +471,6 @@ void ENGINE_load_gost(void) { if (ret > 0) ERR_clear_error(); } - +#endif #endif /* vim: set expandtab cinoptions=\:0,l1,t0,g0,(0 sw=4 : */ -- 2.39.2