mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
HKDF-SHA256 test vectors from RFC5869
This commit is contained in:
parent
5845c22822
commit
df3a5e0cad
@ -1624,12 +1624,98 @@ test_crypto_hkdf_sha256(void *arg)
|
||||
"b206fa34e5bc78d063fc291501beec53b36e5a0e434561200c"
|
||||
"5f8bd13e0f88b3459600b4dc21d69363e2895321c06184879d"
|
||||
"94b18f078411be70b767c7fc40679a9440a0c95ea83a23efbf");
|
||||
|
||||
done:
|
||||
tor_free(mem_op_hex_tmp);
|
||||
#undef EXPAND
|
||||
}
|
||||
|
||||
static void
|
||||
test_crypto_hkdf_sha256_testvecs(void *arg)
|
||||
{
|
||||
(void) arg;
|
||||
/* Test vectors from RFC5869, sections A.1 through A.3 */
|
||||
const struct {
|
||||
const char *ikm16, *salt16, *info16;
|
||||
int L;
|
||||
const char *okm16;
|
||||
} vecs[] = {
|
||||
{ /* from A.1 */
|
||||
"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
|
||||
"000102030405060708090a0b0c",
|
||||
"f0f1f2f3f4f5f6f7f8f9",
|
||||
42,
|
||||
"3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf"
|
||||
"34007208d5b887185865"
|
||||
},
|
||||
{ /* from A.2 */
|
||||
"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f"
|
||||
"202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f"
|
||||
"404142434445464748494a4b4c4d4e4f",
|
||||
"606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f"
|
||||
"808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f"
|
||||
"a0a1a2a3a4a5a6a7a8a9aaabacadaeaf",
|
||||
"b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf"
|
||||
"d0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef"
|
||||
"f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
|
||||
82,
|
||||
"b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c"
|
||||
"59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71"
|
||||
"cc30c58179ec3e87c14c01d5c1f3434f1d87"
|
||||
},
|
||||
{ /* from A.3 */
|
||||
"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
|
||||
"",
|
||||
"",
|
||||
42,
|
||||
"8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d"
|
||||
"9d201395faa4b61a96c8",
|
||||
},
|
||||
{ NULL, NULL, NULL, -1, NULL }
|
||||
};
|
||||
|
||||
int i;
|
||||
char *ikm = NULL;
|
||||
char *salt = NULL;
|
||||
char *info = NULL;
|
||||
char *okm = NULL;
|
||||
char *mem_op_hex_tmp = NULL;
|
||||
|
||||
for (i = 0; vecs[i].ikm16; ++i) {
|
||||
size_t ikm_len = strlen(vecs[i].ikm16)/2;
|
||||
size_t salt_len = strlen(vecs[i].salt16)/2;
|
||||
size_t info_len = strlen(vecs[i].info16)/2;
|
||||
size_t okm_len = vecs[i].L;
|
||||
|
||||
ikm = tor_malloc(ikm_len);
|
||||
salt = tor_malloc(salt_len);
|
||||
info = tor_malloc(info_len);
|
||||
okm = tor_malloc(okm_len);
|
||||
|
||||
base16_decode(ikm, ikm_len, vecs[i].ikm16, strlen(vecs[i].ikm16));
|
||||
base16_decode(salt, salt_len, vecs[i].salt16, strlen(vecs[i].salt16));
|
||||
base16_decode(info, info_len, vecs[i].info16, strlen(vecs[i].info16));
|
||||
|
||||
int r = crypto_expand_key_material_rfc5869_sha256(
|
||||
(const uint8_t*)ikm, ikm_len,
|
||||
(const uint8_t*)salt, salt_len,
|
||||
(const uint8_t*)info, info_len,
|
||||
(uint8_t*)okm, okm_len);
|
||||
tt_int_op(r, OP_EQ, 0);
|
||||
test_memeq_hex(okm, vecs[i].okm16);
|
||||
tor_free(ikm);
|
||||
tor_free(salt);
|
||||
tor_free(info);
|
||||
tor_free(okm);
|
||||
}
|
||||
done:
|
||||
tor_free(ikm);
|
||||
tor_free(salt);
|
||||
tor_free(info);
|
||||
tor_free(okm);
|
||||
tor_free(mem_op_hex_tmp);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
test_crypto_curve25519_impl(void *arg)
|
||||
{
|
||||
@ -2636,6 +2722,7 @@ struct testcase_t crypto_tests[] = {
|
||||
CRYPTO_LEGACY(base32_decode),
|
||||
{ "kdf_TAP", test_crypto_kdf_TAP, 0, NULL, NULL },
|
||||
{ "hkdf_sha256", test_crypto_hkdf_sha256, 0, NULL, NULL },
|
||||
{ "hkdf_sha256_testvecs", test_crypto_hkdf_sha256_testvecs, 0, NULL, NULL },
|
||||
{ "curve25519_impl", test_crypto_curve25519_impl, 0, NULL, NULL },
|
||||
{ "curve25519_impl_hibit", test_crypto_curve25519_impl, 0, NULL, (void*)"y"},
|
||||
{ "curve25516_testvec", test_crypto_curve25519_testvec, 0, NULL, NULL },
|
||||
|
Loading…
Reference in New Issue
Block a user