From: Vitaly Chikunov Date: Tue, 12 May 2020 01:58:03 +0000 (+0300) Subject: gost_grasshopper_cipher: Rework cipher registration X-Git-Tag: v3.0.0~107 X-Git-Url: http://wagner.pp.ru/gitweb/?a=commitdiff_plain;h=3e553fcdee82bc1c0ea17fe7f5eedad987f5ed34;p=openssl-gost%2Fengine.git gost_grasshopper_cipher: Rework cipher registration This only adds registering via tables, but not removing obsolete code. --- diff --git a/gost_eng.c b/gost_eng.c index 84c0937..09fc4b2 100644 --- a/gost_eng.c +++ b/gost_eng.c @@ -133,23 +133,28 @@ static struct gost_cipher_minfo { }, { NID_grasshopper_ecb, - cipher_gost_grasshopper_ecb, + NULL, + &grasshopper_ecb_cipher, }, { NID_grasshopper_cbc, - cipher_gost_grasshopper_cbc, + NULL, + &grasshopper_cbc_cipher, }, { NID_grasshopper_cfb, - cipher_gost_grasshopper_cfb, + NULL, + &grasshopper_cfb_cipher, }, { NID_grasshopper_ofb, - cipher_gost_grasshopper_ofb, + NULL, + &grasshopper_ofb_cipher, }, { NID_grasshopper_ctr, - cipher_gost_grasshopper_ctr, + NULL, + &grasshopper_ctr_cipher, }, { NID_magma_cbc, @@ -172,12 +177,14 @@ static struct gost_cipher_minfo { &magma_ctr_acpkm_omac_cipher, }, { - NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm, - cipher_gost_grasshopper_ctracpkm, + NID_kuznyechik_ctr_acpkm, + NULL, + &grasshopper_ctr_acpkm_cipher, }, { NID_kuznyechik_ctr_acpkm_omac, - cipher_gost_grasshopper_ctracpkm_omac, + NULL, + &grasshopper_ctr_acpkm_omac_cipher, }, { NID_magma_kexp15, diff --git a/gost_grasshopper_cipher.c b/gost_grasshopper_cipher.c index 2c2ea88..2b3d112 100644 --- a/gost_grasshopper_cipher.c +++ b/gost_grasshopper_cipher.c @@ -1,5 +1,6 @@ /* * Maxim Tishkov 2016 + * Copyright (c) 2020 Vitaly Chikunov * This file is distributed under the same license as OpenSSL */ @@ -46,6 +47,103 @@ struct GRASSHOPPER_CIPHER_PARAMS { int extra_flags; }; +static GOST_cipher grasshopper_template_cipher = { + .block_size = GRASSHOPPER_BLOCK_SIZE, + .key_len = GRASSHOPPER_KEY_SIZE, + .flags = EVP_CIPH_RAND_KEY | + EVP_CIPH_ALWAYS_CALL_INIT, + .do_cipher = gost_grasshopper_cipher_do, + .cleanup = gost_grasshopper_cipher_cleanup, + .ctx_size = sizeof(gost_grasshopper_cipher_ctx), + .set_asn1_parameters = gost_grasshopper_set_asn1_parameters, + .get_asn1_parameters = gost_grasshopper_get_asn1_parameters, + .ctrl = gost_grasshopper_cipher_ctl, +}; + +GOST_cipher grasshopper_ecb_cipher = { + .nid = NID_grasshopper_ecb, + .template = &grasshopper_template_cipher, + .flags = EVP_CIPH_ECB_MODE, + .init = gost_grasshopper_cipher_init_ecb, + .do_cipher = gost_grasshopper_cipher_do_ecb, +}; + +GOST_cipher grasshopper_cbc_cipher = { + .nid = NID_grasshopper_cbc, + .template = &grasshopper_template_cipher, + .iv_len = 16, + .flags = EVP_CIPH_CBC_MODE | + EVP_CIPH_CUSTOM_IV, + .init = gost_grasshopper_cipher_init_cbc, + .do_cipher = gost_grasshopper_cipher_do_cbc, +}; + +GOST_cipher grasshopper_ofb_cipher = { + .nid = NID_grasshopper_ofb, + .template = &grasshopper_template_cipher, + .block_size = 1, + .iv_len = 16, + .flags = EVP_CIPH_OFB_MODE | + EVP_CIPH_NO_PADDING | + EVP_CIPH_CUSTOM_IV, + .init = gost_grasshopper_cipher_init_ofb, + .do_cipher = gost_grasshopper_cipher_do_ofb, +}; + +GOST_cipher grasshopper_cfb_cipher = { + .nid = NID_grasshopper_cfb, + .template = &grasshopper_template_cipher, + .block_size = 1, + .iv_len = 16, + .flags = EVP_CIPH_CFB_MODE | + EVP_CIPH_NO_PADDING | + EVP_CIPH_CUSTOM_IV, + .init = gost_grasshopper_cipher_init_cfb, + .do_cipher = gost_grasshopper_cipher_do_cfb, +}; + +GOST_cipher grasshopper_ctr_cipher = { + .nid = NID_grasshopper_ctr, + .template = &grasshopper_template_cipher, + .block_size = 1, + .iv_len = 8, + .flags = EVP_CIPH_CTR_MODE | + EVP_CIPH_NO_PADDING | + EVP_CIPH_CUSTOM_IV, + .init = gost_grasshopper_cipher_init_ctr, + .do_cipher = gost_grasshopper_cipher_do_ctr, + .ctx_size = sizeof(gost_grasshopper_cipher_ctx_ctr), +}; + +GOST_cipher grasshopper_ctr_acpkm_cipher = { + .nid = NID_kuznyechik_ctr_acpkm, + .template = &grasshopper_template_cipher, + .block_size = 1, + .iv_len = 8, + .flags = EVP_CIPH_CTR_MODE | + EVP_CIPH_NO_PADDING | + EVP_CIPH_CUSTOM_IV, + .init = gost_grasshopper_cipher_init_ctracpkm, + .do_cipher = gost_grasshopper_cipher_do_ctracpkm, + .ctx_size = sizeof(gost_grasshopper_cipher_ctx_ctr), +}; + +GOST_cipher grasshopper_ctr_acpkm_omac_cipher = { + .nid = NID_kuznyechik_ctr_acpkm_omac, + .template = &grasshopper_template_cipher, + .block_size = 1, + .iv_len = 8, + .flags = EVP_CIPH_CTR_MODE | + EVP_CIPH_NO_PADDING | + EVP_CIPH_CUSTOM_IV | + EVP_CIPH_FLAG_CUSTOM_CIPHER | + EVP_CIPH_FLAG_CIPHER_WITH_MAC | + EVP_CIPH_CUSTOM_COPY, + .init = gost_grasshopper_cipher_init_ctracpkm_omac, + .do_cipher = gost_grasshopper_cipher_do_ctracpkm_omac, + .ctx_size = sizeof(gost_grasshopper_cipher_ctx_ctr), +}; + static struct GRASSHOPPER_CIPHER_PARAMS gost_cipher_params[7] = { { NID_grasshopper_ecb, @@ -1069,3 +1167,4 @@ void cipher_gost_grasshopper_destroy(void) EVP_CIPHER_meth_free(gost_grasshopper_ciphers[GRASSHOPPER_CIPHER_CTRACPKMOMAC]); gost_grasshopper_ciphers[GRASSHOPPER_CIPHER_CTRACPKMOMAC] = NULL; } +/* vim: set expandtab cinoptions=\:0,l1,t0,g0,(0 sw=4 : */ diff --git a/gost_lcl.h b/gost_lcl.h index a9cb8b0..3aafd9e 100644 --- a/gost_lcl.h +++ b/gost_lcl.h @@ -350,5 +350,13 @@ extern GOST_cipher magma_ctr_cipher; extern GOST_cipher magma_ctr_acpkm_cipher; extern GOST_cipher magma_ctr_acpkm_omac_cipher; extern GOST_cipher magma_cbc_cipher; +extern GOST_cipher grasshopper_ecb_cipher; +extern GOST_cipher grasshopper_cbc_cipher; +extern GOST_cipher grasshopper_cfb_cipher; +extern GOST_cipher grasshopper_ofb_cipher; +extern GOST_cipher grasshopper_ctr_cipher; +extern GOST_cipher grasshopper_ctr_acpkm_cipher; +extern GOST_cipher grasshopper_ctr_acpkm_omac_cipher; + #endif /* vim: set expandtab cinoptions=\:0,l1,t0,g0,(0 sw=4 : */