diff options
author | Vitaly Chikunov <vt@altlinux.org> | 2020-06-03 05:45:13 +0300 |
---|---|---|
committer | Dmitry Belyavskiy <beldmit@users.noreply.github.com> | 2020-07-09 19:27:22 +0300 |
commit | 1c8b7f9a2a51ba2a6d668c2cd4e4672ed6731166 (patch) | |
tree | 63da2741d92a724f2a82ef548d690d945ec7633c | |
parent | eaf0efe8098a2a3701f469d777ec1fd2e00574b1 (diff) | |
download | gost-engine-1c8b7f9a2a51ba2a6d668c2cd4e4672ed6731166.zip gost-engine-1c8b7f9a2a51ba2a6d668c2cd4e4672ed6731166.tar.gz gost-engine-1c8b7f9a2a51ba2a6d668c2cd4e4672ed6731166.tar.bz2 |
Add string option 'vko' for EVP_PKEY_CTRL_SET_VKO
Format: vko:<bit length>
Such as:
vko:256 for VKO_256
vko:512 for VKO_512
vko:0 disable strict VKO mode, switch to other derive methods.
-rw-r--r-- | gost_lcl.h | 1 | ||||
-rw-r--r-- | gost_pmeth.c | 13 |
2 files changed, 14 insertions, 0 deletions
@@ -57,6 +57,7 @@ int register_pmeth_gost(int id, EVP_PKEY_METHOD **pmeth, int flags); /* For GOST R34.10 parameters */ # define param_ctrl_string "paramset" # define ukm_ctrl_string "ukmhex" +# define vko_ctrl_string "vko" # define EVP_PKEY_CTRL_GOST_PARAMSET (EVP_PKEY_ALG_CTRL+1) /* For GOST 28147 MAC */ # define key_ctrl_string "key" diff --git a/gost_pmeth.c b/gost_pmeth.c index bceb50e..9c1d602 100644 --- a/gost_pmeth.c +++ b/gost_pmeth.c @@ -217,6 +217,19 @@ static int pkey_gost_ec_ctrl_str_common(EVP_PKEY_CTX *ctx, OPENSSL_free(tmp); return pkey_gost_ctrl(ctx, EVP_PKEY_CTRL_SET_IV, len, ukm_buf); + } else if (strcmp(type, vko_ctrl_string) == 0) { + int bits = atoi(value); + int vko_dgst_nid = 0; + + if (bits == 256) + vko_dgst_nid = NID_id_GostR3411_2012_256; + else if (bits == 512) + vko_dgst_nid = NID_id_GostR3411_2012_512; + else if (bits != 0) { + GOSTerr(GOST_F_PKEY_GOST_EC_CTRL_STR_COMMON, GOST_R_INVALID_DIGEST_TYPE); + return 0; + } + return pkey_gost_ctrl(ctx, EVP_PKEY_CTRL_SET_VKO, vko_dgst_nid, NULL); } return -2; } |