shithub: front

ref: e2bfa1a57cd5b9b771fb8a33f6b4bc54165d4be8
dir: /sys/src/libsec/test/sha2.c/

View raw version
#include <u.h>
#include <libc.h>
#include "libsec.h"

struct {
	DigestState*(*x)(uchar*, ulong, uchar*, DigestState*);
	int len;
} funcs[] = {
	{ sha2_224, SHA2_224dlen },
	{ sha2_256, SHA2_256dlen },
	{ sha2_384, SHA2_384dlen },
	{ sha2_512, SHA2_512dlen },
};

struct {
	char *in;
	char *out[4];
} tests[] = {
	{
		"",
		"d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f",
		"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
		"38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b",
		"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e",
	},
	{
		"a",
		"abd37534c7d9a2efb9465de931cd7055ffdb8879563ae98078d6d6d5",
		"ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb",
		"54a59b9f22b0b80880d8427e548b7c23abd873486e1f035dce9cd697e85175033caa88e6d57bc35efae0b5afd3145f31",
		"1f40fc92da241694750979ee6cf582f2d5d7d28e18335de05abc54d0560e0f5302860c652bf08d560252aa5e74210546f369fbbbce8c12cfc7957b2652fe9a75",
	},
	{
		"abc",
		"23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7",
		"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
		"cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7",
		"ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f",
	},
	{
		"message digest",
		"2cb21c83ae2f004de7e81c3c7019cbcb65b71ab656b22d6d0c39b8eb",
		"f7846f55cf23e14eebeab5b4e1550cad5b509e3348fbc4efa3a1413d393cb650",
		"473ed35167ec1f5d8e550368a3db39be54639f828868e9454c239fc8b52e3c61dbd0d8b4de1390c256dcbb5d5fd99cd5",
		"107dbf389d9e9f71a3a95f6c055b9251bc5268c2be16d6c13492ea45b0199f3309e16455ab1e96118e8a905d5597b72038ddb372a89826046de66687bb420e7c",
	},
	{
		"abcdefghijklmnopqrstuvwxyz",
		"45a5f72c39c5cff2522eb3429799e49e5f44b356ef926bcf390dccc2",
		"71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73",
		"feb67349df3db6f5924815d6c3dc133f091809213731fe5c7b5f4999e463479ff2877f5f2936fa63bb43784b12f3ebb4",
		"4dbff86cc2ca1bae1e16468a05cb9881c97f1753bce3619034898faa1aabe429955a1bf8ec483d7421fe3c1646613a59ed5441fb0f321389f77f48a879c7b1f1",
	},
	{
		"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
		"bff72b4fcb7d75e5632900ac5f90d219e05e97a7bde72e740db393d9",
		"db4bfcbd4da0cd85a60c3c37d3fbd8805c77f15fc6b1fdfe614ee0a7c8fdb4c0",
		"1761336e3f7cbfe51deb137f026f89e01a448e3b1fafa64039c1464ee8732f11a5341a6f41e0c202294736ed64db1a84",
		"1e07be23c26a86ea37ea810c8ec7809352515a970e9253c26f536cfc7a9996c45c8370583e0a78fa4a90041d71a4ceab7423f19c71b9d5a3e01249f0bebd5894",
	},
	{
		"12345678901234567890123456789012345678901234567890123456789012345678901234567890",
		"b50aecbe4e9bb0b57bc5f3ae760a8e01db24f203fb3cdcd13148046e",
		"f371bc4a311f2b009eef952dd83ca80e2b60026c8e935592d0f9c308453c813e",
		"b12932b0627d1c060942f5447764155655bd4da0c9afa6dd9b9ef53129af1b8fb0195996d2de9ca0df9d821ffee67026",
		"72ec1ef1124a45b047e8b7c75a932195135bb61de24ec0d1914042246e0aec3a2354e093d76f3048b456764346900cb130d2a4fd5dd16abb5e30bcb850dee843",
	},
	{
		"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
		"75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525",
		"248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1",
		"3391fdddfc8dc7393707a65b1b4709397cf8b1d162af05abfe8f450de5f36bc6b0455a8520bc4e6f5fe95b1fe3c8452b",
		"204a8fc6dda82f0a0ced7beb8e08a41657c16ef468b228a8279be331a703c33596fd15c13b1b07f9aa1d3bea57789ca031ad85c7a71dd70354ec631238ca3445",
	},
	{
		"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
		"c97ca9a559850ce97a04a96def6d99a9e0e0e2ab14e6b8df265fc0b3",
		"cf5b16a778af8380036ce59e7b0492370b249b11e8f07a51afac45037afee9d1",
		"09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039",
		"8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909",
	},
};

void
main(void)
{
	int i, j;
	uchar digest[SHA2_512dlen];
	char buf[1024];

	fmtinstall('H', encodefmt);
	for(i = 0; i < nelem(tests); i++)
	for(j = 0; j < nelem(funcs); j++){
		funcs[j].x((uchar*)tests[i].in, strlen(tests[i].in), digest, 0);
		snprint(buf, sizeof buf, "%.*lH", funcs[j].len, digest);
		if(strcmp(buf, tests[i].out[j]) != 0){
			sysfatal("fail");
		}
	}

	exits(nil);
}