]>
git.ipfire.org Git - thirdparty/openssl.git/blob - test/ideatest.c
2 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
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
16 #ifdef OPENSSL_NO_IDEA
17 int main(int argc
, char *argv
[])
19 printf("No IDEA support\n");
23 # include <openssl/idea.h>
25 static const unsigned char k
[16] = {
26 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04,
27 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08
30 static const unsigned char in
[8] = { 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03 };
31 static const unsigned char c
[8] = { 0x11, 0xFB, 0xED, 0x2B, 0x01, 0x98, 0x6D, 0xE5 };
33 static unsigned char out
[80];
35 static const char text
[] = "Hello to all people out there";
37 static const unsigned char cfb_key
[16] = {
38 0xe1, 0xf0, 0xc3, 0xd2, 0xa5, 0xb4, 0x87, 0x96,
39 0x69, 0x78, 0x4b, 0x5a, 0x2d, 0x3c, 0x0f, 0x1e,
41 static const unsigned char cfb_iv
[80] =
42 { 0x34, 0x12, 0x78, 0x56, 0xab, 0x90, 0xef, 0xcd };
43 static unsigned char cfb_buf1
[40], cfb_buf2
[40], cfb_tmp
[8];
44 # define CFB_TEST_SIZE 24
45 static const unsigned char plain
[CFB_TEST_SIZE
] = {
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
52 static const unsigned char cfb_cipher64
[CFB_TEST_SIZE
] = {
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
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,*/
61 static int cfb64_test(const unsigned char *cfb_cipher
);
62 static char *pt(unsigned char *p
);
63 int main(int argc
, char *argv
[])
66 IDEA_KEY_SCHEDULE key
, dkey
;
69 IDEA_set_encrypt_key(k
, &key
);
70 IDEA_ecb_encrypt(in
, out
, &key
);
71 if (memcmp(out
, c
, 8) != 0) {
72 printf("ecb idea error encrypting\n");
74 for (i
= 0; i
< 8; i
++)
75 printf("%02X ", out
[i
]);
78 for (i
= 0; i
< 8; i
++)
79 printf("%02X ", c
[i
]);
84 IDEA_set_decrypt_key(&key
, &dkey
);
85 IDEA_ecb_encrypt(c
, out
, &dkey
);
86 if (memcmp(out
, in
, 8) != 0) {
87 printf("ecb idea error decrypting\n");
89 for (i
= 0; i
< 8; i
++)
90 printf("%02X ", out
[i
]);
93 for (i
= 0; i
< 8; i
++)
94 printf("%02X ", in
[i
]);
100 printf("ecb idea ok\n");
103 IDEA_cbc_encrypt((unsigned char *)text
, out
, strlen(text
) + 1, &key
, iv
,
106 IDEA_cbc_encrypt(out
, out
, 8, &dkey
, iv
, 0);
107 IDEA_cbc_encrypt(&(out
[8]), &(out
[8]), strlen(text
) + 1 - 8, &dkey
, iv
,
109 if (memcmp(text
, out
, strlen(text
) + 1) != 0) {
110 printf("cbc idea bad\n");
113 printf("cbc idea ok\n");
115 printf("cfb64 idea ");
116 if (cfb64_test(cfb_cipher64
)) {
125 static int cfb64_test(const unsigned char *cfb_cipher
)
127 IDEA_KEY_SCHEDULE eks
, dks
;
130 IDEA_set_encrypt_key(cfb_key
, &eks
);
131 IDEA_set_decrypt_key(&eks
, &dks
);
132 memcpy(cfb_tmp
, cfb_iv
, 8);
134 IDEA_cfb64_encrypt(plain
, cfb_buf1
, (long)12, &eks
,
135 cfb_tmp
, &n
, IDEA_ENCRYPT
);
136 IDEA_cfb64_encrypt(&(plain
[12]), &(cfb_buf1
[12]),
137 (long)CFB_TEST_SIZE
- 12, &eks
,
138 cfb_tmp
, &n
, IDEA_ENCRYPT
);
139 if (memcmp(cfb_cipher
, cfb_buf1
, CFB_TEST_SIZE
) != 0) {
141 printf("IDEA_cfb64_encrypt encrypt error\n");
142 for (i
= 0; i
< CFB_TEST_SIZE
; i
+= 8)
143 printf("%s\n", pt(&(cfb_buf1
[i
])));
145 memcpy(cfb_tmp
, cfb_iv
, 8);
147 IDEA_cfb64_encrypt(cfb_buf1
, cfb_buf2
, (long)13, &eks
,
148 cfb_tmp
, &n
, IDEA_DECRYPT
);
149 IDEA_cfb64_encrypt(&(cfb_buf1
[13]), &(cfb_buf2
[13]),
150 (long)CFB_TEST_SIZE
- 13, &eks
,
151 cfb_tmp
, &n
, IDEA_DECRYPT
);
152 if (memcmp(plain
, cfb_buf2
, CFB_TEST_SIZE
) != 0) {
154 printf("IDEA_cfb_encrypt decrypt error\n");
155 for (i
= 0; i
< 24; i
+= 8)
156 printf("%s\n", pt(&(cfb_buf2
[i
])));
161 static char *pt(unsigned char *p
)
163 static char bufs
[10][20];
167 static char *f
= "0123456789ABCDEF";
169 ret
= &(bufs
[bnum
++][0]);
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];