-static GRASSHOPPER_INLINE void
-gost_grasshopper_cipher_destroy_ofb(gost_grasshopper_cipher_ctx * c);
-static GRASSHOPPER_INLINE void
-gost_grasshopper_cipher_destroy_ctr(gost_grasshopper_cipher_ctx * c);
-
-struct GRASSHOPPER_CIPHER_PARAMS {
- int nid;
- grasshopper_init_cipher_func init_cipher;
- grasshopper_do_cipher_func do_cipher;
- grasshopper_destroy_cipher_func destroy_cipher;
- int block_size;
- int ctx_size;
- int iv_size;
- bool padding;
+GOST_cipher grasshopper_ecb_cipher = {
+ .nid = NID_grasshopper_ecb,
+ .template = &grasshopper_template_cipher,
+ .flags = EVP_CIPH_ECB_MODE,
+ .init = gost_grasshopper_cipher_init_ecb,
+ .do_cipher = gost_grasshopper_cipher_do_ecb,
+};
+
+GOST_cipher grasshopper_cbc_cipher = {
+ .nid = NID_grasshopper_cbc,
+ .template = &grasshopper_template_cipher,
+ .iv_len = 16,
+ .flags = EVP_CIPH_CBC_MODE |
+ EVP_CIPH_CUSTOM_IV,
+ .init = gost_grasshopper_cipher_init_cbc,
+ .do_cipher = gost_grasshopper_cipher_do_cbc,
+};
+
+GOST_cipher grasshopper_ofb_cipher = {
+ .nid = NID_grasshopper_ofb,
+ .template = &grasshopper_template_cipher,
+ .block_size = 1,
+ .iv_len = 16,
+ .flags = EVP_CIPH_OFB_MODE |
+ EVP_CIPH_NO_PADDING |
+ EVP_CIPH_CUSTOM_IV,
+ .init = gost_grasshopper_cipher_init_ofb,
+ .do_cipher = gost_grasshopper_cipher_do_ofb,
+};
+
+GOST_cipher grasshopper_cfb_cipher = {
+ .nid = NID_grasshopper_cfb,
+ .template = &grasshopper_template_cipher,
+ .block_size = 1,
+ .iv_len = 16,
+ .flags = EVP_CIPH_CFB_MODE |
+ EVP_CIPH_NO_PADDING |
+ EVP_CIPH_CUSTOM_IV,
+ .init = gost_grasshopper_cipher_init_cfb,
+ .do_cipher = gost_grasshopper_cipher_do_cfb,
+};
+
+GOST_cipher grasshopper_ctr_cipher = {
+ .nid = NID_grasshopper_ctr,
+ .template = &grasshopper_template_cipher,
+ .block_size = 1,
+ .iv_len = 8,
+ .flags = EVP_CIPH_CTR_MODE |
+ EVP_CIPH_NO_PADDING |
+ EVP_CIPH_CUSTOM_IV,
+ .init = gost_grasshopper_cipher_init_ctr,
+ .do_cipher = gost_grasshopper_cipher_do_ctr,
+ .ctx_size = sizeof(gost_grasshopper_cipher_ctx_ctr),
+};
+
+GOST_cipher grasshopper_ctr_acpkm_cipher = {
+ .nid = NID_kuznyechik_ctr_acpkm,
+ .template = &grasshopper_template_cipher,
+ .block_size = 1,
+ .iv_len = 8,
+ .flags = EVP_CIPH_CTR_MODE |
+ EVP_CIPH_NO_PADDING |
+ EVP_CIPH_CUSTOM_IV,
+ .init = gost_grasshopper_cipher_init_ctracpkm,
+ .do_cipher = gost_grasshopper_cipher_do_ctracpkm,
+ .ctx_size = sizeof(gost_grasshopper_cipher_ctx_ctr),