Blame crypto/fips/fips_aes_selftest.c

Packit Service 084de1
/* ====================================================================
Packit Service 084de1
 * Copyright (c) 2003 The OpenSSL Project.  All rights reserved.
Packit Service 084de1
 *
Packit Service 084de1
 * Redistribution and use in source and binary forms, with or without
Packit Service 084de1
 * modification, are permitted provided that the following conditions
Packit Service 084de1
 * are met:
Packit Service 084de1
 *
Packit Service 084de1
 * 1. Redistributions of source code must retain the above copyright
Packit Service 084de1
 *    notice, this list of conditions and the following disclaimer. 
Packit Service 084de1
 *
Packit Service 084de1
 * 2. Redistributions in binary form must reproduce the above copyright
Packit Service 084de1
 *    notice, this list of conditions and the following disclaimer in
Packit Service 084de1
 *    the documentation and/or other materials provided with the
Packit Service 084de1
 *    distribution.
Packit Service 084de1
 *
Packit Service 084de1
 * 3. All advertising materials mentioning features or use of this
Packit Service 084de1
 *    software must display the following acknowledgment:
Packit Service 084de1
 *    "This product includes software developed by the OpenSSL Project
Packit Service 084de1
 *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
Packit Service 084de1
 *
Packit Service 084de1
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
Packit Service 084de1
 *    endorse or promote products derived from this software without
Packit Service 084de1
 *    prior written permission. For written permission, please contact
Packit Service 084de1
 *    openssl-core@openssl.org.
Packit Service 084de1
 *
Packit Service 084de1
 * 5. Products derived from this software may not be called "OpenSSL"
Packit Service 084de1
 *    nor may "OpenSSL" appear in their names without prior written
Packit Service 084de1
 *    permission of the OpenSSL Project.
Packit Service 084de1
 *
Packit Service 084de1
 * 6. Redistributions of any form whatsoever must retain the following
Packit Service 084de1
 *    acknowledgment:
Packit Service 084de1
 *    "This product includes software developed by the OpenSSL Project
Packit Service 084de1
 *    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
Packit Service 084de1
 *
Packit Service 084de1
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
Packit Service 084de1
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Packit Service 084de1
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
Packit Service 084de1
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
Packit Service 084de1
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
Packit Service 084de1
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
Packit Service 084de1
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
Packit Service 084de1
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Packit Service 084de1
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
Packit Service 084de1
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
Packit Service 084de1
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
Packit Service 084de1
 * OF THE POSSIBILITY OF SUCH DAMAGE.
Packit Service 084de1
 *
Packit Service 084de1
 */
Packit Service 084de1
Packit Service 084de1
#include <string.h>
Packit Service 084de1
#include <openssl/err.h>
Packit Service 084de1
#ifdef OPENSSL_FIPS
Packit Service 084de1
# include <openssl/fips.h>
Packit Service 084de1
# include "crypto/fips.h"
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
#ifdef OPENSSL_FIPS
Packit Service 084de1
static const struct {
Packit Service 084de1
    const unsigned char key[16];
Packit Service 084de1
    const unsigned char plaintext[16];
Packit Service 084de1
    const unsigned char ciphertext[16];
Packit Service 084de1
} tests[] = {
Packit Service 084de1
    {
Packit Service 084de1
        {
Packit Service 084de1
        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
Packit Service 084de1
                0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}, {
Packit Service 084de1
        0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
Packit Service 084de1
                0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}, {
Packit Service 084de1
0x69, 0xC4, 0xE0, 0xD8, 0x6A, 0x7B, 0x04, 0x30,
Packit Service 084de1
                0xD8, 0xCD, 0xB7, 0x80, 0x70, 0xB4, 0xC5, 0x5A},},};
