- struct gost_pmeth_data *data = EVP_PKEY_CTX_get_data(ctx);
- EVP_PKEY *eph_key = EVP_PKEY_new();
- EVP_PKEY *old_key =EVP_PKEY_CTX_get0_pkey(ctx);
-
- if (data->eph_seckey) EVP_PKEY_free(data->eph_seckey);
- EVP_PKEY_assign(eph_key,EVP_PKEY_base_id(old_key),NULL);
- if (!EVP_PKEY_copy_parameters(eph_key,old_key)) return 0;
- switch (EVP_PKEY_base_id(old_key))
- {
- case NID_id_GostR3410_2001:
- case NID_id_GostR3410_2001_cc:
- gost2001_keygen(EVP_PKEY_get0(eph_key));
- break;
- case NID_id_GostR3410_94:
- case NID_id_GostR3410_94_cc:
- gost_sign_keygen(EVP_PKEY_get0(eph_key));
- break;
-
-
- }
-
-
- data->eph_seckey=eph_key;