}
}
-static EVP_MD *_hidden_magma_mac_md = NULL;
+static GOST_digest omac_template_digest = {
+ .input_blocksize = 8,
+ .app_datasize = sizeof(OMAC_CTX),
+ .flags = EVP_MD_FLAG_XOF,
+ .update = omac_imit_update,
+ .final = omac_imit_final,
+ .copy = omac_imit_copy,
+ .cleanup = omac_imit_cleanup,
+ .ctrl = omac_imit_ctrl,
+};
+
+GOST_digest magma_mac_digest = {
+ .nid = NID_magma_mac,
+ .template = &omac_template_digest,
+ .result_size = 8,
+ .init = magma_imit_init,
+};
+
+GOST_digest grasshopper_mac_digest = {
+ .nid = NID_grasshopper_mac,
+ .template = &omac_template_digest,
+ .result_size = 16,
+ .init = grasshopper_imit_init,
+};
EVP_MD *magma_omac(void)
{
- if (_hidden_magma_mac_md == NULL) {
- EVP_MD *md;
-
- if ((md = EVP_MD_meth_new(NID_magma_mac, NID_undef)) == NULL
- || !EVP_MD_meth_set_result_size(md, 8)
- || !EVP_MD_meth_set_input_blocksize(md, 8)
- || !EVP_MD_meth_set_app_datasize(md, sizeof(OMAC_CTX))
- || !EVP_MD_meth_set_flags(md, EVP_MD_FLAG_XOF)
- || !EVP_MD_meth_set_init(md, magma_imit_init)
- || !EVP_MD_meth_set_update(md, omac_imit_update)
- || !EVP_MD_meth_set_final(md, omac_imit_final)
- || !EVP_MD_meth_set_copy(md, omac_imit_copy)
- || !EVP_MD_meth_set_cleanup(md, omac_imit_cleanup)
- || !EVP_MD_meth_set_ctrl(md, omac_imit_ctrl)) {
- EVP_MD_meth_free(md);
- md = NULL;
- }
- _hidden_magma_mac_md = md;
- }
- return _hidden_magma_mac_md;
+ return GOST_init_digest(&magma_mac_digest);
}
void magma_omac_destroy(void)
{
- EVP_MD_meth_free(_hidden_magma_mac_md);
- _hidden_magma_mac_md = NULL;
+ GOST_deinit_digest(&magma_mac_digest);
}
-static EVP_MD *_hidden_grasshopper_mac_md = NULL;
-
EVP_MD *grasshopper_omac(void)
{
- if (_hidden_grasshopper_mac_md == NULL) {
- EVP_MD *md;
-
- if ((md = EVP_MD_meth_new(NID_grasshopper_mac, NID_undef)) == NULL
- || !EVP_MD_meth_set_result_size(md, 16)
- || !EVP_MD_meth_set_input_blocksize(md, 8)
- || !EVP_MD_meth_set_app_datasize(md, sizeof(OMAC_CTX))
- || !EVP_MD_meth_set_flags(md, EVP_MD_FLAG_XOF)
- || !EVP_MD_meth_set_init(md, grasshopper_imit_init)
- || !EVP_MD_meth_set_update(md, omac_imit_update)
- || !EVP_MD_meth_set_final(md, omac_imit_final)
- || !EVP_MD_meth_set_copy(md, omac_imit_copy)
- || !EVP_MD_meth_set_cleanup(md, omac_imit_cleanup)
- || !EVP_MD_meth_set_ctrl(md, omac_imit_ctrl)) {
- EVP_MD_meth_free(md);
- md = NULL;
- }
- _hidden_grasshopper_mac_md = md;
- }
- return _hidden_grasshopper_mac_md;
+ return GOST_init_digest(&grasshopper_mac_digest);
}
void grasshopper_omac_destroy(void)
{
- EVP_MD_meth_free(_hidden_grasshopper_mac_md);
- _hidden_grasshopper_mac_md = NULL;
+ GOST_deinit_digest(&grasshopper_mac_digest);
}