+#define SN_magma_mgm "magma-mgm"
+
+#define BSWAP64(x) \
+ (((x & 0xFF00000000000000ULL) >> 56) | \
+ ((x & 0x00FF000000000000ULL) >> 40) | \
+ ((x & 0x0000FF0000000000ULL) >> 24) | \
+ ((x & 0x000000FF00000000ULL) >> 8) | \
+ ((x & 0x00000000FF000000ULL) << 8) | \
+ ((x & 0x0000000000FF0000ULL) << 24) | \
+ ((x & 0x000000000000FF00ULL) << 40) | \
+ ((x & 0x00000000000000FFULL) << 56))
+
+typedef void (*mul128_f) (uint64_t *result, uint64_t *arg1, uint64_t *arg2);
+
+typedef struct {
+ union {
+ uint64_t u[2];
+ uint32_t d[4];
+ uint8_t c[16];
+ } nonce, Yi, Zi, EKi, Hi, len, ACi, mul, sum, tag;
+
+ unsigned int mres, ares;
+ block128_f block;
+ mul128_f mul_gf;
+ int blocklen;
+ void *key;
+} mgm128_context;
+
+typedef struct {
+ union {
+ struct ossl_gost_cipher_ctx g_ks;
+ gost_grasshopper_cipher_ctx gh_ks;
+ } ks;
+ int key_set;
+ int iv_set;
+ mgm128_context mgm;
+ unsigned char *iv;
+ int ivlen;
+ int taglen;
+ int tlstree_mode;
+} gost_mgm_ctx;
+