Have legacy blake2 EVP structure use base blake2 implementation
authorRichard Levitte <levitte@openssl.org>
Tue, 12 Sep 2023 12:58:03 +0000 (14:58 +0200)
committerPauli <pauli@openssl.org>
Wed, 13 Sep 2023 23:07:29 +0000 (09:07 +1000)
For some reason, the code here was made to got through the provider
specific init functions.  This is very very dangerous if the provider
specific functions were to change in any way (such as changes to the
implementation context structure).

Instead, use the init functions from the base blake2 implementations
directly.

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/22079)

crypto/evp/legacy_blake2.c
providers/implementations/digests/blake2_prov.c
providers/implementations/include/prov/blake2.h

index 6a18e5fe01b6a7192c1d67bd489b3f024ac189a6..4301ae4857913556f94880e4cca0c19964003d51 100644 (file)
 #include "prov/blake2.h"        /* diverse BLAKE2 macros */
 #include "legacy_meth.h"
 
-#define ossl_blake2b_init ossl_blake2b512_init
-#define ossl_blake2s_init ossl_blake2s256_init
+/*
+ * Local hack to adapt the BLAKE2 init functions to what the
+ * legacy function signatures demand.
+ */
+static int blake2s_init(BLAKE2S_CTX *C)
+{
+    BLAKE2S_PARAM P;
+
+    ossl_blake2s_param_init(&P);
+    return ossl_blake2s_init(C, &P);
+}
+static int blake2b_init(BLAKE2B_CTX *C)
+{
+    BLAKE2B_PARAM P;
+
+    ossl_blake2b_param_init(&P);
+    return ossl_blake2b_init(C, &P);
+}
+#define blake2s_update ossl_blake2s_update
+#define blake2b_update ossl_blake2b_update
+#define blake2s_final ossl_blake2s_final
+#define blake2b_final ossl_blake2b_final
 
-IMPLEMENT_LEGACY_EVP_MD_METH_LC(blake2s_int, ossl_blake2s)
-IMPLEMENT_LEGACY_EVP_MD_METH_LC(blake2b_int, ossl_blake2b)
+IMPLEMENT_LEGACY_EVP_MD_METH_LC(blake2s_int, blake2s)
+IMPLEMENT_LEGACY_EVP_MD_METH_LC(blake2b_int, blake2b)
 
 static const EVP_MD blake2b_md = {
     NID_blake2b512,
index 2288286bbe44ecfcbcb837c0c7a2abf172cddd19..298bc66de65a5b3179e80a308c6705896dd09671 100644 (file)
@@ -12,7 +12,7 @@
 #include "prov/digestcommon.h"
 #include "prov/implementations.h"
 
-int ossl_blake2s256_init(void *ctx)
+static int ossl_blake2s256_init(void *ctx)
 {
     BLAKE2S_PARAM P;
 
@@ -20,7 +20,7 @@ int ossl_blake2s256_init(void *ctx)
     return ossl_blake2s_init((BLAKE2S_CTX *)ctx, &P);
 }
 
-int ossl_blake2b512_init(void *ctx)
+static int ossl_blake2b512_init(void *ctx)
 {
     struct blake2b_md_data_st *mdctx = ctx;
 
index 4ec780c21f50b8cba6e2eeb34d52480b6fcea864..bcd0bb9bcd4a4fca00de471cebbb19f27aa4cec9 100644 (file)
@@ -88,9 +88,6 @@ struct blake2b_md_data_st {
     BLAKE2B_PARAM params;
 };
 
-int ossl_blake2s256_init(void *ctx);
-int ossl_blake2b512_init(void *ctx);
-
 int ossl_blake2b_init(BLAKE2B_CTX *c, const BLAKE2B_PARAM *P);
 int ossl_blake2b_init_key(BLAKE2B_CTX *c, const BLAKE2B_PARAM *P,
                           const void *key);