-static int gost_digest_nids[] = {
- NID_id_GostR3411_94,
- NID_id_Gost28147_89_MAC,
- NID_id_GostR3411_2012_256,
- NID_id_GostR3411_2012_512,
- NID_gost_mac_12,
- 0
-};
+static int gost_digest_nids(const int** nids) {
+ static int digest_nids[10] = {0, 0, 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);
+/* if ((md = magma_omac_acpkm()) != NULL)
+ digest_nids[pos++] = EVP_MD_type(md);*/
+ if ((md = grasshopper_omac_acpkm()) != NULL)
+ digest_nids[pos++] = EVP_MD_type(md);
+
+ digest_nids[pos] = 0;
+ init = 1;
+ }
+ *nids = digest_nids;
+ return pos;
+}