aboutsummaryrefslogtreecommitdiff
path: root/gost_pmeth.c
diff options
context:
space:
mode:
authorDmitry Belyavskiy <beldmit@gmail.com>2016-01-03 17:30:05 +0300
committerDmitry Belyavskiy <beldmit@gmail.com>2016-01-03 17:30:05 +0300
commit56c5e3414135c9443739db3b2b1409c3be265a50 (patch)
tree5dee5c365eecd2836a14eb821f3e38a142455d8f /gost_pmeth.c
parent1f59745d458f4d2c1ff4c30863df742eb2b67a44 (diff)
downloadgost-engine-56c5e3414135c9443739db3b2b1409c3be265a50.zip
gost-engine-56c5e3414135c9443739db3b2b1409c3be265a50.tar.gz
gost-engine-56c5e3414135c9443739db3b2b1409c3be265a50.tar.bz2
Allow to pass mac_size via -macopt
Diffstat (limited to 'gost_pmeth.c')
-rw-r--r--gost_pmeth.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/gost_pmeth.c b/gost_pmeth.c
index de35388..2d580ae 100644
--- a/gost_pmeth.c
+++ b/gost_pmeth.c
@@ -478,6 +478,7 @@ static int pkey_gost_mac_init(EVP_PKEY_CTX *ctx)
struct gost_mac_key *key = EVP_PKEY_get0(pkey);
if (key) {
data->mac_param_nid = key->mac_param_nid;
+ data->mac_size = key->mac_size;
}
}
@@ -546,14 +547,6 @@ static int pkey_gost_mac_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
{
struct gost_cipher_info *param = p2;
data->mac_param_nid = param->nid;
- struct gost_mac_key *key = NULL;
- EVP_PKEY *pkey = EVP_PKEY_CTX_get0_pkey(ctx);
- if (pkey) {
- key = EVP_PKEY_get0(pkey);
- if (key) {
- key->mac_param_nid = param->nid;
- }
- }
return 1;
}
case EVP_PKEY_CTRL_DIGESTINIT:
@@ -665,6 +658,7 @@ static int pkey_gost_mac_keygen_base(EVP_PKEY_CTX *ctx,
return 0;
memcpy(keydata->key, data->key, 32);
keydata->mac_param_nid = data->mac_param_nid;
+ keydata->mac_size = data->mac_size;
EVP_PKEY_assign(pkey, mac_nid, keydata);
return 1;
}
@@ -681,6 +675,18 @@ static int pkey_gost_mac_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)
static int pkey_gost_mac_signctx_init(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx)
{
+ struct gost_mac_pmeth_data *data = EVP_PKEY_CTX_get_data(ctx);
+
+ if (data == NULL) {
+ pkey_gost_mac_init(ctx);
+ }
+
+ data = EVP_PKEY_CTX_get_data(ctx);
+ if (!data) {
+ GOSTerr(GOST_F_PKEY_GOST_MAC_SIGNCTX_INIT, GOST_R_MAC_KEY_NOT_SET);
+ return 0;
+ }
+
return 1;
}