Packit Service 084de1
Packit Service 084de1
int FIPS_selftest_aes()
Packit Service 084de1
{
Packit Service 084de1
    int n;
Packit Service 084de1
    int ret = 0;
Packit Service 084de1
    EVP_CIPHER_CTX *ctx;
Packit Service 084de1
Packit Service 084de1
    ctx = EVP_CIPHER_CTX_new();
Packit Service 084de1
    if (ctx == NULL)
Packit Service 084de1
        goto err;
Packit Service 084de1
Packit Service 084de1
    for (n = 0; n < 1; ++n) {
Packit Service 084de1
        unsigned char key[16];
Packit Service 084de1
Packit Service 084de1
        memcpy(key, tests[n].key, sizeof(key));
Packit Service 084de1
        if (fips_cipher_test(ctx, EVP_aes_128_ecb(),
Packit Service 084de1
                             key, NULL,
Packit Service 084de1
                             tests[n].plaintext,
Packit Service 084de1
                             tests[n].ciphertext, 16) <= 0)
Packit Service 084de1
            goto err;
Packit Service 084de1
    }
Packit Service 084de1
    ret = 1;
Packit Service 084de1
 err:
Packit Service 084de1
    EVP_CIPHER_CTX_free(ctx);
Packit Service 084de1
    if (ret == 0)
Packit Service 084de1
        FIPSerr(FIPS_F_FIPS_SELFTEST_AES, FIPS_R_SELFTEST_FAILED);
Packit Service 084de1
    return ret;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
/* AES-CCM test data from NIST public test vectors */
Packit Service 084de1
Packit Service 084de1
static const unsigned char ccm_key[] = {
Packit Service 084de1
    0xce, 0xb0, 0x09, 0xae, 0xa4, 0x45, 0x44, 0x51, 0xfe, 0xad, 0xf0, 0xe6,
Packit Service 084de1
    0xb3, 0x6f, 0x45, 0x55, 0x5d, 0xd0, 0x47, 0x23, 0xba, 0xa4, 0x48, 0xe8
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char ccm_nonce[] = {
Packit Service 084de1
    0x76, 0x40, 0x43, 0xc4, 0x94, 0x60, 0xb7
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char ccm_adata[] = {
Packit Service 084de1
    0x6e, 0x80, 0xdd, 0x7f, 0x1b, 0xad, 0xf3, 0xa1, 0xc9, 0xab, 0x25, 0xc7,
Packit Service 084de1
    0x5f, 0x10, 0xbd, 0xe7, 0x8c, 0x23, 0xfa, 0x0e, 0xb8, 0xf9, 0xaa, 0xa5,
Packit Service 084de1
    0x3a, 0xde, 0xfb, 0xf4, 0xcb, 0xf7, 0x8f, 0xe4
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char ccm_pt[] = {
Packit Service 084de1
    0xc8, 0xd2, 0x75, 0xf9, 0x19, 0xe1, 0x7d, 0x7f, 0xe6, 0x9c, 0x2a, 0x1f,
Packit Service 084de1
    0x58, 0x93, 0x9d, 0xfe, 0x4d, 0x40, 0x37, 0x91, 0xb5, 0xdf, 0x13, 0x10
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char ccm_ct[] = {
Packit Service 084de1
    0x8a, 0x0f, 0x3d, 0x82, 0x29, 0xe4, 0x8e, 0x74, 0x87, 0xfd, 0x95, 0xa2,
Packit Service 084de1
    0x8a, 0xd3, 0x92, 0xc8, 0x0b, 0x36, 0x81, 0xd4, 0xfb, 0xc7, 0xbb, 0xfd
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char ccm_tag[] = {
Packit Service 084de1
    0x2d, 0xd6, 0xef, 0x1c, 0x45, 0xd4, 0xcc, 0xb7, 0x23, 0xdc, 0x07, 0x44,
Packit Service 084de1
    0x14, 0xdb, 0x50, 0x6d
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
int FIPS_selftest_aes_ccm(void)
Packit Service 084de1
{
Packit Service 084de1
    int ret = 0;
Packit Service 084de1
    unsigned char out[128], tag[16];
Packit Service 084de1
    EVP_CIPHER_CTX *ctx;
Packit Service 084de1
Packit Service 084de1
    ctx = EVP_CIPHER_CTX_new();
Packit Service 084de1
    if (ctx == NULL)
Packit Service 084de1
        goto err;
Packit Service 084de1
Packit Service 084de1
    memset(out, 0, sizeof(out));
Packit Service 084de1
    if (!EVP_CipherInit_ex(ctx, EVP_aes_192_ccm(), NULL, NULL, NULL, 1))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_IVLEN,
Packit Service 084de1
                             sizeof(ccm_nonce), NULL))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_TAG,
Packit Service 084de1
                             sizeof(ccm_tag), NULL))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (!EVP_CipherInit_ex(ctx, NULL, NULL, ccm_key, ccm_nonce, 1))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (EVP_Cipher(ctx, NULL, NULL, sizeof(ccm_pt)) != sizeof(ccm_pt))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (EVP_Cipher(ctx, NULL, ccm_adata, sizeof(ccm_adata)) < 0)
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (EVP_Cipher(ctx, out, ccm_pt, sizeof(ccm_pt)) != sizeof(ccm_ct))
Packit Service 084de1
        goto err;
Packit Service 084de1
Packit Service 084de1
    if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_GET_TAG, 16, tag))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (memcmp(tag, ccm_tag, sizeof(ccm_tag))
Packit Service 084de1
        || memcmp(out, ccm_ct, sizeof(ccm_ct)))
Packit Service 084de1
        goto err;
Packit Service 084de1
Packit Service 084de1
    memset(out, 0, sizeof(out));
Packit Service 084de1
Packit Service 084de1
    if (!EVP_CipherInit_ex(ctx, EVP_aes_192_ccm(), NULL, NULL, NULL, 0))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_IVLEN,
Packit Service 084de1
                             sizeof(ccm_nonce), NULL))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_TAG, 16, tag))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (!EVP_CipherInit_ex(ctx, NULL, NULL, ccm_key, ccm_nonce, 0))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (EVP_Cipher(ctx, NULL, NULL, sizeof(ccm_ct)) != sizeof(ccm_ct))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (EVP_Cipher(ctx, NULL, ccm_adata, sizeof(ccm_adata)) < 0)
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (EVP_Cipher(ctx, out, ccm_ct, sizeof(ccm_ct)) != sizeof(ccm_pt))
Packit Service 084de1
        goto err;
