]> wagner.pp.ru Git - openssl-gost/engine.git/commitdiff
gost_md2012: Add registration using GostR3411_2012_{256,512}_digest
authorVitaly Chikunov <vt@altlinux.org>
Tue, 12 May 2020 22:02:13 +0000 (01:02 +0300)
committerDmitry Belyavskiy <beldmit@users.noreply.github.com>
Wed, 13 May 2020 17:12:23 +0000 (20:12 +0300)
gost_md2012.c

index 5acb111d3f20a798acc8b87999111fbe576c4ec9..8d1bde8d8e0912e48e942acb943ffe6195015b9a 100644 (file)
@@ -11,6 +11,7 @@
 
 #include <openssl/evp.h>
 #include "gosthash2012.h"
+#include "gost_lcl.h"
 
 static int gost_digest_init512(EVP_MD_CTX *ctx);
 static int gost_digest_init256(EVP_MD_CTX *ctx);
@@ -27,67 +28,49 @@ static int gost_digest_ctrl_512(EVP_MD_CTX *ctx, int type, int arg,
 const char micalg_256[] = "gostr3411-2012-256";
 const char micalg_512[] = "gostr3411-2012-512";
 
-static EVP_MD *_hidden_GostR3411_2012_256_md = NULL;
-static EVP_MD *_hidden_GostR3411_2012_512_md = NULL;
+GOST_digest GostR3411_2012_template_digest = {
+    .input_blocksize = 64,
+    .app_datasize = sizeof(gost2012_hash_ctx),
+    .update = gost_digest_update,
+    .final = gost_digest_final,
+    .copy = gost_digest_copy,
+    .cleanup = gost_digest_cleanup,
+};
+
+GOST_digest GostR3411_2012_256_digest = {
+    .nid = NID_id_GostR3411_2012_256,
+    .template = &GostR3411_2012_template_digest,
+    .result_size = 32,
+    .init = gost_digest_init256,
+    .ctrl = gost_digest_ctrl_256,
+};
 
 EVP_MD *digest_gost2012_256(void)
 {
-    if (_hidden_GostR3411_2012_256_md == NULL) {
-        EVP_MD *md;
-
-        if ((md =
-             EVP_MD_meth_new(NID_id_GostR3411_2012_256, NID_undef)) == NULL
-            || !EVP_MD_meth_set_result_size(md, 32)
-            || !EVP_MD_meth_set_input_blocksize(md, 64)
-            || !EVP_MD_meth_set_app_datasize(md, sizeof(gost2012_hash_ctx))
-            || !EVP_MD_meth_set_init(md, gost_digest_init256)
-            || !EVP_MD_meth_set_update(md, gost_digest_update)
-            || !EVP_MD_meth_set_final(md, gost_digest_final)
-            || !EVP_MD_meth_set_copy(md, gost_digest_copy)
-            || !EVP_MD_meth_set_ctrl(md, gost_digest_ctrl_256)
-            || !EVP_MD_meth_set_cleanup(md, gost_digest_cleanup)) {
-            EVP_MD_meth_free(md);
-            md = NULL;
-        }
-        _hidden_GostR3411_2012_256_md = md;
-    }
-    return _hidden_GostR3411_2012_256_md;
+    return GOST_init_digest(&GostR3411_2012_256_digest);
 }
 
 void digest_gost2012_256_destroy(void)
 {
-    EVP_MD_meth_free(_hidden_GostR3411_2012_256_md);
-    _hidden_GostR3411_2012_256_md = NULL;
+    GOST_deinit_digest(&GostR3411_2012_256_digest);
 }
 
+GOST_digest GostR3411_2012_512_digest = {
+    .nid = NID_id_GostR3411_2012_512,
+    .template = &GostR3411_2012_template_digest,
+    .result_size = 64,
+    .init = gost_digest_init512,
+    .ctrl = gost_digest_ctrl_512,
+};
+
 EVP_MD *digest_gost2012_512(void)
 {
-    if (_hidden_GostR3411_2012_512_md == NULL) {
-        EVP_MD *md;
-
-        if ((md =
-             EVP_MD_meth_new(NID_id_GostR3411_2012_512, NID_undef)) == NULL
-            || !EVP_MD_meth_set_result_size(md, 64)
-            || !EVP_MD_meth_set_input_blocksize(md, 64)
-            || !EVP_MD_meth_set_app_datasize(md, sizeof(gost2012_hash_ctx))
-            || !EVP_MD_meth_set_init(md, gost_digest_init512)
-            || !EVP_MD_meth_set_update(md, gost_digest_update)
-            || !EVP_MD_meth_set_final(md, gost_digest_final)
-            || !EVP_MD_meth_set_copy(md, gost_digest_copy)
-            || !EVP_MD_meth_set_ctrl(md, gost_digest_ctrl_512)
-            || !EVP_MD_meth_set_cleanup(md, gost_digest_cleanup)) {
-            EVP_MD_meth_free(md);
-            md = NULL;
-        }
-        _hidden_GostR3411_2012_512_md = md;
-    }
-    return _hidden_GostR3411_2012_512_md;
+    return GOST_init_digest(&GostR3411_2012_512_digest);
 }
 
 void digest_gost2012_512_destroy(void)
 {
-    EVP_MD_meth_free(_hidden_GostR3411_2012_512_md);
-    _hidden_GostR3411_2012_512_md = NULL;
+    GOST_deinit_digest(&GostR3411_2012_512_digest);
 }
 
 static int gost_digest_init512(EVP_MD_CTX *ctx)