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 <j@w1.fi>
This commit is contained in:
parent
d140db6adf
commit
77b2c81275
3 changed files with 25 additions and 0 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue