/* fips/rand/fips_drbg_selftest.c */
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
* project.
*/
/* ====================================================================
* Copyright (c) 2011 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* licensing@OpenSSL.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*/
#define OPENSSL_FIPSAPI
#include <string.h>
#include <openssl/crypto.h>
#include <openssl/evp.h>
#include <openssl/aes.h>
#include <openssl/err.h>
#include <openssl/fips_rand.h>
#include "fips_rand_lcl.h"
typedef struct {
int nid;
unsigned int flags;
const unsigned char *ent;
size_t entlen;
const unsigned char *nonce;
size_t noncelen;
const unsigned char *pers;
size_t perslen;
const unsigned char *adin;
size_t adinlen;
const unsigned char *entpr;
size_t entprlen;
const unsigned char *ading;
size_t adinglen;
const unsigned char *entg;
size_t entglen;
const unsigned char *kat;
size_t katlen;
} DRBG_SELFTEST_DATA;
#define make_drbg_test_data(nid, flag, pr) { nid, flag, \
pr##_entropyinput, sizeof(pr##_entropyinput), \
pr##_nonce, sizeof(pr##_nonce), \
pr##_personalizationstring, sizeof(pr##_personalizationstring), \
pr##_additionalinput, sizeof(pr##_additionalinput), \
pr##_entropyinputpr, sizeof(pr##_entropyinputpr), \
pr##_additionalinput2, sizeof(pr##_additionalinput2), \
pr##_entropyinputpr2, sizeof(pr##_entropyinputpr2), \
pr##_returnedbits, sizeof(pr##_returnedbits), \
}
#define make_drbg_test_data_df(nid, pr) \
make_drbg_test_data(nid, DRBG_FLAG_CTR_USE_DF, pr)
/* AES-128 use df PR */
static const unsigned char aes_128_use_df_entropyinput[] =
{
0x98,0x38,0x99,0x81,0x1d,0x56,0x1a,0x04,0xb0,0x50,0xcd,0x14,
0xc3,0x90,0x0b,0x4f
};
static const unsigned char aes_128_use_df_nonce[] =
{
0xa8,0xa0,0x80,0x8a,0x65,0xb7,0x38,0x22
};
static const unsigned char aes_128_use_df_personalizationstring[] =
{
0x67,0x4f,0x85,0x01,0x15,0x51,0x85,0xdd,0x97,0xda,0xf7,0x09,
0xbc,0x61,0xaf,0x23
};
static const unsigned char aes_128_use_df_additionalinput[] =
{
0x01,0xba,0xa8,0x13,0x9e,0xd4,0xb7,0xff,0x86,0x34,0x01,0xa0,
0xb6,0x17,0x96,0x55
};
static const unsigned char aes_128_use_df_entropyinputpr[] =
{
0x60,0x76,0xf6,0x12,0x6b,0x92,0xbe,0xd7,0x75,0x6e,0x78,0x1f,
0x0d,0xc1,0x0d,0x56
};
static const unsigned char aes_128_use_df_additionalinput2[] =
{
0xf0,0xd6,0x5b,0xa3,0x7c,0x1e,0xa3,0x65,0x08,0xf9,0xdd,0x90,
0xde,0x5f,0xb4,0x27
};
static const unsigned char aes_128_use_df_entropyinputpr2[] =
{
0x34,0x55,0x02,0xa9,0x30,0xf0,0x78,0x0a,0xa2,0xae,0x74,0x46,
0xe5,0xad,0xbb,0xd6
};
static const unsigned char aes_128_use_df_returnedbits[] =
{
0x48,0x52,0xb6,0x9f,0xf2,0xfe,0xe1,0x12,0xaf,0x22,0x87,0xd7,
0x46,0x64,0x96,0xec
};
/* AES-192 use df PR */
static const unsigned char aes_192_use_df_entropyinput[] =
{
0x12,0xf6,0xff,0xc5,0x81,0x8c,