Skip to content

Commit fcbad14

Browse files
committed
SUNRPC: Add KDF-HMAC-SHA2 Kunit tests
RFC 8009 provides sample key derivation results, so Kunit tests are added to ensure our implementation derives the expected keys for the provided sample input. Tested-by: Scott Mayhew <[email protected]> Reviewed-by: Simo Sorce <[email protected]> Signed-off-by: Chuck Lever <[email protected]>
1 parent b958cff commit fcbad14

File tree

2 files changed

+115
-1
lines changed

2 files changed

+115
-1
lines changed

net/sunrpc/.kunitconfig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ CONFIG_CRYPTO_HMAC=y
1414
CONFIG_CRYPTO_CMAC=y
1515
CONFIG_CRYPTO_MD5=y
1616
CONFIG_CRYPTO_SHA1=y
17+
CONFIG_CRYPTO_SHA256=y
18+
CONFIG_CRYPTO_SHA512=y
1719
CONFIG_CRYPTO_DES=y
1820
CONFIG_CRYPTO_AES=y
1921
CONFIG_CRYPTO_CAMELLIA=y
@@ -24,4 +26,5 @@ CONFIG_RPCSEC_GSS_KRB5=y
2426
CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_DES=y
2527
CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_AES_SHA1=y
2628
CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_CAMELLIA=y
29+
CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_AES_SHA2=y
2730
CONFIG_RPCSEC_GSS_KRB5_KUNIT_TEST=y

net/sunrpc/auth_gss/gss_krb5_test.c

Lines changed: 112 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1417,9 +1417,120 @@ static struct kunit_suite rfc6803_suite = {
14171417
.test_cases = rfc6803_test_cases,
14181418
};
14191419

