Blame test/chacha_internal_test.c

Packit c4476c
/*
Packit c4476c
 * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
 *
Packit c4476c
 * Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
 * this file except in compliance with the License.  You can obtain a copy
Packit c4476c
 * in the file LICENSE in the source distribution or at
Packit c4476c
 * https://www.openssl.org/source/license.html
Packit c4476c
 */
Packit c4476c
Packit c4476c
/*
Packit c4476c
 * Internal tests for the chacha module. EVP tests would exercise
Packit c4476c
 * complete 32-byte blocks. This test goes per byte...
Packit c4476c
 */
Packit c4476c
Packit c4476c
#include <string.h>
Packit c4476c
#include <openssl/opensslconf.h>
Packit c4476c
#include "testutil.h"
Packit c4476c
#include "crypto/chacha.h"
Packit c4476c
Packit c4476c
static const unsigned int key[] = {
Packit c4476c
    0x03020100, 0x07060504, 0x0b0a0908, 0x0f0e0d0c,
Packit c4476c
    0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c
Packit c4476c
};
Packit c4476c
Packit c4476c
static const unsigned int ivp[] = {
Packit c4476c
    0x00000000, 0x00000000, 0x03020100, 0x07060504
Packit c4476c
};
Packit c4476c
Packit c4476c
static const unsigned char ref[] = {
Packit c4476c
    0xf7, 0x98, 0xa1, 0x89, 0xf1, 0x95, 0xe6, 0x69,
Packit c4476c
    0x82, 0x10, 0x5f, 0xfb, 0x64, 0x0b, 0xb7, 0x75,
Packit c4476c
    0x7f, 0x57, 0x9d, 0xa3, 0x16, 0x02, 0xfc, 0x93,
Packit c4476c
    0xec, 0x01, 0xac, 0x56, 0xf8, 0x5a, 0xc3, 0xc1,
Packit c4476c
    0x34, 0xa4, 0x54, 0x7b, 0x73, 0x3b, 0x46, 0x41,
Packit c4476c
    0x30, 0x42, 0xc9, 0x44, 0x00, 0x49, 0x17, 0x69,
Packit c4476c
    0x05, 0xd3, 0xbe, 0x59, 0xea, 0x1c, 0x53, 0xf1,
Packit c4476c
    0x59, 0x16, 0x15, 0x5c, 0x2b, 0xe8, 0x24, 0x1a,
Packit c4476c
    0x38, 0x00, 0x8b, 0x9a, 0x26, 0xbc, 0x35, 0x94,
Packit c4476c
    0x1e, 0x24, 0x44, 0x17, 0x7c, 0x8a, 0xde, 0x66,
Packit c4476c
    0x89, 0xde, 0x95, 0x26, 0x49, 0x86, 0xd9, 0x58,
Packit c4476c
    0x89, 0xfb, 0x60, 0xe8, 0x46, 0x29, 0xc9, 0xbd,
Packit c4476c
    0x9a, 0x5a, 0xcb, 0x1c, 0xc1, 0x18, 0xbe, 0x56,
Packit c4476c
    0x3e, 0xb9, 0xb3, 0xa4, 0xa4, 0x72, 0xf8, 0x2e,
Packit c4476c
    0x09, 0xa7, 0xe7, 0x78, 0x49, 0x2b, 0x56, 0x2e,
Packit c4476c
    0xf7, 0x13, 0x0e, 0x88, 0xdf, 0xe0, 0x31, 0xc7,
Packit c4476c
    0x9d, 0xb9, 0xd4, 0xf7, 0xc7, 0xa8, 0x99, 0x15,
Packit c4476c
    0x1b, 0x9a, 0x47, 0x50, 0x32, 0xb6, 0x3f, 0xc3,
Packit c4476c
    0x85, 0x24, 0x5f, 0xe0, 0x54, 0xe3, 0xdd, 0x5a,
Packit c4476c
    0x97, 0xa5, 0xf5, 0x76, 0xfe, 0x06, 0x40, 0x25,
Packit c4476c
    0xd3, 0xce, 0x04, 0x2c, 0x56, 0x6a, 0xb2, 0xc5,
Packit c4476c
    0x07, 0xb1, 0x38, 0xdb, 0x85, 0x3e, 0x3d, 0x69,
Packit c4476c
    0x59, 0x66, 0x09, 0x96, 0x54, 0x6c, 0xc9, 0xc4,
Packit c4476c
    0xa6, 0xea, 0xfd, 0xc7, 0x77, 0xc0, 0x40, 0xd7,
Packit c4476c
    0x0e, 0xaf, 0x46, 0xf7, 0x6d, 0xad, 0x39, 0x79,
Packit c4476c
    0xe5, 0xc5, 0x36, 0x0c, 0x33, 0x17, 0x16, 0x6a,
Packit c4476c
    0x1c, 0x89, 0x4c, 0x94, 0xa3, 0x71, 0x87, 0x6a,
Packit c4476c
    0x94, 0xdf, 0x76, 0x28, 0xfe, 0x4e, 0xaa, 0xf2,
Packit c4476c
    0xcc, 0xb2, 0x7d, 0x5a, 0xaa, 0xe0, 0xad, 0x7a,
Packit c4476c
    0xd0, 0xf9, 0xd4, 0xb6, 0xad, 0x3b, 0x54, 0x09,
Packit c4476c
    0x87, 0x46, 0xd4, 0x52, 0x4d, 0x38, 0x40, 0x7a,
Packit c4476c
    0x6d, 0xeb, 0x3a, 0xb7, 0x8f, 0xab, 0x78, 0xc9,
Packit c4476c
    0x42, 0x13, 0x66, 0x8b, 0xbb, 0xd3, 0x94, 0xc5,
Packit c4476c
    0xde, 0x93, 0xb8, 0x53, 0x17, 0x8a, 0xdd, 0xd6,
Packit c4476c
    0xb9, 0x7f, 0x9f, 0xa1, 0xec, 0x3e, 0x56, 0xc0,
Packit c4476c
    0x0c, 0x9d, 0xdf, 0xf0, 0xa4, 0x4a, 0x20, 0x42,
Packit c4476c
    0x41, 0x17, 0x5a, 0x4c, 0xab, 0x0f, 0x96, 0x1b,
Packit c4476c
    0xa5, 0x3e, 0xde, 0x9b, 0xdf, 0x96, 0x0b, 0x94,
Packit c4476c
    0xf9, 0x82, 0x9b, 0x1f, 0x34, 0x14, 0x72, 0x64,
Packit c4476c
    0x29, 0xb3, 0x62, 0xc5, 0xb5, 0x38, 0xe3, 0x91,
Packit c4476c
    0x52, 0x0f, 0x48, 0x9b, 0x7e, 0xd8, 0xd2, 0x0a,
Packit c4476c
    0xe3, 0xfd, 0x49, 0xe9, 0xe2, 0x59, 0xe4, 0x43,
Packit c4476c
    0x97, 0x51, 0x4d, 0x61, 0x8c, 0x96, 0xc4, 0x84,
Packit c4476c
    0x6b, 0xe3, 0xc6, 0x80, 0xbd, 0xc1, 0x1c, 0x71,
Packit c4476c
    0xdc, 0xbb, 0xe2, 0x9c, 0xcf, 0x80, 0xd6, 0x2a,
Packit c4476c
    0x09, 0x38, 0xfa, 0x54, 0x93, 0x91, 0xe6, 0xea,
Packit c4476c
    0x57, 0xec, 0xbe, 0x26, 0x06, 0x79, 0x0e, 0xc1,
Packit c4476c
    0x5d, 0x22, 0x24, 0xae, 0x30, 0x7c, 0x14, 0x42,
Packit c4476c
    0x26, 0xb7, 0xc4, 0xe8, 0xc2, 0xf9, 0x7d, 0x2a,
Packit c4476c
    0x1d, 0x67, 0x85, 0x2d, 0x29, 0xbe, 0xba, 0x11,
Packit c4476c
    0x0e, 0xdd, 0x44, 0x51, 0x97, 0x01, 0x20, 0x62,
Packit c4476c
    0xa3, 0x93, 0xa9, 0xc9, 0x28, 0x03, 0xad, 0x3b,
Packit c4476c
    0x4f, 0x31, 0xd7, 0xbc, 0x60, 0x33, 0xcc, 0xf7,
Packit c4476c
    0x93, 0x2c, 0xfe, 0xd3, 0xf0, 0x19, 0x04, 0x4d,
Packit c4476c
    0x25, 0x90, 0x59, 0x16, 0x77, 0x72, 0x86, 0xf8,
Packit c4476c
    0x2f, 0x9a, 0x4c, 0xc1, 0xff, 0xe4, 0x30, 0xff,
Packit c4476c
    0xd1, 0xdc, 0xfc, 0x27, 0xde, 0xed, 0x32, 0x7b,
Packit c4476c
    0x9f, 0x96, 0x30, 0xd2, 0xfa, 0x96, 0x9f, 0xb6,
Packit c4476c
    0xf0, 0x60, 0x3c, 0xd1, 0x9d, 0xd9, 0xa9, 0x51,
Packit c4476c
    0x9e, 0x67, 0x3b, 0xcf, 0xcd, 0x90, 0x14, 0x12,
Packit c4476c
    0x52, 0x91, 0xa4, 0x46, 0x69, 0xef, 0x72, 0x85,
Packit c4476c
    0xe7, 0x4e, 0xd3, 0x72, 0x9b, 0x67, 0x7f, 0x80,
Packit c4476c
    0x1c, 0x3c, 0xdf, 0x05, 0x8c, 0x50, 0x96, 0x31,
Packit c4476c
    0x68, 0xb4, 0x96, 0x04, 0x37, 0x16, 0xc7, 0x30,
Packit c4476c
    0x7c, 0xd9, 0xe0, 0xcd, 0xd1, 0x37, 0xfc, 0xcb,
Packit c4476c
    0x0f, 0x05, 0xb4, 0x7c, 0xdb, 0xb9, 0x5c, 0x5f,
Packit c4476c
    0x54, 0x83, 0x16, 0x22, 0xc3, 0x65, 0x2a, 0x32,
Packit c4476c
    0xb2, 0x53, 0x1f, 0xe3, 0x26, 0xbc, 0xd6, 0xe2,
Packit c4476c
    0xbb, 0xf5, 0x6a, 0x19, 0x4f, 0xa1, 0x96, 0xfb,
Packit c4476c
    0xd1, 0xa5, 0x49, 0x52, 0x11, 0x0f, 0x51, 0xc7,
Packit c4476c
    0x34, 0x33, 0x86, 0x5f, 0x76, 0x64, 0xb8, 0x36,
Packit c4476c
    0x68, 0x5e, 0x36, 0x64, 0xb3, 0xd8, 0x44, 0x4a,
Packit c4476c
    0xf8, 0x9a, 0x24, 0x28, 0x05, 0xe1, 0x8c, 0x97,
Packit c4476c
    0x5f, 0x11, 0x46, 0x32, 0x49, 0x96, 0xfd, 0xe1,
Packit c4476c
    0x70, 0x07, 0xcf, 0x3e, 0x6e, 0x8f, 0x4e, 0x76,
Packit c4476c
    0x40, 0x22, 0x53, 0x3e, 0xdb, 0xfe, 0x07, 0xd4,
Packit c4476c
    0x73, 0x3e, 0x48, 0xbb, 0x37, 0x2d, 0x75, 0xb0,
Packit c4476c
    0xef, 0x48, 0xec, 0x98, 0x3e, 0xb7, 0x85, 0x32,
Packit c4476c
    0x16, 0x1c, 0xc5, 0x29, 0xe5, 0xab, 0xb8, 0x98,
Packit c4476c
    0x37, 0xdf, 0xcc, 0xa6, 0x26, 0x1d, 0xbb, 0x37,
Packit c4476c
    0xc7, 0xc5, 0xe6, 0xa8, 0x74, 0x78, 0xbf, 0x41,
Packit c4476c
    0xee, 0x85, 0xa5, 0x18, 0xc0, 0xf4, 0xef, 0xa9,
Packit c4476c
    0xbd, 0xe8, 0x28, 0xc5, 0xa7, 0x1b, 0x8e, 0x46,
Packit c4476c
    0x59, 0x7b, 0x63, 0x4a, 0xfd, 0x20, 0x4d, 0x3c,
Packit c4476c
    0x50, 0x13, 0x34, 0x23, 0x9c, 0x34, 0x14, 0x28,
Packit c4476c
    0x5e, 0xd7, 0x2d, 0x3a, 0x91, 0x69, 0xea, 0xbb,
Packit c4476c
    0xd4, 0xdc, 0x25, 0xd5, 0x2b, 0xb7, 0x51, 0x6d,
Packit c4476c
    0x3b, 0xa7, 0x12, 0xd7, 0x5a, 0xd8, 0xc0, 0xae,
Packit c4476c
    0x5d, 0x49, 0x3c, 0x19, 0xe3, 0x8a, 0x77, 0x93,
Packit c4476c
    0x9e, 0x7a, 0x05, 0x8d, 0x71, 0x3e, 0x9c, 0xcc,
Packit c4476c
    0xca, 0x58, 0x04, 0x5f, 0x43, 0x6b, 0x43, 0x4b,
Packit c4476c
    0x1c, 0x80, 0xd3, 0x65, 0x47, 0x24, 0x06, 0xe3,
Packit c4476c
    0x92, 0x95, 0x19, 0x87, 0xdb, 0x69, 0x05, 0xc8,
Packit c4476c
    0x0d, 0x43, 0x1d, 0xa1, 0x84, 0x51, 0x13, 0x5b,
Packit c4476c
    0xe7, 0xe8, 0x2b, 0xca, 0xb3, 0x58, 0xcb, 0x39,
Packit c4476c
    0x71, 0xe6, 0x14, 0x05, 0xb2, 0xff, 0x17, 0x98,
Packit c4476c
    0x0d, 0x6e, 0x7e, 0x67, 0xe8, 0x61, 0xe2, 0x82,
Packit c4476c
    0x01, 0xc1, 0xee, 0x30, 0xb4, 0x41, 0x04, 0x0f,
Packit c4476c
    0xd0, 0x68, 0x78, 0xd6, 0x50, 0x42, 0xc9, 0x55,
Packit c4476c
    0x82, 0xa4, 0x31, 0x82, 0x07, 0xbf, 0xc7, 0x00,
Packit c4476c
    0xbe, 0x0c, 0xe3, 0x28, 0x89, 0xae, 0xc2, 0xff,
Packit c4476c
    0xe5, 0x08, 0x5e, 0x89, 0x67, 0x91, 0x0d, 0x87,
Packit c4476c
    0x9f, 0xa0, 0xe8, 0xc0, 0xff, 0x85, 0xfd, 0xc5,
Packit c4476c
    0x10, 0xb9, 0xff, 0x2f, 0xbf, 0x87, 0xcf, 0xcb,
Packit c4476c
    0x29, 0x57, 0x7d, 0x68, 0x09, 0x9e, 0x04, 0xff,
Packit c4476c
    0xa0, 0x5f, 0x75, 0x2a, 0x73, 0xd3, 0x77, 0xc7,
Packit c4476c
    0x0d, 0x3a, 0x8b, 0xc2, 0xda, 0x80, 0xe6, 0xe7,
Packit c4476c
    0x80, 0xec, 0x05, 0x71, 0x82, 0xc3, 0x3a, 0xd1,
Packit c4476c
    0xde, 0x38, 0x72, 0x52, 0x25, 0x8a, 0x1e, 0x18,
Packit c4476c
    0xe6, 0xfa, 0xd9, 0x10, 0x32, 0x7c, 0xe7, 0xf4,
Packit c4476c
    0x2f, 0xd1, 0xe1, 0xe0, 0x51, 0x5f, 0x95, 0x86,
Packit c4476c
    0xe2, 0xf2, 0xef, 0xcb, 0x9f, 0x47, 0x2b, 0x1d,
Packit c4476c
    0xbd, 0xba, 0xc3, 0x54, 0xa4, 0x16, 0x21, 0x51,
Packit c4476c
    0xe9, 0xd9, 0x2c, 0x79, 0xfb, 0x08, 0xbb, 0x4d,
Packit c4476c
    0xdc, 0x56, 0xf1, 0x94, 0x48, 0xc0, 0x17, 0x5a,
Packit c4476c
    0x46, 0xe2, 0xe6, 0xc4, 0x91, 0xfe, 0xc7, 0x14,
Packit c4476c
    0x19, 0xaa, 0x43, 0xa3, 0x49, 0xbe, 0xa7, 0x68,
Packit c4476c
    0xa9, 0x2c, 0x75, 0xde, 0x68, 0xfd, 0x95, 0x91,
Packit c4476c
    0xe6, 0x80, 0x67, 0xf3, 0x19, 0x70, 0x94, 0xd3,
Packit c4476c
    0xfb, 0x87, 0xed, 0x81, 0x78, 0x5e, 0xa0, 0x75,
Packit c4476c
    0xe4, 0xb6, 0x5e, 0x3e, 0x4c, 0x78, 0xf8, 0x1d,
Packit c4476c
    0xa9, 0xb7, 0x51, 0xc5, 0xef, 0xe0, 0x24, 0x15,
Packit c4476c
    0x23, 0x01, 0xc4, 0x8e, 0x63, 0x24, 0x5b, 0x55,
Packit c4476c
    0x6c, 0x4c, 0x67, 0xaf, 0xf8, 0x57, 0xe5, 0xea,
Packit c4476c
    0x15, 0xa9, 0x08, 0xd8, 0x3a, 0x1d, 0x97, 0x04,
Packit c4476c
    0xf8, 0xe5, 0x5e, 0x73, 0x52, 0xb2, 0x0b, 0x69,
Packit c4476c
    0x4b, 0xf9, 0x97, 0x02, 0x98, 0xe6, 0xb5, 0xaa,
Packit c4476c
    0xd3, 0x3e, 0xa2, 0x15, 0x5d, 0x10, 0x5d, 0x4e
Packit c4476c
};
Packit c4476c
Packit c4476c
static int test_cha_cha_internal(int n)
Packit c4476c
{
Packit c4476c
    unsigned char buf[sizeof(ref)];
Packit c4476c
    unsigned int i = n + 1, j;
Packit c4476c
Packit c4476c
    memset(buf, 0, i);
Packit c4476c
    memcpy(buf + i, ref + i, sizeof(ref) - i);
Packit c4476c
Packit c4476c
    ChaCha20_ctr32(buf, buf, i, key, ivp);
Packit c4476c
Packit c4476c
    /*
Packit c4476c
     * Idea behind checking for whole sizeof(ref) is that if
Packit c4476c
     * ChaCha20_ctr32 oversteps i-th byte, then we'd know
Packit c4476c
     */
Packit c4476c
    for (j = 0; j < sizeof(ref); j++)
Packit c4476c
        if (!TEST_uchar_eq(buf[j], ref[j])) {
Packit c4476c
            TEST_info("%d failed at %u (%02x)\n", i, j, buf[j]);
Packit c4476c
            return 0;
Packit c4476c
        }
Packit c4476c
    return 1;
Packit c4476c
}
Packit c4476c
Packit c4476c
int setup_tests(void)
Packit c4476c
{
Packit c4476c
#ifdef CPUID_OBJ
Packit c4476c
    OPENSSL_cpuid_setup();
Packit c4476c
#endif
Packit c4476c
Packit c4476c
    ADD_ALL_TESTS(test_cha_cha_internal, sizeof(ref));
Packit c4476c
    return 1;
Packit c4476c
}