From 77c11cadbc84961239d1d573bb2d66f76d605076 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=A4rkl?= Date: Thu, 4 Apr 2019 22:15:25 +0200 Subject: [PATCH] Fix MAC for Messages --- lib/src/gkcrypt.c | 1 + lib/src/takion.c | 3 +++ test/gkcrypt.c | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/src/gkcrypt.c b/lib/src/gkcrypt.c index bb9f20e..d55af2b 100644 --- a/lib/src/gkcrypt.c +++ b/lib/src/gkcrypt.c @@ -189,6 +189,7 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_gkcrypt_gmac(ChiakiGKCrypt *gkcrypt, size_t uint8_t *gmac_key = gkcrypt->key_gmac_current; uint8_t gmac_key_tmp[CHIAKI_GKCRYPT_BLOCK_SIZE]; uint64_t key_index = key_pos / CHIAKI_GKCRYPT_GMAC_KEY_REFRESH_KEY_POS; + // TODO: what to do if (key_pos / CHIAKI_GKCRYPT_GMAC_KEY_REFRESH_KEY_POS) != ((key_pos + buf_size) / CHIAKI_GKCRYPT_GMAC_KEY_REFRESH_KEY_POS)? if(key_index > gkcrypt->key_gmac_index_current) { chiaki_gkcrypt_gen_new_gmac_key(gkcrypt, key_index); diff --git a/lib/src/takion.c b/lib/src/takion.c index d016193..2b5ead6 100644 --- a/lib/src/takion.c +++ b/lib/src/takion.c @@ -401,6 +401,9 @@ static ChiakiErrorCode takion_handle_packet_mac(ChiakiTakion *takion, uint8_t ba } uint32_t key_pos = ntohl(*((uint32_t *)(buf + key_pos_offset))); + if(base_type == TAKION_PACKET_TYPE_MESSAGE) + memset(buf + key_pos_offset, 0, sizeof(uint32_t)); + uint8_t mac[CHIAKI_GKCRYPT_GMAC_SIZE]; memcpy(mac, buf + mac_offset, sizeof(mac)); memset(buf + mac_offset, 0, sizeof(mac)); diff --git a/test/gkcrypt.c b/test/gkcrypt.c index f51d05e..604a7e0 100644 --- a/test/gkcrypt.c +++ b/test/gkcrypt.c @@ -184,7 +184,7 @@ static MunitResult test_gmac(const MunitParameter params[], void *user) memcpy(gkcrypt.iv, gkcrypt_iv, sizeof(gkcrypt.iv)); gkcrypt.key_buf = NULL; gkcrypt.key_buf_size = 0; - gkcrypt.key_gmac_index_next = 1; + gkcrypt.key_gmac_index_current = 0; uint8_t gmac[CHIAKI_GKCRYPT_GMAC_SIZE]; ChiakiErrorCode err = chiaki_gkcrypt_gmac(&gkcrypt, key_pos, buf, sizeof(buf), gmac);