blob: 296395fd2a11eeef39a91cfbd4be3b6b3bb14d4c [file] [log] [blame]
/*
*
* Embedded Linux library
*
* Copyright (C) 2011-2014 Intel Corporation. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <assert.h>
#include <ell/ell.h>
#define FIXED_STR "The quick brown fox jumps over the lazy dog. " \
"Jackdaws love my big sphinx of quartz. " \
"Pack my box with five dozen liquor jugs. " \
"How razorback-jumping frogs can level six piqued gymnasts!"
#define FIXED_LEN (strlen (FIXED_STR))
static void test_unsupported(const void *data)
{
struct l_checksum *checksum;
checksum = l_checksum_new(42);
assert(!checksum);
}
static void test_md4(const void *data)
{
struct l_checksum *checksum;
unsigned char digest[16];
unsigned char *expected;
size_t expectlen;
checksum = l_checksum_new(L_CHECKSUM_MD4);
assert(checksum);
l_checksum_update(checksum, FIXED_STR, FIXED_LEN);
l_checksum_get_digest(checksum, digest, sizeof(digest));
expected = l_util_from_hexstring("be3de05811bec433af48270014a8df0e",
&expectlen);
assert(expectlen == sizeof(digest));
assert(!memcmp(digest, expected, expectlen));
l_free(expected);
l_checksum_free(checksum);
}
static void test_md5(const void *data)
{
struct l_checksum *checksum;
unsigned char digest[16];
unsigned char *expected;
size_t expectlen;
checksum = l_checksum_new(L_CHECKSUM_MD5);
assert(checksum);
l_checksum_update(checksum, FIXED_STR, FIXED_LEN);
l_checksum_get_digest(checksum, digest, sizeof(digest));
expected = l_util_from_hexstring("407b72260377f77f8e63e13dc09bda2c",
&expectlen);
assert(expectlen == sizeof(digest));
assert(!memcmp(digest, expected, expectlen));
l_free(expected);
l_checksum_free(checksum);
}
static void test_sha1(const void *data)
{
struct l_checksum *checksum;
unsigned char digest[20];
unsigned char *expected;
size_t expectlen;
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));
expected = l_util_from_hexstring(
"8802f1d217906250585b75187b1ebfbb5c6cbcae", &expectlen);
assert(expectlen == sizeof(digest));
assert(!memcmp(digest, expected, expectlen));
l_free(expected);
l_checksum_free(checksum);
}
static void test_sha256(const void *data)
{
struct l_checksum *checksum;
unsigned char digest[32];
unsigned char *expected;
size_t expectlen;
checksum = l_checksum_new(L_CHECKSUM_SHA256);
assert(checksum);
l_checksum_update(checksum, FIXED_STR, FIXED_LEN);
l_checksum_get_digest(checksum, digest, sizeof(digest));
expected = l_util_from_hexstring(
"df3a0c35d5345d6d792415c1310bd458"
"9cdf68bac96ed599d6bb0c1545ffc86c", &expectlen);
assert(expectlen == sizeof(digest));
assert(!memcmp(digest, expected, expectlen));
l_free(expected);
l_checksum_free(checksum);
}
static void test_reset(const void *data)
{
struct l_checksum *checksum;
unsigned char digest[16];
checksum = l_checksum_new(L_CHECKSUM_MD5);
assert(checksum);
l_checksum_update(checksum, FIXED_STR, FIXED_LEN);
l_checksum_reset(checksum);
l_checksum_update(checksum, FIXED_STR, FIXED_LEN);
l_checksum_get_digest(checksum, digest, sizeof(digest));
l_checksum_free(checksum);
}
static void test_updatev(const void *data)
{
struct l_checksum *checksum;
unsigned char digest1[20];
unsigned char digest2[20];
struct iovec iov[2];
checksum = l_checksum_new(L_CHECKSUM_SHA1);
assert(checksum);
l_checksum_update(checksum, FIXED_STR, FIXED_LEN);
l_checksum_get_digest(checksum, digest1, sizeof(digest1));
iov[0].iov_base = FIXED_STR;
iov[0].iov_len = FIXED_LEN / 2;
iov[1].iov_base = FIXED_STR + FIXED_LEN / 2;
iov[1].iov_len = FIXED_LEN - FIXED_LEN / 2;
l_checksum_updatev(checksum, iov, 2);
l_checksum_get_digest(checksum, digest2, sizeof(digest2));
assert(!memcmp(digest1, digest2, sizeof(digest1)));
l_checksum_free(checksum);
}
int main(int argc, char *argv[])
{
l_test_init(&argc, &argv);
l_test_add("unsupported", test_unsupported, NULL);
if (l_checksum_is_supported(L_CHECKSUM_MD4, false))
l_test_add("md4-1", test_md4, NULL);
if (l_checksum_is_supported(L_CHECKSUM_MD5, false))
l_test_add("md5-1", test_md5, NULL);
if (l_checksum_is_supported(L_CHECKSUM_SHA1, false)) {
l_test_add("sha1-1", test_sha1, NULL);
l_test_add("checksum reset", test_reset, NULL);
l_test_add("checksum updatev", test_updatev, NULL);
}
if (l_checksum_is_supported(L_CHECKSUM_SHA256, false))
l_test_add("sha256-1", test_sha256, NULL);
return l_test_run();
}