mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-25 09:39:25 +01:00
unit: Add MIC calculation test
This commit is contained in:
parent
d10c4ec9da
commit
7be2fe7cc8
@ -121,6 +121,9 @@ unit_test_mpdu_SOURCES = unit/test-mpdu.c \
|
|||||||
unit_test_mpdu_LDADD = ell/libell-internal.la
|
unit_test_mpdu_LDADD = ell/libell-internal.la
|
||||||
|
|
||||||
unit_test_eapol_SOURCES = unit/test-eapol.c \
|
unit_test_eapol_SOURCES = unit/test-eapol.c \
|
||||||
|
src/sha1.h src/sha1.c \
|
||||||
|
src/md5.h src/md5.c \
|
||||||
|
src/crypto.h src/crypto.c \
|
||||||
src/eapol.h src/eapol.c
|
src/eapol.h src/eapol.c
|
||||||
unit_test_eapol_LDADD = ell/libell-internal.la
|
unit_test_eapol_LDADD = ell/libell-internal.la
|
||||||
|
|
||||||
|
@ -29,7 +29,17 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <ell/ell.h>
|
#include <ell/ell.h>
|
||||||
|
|
||||||
|
#include "src/md5.h"
|
||||||
|
#include "src/sha1.h"
|
||||||
#include "src/eapol.h"
|
#include "src/eapol.h"
|
||||||
|
#include "src/crypto.h"
|
||||||
|
|
||||||
|
static void do_debug(const char *str, void *user_data)
|
||||||
|
{
|
||||||
|
const char *prefix = user_data;
|
||||||
|
|
||||||
|
l_info("%s%s", prefix, str);
|
||||||
|
}
|
||||||
|
|
||||||
struct eapol_key_data {
|
struct eapol_key_data {
|
||||||
const unsigned char *frame;
|
const unsigned char *frame;
|
||||||
@ -269,6 +279,89 @@ static void eapol_key_test(const void *data)
|
|||||||
assert(L_BE16_TO_CPU(packet->key_data_len) == test->key_data_len);
|
assert(L_BE16_TO_CPU(packet->key_data_len) == test->key_data_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct eapol_key_mic_test {
|
||||||
|
const uint8_t *frame;
|
||||||
|
size_t frame_len;
|
||||||
|
enum eapol_key_descriptor_version version;
|
||||||
|
const uint8_t *kck;
|
||||||
|
const uint8_t *mic;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint8_t eapol_key_mic_data_1[] = {
|
||||||
|
0x01, 0x03, 0x00, 0x75, 0x02, 0x01, 0x0a, 0x00,
|
||||||
|
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x01, 0x59, 0x16, 0x8b, 0xc3, 0xa5, 0xdf, 0x18,
|
||||||
|
0xd7, 0x1e, 0xfb, 0x64, 0x23, 0xf3, 0x40, 0x08,
|
||||||
|
0x8d, 0xab, 0x9e, 0x1b, 0xa2, 0xbb, 0xc5, 0x86,
|
||||||
|
0x59, 0xe0, 0x7b, 0x37, 0x64, 0xb0, 0xde, 0x85,
|
||||||
|
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x16, 0x30, 0x14, 0x01, 0x00, 0x00,
|
||||||
|
0x0f, 0xac, 0x04, 0x01, 0x00, 0x00, 0x0f, 0xac,
|
||||||
|
0x04, 0x01, 0x00, 0x00, 0x0f, 0xac, 0x02, 0x01,
|
||||||
|
0x00,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint8_t eapol_key_mic_1[] = {
|
||||||
|
0x9c, 0xc3, 0xfa, 0xa0, 0xc6, 0x85, 0x96, 0x1d,
|
||||||
|
0x84, 0x06, 0xbb, 0x65, 0x77, 0x45, 0x13, 0x5d,
|
||||||
|
};
|
||||||
|
|
||||||
|
static unsigned char kck_data_1[] = {
|
||||||
|
0x9a, 0x75, 0xef, 0x0b, 0xde, 0x7c, 0x20, 0x9c,
|
||||||
|
0xca, 0xe1, 0x3f, 0x54, 0xb1, 0xb3, 0x3e, 0xa3,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct eapol_key_mic_test eapol_key_mic_test_1 = {
|
||||||
|
.frame = eapol_key_mic_data_1,
|
||||||
|
.frame_len = sizeof(eapol_key_mic_data_1),
|
||||||
|
.version = EAPOL_KEY_DESCRIPTOR_VERSION_HMAC_MD5_ARC4,
|
||||||
|
.kck = kck_data_1,
|
||||||
|
.mic = eapol_key_mic_1,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const uint8_t eapol_key_mic_2[] = {
|
||||||
|
0x6f, 0x04, 0x89, 0xcf, 0x74, 0x06, 0xac, 0xf0,
|
||||||
|
0xae, 0x8f, 0xcb, 0x32, 0xbc, 0xe5, 0x7c, 0x37,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct eapol_key_mic_test eapol_key_mic_test_2 = {
|
||||||
|
.frame = eapol_key_mic_data_1,
|
||||||
|
.frame_len = sizeof(eapol_key_mic_data_1),
|
||||||
|
.version = EAPOL_KEY_DESCRIPTOR_VERSION_HMAC_SHA1_AES,
|
||||||
|
.kck = kck_data_1,
|
||||||
|
.mic = eapol_key_mic_2,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void eapol_key_mic_test(const void *data)
|
||||||
|
{
|
||||||
|
const struct eapol_key_mic_test *test = data;
|
||||||
|
uint8_t mic[16];
|
||||||
|
|
||||||
|
memset(mic, 0, sizeof(mic));
|
||||||
|
|
||||||
|
switch (test->version) {
|
||||||
|
case EAPOL_KEY_DESCRIPTOR_VERSION_HMAC_MD5_ARC4:
|
||||||
|
assert(hmac_md5(test->kck, 16, test->frame, test->frame_len,
|
||||||
|
mic, 16));
|
||||||
|
break;
|
||||||
|
case EAPOL_KEY_DESCRIPTOR_VERSION_HMAC_SHA1_AES:
|
||||||
|
assert(hmac_sha1(test->kck, 16, test->frame, test->frame_len,
|
||||||
|
mic, 16));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
assert(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
l_util_hexdump(true, test->mic, 16, do_debug, "[EAPoL] ");
|
||||||
|
l_util_hexdump(true, mic, 16, do_debug, "[EAPoL] ");
|
||||||
|
assert(!memcmp(test->mic, mic, sizeof(mic)));
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
l_test_init(&argc, &argv);
|
l_test_init(&argc, &argv);
|
||||||
@ -282,5 +375,10 @@ int main(int argc, char *argv[])
|
|||||||
l_test_add("/EAPoL Key/Key Frame 4",
|
l_test_add("/EAPoL Key/Key Frame 4",
|
||||||
eapol_key_test, &eapol_key_test_4);
|
eapol_key_test, &eapol_key_test_4);
|
||||||
|
|
||||||
|
l_test_add("/EAPoL Key/MIC Test 1",
|
||||||
|
eapol_key_mic_test, &eapol_key_mic_test_1);
|
||||||
|
l_test_add("/EAPoL Key/MIC Test 2",
|
||||||
|
eapol_key_mic_test, &eapol_key_mic_test_2);
|
||||||
|
|
||||||
return l_test_run();
|
return l_test_run();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user