Blame egg/test-hkdf.c

Packit b00eeb
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
Packit b00eeb
/* test-hkdf.c: Test egg-hkdf.c
Packit b00eeb
Packit b00eeb
   Copyright (C) 2011 Collabora Ltd.
Packit b00eeb
Packit b00eeb
   The Gnome Keyring Library is free software; you can redistribute it and/or
Packit b00eeb
   modify it under the terms of the GNU Library General Public License as
Packit b00eeb
   published by the Free Software Foundation; either version 2 of the
Packit b00eeb
   License, or (at your option) any later version.
Packit b00eeb
Packit b00eeb
   The Gnome Keyring Library is distributed in the hope that it will be useful,
Packit b00eeb
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit b00eeb
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit b00eeb
   Library General Public License for more details.
Packit b00eeb
Packit b00eeb
   You should have received a copy of the GNU Library General Public
Packit b00eeb
   License along with the Gnome Library; see the file COPYING.LIB.  If not,
Packit b00eeb
   see <http://www.gnu.org/licenses/>.
Packit b00eeb
Packit b00eeb
   Author: Stef Walter <stef@collabora.co.uk>
Packit b00eeb
*/
Packit b00eeb
Packit b00eeb
#include "config.h"
Packit b00eeb
Packit b00eeb
#include <stdlib.h>
Packit b00eeb
#include <stdio.h>
Packit b00eeb
#include <string.h>
Packit b00eeb
Packit b00eeb
#include "egg/egg-hkdf.h"
Packit b00eeb
#include "egg/egg-secure-memory.h"
Packit b00eeb
#include "egg/egg-testing.h"
Packit b00eeb
Packit b00eeb
#include <gcrypt.h>
Packit b00eeb
Packit b00eeb
/*
Packit b00eeb
	static GStaticMutex memory_mutex = G_STATIC_MUTEX_INIT;
Packit b00eeb
	static void egg_memory_lock (void)
Packit b00eeb
		{ g_static_mutex_lock (&memory_mutex); }
Packit b00eeb
	static void egg_memory_unlock (void)
Packit b00eeb
		{ g_static_mutex_unlock (&memory_mutex); }
Packit b00eeb
	EGG_SECURE_DEFINE_GLOBALS (egg_memory_lock, egg_memory_unlock, g_realloc);
Packit b00eeb
*/
Packit b00eeb
Packit b00eeb
EGG_SECURE_DEFINE_GLIB_GLOBALS ();
Packit b00eeb
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_hkdf_test_case_1 (void)
Packit b00eeb
{
Packit b00eeb
	/* RFC 5869: A.1 Test Case 1 */
Packit b00eeb
	const guchar ikm[] = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
Packit b00eeb
	                       0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
Packit b00eeb
	                       0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b };
Packit b00eeb
	const guchar salt[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
Packit b00eeb
	                        0x08, 0x09, 0x0a, 0x0b, 0x0c };
Packit b00eeb
	const guchar info[] = { 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
Packit b00eeb
	                        0xf8, 0xf9 };
Packit b00eeb
	const guchar okm[] = { 0x3c, 0xb2, 0x5f, 0x25, 0xfa, 0xac, 0xd5, 0x7a,
Packit b00eeb
	                       0x90, 0x43, 0x4f, 0x64, 0xd0, 0x36, 0x2f, 0x2a,
Packit b00eeb
	                       0x2d, 0x2d, 0x0a, 0x90, 0xcf, 0x1a, 0x5a, 0x4c,
Packit b00eeb
	                       0x5d, 0xb0, 0x2d, 0x56, 0xec, 0xc4, 0xc5, 0xbf,
Packit b00eeb
	                       0x34, 0x00, 0x72, 0x08, 0xd5, 0xb8, 0x87, 0x18,
Packit b00eeb
	                       0x58, 0x65 };
Packit b00eeb
	guchar buffer[sizeof (okm)];
Packit b00eeb
	gboolean ret;
Packit b00eeb
Packit b00eeb
	egg_assert_cmpsize (sizeof (ikm), ==, 22);
Packit b00eeb
	egg_assert_cmpsize (sizeof (salt), ==, 13);
Packit b00eeb
	egg_assert_cmpsize (sizeof (info), ==, 10);
Packit b00eeb
	egg_assert_cmpsize (sizeof (okm), ==, 42);
Packit b00eeb
Packit b00eeb
	memset (buffer, 0, sizeof (buffer));
Packit b00eeb
	ret = egg_hkdf_perform ("sha256",
Packit b00eeb
	                        ikm, sizeof (ikm),
Packit b00eeb
	                        salt, sizeof (salt),
Packit b00eeb
	                        info, sizeof (info),
Packit b00eeb
	                        buffer, sizeof (buffer));