Packit Service 084de1
Packit Service 084de1
    if (memcmp(out, ccm_pt, sizeof(ccm_pt)))
Packit Service 084de1
        goto err;
Packit Service 084de1
Packit Service 084de1
    ret = 1;
Packit Service 084de1
Packit Service 084de1
 err:
Packit Service 084de1
    EVP_CIPHER_CTX_free(ctx);
Packit Service 084de1
Packit Service 084de1
    if (ret == 0) {
Packit Service 084de1
        FIPSerr(FIPS_F_FIPS_SELFTEST_AES_CCM, FIPS_R_SELFTEST_FAILED);
Packit Service 084de1
        return 0;
Packit Service 084de1
    } else
Packit Service 084de1
        return ret;
Packit Service 084de1
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
/* AES-GCM test data from NIST public test vectors */
Packit Service 084de1
Packit Service 084de1
static const unsigned char gcm_key[] = {
Packit Service 084de1
    0xee, 0xbc, 0x1f, 0x57, 0x48, 0x7f, 0x51, 0x92, 0x1c, 0x04, 0x65, 0x66,
Packit Service 084de1
    0x5f, 0x8a, 0xe6, 0xd1, 0x65, 0x8b, 0xb2, 0x6d, 0xe6, 0xf8, 0xa0, 0x69,
Packit Service 084de1
    0xa3, 0x52, 0x02, 0x93, 0xa5, 0x72, 0x07, 0x8f
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char gcm_iv[] = {
Packit Service 084de1
    0x99, 0xaa, 0x3e, 0x68, 0xed, 0x81, 0x73, 0xa0, 0xee, 0xd0, 0x66, 0x84
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char gcm_pt[] = {
Packit Service 084de1
    0xf5, 0x6e, 0x87, 0x05, 0x5b, 0xc3, 0x2d, 0x0e, 0xeb, 0x31, 0xb2, 0xea,
Packit Service 084de1
    0xcc, 0x2b, 0xf2, 0xa5
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char gcm_aad[] = {
Packit Service 084de1
    0x4d, 0x23, 0xc3, 0xce, 0xc3, 0x34, 0xb4, 0x9b, 0xdb, 0x37, 0x0c, 0x43,
Packit Service 084de1
    0x7f, 0xec, 0x78, 0xde
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char gcm_ct[] = {
Packit Service 084de1
    0xf7, 0x26, 0x44, 0x13, 0xa8, 0x4c, 0x0e, 0x7c, 0xd5, 0x36, 0x86, 0x7e,
Packit Service 084de1
    0xb9, 0xf2, 0x17, 0x36
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char gcm_tag[] = {
Packit Service 084de1
    0x67, 0xba, 0x05, 0x10, 0x26, 0x2a, 0xe4, 0x87, 0xd7, 0x37, 0xee, 0x62,
Packit Service 084de1
    0x98, 0xf7, 0x7e, 0x0c
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
int FIPS_selftest_aes_gcm(void)
Packit Service 084de1
{
Packit Service 084de1
    int ret = 0;
Packit Service 084de1
    unsigned char out[128], tag[16];
Packit Service 084de1
    EVP_CIPHER_CTX *ctx;
Packit Service 084de1
Packit Service 084de1
    ctx = EVP_CIPHER_CTX_new();
Packit Service 084de1
    if (ctx == NULL)
Packit Service 084de1
        goto err;
Packit Service 084de1
Packit Service 084de1
    memset(out, 0, sizeof(out));
Packit Service 084de1
    memset(tag, 0, sizeof(tag));
Packit Service 084de1
    if (!EVP_CipherInit_ex(ctx, EVP_aes_256_gcm(), NULL, NULL, NULL, 1))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN,
Packit Service 084de1
                             sizeof(gcm_iv), NULL))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (!EVP_CipherInit_ex(ctx, NULL, NULL, gcm_key, gcm_iv, 1))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (EVP_Cipher(ctx, NULL, gcm_aad, sizeof(gcm_aad)) < 0)
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (EVP_Cipher(ctx, out, gcm_pt, sizeof(gcm_pt)) != sizeof(gcm_ct))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (EVP_Cipher(ctx, NULL, NULL, 0) < 0)
Packit Service 084de1
        goto err;
Packit Service 084de1
Packit Service 084de1
    if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, 16, tag))
Packit Service 084de1
        goto err;
Packit Service 084de1
Packit Service 084de1
    if (memcmp(tag, gcm_tag, 16) || memcmp(out, gcm_ct, 16))
Packit Service 084de1
        goto err;
Packit Service 084de1
Packit Service 084de1
    memset(out, 0, sizeof(out));
Packit Service 084de1
Packit Service 084de1
    if (!EVP_CipherInit_ex(ctx, EVP_aes_256_gcm(), NULL, NULL, NULL, 0))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN,
Packit Service 084de1
                             sizeof(gcm_iv), NULL))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, 16, tag))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (!EVP_CipherInit_ex(ctx, NULL, NULL, gcm_key, gcm_iv, 0))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (EVP_Cipher(ctx, NULL, gcm_aad, sizeof(gcm_aad)) < 0)
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (EVP_Cipher(ctx, out, gcm_ct, sizeof(gcm_ct)) != sizeof(gcm_pt))
Packit Service 084de1
        goto err;
