X-Git-Url: https://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=gost_pmeth.c;h=bceb50e96939f8fcfb6702b13548b6d989485676;hb=eaf0efe8098a2a3701f469d777ec1fd2e00574b1;hp=f4a830de7274dbb5c1ff63a82345a223218edb9a;hpb=9cf021b8f3cc7b0f49ecd2f165bd1864903c90d0;p=openssl-gost%2Fengine.git diff --git a/gost_pmeth.c b/gost_pmeth.c index f4a830d..bceb50e 100644 --- a/gost_pmeth.c +++ b/gost_pmeth.c @@ -148,10 +148,25 @@ static int pkey_gost_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) pctx->sign_param_nid = (int)p1; return 1; case EVP_PKEY_CTRL_SET_IV: - OPENSSL_assert(p2 != NULL); + if (p1 > sizeof(pctx->shared_ukm) || !p2) { + GOSTerr(GOST_F_PKEY_GOST_CTRL, GOST_R_UKM_NOT_SET); + return 0; + } memcpy(pctx->shared_ukm, p2, (int)p1); pctx->shared_ukm_size = p1; return 1; + case EVP_PKEY_CTRL_SET_VKO: + switch (p1) { + case 0: /* switch to KEG */ + case NID_id_GostR3411_2012_256: + case NID_id_GostR3411_2012_512: + break; + default: + GOSTerr(GOST_F_PKEY_GOST_CTRL, GOST_R_INVALID_DIGEST_TYPE); + return 0; + } + pctx->vko_dgst_nid = p1; + return 1; case EVP_PKEY_CTRL_CIPHER: switch (p1) { case NID_magma_ctr_acpkm: @@ -499,7 +514,7 @@ ECDSA_SIG *unpack_cp_signature(const unsigned char *sigbuf, size_t siglen) } s = BN_bin2bn(sigbuf, siglen / 2, NULL); r = BN_bin2bn(sigbuf + siglen / 2, siglen / 2, NULL); - ECDSA_SIG_set0(sig, r, s); + ECDSA_SIG_set0(sig, r, s); return sig; } @@ -587,12 +602,12 @@ static int pkey_gost_omac_init(EVP_PKEY_CTX *ctx, size_t mac_size) static int pkey_gost_magma_mac_init(EVP_PKEY_CTX *ctx) { - return pkey_gost_omac_init(ctx, 8); + return pkey_gost_omac_init(ctx, 8); } static int pkey_gost_grasshopper_mac_init(EVP_PKEY_CTX *ctx) { - return pkey_gost_omac_init(ctx, 16); + return pkey_gost_omac_init(ctx, 16); } static void pkey_gost_mac_cleanup(EVP_PKEY_CTX *ctx) @@ -741,7 +756,7 @@ static int pkey_gost_mac_ctrl_str(EVP_PKEY_CTX *ctx, } param = get_encryption_params(obj); - ASN1_OBJECT_free(obj); + ASN1_OBJECT_free(obj); if (param == NULL) { GOSTerr(GOST_F_PKEY_GOST_MAC_CTRL_STR, GOST_R_INVALID_MAC_PARAMS); return 0; @@ -831,12 +846,12 @@ static int pkey_gost_omac_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2, si static int pkey_gost_magma_mac_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) { - return pkey_gost_omac_ctrl(ctx, type, p1, p2, 8); + return pkey_gost_omac_ctrl(ctx, type, p1, p2, 8); } static int pkey_gost_grasshopper_mac_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) { - return pkey_gost_omac_ctrl(ctx, type, p1, p2, 16); + return pkey_gost_omac_ctrl(ctx, type, p1, p2, 16); } static int pkey_gost_omac_ctrl_str(EVP_PKEY_CTX *ctx, @@ -881,13 +896,13 @@ static int pkey_gost_omac_ctrl_str(EVP_PKEY_CTX *ctx, static int pkey_gost_magma_mac_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, const char *value) { - return pkey_gost_omac_ctrl_str(ctx, type, value, 8); + return pkey_gost_omac_ctrl_str(ctx, type, value, 8); } static int pkey_gost_grasshopper_mac_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, const char *value) { - return pkey_gost_omac_ctrl_str(ctx, type, value, 8); + return pkey_gost_omac_ctrl_str(ctx, type, value, 8); } static int pkey_gost_mac_keygen_base(EVP_PKEY_CTX *ctx, @@ -1036,8 +1051,8 @@ int register_pmeth_gost(int id, EVP_PKEY_METHOD **pmeth, int flags) pkey_gost_derive_init, pkey_gost_ec_derive); EVP_PKEY_meth_set_paramgen(*pmeth, pkey_gost_paramgen_init, pkey_gost2001_paramgen); - EVP_PKEY_meth_set_check(*pmeth, pkey_gost_check); - EVP_PKEY_meth_set_public_check(*pmeth, pkey_gost_check); + EVP_PKEY_meth_set_check(*pmeth, pkey_gost_check); + EVP_PKEY_meth_set_public_check(*pmeth, pkey_gost_check); break; case NID_id_GostR3410_2012_256: EVP_PKEY_meth_set_ctrl(*pmeth, @@ -1056,8 +1071,8 @@ int register_pmeth_gost(int id, EVP_PKEY_METHOD **pmeth, int flags) EVP_PKEY_meth_set_paramgen(*pmeth, pkey_gost_paramgen_init, pkey_gost2012_paramgen); - EVP_PKEY_meth_set_check(*pmeth, pkey_gost_check); - EVP_PKEY_meth_set_public_check(*pmeth, pkey_gost_check); + EVP_PKEY_meth_set_check(*pmeth, pkey_gost_check); + EVP_PKEY_meth_set_public_check(*pmeth, pkey_gost_check); break; case NID_id_GostR3410_2012_512: EVP_PKEY_meth_set_ctrl(*pmeth, @@ -1076,8 +1091,8 @@ int register_pmeth_gost(int id, EVP_PKEY_METHOD **pmeth, int flags) EVP_PKEY_meth_set_paramgen(*pmeth, pkey_gost_paramgen_init, pkey_gost2012_paramgen); - EVP_PKEY_meth_set_check(*pmeth, pkey_gost_check); - EVP_PKEY_meth_set_public_check(*pmeth, pkey_gost_check); + EVP_PKEY_meth_set_check(*pmeth, pkey_gost_check); + EVP_PKEY_meth_set_public_check(*pmeth, pkey_gost_check); break; case NID_id_Gost28147_89_MAC: EVP_PKEY_meth_set_ctrl(*pmeth, pkey_gost_mac_ctrl,