Commit 6e624a64 authored by Shane Lontis's avatar Shane Lontis Committed by Pauli
Browse files

KMAC implementation using EVP_MAC

parent 7dc6875c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@ SUBDIRS=objects buffer bio stack lhash rand evp asn1 pem x509 x509v3 conf \
        md2 md4 md5 sha mdc2 gmac hmac ripemd whrlpool poly1305 blake2 \
        siphash sm3 des aes rc2 rc4 rc5 idea aria bf cast camellia \
        seed sm4 chacha modes bn ec rsa dsa dh sm2 dso engine \
        err comp ocsp cms ts srp cmac ct async
        err comp ocsp cms ts srp cmac ct async kmac

LIBS=../libcrypto
SOURCE[../libcrypto]=\
+3 −0
Original line number Diff line number Diff line
@@ -803,6 +803,8 @@ EVP_F_EVP_SIGNFINAL:107:EVP_SignFinal
EVP_F_EVP_VERIFYFINAL:108:EVP_VerifyFinal
EVP_F_GMAC_CTRL:215:gmac_ctrl
EVP_F_INT_CTX_NEW:157:int_ctx_new
EVP_F_KMAC_CTRL:217:kmac_ctrl
EVP_F_KMAC_INIT:218:kmac_init
EVP_F_OK_NEW:200:ok_new
EVP_F_PKCS5_PBE_KEYIVGEN:117:PKCS5_PBE_keyivgen
EVP_F_PKCS5_V2_PBE_KEYIVGEN:118:PKCS5_v2_PBE_keyivgen
@@ -2249,6 +2251,7 @@ EVP_R_GET_RAW_KEY_FAILED:182:get raw key failed
EVP_R_ILLEGAL_SCRYPT_PARAMETERS:171:illegal scrypt parameters
EVP_R_INITIALIZATION_ERROR:134:initialization error
EVP_R_INPUT_NOT_INITIALIZED:111:input not initialized
EVP_R_INVALID_CUSTOM_LENGTH:185:invalid custom length
EVP_R_INVALID_DIGEST:152:invalid digest
EVP_R_INVALID_FIPS_MODE:168:invalid fips mode
EVP_R_INVALID_KEY:163:invalid key
+2 −0
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@ void openssl_add_all_macs_int(void)
#endif
    EVP_add_mac(&gmac_meth);
    EVP_add_mac(&hmac_meth);
    EVP_add_mac(&kmac128_meth);
    EVP_add_mac(&kmac256_meth);
#ifndef OPENSSL_NO_SIPHASH
    EVP_add_mac(&siphash_meth);
#endif
+4 −0
Original line number Diff line number Diff line
@@ -143,6 +143,8 @@ static const ERR_STRING_DATA EVP_str_functs[] = {
    {ERR_PACK(ERR_LIB_EVP, EVP_F_EVP_VERIFYFINAL, 0), "EVP_VerifyFinal"},
    {ERR_PACK(ERR_LIB_EVP, EVP_F_GMAC_CTRL, 0), "gmac_ctrl"},
    {ERR_PACK(ERR_LIB_EVP, EVP_F_INT_CTX_NEW, 0), "int_ctx_new"},
    {ERR_PACK(ERR_LIB_EVP, EVP_F_KMAC_CTRL, 0), "kmac_ctrl"},
    {ERR_PACK(ERR_LIB_EVP, EVP_F_KMAC_INIT, 0), "kmac_init"},
    {ERR_PACK(ERR_LIB_EVP, EVP_F_OK_NEW, 0), "ok_new"},
    {ERR_PACK(ERR_LIB_EVP, EVP_F_PKCS5_PBE_KEYIVGEN, 0), "PKCS5_PBE_keyivgen"},
    {ERR_PACK(ERR_LIB_EVP, EVP_F_PKCS5_V2_PBE_KEYIVGEN, 0),
@@ -215,6 +217,8 @@ static const ERR_STRING_DATA EVP_str_reasons[] = {
    "initialization error"},
    {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INPUT_NOT_INITIALIZED),
    "input not initialized"},
    {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_CUSTOM_LENGTH),
    "invalid custom length"},
    {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_DIGEST), "invalid digest"},
    {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_FIPS_MODE), "invalid fips mode"},
    {ERR_PACK(ERR_LIB_EVP, 0, EVP_R_INVALID_KEY), "invalid key"},
+30 −0
Original line number Diff line number Diff line
@@ -59,6 +59,11 @@ static int shake_init(EVP_MD_CTX *evp_ctx)
    return init(evp_ctx, '\x1f');
}

static int kmac_init(EVP_MD_CTX *evp_ctx)
{
    return init(evp_ctx, '\x04');
}

static int sha3_update(EVP_MD_CTX *evp_ctx, const void *_inp, size_t len)
{
    KECCAK1600_CTX *ctx = evp_ctx->md_data;
@@ -395,6 +400,7 @@ const EVP_MD *EVP_shake##bitlen(void) \
    };                                          \
    return &shake##bitlen##_md;                 \
}

#endif

EVP_MD_SHA3(224)
@@ -404,3 +410,27 @@ EVP_MD_SHA3(512)

EVP_MD_SHAKE(128)
EVP_MD_SHAKE(256)


# define EVP_MD_KECCAK_KMAC(bitlen)             \
const EVP_MD *evp_keccak_kmac##bitlen(void)     \
{                                               \
    static const EVP_MD kmac_##bitlen##_md = {  \
        -1,                                     \
        0,                                      \
        2 * bitlen / 8,                         \
        EVP_MD_FLAG_XOF,                        \
        kmac_init,                              \
        sha3_update,                            \
        sha3_final,                             \
        NULL,                                   \
        NULL,                                   \
        (KECCAK1600_WIDTH - bitlen * 2) / 8,    \
        sizeof(KECCAK1600_CTX),                 \
        shake_ctrl                              \
    };                                          \
    return &kmac_##bitlen##_md;                 \
}

EVP_MD_KECCAK_KMAC(128)
EVP_MD_KECCAK_KMAC(256)
Loading