aboutsummaryrefslogtreecommitdiff
path: root/gost_md2012.c
diff options
context:
space:
mode:
authorVitaly Chikunov <vt@altlinux.org>2020-05-13 01:02:13 +0300
committerDmitry Belyavskiy <beldmit@users.noreply.github.com>2020-05-13 20:12:23 +0300
commitec78b0e7d8df62895b6ad489cd7f94699888ffeb (patch)
tree5c90bd07d26af8657e3cb70857ffe953f5d36161 /gost_md2012.c
parentd3756bbed444cfe1072e9469c469bfba8b6c6dbe (diff)
downloadgost-engine-ec78b0e7d8df62895b6ad489cd7f94699888ffeb.zip
gost-engine-ec78b0e7d8df62895b6ad489cd7f94699888ffeb.tar.gz
gost-engine-ec78b0e7d8df62895b6ad489cd7f94699888ffeb.tar.bz2
gost_md2012: Add registration using GostR3411_2012_{256,512}_digest
Diffstat (limited to 'gost_md2012.c')
-rw-r--r--gost_md2012.c75
1 files changed, 29 insertions, 46 deletions
diff --git a/gost_md2012.c b/gost_md2012.c
index 5acb111..8d1bde8 100644
--- a/gost_md2012.c
+++ b/gost_md2012.c
@@ -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)