b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews/*
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * Copyright (C) 2014, 2016 Internet Systems Consortium, Inc. ("ISC")
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews *
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * This Source Code Form is subject to the terms of the Mozilla Public
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * License, v. 2.0. If a copy of the MPL was not distributed with this
0c27b3fe77ac1d5094ba3521e8142d9e7973133fMark Andrews * file, You can obtain one at http://mozilla.org/MPL/2.0/.
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews/* $Id$ */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews/* ! \file */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews#include <config.h>
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews#include <atf-c.h>
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews#include <stdio.h>
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews#include <string.h>
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews#include <isc/aes.h>
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews#include <isc/buffer.h>
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews#include <isc/hex.h>
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews#include <isc/platform.h>
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews#include <isc/region.h>
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews#include <isc/string.h>
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews#include <isc/util.h>
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt#ifdef ISC_PLATFORM_WANTAES
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews/*
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews * Test data from NIST KAT
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrewsisc_result_t
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrewstohexstr(unsigned char *d, char *out);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrewssize_t
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrewsfromhexstr(const char *in, unsigned char *d);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrewsunsigned char plaintext[3 * ISC_AES_BLOCK_LENGTH];
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrewsunsigned char ciphertext[ISC_AES_BLOCK_LENGTH];
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrewschar str[2 * ISC_AES_BLOCK_LENGTH + 1];
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrewsunsigned char key[ISC_AES256_KEYLENGTH + 1];
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrewssize_t len;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrewsisc_result_t
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrewstohexstr(unsigned char *d, char *out) {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews isc_buffer_t b;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews isc_region_t r;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews isc_buffer_init(&b, out, 2 * ISC_AES_BLOCK_LENGTH + 1);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews r.base = d;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews r.length = ISC_AES_BLOCK_LENGTH;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews return (isc_hex_totext(&r, 0, "", &b));
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews}
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrewssize_t
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrewsfromhexstr(const char *in, unsigned char *d)
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews{
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews isc_buffer_t b;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews isc_result_t ret;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews isc_buffer_init(&b, d, ISC_AES256_KEYLENGTH + 1);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ret = isc_hex_decodestring(in, &b);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews if (ret != ISC_R_SUCCESS)
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews return 0;
e676a596869d8a80a644c99a848afb53d1c5975eMark Andrews return isc_buffer_usedlength(&b);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews}
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrewstypedef struct aes_testcase {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews const char *key;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews const char *input;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews const char *result;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews} aes_testcase_t;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark AndrewsATF_TC(isc_aes128);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark AndrewsATF_TC_HEAD(isc_aes128, tc) {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews atf_tc_set_md_var(tc, "descr", "AES 128 test vectors");
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews}
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark AndrewsATF_TC_BODY(isc_aes128, tc) {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews UNUSED(tc);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews aes_testcase_t testcases[] = {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 1 (KAT ECBVarTxt128 #3) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "F0000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "96D9FD5CC4F07441727DF0F33E401A36"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 2 (KAT ECBVarTxt128 #123) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "F9B0FDA0C4A898F5B9E6F661C4CE4D07"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 3 (KAT ECBVarKey128 #3) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "F0000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "970014D634E2B7650777E8E84D03CCD8"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 4 (KAT ECBVarKey128 #123) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "41C78C135ED9E98C096640647265DA1E"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 5 (KAT ECBGFSbox128 #3) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "6A118A874519E64E9963798A503F1D35",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "DC43BE40BE0E53712F7E2BF5CA707209"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 6 (KAT ECBKeySbox128 #3) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "B6364AC4E1DE1E285EAF144A2415F7A0",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "5D9B05578FC944B3CF1CCF0E746CD581"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews { NULL, NULL, NULL }
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews };
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews aes_testcase_t *testcase = testcases;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews while (testcase->key != NULL) {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews len = fromhexstr(testcase->key, key);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_CHECK_EQ(len, ISC_AES128_KEYLENGTH);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews len = fromhexstr(testcase->input, plaintext);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_CHECK_EQ(len, ISC_AES_BLOCK_LENGTH);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews isc_aes128_crypt(key, plaintext, ciphertext);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_CHECK(tohexstr(ciphertext, str) == ISC_R_SUCCESS);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_CHECK_STREQ(str, testcase->result);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews testcase++;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews }
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews}
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark AndrewsATF_TC(isc_aes192);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark AndrewsATF_TC_HEAD(isc_aes192, tc) {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews atf_tc_set_md_var(tc, "descr", "AES 192 test vectors");
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews}
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark AndrewsATF_TC_BODY(isc_aes192, tc) {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews UNUSED(tc);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews aes_testcase_t testcases[] = {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 1 (KAT ECBVarTxt192 #3) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "000000000000000000000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "F0000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "2A560364CE529EFC21788779568D5555"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 2 (KAT ECBVarTxt192 #123) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "000000000000000000000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "2AABB999F43693175AF65C6C612C46FB"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 3 (KAT ECBVarKey192 #3) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "F00000000000000000000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "180B09F267C45145DB2F826C2582D35C"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 4 (KAT ECBVarKey192 #187) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "EACF1E6C4224EFB38900B185AB1DFD42"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 5 (KAT ECBGFSbox192 #3) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "000000000000000000000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "51719783D3185A535BD75ADC65071CE1",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "4F354592FF7C8847D2D0870CA9481B7C"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 6 (KAT ECBKeySbox192 #3) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "CD62376D5EBB414917F0C78F05266433DC9192A1EC943300",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "7F6C25FF41858561BB62F36492E93C29"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews { NULL, NULL, NULL }
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews };
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews aes_testcase_t *testcase = testcases;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews while (testcase->key != NULL) {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews len = fromhexstr(testcase->key, key);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_CHECK_EQ(len, ISC_AES192_KEYLENGTH);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews len = fromhexstr(testcase->input, plaintext);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_CHECK_EQ(len, ISC_AES_BLOCK_LENGTH);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews isc_aes192_crypt(key, plaintext, ciphertext);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_CHECK(tohexstr(ciphertext, str) == ISC_R_SUCCESS);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_CHECK_STREQ(str, testcase->result);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews testcase++;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews }
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews}
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark AndrewsATF_TC(isc_aes256);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark AndrewsATF_TC_HEAD(isc_aes256, tc) {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews atf_tc_set_md_var(tc, "descr", "AES 256 test vectors");
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews}
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark AndrewsATF_TC_BODY(isc_aes256, tc) {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews UNUSED(tc);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews aes_testcase_t testcases[] = {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 1 (KAT ECBVarTxt256 #3) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "F0000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "7F2C5ECE07A98D8BEE13C51177395FF7"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 2 (KAT ECBVarTxt256 #123) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "7240E524BC51D8C4D440B1BE55D1062C"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 3 (KAT ECBVarKey256 #3) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "F0000000000000000000000000000000"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "1C777679D50037C79491A94DA76A9A35"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 4 (KAT ECBVarKey256 #251) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "03720371A04962EAEA0A852E69972858"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 5 (KAT ECBGFSbox256 #3) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "8A560769D605868AD80D819BDBA03771",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "38F2C7AE10612415D27CA190D27DA8B4"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews /* Test 6 (KAT ECBKeySbox256 #3) */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "984CA75F4EE8D706F46C2D98C0BF4A45"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "F5B00D791C2DFEB191B5ED8E420FD627",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "00000000000000000000000000000000",
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews "4307456A9E67813B452E15FA8FFFE398"
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews },
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews { NULL, NULL, NULL }
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews };
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews aes_testcase_t *testcase = testcases;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews while (testcase->key != NULL) {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews len = fromhexstr(testcase->key, key);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_CHECK_EQ(len, ISC_AES256_KEYLENGTH);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews len = fromhexstr(testcase->input, plaintext);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_CHECK_EQ(len, ISC_AES_BLOCK_LENGTH);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews isc_aes256_crypt(key, plaintext, ciphertext);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_CHECK(tohexstr(ciphertext, str) == ISC_R_SUCCESS);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_CHECK_STREQ(str, testcase->result);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews testcase++;
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews }
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews}
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews#else
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark AndrewsATF_TC(untested);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark AndrewsATF_TC_HEAD(untested, tc) {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews atf_tc_set_md_var(tc, "descr", "skipping aes test");
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews}
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark AndrewsATF_TC_BODY(untested, tc) {
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews UNUSED(tc);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews atf_tc_skip("AES not available");
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews}
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews#endif
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews/*
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews * Main
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews */
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark AndrewsATF_TP_ADD_TCS(tp) {
98922b2b2b024dcca25be7c220cf3b16b1e6c4b5Evan Hunt#ifdef ISC_PLATFORM_WANTAES
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_TP_ADD_TC(tp, isc_aes128);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_TP_ADD_TC(tp, isc_aes192);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_TP_ADD_TC(tp, isc_aes256);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews#else
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews ATF_TP_ADD_TC(tp, untested);
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews#endif
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews return (atf_no_error());
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews}
b5f6271f4daf1e54501af2cb7dd278d7e8003d65Mark Andrews