1420+
/*
1421+
* From RFC 8009 Appendix A. Test Vectors
1422+
*
1423+
* Sample results for SHA-2 enctype key derivation
1424+
*
1425+
* This test material is copyright (c) 2016 IETF Trust and the
1426+
* persons identified as the document authors. All rights reserved.
1427+
*/
1428+
1429+
DEFINE_HEX_XDR_NETOBJ(aes128_cts_hmac_sha256_128_basekey,
1430+
0x37, 0x05, 0xd9, 0x60, 0x80, 0xc1, 0x77, 0x28,
1431+
0xa0, 0xe8, 0x00, 0xea, 0xb6, 0xe0, 0xd2, 0x3c
1432+
);
1433+
DEFINE_HEX_XDR_NETOBJ(aes128_cts_hmac_sha256_128_Kc,
1434+
0xb3, 0x1a, 0x01, 0x8a, 0x48, 0xf5, 0x47, 0x76,
1435+
0xf4, 0x03, 0xe9, 0xa3, 0x96, 0x32, 0x5d, 0xc3
1436+
);
1437+
DEFINE_HEX_XDR_NETOBJ(aes128_cts_hmac_sha256_128_Ke,
1438+
0x9b, 0x19, 0x7d, 0xd1, 0xe8, 0xc5, 0x60, 0x9d,
1439+
0x6e, 0x67, 0xc3, 0xe3, 0x7c, 0x62, 0xc7, 0x2e
1440+
);
1441+
DEFINE_HEX_XDR_NETOBJ(aes128_cts_hmac_sha256_128_Ki,
1442+
0x9f, 0xda, 0x0e, 0x56, 0xab, 0x2d, 0x85, 0xe1,
1443+
0x56, 0x9a, 0x68, 0x86, 0x96, 0xc2, 0x6a, 0x6c
1444+
);
1445+
1446+
DEFINE_HEX_XDR_NETOBJ(aes256_cts_hmac_sha384_192_basekey,
1447+
0x6d, 0x40, 0x4d, 0x37, 0xfa, 0xf7, 0x9f, 0x9d,
1448+
0xf0, 0xd3, 0x35, 0x68, 0xd3, 0x20, 0x66, 0x98,
1449+
0x00, 0xeb, 0x48, 0x36, 0x47, 0x2e, 0xa8, 0xa0,
1450+
0x26, 0xd1, 0x6b, 0x71, 0x82, 0x46, 0x0c, 0x52
1451+
);
1452+
DEFINE_HEX_XDR_NETOBJ(aes256_cts_hmac_sha384_192_Kc,
1453+
0xef, 0x57, 0x18, 0xbe, 0x86, 0xcc, 0x84, 0x96,
1454+
0x3d, 0x8b, 0xbb, 0x50, 0x31, 0xe9, 0xf5, 0xc4,
1455+
0xba, 0x41, 0xf2, 0x8f, 0xaf, 0x69, 0xe7, 0x3d
1456+
);
1457+
DEFINE_HEX_XDR_NETOBJ(aes256_cts_hmac_sha384_192_Ke,
1458+
0x56, 0xab, 0x22, 0xbe, 0xe6, 0x3d, 0x82, 0xd7,
1459+
0xbc, 0x52, 0x27, 0xf6, 0x77, 0x3f, 0x8e, 0xa7,
1460+
0xa5, 0xeb, 0x1c, 0x82, 0x51, 0x60, 0xc3, 0x83,
1461+
0x12, 0x98, 0x0c, 0x44, 0x2e, 0x5c, 0x7e, 0x49
1462+
);
1463+
DEFINE_HEX_XDR_NETOBJ(aes256_cts_hmac_sha384_192_Ki,
1464+
0x69, 0xb1, 0x65, 0x14, 0xe3, 0xcd, 0x8e, 0x56,
1465+
0xb8, 0x20, 0x10, 0xd5, 0xc7, 0x30, 0x12, 0xb6,
1466+
0x22, 0xc4, 0xd0, 0x0f, 0xfc, 0x23, 0xed, 0x1f
1467+
);
1468+
1469+
static const struct gss_krb5_test_param rfc8009_kdf_test_params[] = {
1470+
{
1471+
.desc = "Derive Kc subkey for aes128-cts-hmac-sha256-128",
1472+
.enctype = ENCTYPE_AES128_CTS_HMAC_SHA256_128,
1473+
.base_key = &aes128_cts_hmac_sha256_128_basekey,
1474+
.usage = &usage_checksum,
1475+
.expected_result = &aes128_cts_hmac_sha256_128_Kc,
1476+
},
1477+
{
1478+
.desc = "Derive Ke subkey for aes128-cts-hmac-sha256-128",
1479+
.enctype = ENCTYPE_AES128_CTS_HMAC_SHA256_128,
1480+
.base_key = &aes128_cts_hmac_sha256_128_basekey,
1481+
.usage = &usage_encryption,
1482+
.expected_result = &aes128_cts_hmac_sha256_128_Ke,
1483+
},
1484+
{
1485+
.desc = "Derive Ki subkey for aes128-cts-hmac-sha256-128",
1486+
.enctype = ENCTYPE_AES128_CTS_HMAC_SHA256_128,
1487+
.base_key = &aes128_cts_hmac_sha256_128_basekey,
1488+
.usage = &usage_integrity,
1489+
.expected_result = &aes128_cts_hmac_sha256_128_Ki,
1490+
},
1491+
{
1492+
.desc = "Derive Kc subkey for aes256-cts-hmac-sha384-192",
1493+
.enctype = ENCTYPE_AES256_CTS_HMAC_SHA384_192,
1494+
.base_key = &aes256_cts_hmac_sha384_192_basekey,
1495+
.usage = &usage_checksum,
1496+
.expected_result = &aes256_cts_hmac_sha384_192_Kc,
1497+
},
1498+
{
1499+
.desc = "Derive Ke subkey for aes256-cts-hmac-sha384-192",
1500+
.enctype = ENCTYPE_AES256_CTS_HMAC_SHA384_192,
1501+
.base_key = &aes256_cts_hmac_sha384_192_basekey,
1502+
.usage = &usage_encryption,
1503+
.expected_result = &aes256_cts_hmac_sha384_192_Ke,
1504+
},
1505+
{
1506+
.desc = "Derive Ki subkey for aes256-cts-hmac-sha384-192",
1507+
.enctype = ENCTYPE_AES256_CTS_HMAC_SHA384_192,
1508+
.base_key = &aes256_cts_hmac_sha384_192_basekey,
1509+
.usage = &usage_integrity,
1510+
.expected_result = &aes256_cts_hmac_sha384_192_Ki,
1511+
},
1512+
};
1513+
1514+
/* Creates the function rfc8009_kdf_gen_params */
1515+
KUNIT_ARRAY_PARAM(rfc8009_kdf, rfc8009_kdf_test_params, gss_krb5_get_desc);
1516+
1517+
static struct kunit_case rfc8009_test_cases[] = {
1518+
{
1519+
.name = "RFC 8009 key derivation",
1520+
.run_case = kdf_case,
1521+
.generate_params = rfc8009_kdf_gen_params,
1522+
},
1523+
};
1524+
1525+
static struct kunit_suite rfc8009_suite = {
1526+
.name = "RFC 8009 suite",
1527+
.test_cases = rfc8009_test_cases,
1528+
};
1529+
14201530
kunit_test_suites(&rfc3961_suite,
14211531
&rfc3962_suite,
1422-
&rfc6803_suite);
1532+
&rfc6803_suite,
1533+
&rfc8009_suite);
14231534

14241535
MODULE_DESCRIPTION("Test RPCSEC GSS Kerberos 5 functions");
14251536
MODULE_LICENSE("GPL");

0 commit comments

Comments
 (0)