From b2e0f8c6e708e70fcfea9384095aa48f2774af47 Mon Sep 17 00:00:00 2001 From: Vitaly Chikunov Date: Thu, 24 Jan 2019 04:32:28 +0300 Subject: Allow key creation using TC26 (2012) parameters R 1323565.1.023-2018 forbids encoding hash oid into TC26 (2012) parameters in AlgorithmIdentifier, so this is removed. New "paramset" names for 256-bit TC26 parameters: TCA, TCB, TCC, TCD, for 512-bit parameter: C. Using these new OIDs for gost2012_256: NID_id_tc26_gost_3410_2012_256_paramSetA = TCA NID_id_tc26_gost_3410_2012_256_paramSetB = TCB NID_id_tc26_gost_3410_2012_256_paramSetC = TCC NID_id_tc26_gost_3410_2012_256_paramSetD = TCD for gost2012_512: NID_id_tc26_gost_3410_2012_512_paramSetC = C Resolves #84. --- gost_pmeth.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'gost_pmeth.c') diff --git a/gost_pmeth.c b/gost_pmeth.c index b2e0a49..41bda94 100644 --- a/gost_pmeth.c +++ b/gost_pmeth.c @@ -208,6 +208,25 @@ static int pkey_gost_ec_ctrl_str_256(EVP_PKEY_CTX *ctx, default: return 0; } + } else if ((strlen(value) == 3) + && (toupper((unsigned char)value[0]) == 'T') + && (toupper((unsigned char)value[1]) == 'C')) { + switch (toupper((unsigned char)value[2])) { + case 'A': + param_nid = NID_id_tc26_gost_3410_2012_256_paramSetA; + break; + case 'B': + param_nid = NID_id_tc26_gost_3410_2012_256_paramSetB; + break; + case 'C': + param_nid = NID_id_tc26_gost_3410_2012_256_paramSetC; + break; + case 'D': + param_nid = NID_id_tc26_gost_3410_2012_256_paramSetD; + break; + default: + return 0; + } } else { R3410_ec_params *p = R3410_2001_paramset; param_nid = OBJ_txt2nid(value); @@ -252,6 +271,10 @@ static int pkey_gost_ec_ctrl_str_512(EVP_PKEY_CTX *ctx, param_nid = NID_id_tc26_gost_3410_2012_512_paramSetB; break; + case 'C': + param_nid = NID_id_tc26_gost_3410_2012_512_paramSetC; + break; + default: return 0; } @@ -320,6 +343,7 @@ static int pkey_gost2012_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) switch (data->sign_param_nid) { case NID_id_tc26_gost_3410_2012_512_paramSetA: case NID_id_tc26_gost_3410_2012_512_paramSetB: + case NID_id_tc26_gost_3410_2012_512_paramSetC: result = (EVP_PKEY_assign(pkey, NID_id_GostR3410_2012_512, ec)) ? 1 : 0; break; @@ -330,6 +354,10 @@ static int pkey_gost2012_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) case NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet: case NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet: case NID_id_GostR3410_2001_TestParamSet: + case NID_id_tc26_gost_3410_2012_256_paramSetA: + case NID_id_tc26_gost_3410_2012_256_paramSetB: + case NID_id_tc26_gost_3410_2012_256_paramSetC: + case NID_id_tc26_gost_3410_2012_256_paramSetD: result = (EVP_PKEY_assign(pkey, NID_id_GostR3410_2012_256, ec)) ? 1 : 0; break; -- cgit v1.1