]> git.ipfire.org Git - thirdparty/openssl.git/blame - test/ideatest.c
Security hardening: Expose Build flags for Position Independed Execution (PIE)
[thirdparty/openssl.git] / test / ideatest.c
CommitLineData
440e5d80 1/*
33388b44 2 * Copyright 1995-2020 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
da2d32f6
P
10/*
11 * IDEA low level APIs are deprecated for public use, but still ok for internal
12 * use where we're using them to implement the higher level EVP interface, as is
13 * the case here.
14 */
15#include "internal/deprecated.h"
16
d02b48c6 17#include <string.h>
f5d7a031 18
176db6dc 19#include "internal/nelem.h"
deeac6c3 20#include "testutil.h"
55f78baf 21
deeac6c3 22#ifndef OPENSSL_NO_IDEA
0f113f3e
MC
23# include <openssl/idea.h>
24
df2ee0e2 25static const unsigned char k[16] = {
0f113f3e
MC
26 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04,
27 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08
28};
d02b48c6 29
df2ee0e2
BL
30static const unsigned char in[8] = { 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03 };
31static const unsigned char c[8] = { 0x11, 0xFB, 0xED, 0x2B, 0x01, 0x98, 0x6D, 0xE5 };
d02b48c6 32
df2ee0e2 33static unsigned char out[80];
d02b48c6 34
9b340281 35static const unsigned char text[] = "Hello to all people out there";
0f113f3e 36
df2ee0e2 37static const unsigned char cfb_key[16] = {
0f113f3e
MC
38 0xe1, 0xf0, 0xc3, 0xd2, 0xa5, 0xb4, 0x87, 0x96,
39 0x69, 0x78, 0x4b, 0x5a, 0x2d, 0x3c, 0x0f, 0x1e,
40};
df2ee0e2 41static const unsigned char cfb_iv[80] =
0f113f3e
MC
42 { 0x34, 0x12, 0x78, 0x56, 0xab, 0x90, 0xef, 0xcd };
43static unsigned char cfb_buf1[40], cfb_buf2[40], cfb_tmp[8];
44# define CFB_TEST_SIZE 24
df2ee0e2 45static const unsigned char plain[CFB_TEST_SIZE] = {
0f113f3e
MC
46 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73,
47 0x20, 0x74, 0x68, 0x65, 0x20, 0x74,
48 0x69, 0x6d, 0x65, 0x20, 0x66, 0x6f,
49 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20
50};
51
df2ee0e2 52static const unsigned char cfb_cipher64[CFB_TEST_SIZE] = {
0f113f3e
MC
53 0x59, 0xD8, 0xE2, 0x65, 0x00, 0x58, 0x6C, 0x3F,
54 0x2C, 0x17, 0x25, 0xD0, 0x1A, 0x38, 0xB7, 0x2A,
55 0x39, 0x61, 0x37, 0xDC, 0x79, 0xFB, 0x9F, 0x45
35a1cc90
MC
56/*- 0xF9,0x78,0x32,0xB5,0x42,0x1A,0x6B,0x38,
57 0x9A,0x44,0xD6,0x04,0x19,0x43,0xC4,0xD9,
58 0x3D,0x1E,0xAE,0x47,0xFC,0xCF,0x29,0x0B,*/
0f113f3e 59};
d02b48c6 60
deeac6c3 61static int test_idea_ecb(void)
0f113f3e 62{
0f113f3e 63 IDEA_KEY_SCHEDULE key, dkey;
0f113f3e 64
9021a5df
RS
65 IDEA_set_encrypt_key(k, &key);
66 IDEA_ecb_encrypt(in, out, &key);
deeac6c3
P
67 if (!TEST_mem_eq(out, IDEA_BLOCK, c, sizeof(c)))
68 return 0;
0f113f3e 69
9021a5df
RS
70 IDEA_set_decrypt_key(&key, &dkey);
71 IDEA_ecb_encrypt(c, out, &dkey);
deeac6c3
P
72 return TEST_mem_eq(out, IDEA_BLOCK, in, sizeof(in));
73}
74
75static int test_idea_cbc(void)
76{
77 IDEA_KEY_SCHEDULE key, dkey;
78 unsigned char iv[IDEA_BLOCK];
79 const size_t text_len = sizeof(text);
80
81 IDEA_set_encrypt_key(k, &key);
82 IDEA_set_decrypt_key(&key, &dkey);
83 memcpy(iv, k, sizeof(iv));
9b340281 84 IDEA_cbc_encrypt(text, out, text_len, &key, iv, 1);
deeac6c3
P
85 memcpy(iv, k, sizeof(iv));
86 IDEA_cbc_encrypt(out, out, IDEA_BLOCK, &dkey, iv, 0);
87 IDEA_cbc_encrypt(&out[8], &out[8], text_len - 8, &dkey, iv, 0);
88 return TEST_mem_eq(text, text_len, out, text_len);
0f113f3e 89}
d02b48c6 90
deeac6c3 91static int test_idea_cfb64(void)
0f113f3e
MC
92{
93 IDEA_KEY_SCHEDULE eks, dks;
deeac6c3 94 int n;
0f113f3e 95
9021a5df
RS
96 IDEA_set_encrypt_key(cfb_key, &eks);
97 IDEA_set_decrypt_key(&eks, &dks);
deeac6c3 98 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_tmp));
0f113f3e 99 n = 0;
9021a5df 100 IDEA_cfb64_encrypt(plain, cfb_buf1, (long)12, &eks,
0f113f3e 101 cfb_tmp, &n, IDEA_ENCRYPT);
deeac6c3 102 IDEA_cfb64_encrypt(&plain[12], &cfb_buf1[12],
0f113f3e
MC
103 (long)CFB_TEST_SIZE - 12, &eks,
104 cfb_tmp, &n, IDEA_ENCRYPT);
deeac6c3
P
105 if (!TEST_mem_eq(cfb_cipher64, CFB_TEST_SIZE, cfb_buf1, CFB_TEST_SIZE))
106 return 0;
107 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_tmp));
0f113f3e 108 n = 0;
9021a5df 109 IDEA_cfb64_encrypt(cfb_buf1, cfb_buf2, (long)13, &eks,
0f113f3e 110 cfb_tmp, &n, IDEA_DECRYPT);
deeac6c3 111 IDEA_cfb64_encrypt(&cfb_buf1[13], &cfb_buf2[13],
0f113f3e
MC
112 (long)CFB_TEST_SIZE - 13, &eks,
113 cfb_tmp, &n, IDEA_DECRYPT);
deeac6c3 114 return TEST_mem_eq(plain, CFB_TEST_SIZE, cfb_buf2, CFB_TEST_SIZE);
0f113f3e 115}
deeac6c3 116#endif
d02b48c6 117
ad887416 118int setup_tests(void)
0f113f3e 119{
deeac6c3
P
120#ifndef OPENSSL_NO_IDEA
121 ADD_TEST(test_idea_ecb);
122 ADD_TEST(test_idea_cbc);
123 ADD_TEST(test_idea_cfb64);
f5d7a031 124#endif
ad887416 125 return 1;
deeac6c3 126}