3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-11-25 09:39:25 +01:00

unit: Add PTK Derivation unit tests

This commit is contained in:
Denis Kenzior 2014-12-26 14:14:51 -06:00
parent 5e7771ef66
commit 7e6b4f8bb0

View File

@ -103,6 +103,120 @@ static void psk_test(const void *data)
assert(strcmp(test->psk, psk) == 0);
}
struct ptk_data {
const unsigned char *pmk;
const unsigned char *aa;
const unsigned char *spa;
const unsigned char *snonce;
const unsigned char *anonce;
enum crypto_cipher cipher;
const unsigned char *kck;
const unsigned char *kek;
const unsigned char *tk;
};
static unsigned char pmk_data_1[32] = {
0x0d, 0xc0, 0xd6, 0xeb, 0x90, 0x55, 0x5e, 0xd6,
0x41, 0x97, 0x56, 0xb9, 0xa1, 0x5e, 0xc3, 0xe3,
0x20, 0x9b, 0x63, 0xdf, 0x70, 0x7d, 0xd5, 0x08,
0xd1, 0x45, 0x81, 0xf8, 0x98, 0x27, 0x21, 0xaf,
};
static unsigned char aa_data_1[6] = {
0xa0, 0xa1, 0xa1, 0xa3, 0xa4, 0xa5,
};
static unsigned char spa_data_1[6] = {
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5,
};
static unsigned char snonce_data_1[32] = {
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
0xc8, 0xc9, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5,
0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd,
0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5,
};
static unsigned char anonce_data_1[32] = {
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
0xe8, 0xe9, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5,
0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd,
0xfe, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05,
};
static unsigned char tk_data_1[] = {
0xb2, 0x36, 0x0c, 0x79, 0xe9, 0x71, 0x0f, 0xdd,
0x58, 0xbe, 0xa9, 0x3d, 0xea, 0xf0, 0x65, 0x99,
};
static unsigned char kck_data_2[] = {
0x37, 0x9f, 0x98, 0x52, 0xd0, 0x19, 0x92, 0x36,
0xb9, 0x4e, 0x40, 0x7c, 0xe4, 0xc0, 0x0e, 0xc8
};
static unsigned char kek_data_2[] = {
0x47, 0xc9, 0xed, 0xc0, 0x1c, 0x2c, 0x6e, 0x5b,
0x49, 0x10, 0xca, 0xdd, 0xfb, 0x3e, 0x51, 0xa7,
};
static unsigned char tk_data_2[] = {
0xb2, 0x36, 0x0c, 0x79, 0xe9, 0x71, 0x0f, 0xdd,
0x58, 0xbe, 0xa9, 0x3d, 0xea, 0xf0, 0x65, 0x99,
0xdb, 0x98, 0x0a, 0xfb, 0xc2, 0x9c, 0x15, 0x28,
0x55, 0x74, 0x0a, 0x6c, 0xe5, 0xae, 0x38, 0x27,
};
static const struct ptk_data ptk_test_1 = {
.pmk = pmk_data_1,
.aa = aa_data_1,
.spa = spa_data_1,
.snonce = snonce_data_1,
.anonce = anonce_data_1,
.cipher = CRYPTO_CIPHER_CCMP,
.tk = tk_data_1,
};
static const struct ptk_data ptk_test_2 = {
.pmk = pmk_data_1,
.aa = aa_data_1,
.spa = spa_data_1,
.snonce = snonce_data_1,
.anonce = anonce_data_1,
.cipher = CRYPTO_CIPHER_TKIP,
.kck = kck_data_2,
.kek = kek_data_2,
.tk = tk_data_2,
};
static void ptk_test(const void *data)
{
const struct ptk_data *test = data;
struct crypto_ptk *ptk;
size_t ptk_len;
bool ret;
ptk_len = sizeof(struct crypto_ptk) +
crypto_cipher_key_len(test->cipher);
ptk = l_malloc(ptk_len);
ret = crypto_derive_pairwise_ptk(test->pmk, test->aa, test->spa,
test->anonce, test->snonce,
ptk, ptk_len);
assert(ret);
if (test->kck)
assert(!memcmp(test->kck, ptk->kck, sizeof(ptk->kck)));
if (test->kek)
assert(!memcmp(test->kek, ptk->kek, sizeof(ptk->kek)));
if (test->tk)
assert(!memcmp(test->tk, ptk->tk,
crypto_cipher_key_len(test->cipher)));
}
int main(int argc, char *argv[])
{
l_test_init(&argc, &argv);
@ -114,5 +228,10 @@ int main(int argc, char *argv[])
l_test_add("/Passphrase Generator/PSK Test Case 3",
psk_test, &psk_test_case_3);
l_test_add("/PTK Derivation/PTK Test Case 1",
ptk_test, &ptk_test_1);
l_test_add("/PTK Derivation/PTK Test Case 2",
ptk_test, &ptk_test_2);
return l_test_run();
}