Blame test/ideatest.c

Packit Service 084de1
/*
Packit Service 084de1
 * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved.
Packit Service 084de1
 *
Packit Service 084de1
 * Licensed under the OpenSSL license (the "License").  You may not use
Packit Service 084de1
 * this file except in compliance with the License.  You can obtain a copy
Packit Service 084de1
 * in the file LICENSE in the source distribution or at
Packit Service 084de1
 * https://www.openssl.org/source/license.html
Packit Service 084de1
 */
Packit Service 084de1
Packit Service 084de1
#include <string.h>
Packit Service 084de1
Packit Service 084de1
#include "internal/nelem.h"
Packit Service 084de1
#include "testutil.h"
Packit Service 084de1
Packit Service 084de1
#ifndef OPENSSL_NO_IDEA
Packit Service 084de1
# include <openssl/idea.h>
Packit Service 084de1
Packit Service 084de1
static const unsigned char k[16] = {
Packit Service 084de1
    0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04,
Packit Service 084de1
    0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const  unsigned char in[8] = { 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03 };
Packit Service 084de1
static const unsigned char c[8] = { 0x11, 0xFB, 0xED, 0x2B, 0x01, 0x98, 0x6D, 0xE5 };
Packit Service 084de1
Packit Service 084de1
static unsigned char out[80];
Packit Service 084de1
Packit Service 084de1
static const char text[] = "Hello to all people out there";
Packit Service 084de1
Packit Service 084de1
static const unsigned char cfb_key[16] = {
Packit Service 084de1
    0xe1, 0xf0, 0xc3, 0xd2, 0xa5, 0xb4, 0x87, 0x96,
Packit Service 084de1
    0x69, 0x78, 0x4b, 0x5a, 0x2d, 0x3c, 0x0f, 0x1e,
Packit Service 084de1
};
Packit Service 084de1
static const unsigned char cfb_iv[80] =
Packit Service 084de1
    { 0x34, 0x12, 0x78, 0x56, 0xab, 0x90, 0xef, 0xcd };
Packit Service 084de1
static unsigned char cfb_buf1[40], cfb_buf2[40], cfb_tmp[8];
Packit Service 084de1
# define CFB_TEST_SIZE 24
Packit Service 084de1
static const unsigned char plain[CFB_TEST_SIZE] = {
Packit Service 084de1
    0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73,
Packit Service 084de1
    0x20, 0x74, 0x68, 0x65, 0x20, 0x74,
Packit Service 084de1
    0x69, 0x6d, 0x65, 0x20, 0x66, 0x6f,
Packit Service 084de1
    0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static const unsigned char cfb_cipher64[CFB_TEST_SIZE] = {
Packit Service 084de1
    0x59, 0xD8, 0xE2, 0x65, 0x00, 0x58, 0x6C, 0x3F,
Packit Service 084de1
    0x2C, 0x17, 0x25, 0xD0, 0x1A, 0x38, 0xB7, 0x2A,
Packit Service 084de1
    0x39, 0x61, 0x37, 0xDC, 0x79, 0xFB, 0x9F, 0x45
Packit Service 084de1
/*- 0xF9,0x78,0x32,0xB5,0x42,0x1A,0x6B,0x38,
Packit Service 084de1
    0x9A,0x44,0xD6,0x04,0x19,0x43,0xC4,0xD9,
Packit Service 084de1
    0x3D,0x1E,0xAE,0x47,0xFC,0xCF,0x29,0x0B,*/
Packit Service 084de1
};
Packit Service 084de1
Packit Service 084de1
static int test_idea_ecb(void)
Packit Service 084de1
{
Packit Service 084de1
    IDEA_KEY_SCHEDULE key, dkey;
Packit Service 084de1
Packit Service 084de1
    IDEA_set_encrypt_key(k, &key);
Packit Service 084de1
    IDEA_ecb_encrypt(in, out, &key);
Packit Service 084de1
    if (!TEST_mem_eq(out, IDEA_BLOCK, c, sizeof(c)))
Packit Service 084de1
        return 0;
Packit Service 084de1
Packit Service 084de1
    IDEA_set_decrypt_key(&key, &dkey);
Packit Service 084de1
    IDEA_ecb_encrypt(c, out, &dkey);
Packit Service 084de1
    return TEST_mem_eq(out, IDEA_BLOCK, in, sizeof(in));
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int test_idea_cbc(void)
Packit Service 084de1
{
Packit Service 084de1
    IDEA_KEY_SCHEDULE key, dkey;
Packit Service 084de1
    unsigned char iv[IDEA_BLOCK];
Packit Service 084de1
    const size_t text_len = sizeof(text);
Packit Service 084de1
Packit Service 084de1
    IDEA_set_encrypt_key(k, &key);
Packit Service 084de1
    IDEA_set_decrypt_key(&key, &dkey);
Packit Service 084de1
    memcpy(iv, k, sizeof(iv));
Packit Service 084de1
    IDEA_cbc_encrypt((unsigned char *)text, out, text_len, &key, iv, 1);
Packit Service 084de1
    memcpy(iv, k, sizeof(iv));
Packit Service 084de1
    IDEA_cbc_encrypt(out, out, IDEA_BLOCK, &dkey, iv, 0);
Packit Service 084de1
    IDEA_cbc_encrypt(&out[8], &out[8], text_len - 8, &dkey, iv, 0);
Packit Service 084de1
    return TEST_mem_eq(text, text_len, out, text_len);
Packit Service 084de1
}
Packit Service 084de1
Packit Service 084de1
static int test_idea_cfb64(void)
Packit Service 084de1
{
Packit Service 084de1
    IDEA_KEY_SCHEDULE eks, dks;
Packit Service 084de1
    int n;
Packit Service 084de1
Packit Service 084de1
    IDEA_set_encrypt_key(cfb_key, &eks);
Packit Service 084de1
    IDEA_set_decrypt_key(&eks, &dks);
Packit Service 084de1
    memcpy(cfb_tmp, cfb_iv, sizeof(cfb_tmp));
Packit Service 084de1
    n = 0;
Packit Service 084de1
    IDEA_cfb64_encrypt(plain, cfb_buf1, (long)12, &eks,
Packit Service 084de1
                       cfb_tmp, &n, IDEA_ENCRYPT);
Packit Service 084de1
    IDEA_cfb64_encrypt(&plain[12], &cfb_buf1[12],
Packit Service 084de1
                       (long)CFB_TEST_SIZE - 12, &eks,
Packit Service 084de1
                       cfb_tmp, &n, IDEA_ENCRYPT);
Packit Service 084de1
    if (!TEST_mem_eq(cfb_cipher64, CFB_TEST_SIZE, cfb_buf1, CFB_TEST_SIZE))
Packit Service 084de1
        return 0;
Packit Service 084de1
    memcpy(cfb_tmp, cfb_iv, sizeof(cfb_tmp));
Packit Service 084de1
    n = 0;
Packit Service 084de1
    IDEA_cfb64_encrypt(cfb_buf1, cfb_buf2, (long)13, &eks,
Packit Service 084de1
                       cfb_tmp, &n, IDEA_DECRYPT);
Packit Service 084de1
    IDEA_cfb64_encrypt(&cfb_buf1[13], &cfb_buf2[13],
Packit Service 084de1
                       (long)CFB_TEST_SIZE - 13, &eks,
Packit Service 084de1
                       cfb_tmp, &n, IDEA_DECRYPT);
Packit Service 084de1
    return TEST_mem_eq(plain, CFB_TEST_SIZE, cfb_buf2, CFB_TEST_SIZE);
Packit Service 084de1
}
Packit Service 084de1
#endif
Packit Service 084de1
Packit Service 084de1
int setup_tests(void)
Packit Service 084de1
{
Packit Service 084de1
#ifndef OPENSSL_NO_IDEA
Packit Service 084de1
    ADD_TEST(test_idea_ecb);
Packit Service 084de1
    ADD_TEST(test_idea_cbc);
Packit Service 084de1
    ADD_TEST(test_idea_cfb64);
Packit Service 084de1
#endif
Packit Service 084de1
    return 1;
Packit Service 084de1
}