* ameth_magma_mac = NULL, * ameth_grasshopper_mac = NULL,
* ameth_magma_mac_acpkm = NULL, * ameth_grasshopper_mac_acpkm = NULL;
-static struct gost_digest_minfo {
- int nid;
- EVP_MD *(*digest)(void);
- void (*destroy)(void);
- const char *sn;
- const char *alias;
-} gost_digest_array[] = {
- {
- NID_id_GostR3411_94,
- digest_gost,
- digest_gost_destroy,
- },
- {
- NID_id_Gost28147_89_MAC,
- imit_gost_cpa,
- imit_gost_cpa_destroy,
- },
- {
- NID_id_GostR3411_2012_256,
- digest_gost2012_256,
- digest_gost2012_256_destroy,
- SN_id_GostR3411_2012_256,
- "streebog256",
- },
- {
- NID_id_GostR3411_2012_512,
- digest_gost2012_512,
- digest_gost2012_512_destroy,
- SN_id_GostR3411_2012_512,
- "streebog512",
- },
- {
- NID_gost_mac_12,
- imit_gost_cp_12,
- imit_gost_cp_12_destroy,
- },
- {
- NID_magma_mac,
- magma_omac,
- magma_omac_destroy,
- },
- {
- NID_grasshopper_mac,
- grasshopper_omac,
- grasshopper_omac_destroy,
- },
- {
- NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac,
- grasshopper_omac_acpkm,
- grasshopper_omac_acpkm_destroy,
- },
- { 0 },
+GOST_digest *gost_digest_array[] = {
+ &GostR3411_94_digest,
+ &Gost28147_89_MAC_digest,
+ &GostR3411_2012_256_digest,
+ &GostR3411_2012_512_digest,
+ &Gost28147_89_mac_12_digest,
+ &magma_mac_digest,
+ &grasshopper_mac_digest,
+ &kuznyechik_ctracpkm_omac_digest,
};
-static struct gost_cipher_minfo {
- int nid;
- const EVP_CIPHER *(*cipher)(void);
-} gost_cipher_array[] = {
- {
- NID_id_Gost28147_89,
- cipher_gost,
- },
- {
- NID_gost89_cnt,
- cipher_gost_cpacnt,
- },
- {
- NID_gost89_cnt_12,
- cipher_gost_cpcnt_12,
- },
- {
- NID_gost89_cbc,
- cipher_gost_cbc,
- },
- {
- NID_grasshopper_ecb,
- cipher_gost_grasshopper_ecb,
- },
- {
- NID_grasshopper_cbc,
- cipher_gost_grasshopper_cbc,
- },
- {
- NID_grasshopper_cfb,
- cipher_gost_grasshopper_cfb,
- },
- {
- NID_grasshopper_ofb,
- cipher_gost_grasshopper_ofb,
- },
- {
- NID_grasshopper_ctr,
- cipher_gost_grasshopper_ctr,
- },
- {
- NID_magma_cbc,
- cipher_magma_cbc,
- },
- {
- NID_magma_ctr,
- cipher_magma_ctr,
- },
- {
- NID_magma_ctr_acpkm,
- cipher_magma_ctr_acpkm,
- },
- {
- NID_magma_ctr_acpkm_omac,
- cipher_magma_ctr_acpkm_omac,
- },
- {
- NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm,
- cipher_gost_grasshopper_ctracpkm,
- },
- {
- NID_kuznyechik_ctr_acpkm_omac,
- cipher_gost_grasshopper_ctracpkm_omac,
- },
- {
- NID_magma_kexp15,
- cipher_magma_wrap,
- },
- {
- NID_kuznyechik_kexp15,
- cipher_kuznyechik_wrap,
- },
- { 0 },
+GOST_cipher *gost_cipher_array[] = {
+ &Gost28147_89_cipher,
+ &Gost28147_89_cnt_cipher,
+ &Gost28147_89_cnt_12_cipher,
+ &Gost28147_89_cbc_cipher,
+ &grasshopper_ecb_cipher,
+ &grasshopper_cbc_cipher,
+ &grasshopper_cfb_cipher,
+ &grasshopper_ofb_cipher,
+ &grasshopper_ctr_cipher,
+ &magma_cbc_cipher,
+ &magma_ctr_cipher,
+ &magma_ctr_acpkm_cipher,
+ &magma_ctr_acpkm_omac_cipher,
+ &grasshopper_ctr_acpkm_cipher,
+ &grasshopper_ctr_acpkm_omac_cipher,
+ &magma_kexp15_cipher,
+ &kuznyechik_kexp15_cipher,
};
static struct gost_meth_minfo {
# define OSSL_NELEM(x) (sizeof(x)/sizeof((x)[0]))
#endif
+static int known_digest_nids[OSSL_NELEM(gost_digest_array)];
+static int known_cipher_nids[OSSL_NELEM(gost_cipher_array)];
/* `- 1' because of terminating zero element */
-static int known_digest_nids[OSSL_NELEM(gost_digest_array) - 1];
-static int known_cipher_nids[OSSL_NELEM(gost_cipher_array) - 1];
static int known_meths_nids[OSSL_NELEM(gost_meth_array) - 1];
static int gost_engine_init(ENGINE* e) {
}
static int gost_engine_destroy(ENGINE* e) {
- struct gost_digest_minfo *dinfo = gost_digest_array;
- for (; dinfo->nid; dinfo++) {
- if (dinfo->alias)
- EVP_delete_digest_alias(dinfo->alias);
- dinfo->destroy();
- }
+ int i;
- cipher_gost_destroy();
- cipher_gost_grasshopper_destroy();
- wrap_ciphers_destroy();
+ for (i = 0; i < OSSL_NELEM(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_param_free();
|| !ENGINE_register_pkey_meths(e))
goto end;
- struct gost_cipher_minfo *cinfo = gost_cipher_array;
- for (; cinfo->nid; cinfo++)
- if (!EVP_add_cipher(cinfo->cipher()))
+ int i;
+ for (i = 0; i < OSSL_NELEM(gost_cipher_array); i++) {
+ if (!EVP_add_cipher(GOST_init_cipher(gost_cipher_array[i])))
goto end;
+ }
- struct gost_digest_minfo *dinfo = gost_digest_array;
- for (; dinfo->nid; dinfo++) {
- if (!EVP_add_digest(dinfo->digest()))
- goto end;
- if (dinfo->alias &&
- !EVP_add_digest_alias(dinfo->sn, dinfo->alias))
+ for (i = 0; i < OSSL_NELEM(gost_digest_array); i++) {
+ if (!EVP_add_digest(GOST_init_digest(gost_digest_array[i])))
goto end;
}
static int gost_digests(ENGINE *e, const EVP_MD **digest,
const int **nids, int nid)
{
- struct gost_digest_minfo *info = gost_digest_array;
+ int i;
if (!digest) {
int *n = known_digest_nids;
*nids = n;
- for (; info->nid; info++)
- *n++ = info->nid;
- return OSSL_NELEM(known_digest_nids);
+ for (i = 0; i < OSSL_NELEM(gost_digest_array); i++)
+ *n++ = gost_digest_array[i]->nid;
+ return i;
}
- for (; info->nid; info++)
- if (nid == info->nid) {
- *digest = info->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 = NULL;
static int gost_ciphers(ENGINE *e, const EVP_CIPHER **cipher,
const int **nids, int nid)
{
- struct gost_cipher_minfo *info = gost_cipher_array;
+ int i;
if (!cipher) {
int *n = known_cipher_nids;
*nids = n;
- for (; info->nid; info++)
- *n++ = info->nid;
- return OSSL_NELEM(known_cipher_nids);
+ for (i = 0; i < OSSL_NELEM(gost_cipher_array); i++)
+ *n++ = gost_cipher_array[i]->nid;
+ return i;
}
- for (; info->nid; info++)
- if (nid == info->nid) {
- *cipher = info->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 = NULL;
}
#endif
+/* vim: set expandtab cinoptions=\:0,l1,t0,g0,(0 sw=4 : */