Packit Service 084de1
    if (EVP_Cipher(ctx, NULL, NULL, 0) < 0)
Packit Service 084de1
        goto err;
Packit Service 084de1
Packit Service 084de1
    if (memcmp(out, gcm_pt, 16))
Packit Service 084de1
        goto err;
Packit Service 084de1
Packit Service 084de1
    ret = 1;
Packit Service 084de1
Packit Service 084de1
 err:
Packit Service 084de1
    EVP_CIPHER_CTX_free(ctx);
Packit Service 084de1
Packit Service 084de1
    if (ret == 0) {
Packit Service 084de1
        FIPSerr(FIPS_F_FIPS_SELFTEST_AES_GCM, FIPS_R_SELFTEST_FAILED);
Packit Service 084de1
        return 0;
Packit Service 084de1
    } else
Packit Service 084de1
        return ret;
Packit Service 084de1
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static const unsigned char XTS_128_key[] = {
Packit Service 084de1
    0xa1, 0xb9, 0x0c, 0xba, 0x3f, 0x06, 0xac, 0x35, 0x3b, 0x2c, 0x34, 0x38,
Packit Service 084de1
    0x76, 0x08, 0x17, 0x62, 0x09, 0x09, 0x23, 0x02, 0x6e, 0x91, 0x77, 0x18,
Packit Service 084de1
    0x15, 0xf2, 0x9d, 0xab, 0x01, 0x93, 0x2f, 0x2f
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char XTS_128_i[] = {
Packit Service 084de1
    0x4f, 0xae, 0xf7, 0x11, 0x7c, 0xda, 0x59, 0xc6, 0x6e, 0x4b, 0x92, 0x01,
Packit Service 084de1
    0x3e, 0x76, 0x8a, 0xd5
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char XTS_128_pt[] = {
Packit Service 084de1
    0xeb, 0xab, 0xce, 0x95, 0xb1, 0x4d, 0x3c, 0x8d, 0x6f, 0xb3, 0x50, 0x39,
Packit Service 084de1
    0x07, 0x90, 0x31, 0x1c
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char XTS_128_ct[] = {
Packit Service 084de1
    0x77, 0x8a, 0xe8, 0xb4, 0x3c, 0xb9, 0x8d, 0x5a, 0x82, 0x50, 0x81, 0xd5,
Packit Service 084de1
    0xbe, 0x47, 0x1c, 0x63
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char XTS_256_key[] = {
Packit Service 084de1
    0x1e, 0xa6, 0x61, 0xc5, 0x8d, 0x94, 0x3a, 0x0e, 0x48, 0x01, 0xe4, 0x2f,
Packit Service 084de1
    0x4b, 0x09, 0x47, 0x14, 0x9e, 0x7f, 0x9f, 0x8e, 0x3e, 0x68, 0xd0, 0xc7,
Packit Service 084de1
    0x50, 0x52, 0x10, 0xbd, 0x31, 0x1a, 0x0e, 0x7c, 0xd6, 0xe1, 0x3f, 0xfd,
Packit Service 084de1
    0xf2, 0x41, 0x8d, 0x8d, 0x19, 0x11, 0xc0, 0x04, 0xcd, 0xa5, 0x8d, 0xa3,
Packit Service 084de1
    0xd6, 0x19, 0xb7, 0xe2, 0xb9, 0x14, 0x1e, 0x58, 0x31, 0x8e, 0xea, 0x39,
Packit Service 084de1
    0x2c, 0xf4, 0x1b, 0x08
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char XTS_256_i[] = {
Packit Service 084de1
    0xad, 0xf8, 0xd9, 0x26, 0x27, 0x46, 0x4a, 0xd2, 0xf0, 0x42, 0x8e, 0x84,
Packit Service 084de1
    0xa9, 0xf8, 0x75, 0x64
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char XTS_256_pt[] = {
Packit Service 084de1
    0x2e, 0xed, 0xea, 0x52, 0xcd, 0x82, 0x15, 0xe1, 0xac, 0xc6, 0x47, 0xe8,
Packit Service 084de1
    0x10, 0xbb, 0xc3, 0x64, 0x2e, 0x87, 0x28, 0x7f, 0x8d, 0x2e, 0x57, 0xe3,
Packit Service 084de1
    0x6c, 0x0a, 0x24, 0xfb, 0xc1, 0x2a, 0x20, 0x2e
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char XTS_256_ct[] = {
Packit Service 084de1
    0xcb, 0xaa, 0xd0, 0xe2, 0xf6, 0xce, 0xa3, 0xf5, 0x0b, 0x37, 0xf9, 0x34,
Packit Service 084de1
    0xd4, 0x6a, 0x9b, 0x13, 0x0b, 0x9d, 0x54, 0xf0, 0x7e, 0x34, 0xf3, 0x6a,
Packit Service 084de1
    0xf7, 0x93, 0xe8, 0x6f, 0x73, 0xc6, 0xd7, 0xdb
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
int FIPS_selftest_aes_xts()
Packit Service 084de1
{
Packit Service 084de1
    int ret = 1;
Packit Service 084de1
    EVP_CIPHER_CTX *ctx;
Packit Service 084de1
Packit Service 084de1
    ctx = EVP_CIPHER_CTX_new();
Packit Service 084de1
    if (ctx == NULL)
Packit Service 084de1
        goto err;
Packit Service 084de1
Packit Service 084de1
    if (fips_cipher_test(ctx, EVP_aes_128_xts(),
Packit Service 084de1
                         XTS_128_key, XTS_128_i, XTS_128_pt, XTS_128_ct,
Packit Service 084de1
                         sizeof(XTS_128_pt)) <= 0)
Packit Service 084de1
        ret = 0;
Packit Service 084de1
Packit Service 084de1
    if (fips_cipher_test(ctx, EVP_aes_256_xts(),
Packit Service 084de1
                         XTS_256_key, XTS_256_i, XTS_256_pt, XTS_256_ct,
Packit Service 084de1
                         sizeof(XTS_256_pt)) <= 0)
Packit Service 084de1
        ret = 0;
Packit Service 084de1
Packit Service 084de1
    EVP_CIPHER_CTX_free(ctx);
Packit Service 084de1
Packit Service 084de1
 err:
Packit Service 084de1
    if (ret == 0)
Packit Service 084de1
        FIPSerr(FIPS_F_FIPS_SELFTEST_AES_XTS, FIPS_R_SELFTEST_FAILED);
Packit Service 084de1
    return ret;
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
#endif