]> git.ipfire.org Git - thirdparty/openssl.git/blame - test/ideatest.c
add CMS SHA1 signing test
[thirdparty/openssl.git] / test / ideatest.c
CommitLineData
440e5d80
RS
1/*
2 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
d02b48c6 3 *
440e5d80
RS
4 * Licensed under the OpenSSL license (the "License"). You may not use
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
10#include <stdio.h>
11#include <string.h>
12#include <stdlib.h>
f5d7a031 13
55f78baf
RL
14#include "../e_os.h"
15
cf1b7d96 16#ifdef OPENSSL_NO_IDEA
f5d7a031
UM
17int main(int argc, char *argv[])
18{
19 printf("No IDEA support\n");
0f113f3e 20 return (0);
f5d7a031
UM
21}
22#else
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
df2ee0e2 35static const 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
df2ee0e2 61static int cfb64_test(const unsigned char *cfb_cipher);
d02b48c6 62static char *pt(unsigned char *p);
6b691a5c 63int main(int argc, char *argv[])
0f113f3e
MC
64{
65 int i, err = 0;
66 IDEA_KEY_SCHEDULE key, dkey;
67 unsigned char iv[8];
68
9021a5df
RS
69 IDEA_set_encrypt_key(k, &key);
70 IDEA_ecb_encrypt(in, out, &key);
0f113f3e
MC
71 if (memcmp(out, c, 8) != 0) {
72 printf("ecb idea error encrypting\n");
73 printf("got :");
74 for (i = 0; i < 8; i++)
75 printf("%02X ", out[i]);
76 printf("\n");
77 printf("expected:");
78 for (i = 0; i < 8; i++)
79 printf("%02X ", c[i]);
80 err = 20;
81 printf("\n");
82 }
83
9021a5df
RS
84 IDEA_set_decrypt_key(&key, &dkey);
85 IDEA_ecb_encrypt(c, out, &dkey);
0f113f3e
MC
86 if (memcmp(out, in, 8) != 0) {
87 printf("ecb idea error decrypting\n");
88 printf("got :");
89 for (i = 0; i < 8; i++)
90 printf("%02X ", out[i]);
91 printf("\n");
92 printf("expected:");
93 for (i = 0; i < 8; i++)
94 printf("%02X ", in[i]);
95 printf("\n");
96 err = 3;
97 }
98
99 if (err == 0)
100 printf("ecb idea ok\n");
101
102 memcpy(iv, k, 8);
9021a5df 103 IDEA_cbc_encrypt((unsigned char *)text, out, strlen(text) + 1, &key, iv,
0f113f3e
MC
104 1);
105 memcpy(iv, k, 8);
9021a5df
RS
106 IDEA_cbc_encrypt(out, out, 8, &dkey, iv, 0);
107 IDEA_cbc_encrypt(&(out[8]), &(out[8]), strlen(text) + 1 - 8, &dkey, iv,
0f113f3e
MC
108 0);
109 if (memcmp(text, out, strlen(text) + 1) != 0) {
110 printf("cbc idea bad\n");
111 err = 4;
112 } else
113 printf("cbc idea ok\n");
114
115 printf("cfb64 idea ");
116 if (cfb64_test(cfb_cipher64)) {
117 printf("bad\n");
118 err = 5;
119 } else
120 printf("ok\n");
121
0f113f3e 122 EXIT(err);
0f113f3e 123}
d02b48c6 124
df2ee0e2 125static int cfb64_test(const unsigned char *cfb_cipher)
0f113f3e
MC
126{
127 IDEA_KEY_SCHEDULE eks, dks;
128 int err = 0, i, n;
129
9021a5df
RS
130 IDEA_set_encrypt_key(cfb_key, &eks);
131 IDEA_set_decrypt_key(&eks, &dks);
0f113f3e
MC
132 memcpy(cfb_tmp, cfb_iv, 8);
133 n = 0;
9021a5df 134 IDEA_cfb64_encrypt(plain, cfb_buf1, (long)12, &eks,
0f113f3e 135 cfb_tmp, &n, IDEA_ENCRYPT);
9021a5df 136 IDEA_cfb64_encrypt(&(plain[12]), &(cfb_buf1[12]),
0f113f3e
MC
137 (long)CFB_TEST_SIZE - 12, &eks,
138 cfb_tmp, &n, IDEA_ENCRYPT);
139 if (memcmp(cfb_cipher, cfb_buf1, CFB_TEST_SIZE) != 0) {
140 err = 1;
9021a5df 141 printf("IDEA_cfb64_encrypt encrypt error\n");
0f113f3e
MC
142 for (i = 0; i < CFB_TEST_SIZE; i += 8)
143 printf("%s\n", pt(&(cfb_buf1[i])));
144 }
145 memcpy(cfb_tmp, cfb_iv, 8);
146 n = 0;
9021a5df 147 IDEA_cfb64_encrypt(cfb_buf1, cfb_buf2, (long)13, &eks,
0f113f3e 148 cfb_tmp, &n, IDEA_DECRYPT);
9021a5df 149 IDEA_cfb64_encrypt(&(cfb_buf1[13]), &(cfb_buf2[13]),
0f113f3e
MC
150 (long)CFB_TEST_SIZE - 13, &eks,
151 cfb_tmp, &n, IDEA_DECRYPT);
152 if (memcmp(plain, cfb_buf2, CFB_TEST_SIZE) != 0) {
153 err = 1;
9021a5df 154 printf("IDEA_cfb_encrypt decrypt error\n");
0f113f3e
MC
155 for (i = 0; i < 24; i += 8)
156 printf("%s\n", pt(&(cfb_buf2[i])));
157 }
158 return (err);
159}
d02b48c6 160
6b691a5c 161static char *pt(unsigned char *p)
0f113f3e
MC
162{
163 static char bufs[10][20];
164 static int bnum = 0;
165 char *ret;
166 int i;
167 static char *f = "0123456789ABCDEF";
168
169 ret = &(bufs[bnum++][0]);
170 bnum %= 10;
171 for (i = 0; i < 8; i++) {
172 ret[i * 2] = f[(p[i] >> 4) & 0xf];
173 ret[i * 2 + 1] = f[p[i] & 0xf];
174 }
175 ret[16] = '\0';
176 return (ret);
177}
f5d7a031 178#endif