aboutsummaryrefslogtreecommitdiff
path: root/gost_eng.c
diff options
context:
space:
mode:
authorVitaly Chikunov <vt@altlinux.org>2020-05-12 06:01:41 +0300
committerDmitry Belyavskiy <beldmit@users.noreply.github.com>2020-05-12 12:55:47 +0300
commit6957d3487caffeb79cf90c06d006599dcad85d15 (patch)
treede219b7a8027c3f6d60c514e285708754fe6802e /gost_eng.c
parentcfe589b6345926b166f2e59c4d4c537f78382e21 (diff)
downloadgost-engine-6957d3487caffeb79cf90c06d006599dcad85d15.zip
gost-engine-6957d3487caffeb79cf90c06d006599dcad85d15.tar.gz
gost-engine-6957d3487caffeb79cf90c06d006599dcad85d15.tar.bz2
gost_eng: Rework (simplify) cipher registration
Now we don't need a struct to hold cipher list. And can use simple array of pointers to `GOST_cipher'.
Diffstat (limited to 'gost_eng.c')
-rw-r--r--gost_eng.c156
1 files changed, 34 insertions, 122 deletions
diff --git a/gost_eng.c b/gost_eng.c
index a095982..0d70907 100644
--- a/gost_eng.c
+++ b/gost_eng.c
@@ -106,97 +106,24 @@ static struct gost_digest_minfo {
{ 0 },
};
-static struct gost_cipher_minfo {
- int nid;
- const EVP_CIPHER *(*cipher)(void);
- GOST_cipher *reg;
-} gost_cipher_array[] = {
- {
- NID_id_Gost28147_89,
- NULL,
- &Gost28147_89_cipher,
- },
- {
- NID_gost89_cnt,
- NULL,
- &Gost28147_89_cnt_cipher,
- },
- {
- NID_gost89_cnt_12,
- NULL,
- &Gost28147_89_cnt_12_cipher,
- },
- {
- NID_gost89_cbc,
- NULL,
- &Gost28147_89_cbc_cipher,
- },
- {
- NID_grasshopper_ecb,
- NULL,
- &grasshopper_ecb_cipher,
- },
- {
- NID_grasshopper_cbc,
- NULL,
- &grasshopper_cbc_cipher,
- },
- {
- NID_grasshopper_cfb,
- NULL,
- &grasshopper_cfb_cipher,
- },
- {
- NID_grasshopper_ofb,
- NULL,
- &grasshopper_ofb_cipher,
- },
- {
- NID_grasshopper_ctr,
- NULL,
- &grasshopper_ctr_cipher,
- },
- {
- NID_magma_cbc,
- NULL,
- &magma_cbc_cipher,
- },
- {
- NID_magma_ctr,
- NULL,
- &magma_ctr_cipher,
- },
- {
- NID_magma_ctr_acpkm,
- NULL,
- &magma_ctr_acpkm_cipher,
- },
- {
- NID_magma_ctr_acpkm_omac,
- NULL,
- &magma_ctr_acpkm_omac_cipher,
- },
- {
- NID_kuznyechik_ctr_acpkm,
- NULL,
- &grasshopper_ctr_acpkm_cipher,
- },
- {
- NID_kuznyechik_ctr_acpkm_omac,
- NULL,
- &grasshopper_ctr_acpkm_omac_cipher,
- },
- {
- NID_magma_kexp15,
- NULL,
- &magma_kexp15_cipher,
- },
- {
- NID_kuznyechik_kexp15,
- NULL,
- &kuznyechik_kexp15_cipher
- },
- { 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 {
@@ -278,7 +205,7 @@ static struct gost_meth_minfo {
/* `- 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_cipher_nids[OSSL_NELEM(gost_cipher_array)];
static int known_meths_nids[OSSL_NELEM(gost_meth_array) - 1];
static int gost_engine_init(ENGINE* e) {
@@ -297,16 +224,9 @@ static int gost_engine_destroy(ENGINE* e) {
dinfo->destroy();
}
- struct gost_cipher_minfo *cinfo = gost_cipher_array;
- for (; cinfo->nid; cinfo++) {
- if (cinfo->reg)
- GOST_deinit_cipher(cinfo->reg);
- else
- EVP_CIPHER_meth_free((EVP_CIPHER *)cinfo->cipher());
- }
-
- //cipher_gost_grasshopper_destroy();
- //wrap_ciphers_destroy();
+ int i;
+ for (i = 0; i < OSSL_NELEM(gost_cipher_array); i++)
+ GOST_deinit_cipher(gost_cipher_array[i]);
gost_param_free();
@@ -387,15 +307,9 @@ static int bind_gost(ENGINE* e, const char* id) {
|| !ENGINE_register_pkey_meths(e))
goto end;
- struct gost_cipher_minfo *cinfo = gost_cipher_array;
- for (; cinfo->nid; cinfo++) {
- const EVP_CIPHER *cipher;
-
- if (cinfo->reg)
- cipher = GOST_init_cipher(cinfo->reg);
- else
- cipher = cinfo->cipher();
- if (!EVP_add_cipher(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;
}
@@ -449,24 +363,21 @@ static int gost_digests(ENGINE *e, const EVP_MD **digest,
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) {
- if (info->reg)
- *cipher = GOST_init_cipher(info->reg);
- else
- *cipher = info->cipher();
- return 1;
+ 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;
return 0;
@@ -545,3 +456,4 @@ void ENGINE_load_gost(void) {
}
#endif
+/* vim: set expandtab cinoptions=\:0,l1,t0,g0,(0 sw=4 : */