[PATCH] unit: Make checksum unit tests verify checksum results
by Mat Martineau
The checksum unit tests were reading the digest results from the kernel
twice, and the second read was returning garbage data. Remove the second
read and the associated printing, and instead check the calculated
digest against a known-good value.
---
unit/test-checksum.c | 66 +++++++++++++++++++++++++++-------------------------
1 file changed, 34 insertions(+), 32 deletions(-)
diff --git a/unit/test-checksum.c b/unit/test-checksum.c
index 09d0ced..296395f 100644
--- a/unit/test-checksum.c
+++ b/unit/test-checksum.c
@@ -46,7 +46,8 @@ static void test_md4(const void *data)
{
struct l_checksum *checksum;
unsigned char digest[16];
- char *str;
+ unsigned char *expected;
+ size_t expectlen;
checksum = l_checksum_new(L_CHECKSUM_MD4);
assert(checksum);
@@ -55,10 +56,12 @@ static void test_md4(const void *data)
l_checksum_get_digest(checksum, digest, sizeof(digest));
- str = l_checksum_get_string(checksum);
- l_info("%s", str);
- l_free(str);
+ expected = l_util_from_hexstring("be3de05811bec433af48270014a8df0e",
+ &expectlen);
+ assert(expectlen == sizeof(digest));
+ assert(!memcmp(digest, expected, expectlen));
+ l_free(expected);
l_checksum_free(checksum);
}
@@ -66,7 +69,8 @@ static void test_md5(const void *data)
{
struct l_checksum *checksum;
unsigned char digest[16];
- char *str;
+ unsigned char *expected;
+ size_t expectlen;
checksum = l_checksum_new(L_CHECKSUM_MD5);
assert(checksum);
@@ -75,10 +79,12 @@ static void test_md5(const void *data)
l_checksum_get_digest(checksum, digest, sizeof(digest));
- str = l_checksum_get_string(checksum);
- l_info("%s", str);
- l_free(str);
+ expected = l_util_from_hexstring("407b72260377f77f8e63e13dc09bda2c",
+ &expectlen);
+ assert(expectlen == sizeof(digest));
+ assert(!memcmp(digest, expected, expectlen));
+ l_free(expected);
l_checksum_free(checksum);
}
@@ -86,7 +92,8 @@ static void test_sha1(const void *data)
{
struct l_checksum *checksum;
unsigned char digest[20];
- char *str;
+ unsigned char *expected;
+ size_t expectlen;
checksum = l_checksum_new(L_CHECKSUM_SHA1);
assert(checksum);
@@ -95,10 +102,12 @@ static void test_sha1(const void *data)
l_checksum_get_digest(checksum, digest, sizeof(digest));
- str = l_checksum_get_string(checksum);
- l_info("%s", str);
- l_free(str);
+ expected = l_util_from_hexstring(
+ "8802f1d217906250585b75187b1ebfbb5c6cbcae", &expectlen);
+ assert(expectlen == sizeof(digest));
+ assert(!memcmp(digest, expected, expectlen));
+ l_free(expected);
l_checksum_free(checksum);
}
@@ -106,7 +115,8 @@ static void test_sha256(const void *data)
{
struct l_checksum *checksum;
unsigned char digest[32];
- char *str;
+ unsigned char *expected;
+ size_t expectlen;
checksum = l_checksum_new(L_CHECKSUM_SHA256);
assert(checksum);
@@ -115,10 +125,13 @@ static void test_sha256(const void *data)
l_checksum_get_digest(checksum, digest, sizeof(digest));
- str = l_checksum_get_string(checksum);
- l_info("%s", str);
- l_free(str);
+ expected = l_util_from_hexstring(
+ "df3a0c35d5345d6d792415c1310bd458"
+ "9cdf68bac96ed599d6bb0c1545ffc86c", &expectlen);
+ assert(expectlen == sizeof(digest));
+ assert(!memcmp(digest, expected, expectlen));
+ l_free(expected);
l_checksum_free(checksum);
}
@@ -126,7 +139,6 @@ static void test_reset(const void *data)
{
struct l_checksum *checksum;
unsigned char digest[16];
- char *str;
checksum = l_checksum_new(L_CHECKSUM_MD5);
assert(checksum);
@@ -136,27 +148,21 @@ static void test_reset(const void *data)
l_checksum_update(checksum, FIXED_STR, FIXED_LEN);
l_checksum_get_digest(checksum, digest, sizeof(digest));
- str = l_checksum_get_string(checksum);
- l_info("%s", str);
- l_free(str);
-
l_checksum_free(checksum);
}
static void test_updatev(const void *data)
{
struct l_checksum *checksum;
- unsigned char digest[20];
+ unsigned char digest1[20];
+ unsigned char digest2[20];
struct iovec iov[2];
- char *str;
- char *str2;
checksum = l_checksum_new(L_CHECKSUM_SHA1);
assert(checksum);
l_checksum_update(checksum, FIXED_STR, FIXED_LEN);
- l_checksum_get_digest(checksum, digest, sizeof(digest));
- str = l_checksum_get_string(checksum);
+ l_checksum_get_digest(checksum, digest1, sizeof(digest1));
iov[0].iov_base = FIXED_STR;
iov[0].iov_len = FIXED_LEN / 2;
@@ -165,13 +171,9 @@ static void test_updatev(const void *data)
iov[1].iov_len = FIXED_LEN - FIXED_LEN / 2;
l_checksum_updatev(checksum, iov, 2);
- l_checksum_get_digest(checksum, digest, sizeof(digest));
- str2 = l_checksum_get_string(checksum);
-
- assert(!strcmp(str, str2));
+ l_checksum_get_digest(checksum, digest2, sizeof(digest2));
- l_free(str);
- l_free(str2);
+ assert(!memcmp(digest1, digest2, sizeof(digest1)));
l_checksum_free(checksum);
}
--
2.13.1
5 years
New kernel TLS code
by Mat Martineau
The kernel TLS patches were merged to net-next today, which puts them on
track for v4.13:
https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git/commit...
So far only outgoing encryption is handled in the kernel. The handshake
must still be handled by userspace code. Since ELL's tls implementation
can be used separately from TCP (as iwd does), ELL can't rely on kernel
TLS entirely. However, using kernel TLS for TCP sockets would eliminate
the extra system calls to handle encryption using AF_ALG.
I think it's early to build support in to ELL, but we should keep this on
our radar.
--
Mat Martineau
Intel OTC
5 years
[PATCH] unit: Add DH test case where results have leading zeros
by Mat Martineau
---
unit/test-key.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/unit/test-key.c b/unit/test-key.c
index 067f016..7513b38 100644
--- a/unit/test-key.c
+++ b/unit/test-key.c
@@ -210,6 +210,24 @@ static const struct dh_test_vector dh_valid2 = {
"d6aab69ab7f1992a9164b93aca29a8348a1ef883a3045f00f9b9ce0e05647502",
};
+static const struct dh_test_vector dh_degenerate = {
+ .prime =
+ "dc53dfa73a49a384f603173c93c17a59baa4c18bf0305e587ded5c8c56f6e44c"
+ "645ba8a2eb26c87a9e2be8b28d407eb7a82be004bfbe4ff097ba97b2b4dc980f"
+ "349b75540c71120b49c279be3a610414ae984a781382ded04e64cd26dca3cb4e"
+ "cf8866db23af4c12db308148f281bbe0953165e0fe58fd6c806ace0152190018"
+ "6d0c0b4a3d636bb834bab9218441fb3117814621d5bf4558dfcca4cb8e1e680b"
+ "df525760a2cf79352114cd913c64d1b56836be86b2059aca3d4fc18818dab52c"
+ "f0031bab41b75f2b27519cc39fd557ba88f6765cd380ace9e7f2ceb9077b6b51"
+ "09ce7d4deffb0767717e9a475a5a7ef313daf79dd4026c114df248660de436c7",
+ .generator = "01",
+ .priv1 = "01",
+ .pub1 = "01",
+ .priv2 = "01",
+ .pub2 = "01",
+ .secret = "01",
+};
+
struct testkey {
struct l_key *key;
uint8_t *bytes;
@@ -661,6 +679,7 @@ int main(int argc, char *argv[])
l_test_add("Diffie-Hellman 1", test_dh, &dh_valid1);
l_test_add("Diffie-Hellman 2", test_dh, &dh_valid2);
+ l_test_add("Diffie-Hellman 3", test_dh, &dh_degenerate);
l_test_add("simple keyring", test_simple_keyring, NULL);
l_test_add("trusted keyring", test_trusted_keyring, NULL);
--
2.13.1
5 years