<enumerator name='GNUTLS_MAC_GOST28147_TC26Z_IMIT' value='208'/>
<enumerator name='GNUTLS_MAC_SHAKE_128' value='209'/>
<enumerator name='GNUTLS_MAC_SHAKE_256' value='210'/>
+ <enumerator name='GNUTLS_MAC_MAGMA_OMAC' value='211'/>
+ <enumerator name='GNUTLS_MAC_KUZNYECHIK_OMAC' value='212'/>
</enum-decl>
<typedef-decl name='gnutls_mac_algorithm_t' type-id='type-id-44' id='type-id-31'/>
<enum-decl name='__anonymous_enum__' is-anonymous='yes' id='type-id-45'>
.oid = HASH_OID_SHAKE_256,
.id = GNUTLS_MAC_SHAKE_256,
.block_size = 136},
+ {.name = "OMAC-MAGMA",
+ .id = GNUTLS_MAC_MAGMA_OMAC,
+ .output_size = 8,
+ .key_size = 32,
+ .block_size = 8},
+ {.name = "OMAC-KUZNYECHIK",
+ .id = GNUTLS_MAC_KUZNYECHIK_OMAC,
+ .output_size = 16,
+ .key_size = 32,
+ .block_size = 16},
{.name = "MAC-NULL",
.id = GNUTLS_MAC_NULL},
{0, 0, 0, 0, 0, 0, 0, 0, 0}
* @GNUTLS_MAC_GOST28147_TC26Z_IMIT: The GOST 28147-89 working in IMIT mode with TC26 Z S-box.
* @GNUTLS_MAC_SHAKE_128: Reserved; unimplemented.
* @GNUTLS_MAC_SHAKE_256: Reserved; unimplemented.
+ * @GNUTLS_MAC_MAGMA_OMAC: GOST R 34.12-2015 (Magma) in OMAC (CMAC) mode.
+ * @GNUTLS_MAC_KUZNYECHIK_OMAC: GOST R 34.12-2015 (Kuznyechik) in OMAC (CMAC) mode.
*
* Enumeration of different Message Authentication Code (MAC)
* algorithms.
GNUTLS_MAC_AES_GMAC_256 = 207,
GNUTLS_MAC_GOST28147_TC26Z_IMIT = 208,
GNUTLS_MAC_SHAKE_128 = 209,
- GNUTLS_MAC_SHAKE_256 = 210
+ GNUTLS_MAC_SHAKE_256 = 210,
+ GNUTLS_MAC_MAGMA_OMAC = 211,
+ GNUTLS_MAC_KUZNYECHIK_OMAC = 212
} gnutls_mac_algorithm_t;
/**
#endif
#ifndef HAVE_NETTLE_GOST28147_SET_KEY
#include "gost/gost28147.h"
+#include "gost/cmac.h"
#endif
#include "gost/cmac.h"
#endif
struct hmac_streebog256_ctx streebog256;
struct hmac_streebog512_ctx streebog512;
struct gost28147_imit_ctx gost28147_imit;
+ struct cmac_magma_ctx magma;
+ struct cmac_kuznyechik_ctx kuznyechik;
#endif
struct umac96_ctx umac96;
struct umac128_ctx umac128;
gost28147_imit_set_param(ctx, &gost28147_param_TC26_Z);
gost28147_imit_set_key(ctx, len, key);
}
+
+static void
+_wrap_cmac_magma_set_key(void *ctx, size_t len, const uint8_t * key)
+{
+ cmac_magma_set_key(ctx, key);
+}
+
+static void
+_wrap_cmac_kuznyechik_set_key(void *ctx, size_t len, const uint8_t * key)
+{
+ cmac_kuznyechik_set_key(ctx, key);
+}
#endif
static void
ctx->ctx_ptr = &ctx->ctx.gost28147_imit;
ctx->length = GOST28147_IMIT_DIGEST_SIZE;
break;
+ case GNUTLS_MAC_MAGMA_OMAC:
+ ctx->update = (update_func) cmac_magma_update;
+ ctx->digest = (digest_func) cmac_magma_digest;
+ ctx->set_key = _wrap_cmac_magma_set_key;
+ ctx->ctx_ptr = &ctx->ctx.magma;
+ ctx->length = CMAC64_DIGEST_SIZE;
+ break;
+ case GNUTLS_MAC_KUZNYECHIK_OMAC:
+ ctx->update = (update_func) cmac_kuznyechik_update;
+ ctx->digest = (digest_func) cmac_kuznyechik_digest;
+ ctx->set_key = _wrap_cmac_kuznyechik_set_key;
+ ctx->ctx_ptr = &ctx->ctx.kuznyechik;
+ ctx->length = CMAC128_DIGEST_SIZE;
+ break;
#endif
case GNUTLS_MAC_UMAC_96:
ctx->update = (update_func) umac96_update;
case GNUTLS_MAC_STREEBOG_256:
case GNUTLS_MAC_STREEBOG_512:
case GNUTLS_MAC_GOST28147_TC26Z_IMIT:
+ case GNUTLS_MAC_MAGMA_OMAC:
+ case GNUTLS_MAC_KUZNYECHIK_OMAC:
#endif
return 1;
default: