X-Git-Url: http://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=gost_eng.c;h=f930faa2f5e2043911206be1ecffd13e33728b0a;hb=dd06acfd99c408fdee066f614ea22bce1d393830;hp=08fc59739101013a1ef3be7a65699e1e5bc0c82b;hpb=12d998acc664965cbf63fe61473539d1e022eeb4;p=openssl-gost%2Fengine.git diff --git a/gost_eng.c b/gost_eng.c index 08fc597..f930faa 100644 --- a/gost_eng.c +++ b/gost_eng.c @@ -24,6 +24,22 @@ static const char* engine_gost_id = "gost"; static const char* engine_gost_name = "Reference implementation of GOST engine"; +const ENGINE_CMD_DEFN gost_cmds[] = { + {GOST_CTRL_CRYPT_PARAMS, + "CRYPT_PARAMS", + "OID of default GOST 28147-89 parameters", + ENGINE_CMD_FLAG_STRING}, + {GOST_CTRL_PBE_PARAMS, + "PBE_PARAMS", + "Shortname of default digest alg for PBE", + ENGINE_CMD_FLAG_STRING}, + {GOST_CTRL_PK_FORMAT, + "GOST_PK_FORMAT", + "Private key format params", + ENGINE_CMD_FLAG_STRING}, + {0, NULL, NULL, 0} +}; + /* Symmetric cipher and digest function registrar */ static int gost_ciphers(ENGINE* e, const EVP_CIPHER** cipher, @@ -39,6 +55,7 @@ static int gost_pkey_asn1_meths(ENGINE* e, EVP_PKEY_ASN1_METHOD** ameth, const int** nids, int nid); static EVP_PKEY_METHOD* pmeth_GostR3410_2001 = NULL, + * pmeth_GostR3410_2001DH = NULL, * pmeth_GostR3410_2012_256 = NULL, * pmeth_GostR3410_2012_512 = NULL, * pmeth_Gost28147_MAC = NULL, * pmeth_Gost28147_MAC_12 = NULL, @@ -46,6 +63,7 @@ static EVP_PKEY_METHOD* pmeth_GostR3410_2001 = NULL, * pmeth_magma_mac_acpkm = NULL, * pmeth_grasshopper_mac_acpkm = NULL; static EVP_PKEY_ASN1_METHOD* ameth_GostR3410_2001 = NULL, + * ameth_GostR3410_2001DH = NULL, * ameth_GostR3410_2012_256 = NULL, * ameth_GostR3410_2012_512 = NULL, * ameth_Gost28147_MAC = NULL, * ameth_Gost28147_MAC_12 = NULL, @@ -97,6 +115,13 @@ static struct gost_meth_minfo { "GOST2001", "GOST R 34.10-2001", }, + { + NID_id_GostR3410_2001DH, + &pmeth_GostR3410_2001DH, + &ameth_GostR3410_2001DH, + "GOST2001 DH", + "GOST R 34.10-2001 DH", + }, { NID_id_Gost28147_89_MAC, &pmeth_Gost28147_MAC, @@ -177,9 +202,9 @@ static int gost_engine_destroy(ENGINE* e) { int i; for (i = 0; i < OSSL_NELEM(gost_digest_array); i++) - GOST_deinit_digest(gost_digest_array[i]); + GOST_deinit_digest(gost_digest_array[i]); for (i = 0; i < OSSL_NELEM(gost_cipher_array); i++) - GOST_deinit_cipher(gost_cipher_array[i]); + GOST_deinit_cipher(gost_cipher_array[i]); gost_param_free(); @@ -262,12 +287,12 @@ static int bind_gost(ENGINE* e, const char* id) { int i; for (i = 0; i < OSSL_NELEM(gost_cipher_array); i++) { - if (!EVP_add_cipher(GOST_init_cipher(gost_cipher_array[i]))) + if (!EVP_add_cipher(GOST_init_cipher(gost_cipher_array[i]))) goto end; } for (i = 0; i < OSSL_NELEM(gost_digest_array); i++) { - if (!EVP_add_digest(GOST_init_digest(gost_digest_array[i]))) + if (!EVP_add_digest(GOST_init_digest(gost_digest_array[i]))) goto end; } @@ -301,8 +326,8 @@ static int gost_digests(ENGINE *e, const EVP_MD **digest, for (i = 0; i < OSSL_NELEM(gost_digest_array); i++) if (nid == gost_digest_array[i]->nid) { - *digest = GOST_init_digest(gost_digest_array[i]); - return 1; + *digest = GOST_init_digest(gost_digest_array[i]); + return 1; } *digest = NULL; return 0; @@ -325,8 +350,8 @@ static int gost_ciphers(ENGINE *e, const EVP_CIPHER **cipher, for (i = 0; i < OSSL_NELEM(gost_cipher_array); i++) if (nid == gost_cipher_array[i]->nid) { - *cipher = GOST_init_cipher(gost_cipher_array[i]); - return 1; + *cipher = GOST_init_cipher(gost_cipher_array[i]); + return 1; } *cipher = NULL; return 0;