Packit b00eeb
	g_assert (ret);
Packit b00eeb
	egg_assert_cmpmem (buffer, sizeof (buffer), ==, okm, sizeof (okm));
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_hkdf_test_case_2 (void)
Packit b00eeb
{
Packit b00eeb
	/* RFC 5869: A.2 Test Case 2 */
Packit b00eeb
	const guchar ikm[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
Packit b00eeb
	                       0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
Packit b00eeb
	                       0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
Packit b00eeb
	                       0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
Packit b00eeb
	                       0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
Packit b00eeb
	                       0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
Packit b00eeb
	                       0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
Packit b00eeb
	                       0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
Packit b00eeb
	                       0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
Packit b00eeb
	                       0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f };
Packit b00eeb
	const guchar salt[] = { 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
Packit b00eeb
	                        0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
Packit b00eeb
	                        0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
Packit b00eeb
	                        0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
Packit b00eeb
	                        0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
Packit b00eeb
	                        0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
Packit b00eeb
	                        0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
Packit b00eeb
	                        0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
Packit b00eeb
	                        0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
Packit b00eeb
	                        0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf };
Packit b00eeb
	const guchar info[] = { 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
Packit b00eeb
	                        0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
Packit b00eeb
	                        0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
Packit b00eeb
	                        0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
Packit b00eeb
	                        0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
Packit b00eeb
	                        0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
Packit b00eeb
	                        0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
Packit b00eeb
	                        0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
Packit b00eeb
	                        0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
Packit b00eeb
	                        0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff };
Packit b00eeb
	const guchar okm[] = { 0xb1, 0x1e, 0x39, 0x8d, 0xc8, 0x03, 0x27, 0xa1,
Packit b00eeb
	                       0xc8, 0xe7, 0xf7, 0x8c, 0x59, 0x6a, 0x49, 0x34,
Packit b00eeb
	                       0x4f, 0x01, 0x2e, 0xda, 0x2d, 0x4e, 0xfa, 0xd8,
Packit b00eeb
	                       0xa0, 0x50, 0xcc, 0x4c, 0x19, 0xaf, 0xa9, 0x7c,
Packit b00eeb
	                       0x59, 0x04, 0x5a, 0x99, 0xca, 0xc7, 0x82, 0x72,
Packit b00eeb
	                       0x71, 0xcb, 0x41, 0xc6, 0x5e, 0x59, 0x0e, 0x09,
Packit b00eeb
	                       0xda, 0x32, 0x75, 0x60, 0x0c, 0x2f, 0x09, 0xb8,
Packit b00eeb
	                       0x36, 0x77, 0x93, 0xa9, 0xac, 0xa3, 0xdb, 0x71,
Packit b00eeb
	                       0xcc, 0x30, 0xc5, 0x81, 0x79, 0xec, 0x3e, 0x87,
Packit b00eeb
	                       0xc1, 0x4c, 0x01, 0xd5, 0xc1, 0xf3, 0x43, 0x4f,
Packit b00eeb
	                       0x1d, 0x87 };
Packit b00eeb
	guchar buffer[sizeof (okm)];
Packit b00eeb
	gboolean ret;
Packit b00eeb
Packit b00eeb
	egg_assert_cmpsize (sizeof (ikm), ==, 80);
Packit b00eeb
	egg_assert_cmpsize (sizeof (salt), ==, 80);
Packit b00eeb
	egg_assert_cmpsize (sizeof (info), ==, 80);
Packit b00eeb
	egg_assert_cmpsize (sizeof (okm), ==, 82);
Packit b00eeb
Packit b00eeb
	memset (buffer, 0, sizeof (buffer));
Packit b00eeb
	ret = egg_hkdf_perform ("sha256",
Packit b00eeb
	                        ikm, sizeof (ikm),
Packit b00eeb
	                        salt, sizeof (salt),
Packit b00eeb
	                        info, sizeof (info),
Packit b00eeb
	                        buffer, sizeof (buffer));
Packit b00eeb
	g_assert (ret);
Packit b00eeb
	egg_assert_cmpmem (buffer, sizeof (buffer), ==, okm, sizeof (okm));
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_hkdf_test_case_3 (void)
Packit b00eeb
{
Packit b00eeb
	/* RFC 5869: A.3 Test Case 3 */
Packit b00eeb
	const guchar ikm[] = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
Packit b00eeb
	                       0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
Packit b00eeb
	                       0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,};
Packit b00eeb
	const guchar salt[] = { };
Packit b00eeb
	const guchar info[] = { };
Packit b00eeb
	const guchar okm[] = { 0x8d, 0xa4, 0xe7, 0x75, 0xa5, 0x63, 0xc1, 0x8f,
Packit b00eeb
	                       0x71, 0x5f, 0x80, 0x2a, 0x06, 0x3c, 0x5a, 0x31,
Packit b00eeb
	                       0xb8, 0xa1, 0x1f, 0x5c, 0x5e, 0xe1, 0x87, 0x9e,
Packit b00eeb
	                       0xc3, 0x45, 0x4e, 0x5f, 0x3c, 0x73, 0x8d, 0x2d,
Packit b00eeb
	                       0x9d, 0x20, 0x13, 0x95, 0xfa, 0xa4, 0xb6, 0x1a,
Packit b00eeb
	                       0x96, 0xc8 };
Packit b00eeb
	guchar buffer[sizeof (okm)];
Packit b00eeb
	gboolean ret;
Packit b00eeb
Packit b00eeb
	egg_assert_cmpsize (sizeof (ikm), ==, 22);
Packit b00eeb
	egg_assert_cmpsize (sizeof (salt), ==, 0);
Packit b00eeb
	egg_assert_cmpsize (sizeof (info), ==, 0);
Packit b00eeb
	egg_assert_cmpsize (sizeof (okm), ==, 42);
Packit b00eeb
Packit b00eeb
	memset (buffer, 0, sizeof (buffer));
Packit b00eeb
	ret = egg_hkdf_perform ("sha256",
Packit b00eeb
	                        ikm, sizeof (ikm),
Packit b00eeb
	                        salt, sizeof (salt),
Packit b00eeb
	                        info, sizeof (info),
Packit b00eeb
	                        buffer, sizeof (buffer));
Packit b00eeb
	g_assert (ret);
Packit b00eeb
	egg_assert_cmpmem (buffer, sizeof (buffer), ==, okm, sizeof (okm));
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_hkdf_test_case_4 (void)
Packit b00eeb
{
Packit b00eeb
	/* RFC 5869: A.4 Test Case 4 */
Packit b00eeb
	const guchar ikm[] = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
Packit b00eeb
	                       0x0b, 0x0b, 0x0b };
Packit b00eeb
	const guchar salt[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
Packit b00eeb
	                        0x08, 0x09, 0x0a, 0x0b, 0x0c };
Packit b00eeb
	const guchar info[] = { 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
Packit b00eeb
	                        0xf8, 0xf9 };
Packit b00eeb
	const guchar okm[] = { 0x08, 0x5a, 0x01, 0xea, 0x1b, 0x10, 0xf3, 0x69,
Packit b00eeb
	                       0x33, 0x06, 0x8b, 0x56, 0xef, 0xa5, 0xad, 0x81,
Packit b00eeb
	                       0xa4, 0xf1, 0x4b, 0x82, 0x2f, 0x5b, 0x09, 0x15,
Packit b00eeb
	                       0x68, 0xa9, 0xcd, 0xd4, 0xf1, 0x55, 0xfd, 0xa2,
Packit b00eeb
	                       0xc2, 0x2e, 0x42, 0x24, 0x78, 0xd3, 0x05, 0xf3,
Packit b00eeb
	                       0xf8, 0x96 };
Packit b00eeb
	guchar buffer[sizeof (okm)];
Packit b00eeb
	gboolean ret;
Packit b00eeb
Packit b00eeb
	egg_assert_cmpsize (sizeof (ikm), ==, 11);
Packit b00eeb
	egg_assert_cmpsize (sizeof (salt), ==, 13);
Packit b00eeb
	egg_assert_cmpsize (sizeof (info), ==, 10);
Packit b00eeb
	egg_assert_cmpsize (sizeof (okm), ==, 42);
Packit b00eeb
Packit b00eeb
	memset (buffer, 0, sizeof (buffer));
Packit b00eeb
	ret = egg_hkdf_perform ("sha1",
Packit b00eeb
	                        ikm, sizeof (ikm),
Packit b00eeb
	                        salt, sizeof (salt),
Packit b00eeb
	                        info, sizeof (info),
Packit b00eeb
	                        buffer, sizeof (buffer));
Packit b00eeb
	g_assert (ret);
Packit b00eeb
	egg_assert_cmpmem (buffer, sizeof (buffer), ==, okm, sizeof (okm));
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_hkdf_test_case_5 (void)
Packit b00eeb
{
Packit b00eeb
	/* RFC 5869: A.5 Test Case 5 */
Packit b00eeb
	const guchar ikm[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
Packit b00eeb
	                       0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
Packit b00eeb
	                       0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
Packit b00eeb
	                       0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
Packit b00eeb
	                       0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
Packit b00eeb
	                       0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
Packit b00eeb
	                       0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
Packit b00eeb
	                       0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
Packit b00eeb
	                       0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
Packit b00eeb
	                       0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f };
Packit b00eeb
	const guchar salt[] = { 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
Packit b00eeb
	                        0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
Packit b00eeb
	                        0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
Packit b00eeb
	                        0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
Packit b00eeb
	                        0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
Packit b00eeb
	                        0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
Packit b00eeb
	                        0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
Packit b00eeb
	                        0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
Packit b00eeb
	                        0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
Packit b00eeb
	                        0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf };
Packit b00eeb
	const guchar info[] = { 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
Packit b00eeb
	                        0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
Packit b00eeb
	                        0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
Packit b00eeb
	                        0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
Packit b00eeb
	                        0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
Packit b00eeb
	                        0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
Packit b00eeb
	                        0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
Packit b00eeb
	                        0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
Packit b00eeb
	                        0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
Packit b00eeb
	                        0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff };
Packit b00eeb
	const guchar okm[] = { 0x0b, 0xd7, 0x70, 0xa7, 0x4d, 0x11, 0x60, 0xf7,
Packit b00eeb
	                       0xc9, 0xf1, 0x2c, 0xd5, 0x91, 0x2a, 0x06, 0xeb,
Packit b00eeb
	                       0xff, 0x6a, 0xdc, 0xae, 0x89, 0x9d, 0x92, 0x19,
Packit b00eeb
	                       0x1f, 0xe4, 0x30, 0x56, 0x73, 0xba, 0x2f, 0xfe,
Packit b00eeb
	                       0x8f, 0xa3, 0xf1, 0xa4, 0xe5, 0xad, 0x79, 0xf3,
Packit b00eeb
	                       0xf3, 0x34, 0xb3, 0xb2, 0x02, 0xb2, 0x17, 0x3c,
Packit b00eeb
	                       0x48, 0x6e, 0xa3, 0x7c, 0xe3, 0xd3, 0x97, 0xed,
Packit b00eeb
	                       0x03, 0x4c, 0x7f, 0x9d, 0xfe, 0xb1, 0x5c, 0x5e,
Packit b00eeb
	                       0x92, 0x73, 0x36, 0xd0, 0x44, 0x1f, 0x4c, 0x43,
Packit b00eeb
	                       0x00, 0xe2, 0xcf, 0xf0, 0xd0, 0x90, 0x0b, 0x52,
Packit b00eeb
	                       0xd3, 0xb4 };
Packit b00eeb
	guchar buffer[sizeof (okm)];
Packit b00eeb
	gboolean ret;
Packit b00eeb
Packit b00eeb
	egg_assert_cmpsize (sizeof (ikm), ==, 80);
Packit b00eeb
	egg_assert_cmpsize (sizeof (salt), ==, 80);
Packit b00eeb
	egg_assert_cmpsize (sizeof (info), ==, 80);
Packit b00eeb
	egg_assert_cmpsize (sizeof (okm), ==, 82);
Packit b00eeb
Packit b00eeb
	memset (buffer, 0, sizeof (buffer));
Packit b00eeb
	ret = egg_hkdf_perform ("sha1",
Packit b00eeb
	                        ikm, sizeof (ikm),
Packit b00eeb
	                        salt, sizeof (salt),
Packit b00eeb
	                        info, sizeof (info),
Packit b00eeb
	                        buffer, sizeof (buffer));
Packit b00eeb
	g_assert (ret);
Packit b00eeb
	egg_assert_cmpmem (buffer, sizeof (buffer), ==, okm, sizeof (okm));
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_hkdf_test_case_6 (void)
Packit b00eeb
{
Packit b00eeb
	/* RFC 5869: A.6 Test Case 6 */
Packit b00eeb
	const guchar ikm[] = { 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
Packit b00eeb
	                       0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
Packit b00eeb
	                       0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b };
Packit b00eeb
	const guchar salt[] = { };
Packit b00eeb
	const guchar info[] = { };
Packit b00eeb
	const guchar okm[] = { 0x0a, 0xc1, 0xaf, 0x70, 0x02, 0xb3, 0xd7, 0x61,
Packit b00eeb
	                       0xd1, 0xe5, 0x52, 0x98, 0xda, 0x9d, 0x05, 0x06,
Packit b00eeb
	                       0xb9, 0xae, 0x52, 0x05, 0x72, 0x20, 0xa3, 0x06,
Packit b00eeb
	                       0xe0, 0x7b, 0x6b, 0x87, 0xe8, 0xdf, 0x21, 0xd0,
Packit b00eeb
	                       0xea, 0x00, 0x03, 0x3d, 0xe0, 0x39, 0x84, 0xd3,
Packit b00eeb
	                       0x49, 0x18 };
Packit b00eeb
	guchar buffer[sizeof (okm)];
Packit b00eeb
	gboolean ret;
Packit b00eeb
Packit b00eeb
	egg_assert_cmpsize (sizeof (ikm), ==, 22);
Packit b00eeb
	egg_assert_cmpsize (sizeof (salt), ==, 0);
Packit b00eeb
	egg_assert_cmpsize (sizeof (info), ==, 0);
Packit b00eeb
	egg_assert_cmpsize (sizeof (okm), ==, 42);
Packit b00eeb
Packit b00eeb
	memset (buffer, 0, sizeof (buffer));
Packit b00eeb
	ret = egg_hkdf_perform ("sha1",
Packit b00eeb
	                        ikm, sizeof (ikm),
Packit b00eeb
	                        salt, sizeof (salt),
Packit b00eeb
	                        info, sizeof (info),
Packit b00eeb
	                        buffer, sizeof (buffer));
Packit b00eeb
	g_assert (ret);
Packit b00eeb
	egg_assert_cmpmem (buffer, sizeof (buffer), ==, okm, sizeof (okm));
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_hkdf_test_case_7 (void)
Packit b00eeb
{
Packit b00eeb
	/* RFC 5869: A.7 Test Case 7 */
Packit b00eeb
	const guchar ikm[] = { 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
Packit b00eeb
	                       0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
Packit b00eeb
	                       0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c };
Packit b00eeb
	const guchar *salt = NULL;
Packit b00eeb
	const guchar info[] = { };
Packit b00eeb
	const guchar okm[] = { 0x2c, 0x91, 0x11, 0x72, 0x04, 0xd7, 0x45, 0xf3,
Packit b00eeb
	                       0x50, 0x0d, 0x63, 0x6a, 0x62, 0xf6, 0x4f, 0x0a,
Packit b00eeb
	                       0xb3, 0xba, 0xe5, 0x48, 0xaa, 0x53, 0xd4, 0x23,
Packit b00eeb
	                       0xb0, 0xd1, 0xf2, 0x7e, 0xbb, 0xa6, 0xf5, 0xe5,
Packit b00eeb
	                       0x67, 0x3a, 0x08, 0x1d, 0x70, 0xcc, 0xe7, 0xac,
Packit b00eeb
	                       0xfc, 0x48 };
Packit b00eeb
	guchar buffer[sizeof (okm)];
Packit b00eeb
	gboolean ret;
Packit b00eeb
Packit b00eeb
	egg_assert_cmpsize (sizeof (ikm), ==, 22);
Packit b00eeb
	egg_assert_cmpsize (sizeof (info), ==, 0);
Packit b00eeb
	egg_assert_cmpsize (sizeof (okm), ==, 42);
Packit b00eeb
Packit b00eeb
	memset (buffer, 0, sizeof (buffer));
Packit b00eeb
	ret = egg_hkdf_perform ("sha1",
Packit b00eeb
	                        ikm, sizeof (ikm),
Packit b00eeb
	                        salt, sizeof (salt),
Packit b00eeb
	                        info, sizeof (info),
Packit b00eeb
	                        buffer, sizeof (buffer));
Packit b00eeb
	g_assert (ret);
Packit b00eeb
	egg_assert_cmpmem (buffer, sizeof (buffer), ==, okm, sizeof (okm));
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
int
Packit b00eeb
main (int argc, char **argv)
Packit b00eeb
{
Packit b00eeb
	g_test_init (&argc, &argv, NULL);
Packit b00eeb
Packit b00eeb
	g_test_add_func ("/hkdf/test-case-1", test_hkdf_test_case_1);
Packit b00eeb
	g_test_add_func ("/hkdf/test-case-2", test_hkdf_test_case_2);
Packit b00eeb
	g_test_add_func ("/hkdf/test-case-3", test_hkdf_test_case_3);
Packit b00eeb
	g_test_add_func ("/hkdf/test-case-4", test_hkdf_test_case_4);
Packit b00eeb
	g_test_add_func ("/hkdf/test-case-5", test_hkdf_test_case_5);
Packit b00eeb
	g_test_add_func ("/hkdf/test-case-6", test_hkdf_test_case_6);
Packit b00eeb
	g_test_add_func ("/hkdf/test-case-7", test_hkdf_test_case_7);
Packit b00eeb
Packit b00eeb
	return g_test_run ();
Packit b00eeb
}