From 77b2c81275e8081dbba30ee9b9aa1a0bf65c4cd4 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Sun, 9 Sep 2012 13:37:50 +0300 Subject: [PATCH] Add aes_gmac() as a wrapper for AES GMAC operations using GCM This is otherwise identical to aes_gcm_ae() but does not use the plain/crypt pointers since no data is encrypted. Signed-hostap: Jouni Malinen --- src/crypto/aes-gcm.c | 8 ++++++++ src/crypto/aes_wrap.h | 3 +++ tests/test-aes.c | 14 ++++++++++++++ 3 files changed, 25 insertions(+) diff --git a/src/crypto/aes-gcm.c b/src/crypto/aes-gcm.c index d3105edaf..f6f4074b0 100644 --- a/src/crypto/aes-gcm.c +++ b/src/crypto/aes-gcm.c @@ -311,3 +311,11 @@ int aes_gcm_ad(const u8 *key, size_t key_len, const u8 *iv, size_t iv_len, return 0; } + + +int aes_gmac(const u8 *key, size_t key_len, const u8 *iv, size_t iv_len, + const u8 *aad, size_t aad_len, u8 *tag) +{ + return aes_gcm_ae(key, key_len, iv, iv_len, NULL, 0, aad, aad_len, NULL, + tag); +} diff --git a/src/crypto/aes_wrap.h b/src/crypto/aes_wrap.h index 5b0928e20..63925dfdc 100644 --- a/src/crypto/aes_wrap.h +++ b/src/crypto/aes_wrap.h @@ -49,5 +49,8 @@ int __must_check aes_gcm_ad(const u8 *key, size_t key_len, const u8 *crypt, size_t crypt_len, const u8 *aad, size_t aad_len, const u8 *tag, u8 *plain); +int __must_check aes_gmac(const u8 *key, size_t key_len, + const u8 *iv, size_t iv_len, + const u8 *aad, size_t aad_len, u8 *tag); #endif /* AES_WRAP_H */ diff --git a/tests/test-aes.c b/tests/test-aes.c index d917b73bf..84c959cbd 100644 --- a/tests/test-aes.c +++ b/tests/test-aes.c @@ -407,6 +407,20 @@ static int test_gcm(void) ret++; } + if (p_len == 0) { + if (aes_gmac(k, k_len, iv, iv_len, aad, aad_len, tag) < + 0) { + printf("GMAC failed (test case %d)\n", i); + ret++; + continue; + } + + if (os_memcmp(tag, t, sizeof(tag)) != 0) { + printf("GMAC tag mismatch (test case %d)\n", i); + ret++; + } + } + if (aes_gcm_ad(k, k_len, iv, iv_len, c, p_len, aad, aad_len, t, tmp) < 0) { printf("GCM-AD failed (test case %d)\n", i);