]> git.ipfire.org Git - thirdparty/openssl.git/blame - test/ideatest.c
Create provider errors and use them
[thirdparty/openssl.git] / test / ideatest.c
CommitLineData
440e5d80 1/*
deeac6c3 2 * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved.
d02b48c6 3 *
909f1a2e 4 * Licensed under the Apache License 2.0 (the "License"). You may not use
440e5d80
RS
5 * this file except in compliance with the License. You can obtain a copy
6 * in the file LICENSE in the source distribution or at
7 * https://www.openssl.org/source/license.html
d02b48c6
RE
8 */
9
d02b48c6 10#include <string.h>
f5d7a031 11
176db6dc 12#include "internal/nelem.h"
deeac6c3 13#include "testutil.h"
55f78baf 14
deeac6c3 15#ifndef OPENSSL_NO_IDEA
0f113f3e
MC
16# include <openssl/idea.h>
17
df2ee0e2 18static const unsigned char k[16] = {
0f113f3e
MC
19 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04,
20 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08
21};
d02b48c6 22
df2ee0e2
BL
23static const unsigned char in[8] = { 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03 };
24static const unsigned char c[8] = { 0x11, 0xFB, 0xED, 0x2B, 0x01, 0x98, 0x6D, 0xE5 };
d02b48c6 25
df2ee0e2 26static unsigned char out[80];
d02b48c6 27
9b340281 28static const unsigned char text[] = "Hello to all people out there";
0f113f3e 29
df2ee0e2 30static const unsigned char cfb_key[16] = {
0f113f3e
MC
31 0xe1, 0xf0, 0xc3, 0xd2, 0xa5, 0xb4, 0x87, 0x96,
32 0x69, 0x78, 0x4b, 0x5a, 0x2d, 0x3c, 0x0f, 0x1e,
33};
df2ee0e2 34static const unsigned char cfb_iv[80] =
0f113f3e
MC
35 { 0x34, 0x12, 0x78, 0x56, 0xab, 0x90, 0xef, 0xcd };
36static unsigned char cfb_buf1[40], cfb_buf2[40], cfb_tmp[8];
37# define CFB_TEST_SIZE 24
df2ee0e2 38static const unsigned char plain[CFB_TEST_SIZE] = {
0f113f3e
MC
39 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73,
40 0x20, 0x74, 0x68, 0x65, 0x20, 0x74,
41 0x69, 0x6d, 0x65, 0x20, 0x66, 0x6f,
42 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20
43};
44
df2ee0e2 45static const unsigned char cfb_cipher64[CFB_TEST_SIZE] = {
0f113f3e
MC
46 0x59, 0xD8, 0xE2, 0x65, 0x00, 0x58, 0x6C, 0x3F,
47 0x2C, 0x17, 0x25, 0xD0, 0x1A, 0x38, 0xB7, 0x2A,
48 0x39, 0x61, 0x37, 0xDC, 0x79, 0xFB, 0x9F, 0x45
35a1cc90
MC
49/*- 0xF9,0x78,0x32,0xB5,0x42,0x1A,0x6B,0x38,
50 0x9A,0x44,0xD6,0x04,0x19,0x43,0xC4,0xD9,
51 0x3D,0x1E,0xAE,0x47,0xFC,0xCF,0x29,0x0B,*/
0f113f3e 52};
d02b48c6 53
deeac6c3 54static int test_idea_ecb(void)
0f113f3e 55{
0f113f3e 56 IDEA_KEY_SCHEDULE key, dkey;
0f113f3e 57
9021a5df
RS
58 IDEA_set_encrypt_key(k, &key);
59 IDEA_ecb_encrypt(in, out, &key);
deeac6c3
P
60 if (!TEST_mem_eq(out, IDEA_BLOCK, c, sizeof(c)))
61 return 0;
0f113f3e 62
9021a5df
RS
63 IDEA_set_decrypt_key(&key, &dkey);
64 IDEA_ecb_encrypt(c, out, &dkey);
deeac6c3
P
65 return TEST_mem_eq(out, IDEA_BLOCK, in, sizeof(in));
66}
67
68static int test_idea_cbc(void)
69{
70 IDEA_KEY_SCHEDULE key, dkey;
71 unsigned char iv[IDEA_BLOCK];
72 const size_t text_len = sizeof(text);
73
74 IDEA_set_encrypt_key(k, &key);
75 IDEA_set_decrypt_key(&key, &dkey);
76 memcpy(iv, k, sizeof(iv));
9b340281 77 IDEA_cbc_encrypt(text, out, text_len, &key, iv, 1);
deeac6c3
P
78 memcpy(iv, k, sizeof(iv));
79 IDEA_cbc_encrypt(out, out, IDEA_BLOCK, &dkey, iv, 0);
80 IDEA_cbc_encrypt(&out[8], &out[8], text_len - 8, &dkey, iv, 0);
81 return TEST_mem_eq(text, text_len, out, text_len);
0f113f3e 82}
d02b48c6 83
deeac6c3 84static int test_idea_cfb64(void)
0f113f3e
MC
85{
86 IDEA_KEY_SCHEDULE eks, dks;
deeac6c3 87 int n;
0f113f3e 88
9021a5df
RS
89 IDEA_set_encrypt_key(cfb_key, &eks);
90 IDEA_set_decrypt_key(&eks, &dks);
deeac6c3 91 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_tmp));
0f113f3e 92 n = 0;
9021a5df 93 IDEA_cfb64_encrypt(plain, cfb_buf1, (long)12, &eks,
0f113f3e 94 cfb_tmp, &n, IDEA_ENCRYPT);
deeac6c3 95 IDEA_cfb64_encrypt(&plain[12], &cfb_buf1[12],
0f113f3e
MC
96 (long)CFB_TEST_SIZE - 12, &eks,
97 cfb_tmp, &n, IDEA_ENCRYPT);
deeac6c3
P
98 if (!TEST_mem_eq(cfb_cipher64, CFB_TEST_SIZE, cfb_buf1, CFB_TEST_SIZE))
99 return 0;
100 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_tmp));
0f113f3e 101 n = 0;
9021a5df 102 IDEA_cfb64_encrypt(cfb_buf1, cfb_buf2, (long)13, &eks,
0f113f3e 103 cfb_tmp, &n, IDEA_DECRYPT);
deeac6c3 104 IDEA_cfb64_encrypt(&cfb_buf1[13], &cfb_buf2[13],
0f113f3e
MC
105 (long)CFB_TEST_SIZE - 13, &eks,
106 cfb_tmp, &n, IDEA_DECRYPT);
deeac6c3 107 return TEST_mem_eq(plain, CFB_TEST_SIZE, cfb_buf2, CFB_TEST_SIZE);
0f113f3e 108}
deeac6c3 109#endif
d02b48c6 110
ad887416 111int setup_tests(void)
0f113f3e 112{
deeac6c3
P
113#ifndef OPENSSL_NO_IDEA
114 ADD_TEST(test_idea_ecb);
115 ADD_TEST(test_idea_cbc);
116 ADD_TEST(test_idea_cfb64);
f5d7a031 117#endif
ad887416 118 return 1;
deeac6c3 119}