aboutsummaryrefslogblamecommitdiffstats
path: root/test.c
blob: 9977af728e69c49e441905012cd33815bf95fd2a (plain) (tree)
























































































































                                                                                                                                                          
/* See LICENSE file for copyright and license details. */
#include "libsha2.h"

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define test(EXPR)\
	do {\
		if (EXPR)\
			break;\
		fprintf(stderr, "Failure at line %i: %s\n", __LINE__, #EXPR);\
		exit(1);\
	} while (0)

#define test_str(HAVE, EXPECTED)\
	do {\
		if (!strcmp(HAVE, EXPECTED))\
			break;\
		fprintf(stderr, "Failure at line %i: expected \"%s\", got \"%s\"\n", __LINE__, EXPECTED, HAVE);\
		exit(1);\
	} while (0)


int
main(void)
{
	char buf[1024], str[1024];
	struct libsha2_state s;

	libsha2_behex_lower(buf, "", 0);
	test_str(buf, "");

	libsha2_behex_lower(buf, "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF", 16);
	test_str(buf, "00112233445566778899aabbccddeeff");

	libsha2_behex_lower(buf, "\x1E\x5A\xC0", 3);
	test_str(buf, "1e5ac0");

	libsha2_behex_upper(buf, "", 0);
	test_str(buf, "");

	libsha2_behex_upper(buf, "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF", 16);
	test_str(buf, "00112233445566778899AABBCCDDEEFF");

	libsha2_behex_upper(buf, "\x1E\x5A\xC0", 3);
	test_str(buf, "1E5AC0");

	libsha2_unhex(buf, "");
	test(!memcmp(buf, "", 0));

	libsha2_unhex(buf, "00112233445566778899AABBCCDDEEFF");
	test(!memcmp(buf, "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF", 16));

	libsha2_unhex(buf, "1E5AC0");
	test(!memcmp(buf, "\x1E\x5A\xC0", 3));

	libsha2_unhex(buf, "00112233445566778899aabbccddeeff");
	test(!memcmp(buf, "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF", 16));

	libsha2_unhex(buf, "1e5ac0");
	test(!memcmp(buf, "\x1E\x5A\xC0", 3));

	libsha2_unhex(buf, "AAbbCcdD");
	test(!memcmp(buf, "\xAA\xBB\xCC\xDD", 4));

	test(libsha2_algorithm_output_size(LIBSHA2_224) == 28);
	test(libsha2_algorithm_output_size(LIBSHA2_256) == 32);
	test(libsha2_algorithm_output_size(LIBSHA2_384) == 48);
	test(libsha2_algorithm_output_size(LIBSHA2_512) == 64);
	test(libsha2_algorithm_output_size(LIBSHA2_512_224) == 28);
	test(libsha2_algorithm_output_size(LIBSHA2_512_256) == 32);
	test(!errno);
	test(libsha2_algorithm_output_size(~0) == 0); /* should test `errno == EINVAL`, optimising compiler breaks it */

	errno = 0;
	test(libsha2_init(&s, ~0) == -1 && errno == EINVAL);
	errno = 0;

	test(!libsha2_init(&s, LIBSHA2_224));
	test(libsha2_state_output_size(&s) == 28);
	libsha2_digest(&s, "", 0, buf);
	libsha2_behex_lower(str, buf, libsha2_state_output_size(&s));
	test_str(str, "d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f");

	test(!libsha2_init(&s, LIBSHA2_256));
	test(libsha2_state_output_size(&s) == 32);
	libsha2_digest(&s, "", 0, buf);
	libsha2_behex_lower(str, buf, libsha2_state_output_size(&s));
	test_str(str, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");

	test(!libsha2_init(&s, LIBSHA2_384));
	test(libsha2_state_output_size(&s) == 48);
	libsha2_digest(&s, "", 0, buf);
	libsha2_behex_lower(str, buf, libsha2_state_output_size(&s));
	test_str(str, "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b");

	test(!libsha2_init(&s, LIBSHA2_512));
	test(libsha2_state_output_size(&s) == 64);
	libsha2_digest(&s, "", 0, buf);
	libsha2_behex_lower(str, buf, libsha2_state_output_size(&s));
	test_str(str, "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e");

	test(!libsha2_init(&s, LIBSHA2_512_224));
	test(libsha2_state_output_size(&s) == 28);
	libsha2_digest(&s, "", 0, buf);
	libsha2_behex_lower(str, buf, libsha2_state_output_size(&s));
	test_str(str, "6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4");

	test(!libsha2_init(&s, LIBSHA2_512_256));
	test(libsha2_state_output_size(&s) == 32);
	libsha2_digest(&s, "", 0, buf);
	libsha2_behex_lower(str, buf, libsha2_state_output_size(&s));
	test_str(str, "c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a");

	test(!errno);

	return 0;
}