-static int gost_pkey_asn1_meths(ENGINE *e, EVP_PKEY_ASN1_METHOD **ameth,
- const int **nids, int nid);
+static int gost_cipher_nids[] = {
+ NID_id_Gost28147_89,
+ NID_gost89_cnt,
+ NID_gost89_cnt_12,
+ NID_gost89_cbc,
+ NID_grasshopper_ecb,
+ NID_grasshopper_cbc,
+ NID_grasshopper_cfb,
+ NID_grasshopper_ofb,
+ NID_grasshopper_ctr,
+ NID_magma_cbc,
+ NID_magma_ctr,
+ NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm,
+ 0
+};
+
+static int gost_digest_nids(const int** nids) {
+ static int digest_nids[8] = {0, 0, 0, 0, 0, 0, 0, 0};
+ static int pos = 0;
+ static int init = 0;
+
+ if (!init) {
+ const EVP_MD* md;
+ if ((md = digest_gost()) != NULL)
+ digest_nids[pos++] = EVP_MD_type(md);
+ if ((md = imit_gost_cpa()) != NULL)
+ digest_nids[pos++] = EVP_MD_type(md);
+ if ((md = digest_gost2012_256()) != NULL)
+ digest_nids[pos++] = EVP_MD_type(md);
+ if ((md = digest_gost2012_512()) != NULL)
+ digest_nids[pos++] = EVP_MD_type(md);
+ if ((md = imit_gost_cp_12()) != NULL)
+ digest_nids[pos++] = EVP_MD_type(md);
+ if ((md = magma_omac()) != NULL)
+ digest_nids[pos++] = EVP_MD_type(md);
+ if ((md = grasshopper_omac()) != NULL)
+ digest_nids[pos++] = EVP_MD_type(md);