destest.c revision 1.2
1/* 2 * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. 3 * 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 8 */ 9 10#include <stdio.h> 11#include <stdlib.h> 12 13#include <openssl/e_os2.h> 14#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WINDOWS) 15# ifndef OPENSSL_SYS_MSDOS 16# define OPENSSL_SYS_MSDOS 17# endif 18#endif 19 20#ifndef OPENSSL_SYS_MSDOS 21# if !defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_VMS_DECC) 22# include OPENSSL_UNISTD 23# endif 24#else 25# include <io.h> 26#endif 27#include <string.h> 28 29#ifdef OPENSSL_NO_DES 30int main(int argc, char *argv[]) 31{ 32 printf("No DES support\n"); 33 return (0); 34} 35#else 36# include <openssl/des.h> 37 38/* tisk tisk - the test keys don't all have odd parity :-( */ 39/* test data */ 40# define NUM_TESTS 34 41static unsigned char key_data[NUM_TESTS][8] = { 42 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 43 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 44 {0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 45 {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 46 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 47 {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 48 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 49 {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, 50 {0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57}, 51 {0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E}, 52 {0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86}, 53 {0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E}, 54 {0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6}, 55 {0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE}, 56 {0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6}, 57 {0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE}, 58 {0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16}, 59 {0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F}, 60 {0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46}, 61 {0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E}, 62 {0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76}, 63 {0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07}, 64 {0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F}, 65 {0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7}, 66 {0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF}, 67 {0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6}, 68 {0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF}, 69 {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 70 {0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E}, 71 {0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE}, 72 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 73 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 74 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 75 {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10} 76}; 77 78static unsigned char plain_data[NUM_TESTS][8] = { 79 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 80 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 81 {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, 82 {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 83 {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 84 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 85 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 86 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 87 {0x01, 0xA1, 0xD6, 0xD0, 0x39, 0x77, 0x67, 0x42}, 88 {0x5C, 0xD5, 0x4C, 0xA8, 0x3D, 0xEF, 0x57, 0xDA}, 89 {0x02, 0x48, 0xD4, 0x38, 0x06, 0xF6, 0x71, 0x72}, 90 {0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A}, 91 {0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2}, 92 {0x05, 0x9B, 0x5E, 0x08, 0x51, 0xCF, 0x14, 0x3A}, 93 {0x07, 0x56, 0xD8, 0xE0, 0x77, 0x47, 0x61, 0xD2}, 94 {0x76, 0x25, 0x14, 0xB8, 0x29, 0xBF, 0x48, 0x6A}, 95 {0x3B, 0xDD, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02}, 96 {0x26, 0x95, 0x5F, 0x68, 0x35, 0xAF, 0x60, 0x9A}, 97 {0x16, 0x4D, 0x5E, 0x40, 0x4F, 0x27, 0x52, 0x32}, 98 {0x6B, 0x05, 0x6E, 0x18, 0x75, 0x9F, 0x5C, 0xCA}, 99 {0x00, 0x4B, 0xD6, 0xEF, 0x09, 0x17, 0x60, 0x62}, 100 {0x48, 0x0D, 0x39, 0x00, 0x6E, 0xE7, 0x62, 0xF2}, 101 {0x43, 0x75, 0x40, 0xC8, 0x69, 0x8F, 0x3C, 0xFA}, 102 {0x07, 0x2D, 0x43, 0xA0, 0x77, 0x07, 0x52, 0x92}, 103 {0x02, 0xFE, 0x55, 0x77, 0x81, 0x17, 0xF1, 0x2A}, 104 {0x1D, 0x9D, 0x5C, 0x50, 0x18, 0xF7, 0x28, 0xC2}, 105 {0x30, 0x55, 0x32, 0x28, 0x6D, 0x6F, 0x29, 0x5A}, 106 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 107 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 108 {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 109 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 110 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 111 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 112 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} 113}; 114 115static unsigned char cipher_data[NUM_TESTS][8] = { 116 {0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7}, 117 {0x73, 0x59, 0xB2, 0x16, 0x3E, 0x4E, 0xDC, 0x58}, 118 {0x95, 0x8E, 0x6E, 0x62, 0x7A, 0x05, 0x55, 0x7B}, 119 {0xF4, 0x03, 0x79, 0xAB, 0x9E, 0x0E, 0xC5, 0x33}, 120 {0x17, 0x66, 0x8D, 0xFC, 0x72, 0x92, 0x53, 0x2D}, 121 {0x8A, 0x5A, 0xE1, 0xF8, 0x1A, 0xB8, 0xF2, 0xDD}, 122 {0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7}, 123 {0xED, 0x39, 0xD9, 0x50, 0xFA, 0x74, 0xBC, 0xC4}, 124 {0x69, 0x0F, 0x5B, 0x0D, 0x9A, 0x26, 0x93, 0x9B}, 125 {0x7A, 0x38, 0x9D, 0x10, 0x35, 0x4B, 0xD2, 0x71}, 126 {0x86, 0x8E, 0xBB, 0x51, 0xCA, 0xB4, 0x59, 0x9A}, 127 {0x71, 0x78, 0x87, 0x6E, 0x01, 0xF1, 0x9B, 0x2A}, 128 {0xAF, 0x37, 0xFB, 0x42, 0x1F, 0x8C, 0x40, 0x95}, 129 {0x86, 0xA5, 0x60, 0xF1, 0x0E, 0xC6, 0xD8, 0x5B}, 130 {0x0C, 0xD3, 0xDA, 0x02, 0x00, 0x21, 0xDC, 0x09}, 131 {0xEA, 0x67, 0x6B, 0x2C, 0xB7, 0xDB, 0x2B, 0x7A}, 132 {0xDF, 0xD6, 0x4A, 0x81, 0x5C, 0xAF, 0x1A, 0x0F}, 133 {0x5C, 0x51, 0x3C, 0x9C, 0x48, 0x86, 0xC0, 0x88}, 134 {0x0A, 0x2A, 0xEE, 0xAE, 0x3F, 0xF4, 0xAB, 0x77}, 135 {0xEF, 0x1B, 0xF0, 0x3E, 0x5D, 0xFA, 0x57, 0x5A}, 136 {0x88, 0xBF, 0x0D, 0xB6, 0xD7, 0x0D, 0xEE, 0x56}, 137 {0xA1, 0xF9, 0x91, 0x55, 0x41, 0x02, 0x0B, 0x56}, 138 {0x6F, 0xBF, 0x1C, 0xAF, 0xCF, 0xFD, 0x05, 0x56}, 139 {0x2F, 0x22, 0xE4, 0x9B, 0xAB, 0x7C, 0xA1, 0xAC}, 140 {0x5A, 0x6B, 0x61, 0x2C, 0xC2, 0x6C, 0xCE, 0x4A}, 141 {0x5F, 0x4C, 0x03, 0x8E, 0xD1, 0x2B, 0x2E, 0x41}, 142 {0x63, 0xFA, 0xC0, 0xD0, 0x34, 0xD9, 0xF7, 0x93}, 143 {0x61, 0x7B, 0x3A, 0x0C, 0xE8, 0xF0, 0x71, 0x00}, 144 {0xDB, 0x95, 0x86, 0x05, 0xF8, 0xC8, 0xC6, 0x06}, 145 {0xED, 0xBF, 0xD1, 0xC6, 0x6C, 0x29, 0xCC, 0xC7}, 146 {0x35, 0x55, 0x50, 0xB2, 0x15, 0x0E, 0x24, 0x51}, 147 {0xCA, 0xAA, 0xAF, 0x4D, 0xEA, 0xF1, 0xDB, 0xAE}, 148 {0xD5, 0xD4, 0x4F, 0xF7, 0x20, 0x68, 0x3D, 0x0D}, 149 {0x2A, 0x2B, 0xB0, 0x08, 0xDF, 0x97, 0xC2, 0xF2} 150}; 151 152static unsigned char cipher_ecb2[NUM_TESTS - 1][8] = { 153 {0x92, 0x95, 0xB5, 0x9B, 0xB3, 0x84, 0x73, 0x6E}, 154 {0x19, 0x9E, 0x9D, 0x6D, 0xF3, 0x9A, 0xA8, 0x16}, 155 {0x2A, 0x4B, 0x4D, 0x24, 0x52, 0x43, 0x84, 0x27}, 156 {0x35, 0x84, 0x3C, 0x01, 0x9D, 0x18, 0xC5, 0xB6}, 157 {0x4A, 0x5B, 0x2F, 0x42, 0xAA, 0x77, 0x19, 0x25}, 158 {0xA0, 0x6B, 0xA9, 0xB8, 0xCA, 0x5B, 0x17, 0x8A}, 159 {0xAB, 0x9D, 0xB7, 0xFB, 0xED, 0x95, 0xF2, 0x74}, 160 {0x3D, 0x25, 0x6C, 0x23, 0xA7, 0x25, 0x2F, 0xD6}, 161 {0xB7, 0x6F, 0xAB, 0x4F, 0xBD, 0xBD, 0xB7, 0x67}, 162 {0x8F, 0x68, 0x27, 0xD6, 0x9C, 0xF4, 0x1A, 0x10}, 163 {0x82, 0x57, 0xA1, 0xD6, 0x50, 0x5E, 0x81, 0x85}, 164 {0xA2, 0x0F, 0x0A, 0xCD, 0x80, 0x89, 0x7D, 0xFA}, 165 {0xCD, 0x2A, 0x53, 0x3A, 0xDB, 0x0D, 0x7E, 0xF3}, 166 {0xD2, 0xC2, 0xBE, 0x27, 0xE8, 0x1B, 0x68, 0xE3}, 167 {0xE9, 0x24, 0xCF, 0x4F, 0x89, 0x3C, 0x5B, 0x0A}, 168 {0xA7, 0x18, 0xC3, 0x9F, 0xFA, 0x9F, 0xD7, 0x69}, 169 {0x77, 0x2C, 0x79, 0xB1, 0xD2, 0x31, 0x7E, 0xB1}, 170 {0x49, 0xAB, 0x92, 0x7F, 0xD0, 0x22, 0x00, 0xB7}, 171 {0xCE, 0x1C, 0x6C, 0x7D, 0x85, 0xE3, 0x4A, 0x6F}, 172 {0xBE, 0x91, 0xD6, 0xE1, 0x27, 0xB2, 0xE9, 0x87}, 173 {0x70, 0x28, 0xAE, 0x8F, 0xD1, 0xF5, 0x74, 0x1A}, 174 {0xAA, 0x37, 0x80, 0xBB, 0xF3, 0x22, 0x1D, 0xDE}, 175 {0xA6, 0xC4, 0xD2, 0x5E, 0x28, 0x93, 0xAC, 0xB3}, 176 {0x22, 0x07, 0x81, 0x5A, 0xE4, 0xB7, 0x1A, 0xAD}, 177 {0xDC, 0xCE, 0x05, 0xE7, 0x07, 0xBD, 0xF5, 0x84}, 178 {0x26, 0x1D, 0x39, 0x2C, 0xB3, 0xBA, 0xA5, 0x85}, 179 {0xB4, 0xF7, 0x0F, 0x72, 0xFB, 0x04, 0xF0, 0xDC}, 180 {0x95, 0xBA, 0xA9, 0x4E, 0x87, 0x36, 0xF2, 0x89}, 181 {0xD4, 0x07, 0x3A, 0xF1, 0x5A, 0x17, 0x82, 0x0E}, 182 {0xEF, 0x6F, 0xAF, 0xA7, 0x66, 0x1A, 0x7E, 0x89}, 183 {0xC1, 0x97, 0xF5, 0x58, 0x74, 0x8A, 0x20, 0xE7}, 184 {0x43, 0x34, 0xCF, 0xDA, 0x22, 0xC4, 0x86, 0xC8}, 185 {0x08, 0xD7, 0xB4, 0xFB, 0x62, 0x9D, 0x08, 0x85} 186}; 187 188static unsigned char cbc_key[8] = 189 { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; 190static unsigned char cbc2_key[8] = 191 { 0xf1, 0xe0, 0xd3, 0xc2, 0xb5, 0xa4, 0x97, 0x86 }; 192static unsigned char cbc3_key[8] = 193 { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }; 194static unsigned char cbc_iv[8] = 195 { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }; 196/* 197 * Changed the following text constant to binary so it will work on ebcdic 198 * machines :-) 199 */ 200/* static char cbc_data[40]="7654321 Now is the time for \0001"; */ 201static unsigned char cbc_data[40] = { 202 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20, 203 0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74, 204 0x68, 0x65, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x20, 205 0x66, 0x6F, 0x72, 0x20, 0x00, 0x31, 0x00, 0x00, 206 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 207}; 208 209static unsigned char cbc_ok[32] = { 210 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4, 211 0xac, 0xd8, 0xae, 0xfd, 0xdf, 0xd8, 0xa1, 0xeb, 212 0x46, 0x8e, 0x91, 0x15, 0x78, 0x88, 0xba, 0x68, 213 0x1d, 0x26, 0x93, 0x97, 0xf7, 0xfe, 0x62, 0xb4 214}; 215 216# ifdef SCREW_THE_PARITY 217# error "SCREW_THE_PARITY is not meant to be defined." 218# error "Original vectors are preserved for reference only." 219static unsigned char cbc2_key[8] = 220 { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 }; 221static unsigned char xcbc_ok[32] = { 222 0x86, 0x74, 0x81, 0x0D, 0x61, 0xA4, 0xA5, 0x48, 223 0xB9, 0x93, 0x03, 0xE1, 0xB8, 0xBB, 0xBD, 0xBD, 224 0x64, 0x30, 0x0B, 0xB9, 0x06, 0x65, 0x81, 0x76, 225 0x04, 0x1D, 0x77, 0x62, 0x17, 0xCA, 0x2B, 0xD2, 226}; 227# else 228static unsigned char xcbc_ok[32] = { 229 0x84, 0x6B, 0x29, 0x14, 0x85, 0x1E, 0x9A, 0x29, 230 0x54, 0x73, 0x2F, 0x8A, 0xA0, 0xA6, 0x11, 0xC1, 231 0x15, 0xCD, 0xC2, 0xD7, 0x95, 0x1B, 0x10, 0x53, 232 0xA6, 0x3C, 0x5E, 0x03, 0xB2, 0x1A, 0xA3, 0xC4, 233}; 234# endif 235 236static unsigned char cbc3_ok[32] = { 237 0x3F, 0xE3, 0x01, 0xC9, 0x62, 0xAC, 0x01, 0xD0, 238 0x22, 0x13, 0x76, 0x3C, 0x1C, 0xBD, 0x4C, 0xDC, 239 0x79, 0x96, 0x57, 0xC0, 0x64, 0xEC, 0xF5, 0xD4, 240 0x1C, 0x67, 0x38, 0x12, 0xCF, 0xDE, 0x96, 0x75 241}; 242 243static unsigned char pcbc_ok[32] = { 244 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4, 245 0x6d, 0xec, 0xb4, 0x70, 0xa0, 0xe5, 0x6b, 0x15, 246 0xae, 0xa6, 0xbf, 0x61, 0xed, 0x7d, 0x9c, 0x9f, 247 0xf7, 0x17, 0x46, 0x3b, 0x8a, 0xb3, 0xcc, 0x88 248}; 249 250static unsigned char cfb_key[8] = 251 { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; 252static unsigned char cfb_iv[8] = 253 { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef }; 254static unsigned char cfb_buf1[40], cfb_buf2[40], cfb_tmp[8]; 255static unsigned char plain[24] = { 256 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 257 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 258 0x69, 0x6d, 0x65, 0x20, 0x66, 0x6f, 259 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20 260}; 261 262static unsigned char cfb_cipher8[24] = { 263 0xf3, 0x1f, 0xda, 0x07, 0x01, 0x14, 0x62, 0xee, 0x18, 0x7f, 0x43, 0xd8, 264 0x0a, 0x7c, 0xd9, 0xb5, 0xb0, 0xd2, 0x90, 0xda, 0x6e, 0x5b, 0x9a, 0x87 265}; 266 267static unsigned char cfb_cipher16[24] = { 268 0xF3, 0x09, 0x87, 0x87, 0x7F, 0x57, 0xF7, 0x3C, 0x36, 0xB6, 0xDB, 0x70, 269 0xD8, 0xD5, 0x34, 0x19, 0xD3, 0x86, 0xB2, 0x23, 0xB7, 0xB2, 0xAD, 0x1B 270}; 271 272static unsigned char cfb_cipher32[24] = { 273 0xF3, 0x09, 0x62, 0x49, 0xA4, 0xDF, 0xA4, 0x9F, 0x33, 0xDC, 0x7B, 0xAD, 274 0x4C, 0xC8, 0x9F, 0x64, 0xE4, 0x53, 0xE5, 0xEC, 0x67, 0x20, 0xDA, 0xB6 275}; 276 277static unsigned char cfb_cipher48[24] = { 278 0xF3, 0x09, 0x62, 0x49, 0xC7, 0xF4, 0x30, 0xB5, 0x15, 0xEC, 0xBB, 0x85, 279 0x97, 0x5A, 0x13, 0x8C, 0x68, 0x60, 0xE2, 0x38, 0x34, 0x3C, 0xDC, 0x1F 280}; 281 282static unsigned char cfb_cipher64[24] = { 283 0xF3, 0x09, 0x62, 0x49, 0xC7, 0xF4, 0x6E, 0x51, 0xA6, 0x9E, 0x83, 0x9B, 284 0x1A, 0x92, 0xF7, 0x84, 0x03, 0x46, 0x71, 0x33, 0x89, 0x8E, 0xA6, 0x22 285}; 286 287static unsigned char ofb_key[8] = 288 { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; 289static unsigned char ofb_iv[8] = 290 { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef }; 291static unsigned char ofb_buf1[24], ofb_buf2[24], ofb_tmp[8]; 292static unsigned char ofb_cipher[24] = { 293 0xf3, 0x09, 0x62, 0x49, 0xc7, 0xf4, 0x6e, 0x51, 294 0x35, 0xf2, 0x4a, 0x24, 0x2e, 0xeb, 0x3d, 0x3f, 295 0x3d, 0x6d, 0x5b, 0xe3, 0x25, 0x5a, 0xf8, 0xc3 296}; 297static DES_LONG cbc_cksum_ret = 0xF7FE62B4L; 298static unsigned char cbc_cksum_data[8] = 299 { 0x1D, 0x26, 0x93, 0x97, 0xf7, 0xfe, 0x62, 0xb4 }; 300 301static char *pt(unsigned char *p); 302static int cfb_test(int bits, unsigned char *cfb_cipher); 303static int cfb64_test(unsigned char *cfb_cipher); 304static int ede_cfb64_test(unsigned char *cfb_cipher); 305int main(int argc, char *argv[]) 306{ 307 int j, err = 0; 308 unsigned int i; 309 DES_cblock in, out, outin, iv3; 310 DES_key_schedule ks, ks2, ks3; 311 unsigned char cbc_in[40]; 312 unsigned char cbc_out[40]; 313 DES_LONG cs; 314 unsigned char cret[8]; 315 DES_LONG lqret[4]; 316 int num; 317 char *str; 318 319 printf("Doing ecb\n"); 320 for (i = 0; i < NUM_TESTS; i++) { 321 DES_set_key_unchecked(&key_data[i], &ks); 322 memcpy(in, plain_data[i], 8); 323 memset(out, 0, 8); 324 memset(outin, 0, 8); 325 DES_ecb_encrypt(&in, &out, &ks, DES_ENCRYPT); 326 DES_ecb_encrypt(&out, &outin, &ks, DES_DECRYPT); 327 328 if (memcmp(out, cipher_data[i], 8) != 0) { 329 printf("Encryption error %2d\nk=%s p=%s o=%s act=%s\n", 330 i + 1, pt(key_data[i]), pt(in), pt(cipher_data[i]), 331 pt(out)); 332 err = 1; 333 } 334 if (memcmp(in, outin, 8) != 0) { 335 printf("Decryption error %2d\nk=%s p=%s o=%s act=%s\n", 336 i + 1, pt(key_data[i]), pt(out), pt(in), pt(outin)); 337 err = 1; 338 } 339 } 340 341# ifndef LIBDES_LIT 342 printf("Doing ede ecb\n"); 343 for (i = 0; i < (NUM_TESTS - 2); i++) { 344 DES_set_key_unchecked(&key_data[i], &ks); 345 DES_set_key_unchecked(&key_data[i + 1], &ks2); 346 DES_set_key_unchecked(&key_data[i + 2], &ks3); 347 memcpy(in, plain_data[i], 8); 348 memset(out, 0, 8); 349 memset(outin, 0, 8); 350 DES_ecb3_encrypt(&in,&out,&ks,&ks2,&ks,DES_ENCRYPT); 351 DES_ecb3_encrypt(&out,&outin,&ks,&ks2,&ks,DES_DECRYPT); 352 353 if (memcmp(out, cipher_ecb2[i], 8) != 0) { 354 printf("Encryption error %2d\nk=%s p=%s o=%s act=%s\n", 355 i + 1, pt(key_data[i]), pt(in), pt(cipher_ecb2[i]), 356 pt(out)); 357 err = 1; 358 } 359 if (memcmp(in, outin, 8) != 0) { 360 printf("Decryption error %2d\nk=%s p=%s o=%s act=%s\n", 361 i + 1, pt(key_data[i]), pt(out), pt(in), pt(outin)); 362 err = 1; 363 } 364 } 365# endif 366 367 printf("Doing cbc\n"); 368 if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) { 369 printf("Key error %d\n", j); 370 err = 1; 371 } 372 memset(cbc_out, 0, 40); 373 memset(cbc_in, 0, 40); 374 memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 375 DES_ncbc_encrypt(cbc_data, cbc_out, strlen((char *)cbc_data) + 1, &ks, 376 &iv3, DES_ENCRYPT); 377 if (memcmp(cbc_out, cbc_ok, 32) != 0) { 378 printf("cbc_encrypt encrypt error\n"); 379 err = 1; 380 } 381 382 memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 383 DES_ncbc_encrypt(cbc_out, cbc_in, strlen((char *)cbc_data) + 1, &ks, 384 &iv3, DES_DECRYPT); 385 if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data)) != 0) { 386 printf("cbc_encrypt decrypt error\n"); 387 err = 1; 388 } 389# ifndef LIBDES_LIT 390 printf("Doing desx cbc\n"); 391 if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) { 392 printf("Key error %d\n", j); 393 err = 1; 394 } 395 memset(cbc_out, 0, 40); 396 memset(cbc_in, 0, 40); 397 memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 398 DES_xcbc_encrypt(cbc_data, cbc_out, strlen((char *)cbc_data) + 1, &ks, 399 &iv3, &cbc2_key, &cbc3_key, DES_ENCRYPT); 400 if (memcmp(cbc_out, xcbc_ok, 32) != 0) { 401 printf("des_xcbc_encrypt encrypt error\n"); 402 err = 1; 403 } 404 memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 405 DES_xcbc_encrypt(cbc_out, cbc_in, strlen((char *)cbc_data) + 1, &ks, 406 &iv3, &cbc2_key, &cbc3_key, DES_DECRYPT); 407 if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data) + 1) != 0) { 408 printf("des_xcbc_encrypt decrypt error\n"); 409 err = 1; 410 } 411# endif 412 413 printf("Doing ede cbc\n"); 414 if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) { 415 printf("Key error %d\n", j); 416 err = 1; 417 } 418 if ((j = DES_set_key_checked(&cbc2_key, &ks2)) != 0) { 419 printf("Key error %d\n", j); 420 err = 1; 421 } 422 if ((j = DES_set_key_checked(&cbc3_key, &ks3)) != 0) { 423 printf("Key error %d\n", j); 424 err = 1; 425 } 426 memset(cbc_out, 0, 40); 427 memset(cbc_in, 0, 40); 428 i = strlen((char *)cbc_data) + 1; 429 /* i=((i+7)/8)*8; */ 430 memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 431 432 DES_ede3_cbc_encrypt(cbc_data, cbc_out, 16L, &ks, &ks2, &ks3, &iv3, 433 DES_ENCRYPT); 434 DES_ede3_cbc_encrypt(&(cbc_data[16]), &(cbc_out[16]), i - 16, &ks, &ks2, 435 &ks3, &iv3, DES_ENCRYPT); 436 if (memcmp 437 (cbc_out, cbc3_ok, 438 (unsigned int)(strlen((char *)cbc_data) + 1 + 7) / 8 * 8) != 0) { 439 unsigned int n; 440 441 printf("des_ede3_cbc_encrypt encrypt error\n"); 442 for (n = 0; n < i; ++n) 443 printf(" %02x", cbc_out[n]); 444 printf("\n"); 445 for (n = 0; n < i; ++n) 446 printf(" %02x", cbc3_ok[n]); 447 printf("\n"); 448 err = 1; 449 } 450 451 memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 452 DES_ede3_cbc_encrypt(cbc_out, cbc_in, i, &ks, &ks2, &ks3, &iv3, DES_DECRYPT); 453 if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data) + 1) != 0) { 454 unsigned int n; 455 456 printf("DES_ede3_cbc_encrypt decrypt error\n"); 457 for (n = 0; n < i; ++n) 458 printf(" %02x", cbc_data[n]); 459 printf("\n"); 460 for (n = 0; n < i; ++n) 461 printf(" %02x", cbc_in[n]); 462 printf("\n"); 463 err = 1; 464 } 465# ifndef LIBDES_LIT 466 printf("Doing pcbc\n"); 467 if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) { 468 printf("Key error %d\n", j); 469 err = 1; 470 } 471 memset(cbc_out, 0, 40); 472 memset(cbc_in, 0, 40); 473 DES_pcbc_encrypt(cbc_data, cbc_out, strlen((char *)cbc_data) + 1, &ks, 474 &cbc_iv, DES_ENCRYPT); 475 if (memcmp(cbc_out, pcbc_ok, 32) != 0) { 476 printf("pcbc_encrypt encrypt error\n"); 477 err = 1; 478 } 479 DES_pcbc_encrypt(cbc_out, cbc_in, strlen((char *)cbc_data) + 1, &ks, 480 &cbc_iv, DES_DECRYPT); 481 if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data) + 1) != 0) { 482 printf("pcbc_encrypt decrypt error\n"); 483 err = 1; 484 } 485 486 printf("Doing "); 487 printf("cfb8 "); 488 err += cfb_test(8, cfb_cipher8); 489 printf("cfb16 "); 490 err += cfb_test(16, cfb_cipher16); 491 printf("cfb32 "); 492 err += cfb_test(32, cfb_cipher32); 493 printf("cfb48 "); 494 err += cfb_test(48, cfb_cipher48); 495 printf("cfb64 "); 496 err += cfb_test(64, cfb_cipher64); 497 498 printf("cfb64() "); 499 err += cfb64_test(cfb_cipher64); 500 501 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 502 for (i = 0; i < sizeof(plain); i++) 503 DES_cfb_encrypt(&(plain[i]), &(cfb_buf1[i]), 504 8, 1, &ks, &cfb_tmp, DES_ENCRYPT); 505 if (memcmp(cfb_cipher8, cfb_buf1, sizeof(plain)) != 0) { 506 printf("cfb_encrypt small encrypt error\n"); 507 err = 1; 508 } 509 510 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 511 for (i = 0; i < sizeof(plain); i++) 512 DES_cfb_encrypt(&(cfb_buf1[i]), &(cfb_buf2[i]), 513 8, 1, &ks, &cfb_tmp, DES_DECRYPT); 514 if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) { 515 printf("cfb_encrypt small decrypt error\n"); 516 err = 1; 517 } 518 519 printf("ede_cfb64() "); 520 err += ede_cfb64_test(cfb_cipher64); 521 522 printf("done\n"); 523 524 printf("Doing ofb\n"); 525 DES_set_key_checked(&ofb_key, &ks); 526 memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 527 DES_ofb_encrypt(plain, ofb_buf1, 64, sizeof(plain) / 8, &ks, &ofb_tmp); 528 if (memcmp(ofb_cipher, ofb_buf1, sizeof(ofb_buf1)) != 0) { 529 printf("ofb_encrypt encrypt error\n"); 530 printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", 531 ofb_buf1[8 + 0], ofb_buf1[8 + 1], ofb_buf1[8 + 2], 532 ofb_buf1[8 + 3], ofb_buf1[8 + 4], ofb_buf1[8 + 5], 533 ofb_buf1[8 + 6], ofb_buf1[8 + 7]); 534 printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", ofb_buf1[8 + 0], 535 ofb_cipher[8 + 1], ofb_cipher[8 + 2], ofb_cipher[8 + 3], 536 ofb_buf1[8 + 4], ofb_cipher[8 + 5], ofb_cipher[8 + 6], 537 ofb_cipher[8 + 7]); 538 err = 1; 539 } 540 memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 541 DES_ofb_encrypt(ofb_buf1, ofb_buf2, 64, sizeof(ofb_buf1) / 8, &ks, 542 &ofb_tmp); 543 if (memcmp(plain, ofb_buf2, sizeof(ofb_buf2)) != 0) { 544 printf("ofb_encrypt decrypt error\n"); 545 printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", 546 ofb_buf2[8 + 0], ofb_buf2[8 + 1], ofb_buf2[8 + 2], 547 ofb_buf2[8 + 3], ofb_buf2[8 + 4], ofb_buf2[8 + 5], 548 ofb_buf2[8 + 6], ofb_buf2[8 + 7]); 549 printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", plain[8 + 0], 550 plain[8 + 1], plain[8 + 2], plain[8 + 3], plain[8 + 4], 551 plain[8 + 5], plain[8 + 6], plain[8 + 7]); 552 err = 1; 553 } 554 555 printf("Doing ofb64\n"); 556 DES_set_key_checked(&ofb_key, &ks); 557 memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 558 memset(ofb_buf1, 0, sizeof(ofb_buf1)); 559 memset(ofb_buf2, 0, sizeof(ofb_buf1)); 560 num = 0; 561 for (i = 0; i < sizeof(plain); i++) { 562 DES_ofb64_encrypt(&(plain[i]), &(ofb_buf1[i]), 1, &ks, &ofb_tmp, &num); 563 } 564 if (memcmp(ofb_cipher, ofb_buf1, sizeof(ofb_buf1)) != 0) { 565 printf("ofb64_encrypt encrypt error\n"); 566 err = 1; 567 } 568 memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 569 num = 0; 570 DES_ofb64_encrypt(ofb_buf1, ofb_buf2, sizeof(ofb_buf1), &ks, &ofb_tmp, 571 &num); 572 if (memcmp(plain, ofb_buf2, sizeof(ofb_buf2)) != 0) { 573 printf("ofb64_encrypt decrypt error\n"); 574 err = 1; 575 } 576 577 printf("Doing ede_ofb64\n"); 578 DES_set_key_checked(&ofb_key, &ks); 579 memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 580 memset(ofb_buf1, 0, sizeof(ofb_buf1)); 581 memset(ofb_buf2, 0, sizeof(ofb_buf1)); 582 num = 0; 583 for (i = 0; i < sizeof(plain); i++) { 584 DES_ede3_ofb64_encrypt(&(plain[i]), &(ofb_buf1[i]), 1, &ks, &ks, 585 &ks, &ofb_tmp, &num); 586 } 587 if (memcmp(ofb_cipher, ofb_buf1, sizeof(ofb_buf1)) != 0) { 588 printf("ede_ofb64_encrypt encrypt error\n"); 589 err = 1; 590 } 591 memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 592 num = 0; 593 DES_ede3_ofb64_encrypt(ofb_buf1, ofb_buf2, sizeof(ofb_buf1), &ks, &ks, &ks, 594 &ofb_tmp, &num); 595 if (memcmp(plain, ofb_buf2, sizeof(ofb_buf2)) != 0) { 596 printf("ede_ofb64_encrypt decrypt error\n"); 597 err = 1; 598 } 599 600 printf("Doing cbc_cksum\n"); 601 DES_set_key_checked(&cbc_key, &ks); 602 cs = DES_cbc_cksum(cbc_data, &cret, strlen((char *)cbc_data), &ks, 603 &cbc_iv); 604 if (cs != cbc_cksum_ret) { 605 printf("bad return value (%08lX), should be %08lX\n", 606 (unsigned long)cs, (unsigned long)cbc_cksum_ret); 607 err = 1; 608 } 609 if (memcmp(cret, cbc_cksum_data, 8) != 0) { 610 printf("bad cbc_cksum block returned\n"); 611 err = 1; 612 } 613 614 printf("Doing quad_cksum\n"); 615 cs = DES_quad_cksum(cbc_data, (DES_cblock *)lqret, 616 (long)strlen((char *)cbc_data), 2, 617 (DES_cblock *)cbc_iv); 618 if (cs != 0x70d7a63aL) { 619 printf("quad_cksum error, ret %08lx should be 70d7a63a\n", 620 (unsigned long)cs); 621 err = 1; 622 } 623 if (lqret[0] != 0x327eba8dL) { 624 printf("quad_cksum error, out[0] %08lx is not %08lx\n", 625 (unsigned long)lqret[0], 0x327eba8dUL); 626 err = 1; 627 } 628 if (lqret[1] != 0x201a49ccL) { 629 printf("quad_cksum error, out[1] %08lx is not %08lx\n", 630 (unsigned long)lqret[1], 0x201a49ccUL); 631 err = 1; 632 } 633 if (lqret[2] != 0x70d7a63aL) { 634 printf("quad_cksum error, out[2] %08lx is not %08lx\n", 635 (unsigned long)lqret[2], 0x70d7a63aUL); 636 err = 1; 637 } 638 if (lqret[3] != 0x501c2c26L) { 639 printf("quad_cksum error, out[3] %08lx is not %08lx\n", 640 (unsigned long)lqret[3], 0x501c2c26UL); 641 err = 1; 642 } 643# endif 644 645 printf("input word alignment test"); 646 for (i = 0; i < 4; i++) { 647 printf(" %d", i); 648 DES_ncbc_encrypt(&(cbc_out[i]), cbc_in, 649 strlen((char *)cbc_data) + 1, &ks, 650 &cbc_iv, DES_ENCRYPT); 651 } 652 printf("\noutput word alignment test"); 653 for (i = 0; i < 4; i++) { 654 printf(" %d", i); 655 DES_ncbc_encrypt(cbc_out, &(cbc_in[i]), 656 strlen((char *)cbc_data) + 1, &ks, 657 &cbc_iv, DES_ENCRYPT); 658 } 659 printf("\n"); 660 printf("fast crypt test "); 661 str = DES_crypt("testing", "ef"); 662 if (strcmp("efGnQx2725bI2", str) != 0) { 663 printf("fast crypt error, %s should be efGnQx2725bI2\n", str); 664 err = 1; 665 } 666 str = DES_crypt("bca76;23", "yA"); 667 if (strcmp("yA1Rp/1hZXIJk", str) != 0) { 668 printf("fast crypt error, %s should be yA1Rp/1hZXIJk\n", str); 669 err = 1; 670 } 671 str = DES_crypt("testing", "y\202"); 672 if (str != NULL) { 673 printf("salt error only usascii are accepted\n"); 674 err = 1; 675 } 676 str = DES_crypt("testing", "\0A"); 677 if (str != NULL) { 678 printf("salt error cannot contain null terminator\n"); 679 err = 1; 680 } 681 str = DES_crypt("testing", "A"); 682 if (str != NULL) { 683 printf("salt error must be at least 2\n"); 684 err = 1; 685 } 686 printf("\n"); 687 return (err); 688} 689 690static char *pt(unsigned char *p) 691{ 692 static char bufs[10][20]; 693 static int bnum = 0; 694 char *ret; 695 int i; 696 static const char *f = "0123456789ABCDEF"; 697 698 ret = &(bufs[bnum++][0]); 699 bnum %= 10; 700 for (i = 0; i < 8; i++) { 701 ret[i * 2] = f[(p[i] >> 4) & 0xf]; 702 ret[i * 2 + 1] = f[p[i] & 0xf]; 703 } 704 ret[16] = '\0'; 705 return (ret); 706} 707 708# ifndef LIBDES_LIT 709 710static int cfb_test(int bits, unsigned char *cfb_cipher) 711{ 712 DES_key_schedule ks; 713 int i, err = 0; 714 715 DES_set_key_checked(&cfb_key, &ks); 716 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 717 DES_cfb_encrypt(plain, cfb_buf1, bits, sizeof(plain), &ks, &cfb_tmp, 718 DES_ENCRYPT); 719 if (memcmp(cfb_cipher, cfb_buf1, sizeof(plain)) != 0) { 720 err = 1; 721 printf("cfb_encrypt encrypt error\n"); 722 for (i = 0; i < 24; i += 8) 723 printf("%s\n", pt(&(cfb_buf1[i]))); 724 } 725 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 726 DES_cfb_encrypt(cfb_buf1, cfb_buf2, bits, sizeof(plain), &ks, &cfb_tmp, 727 DES_DECRYPT); 728 if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) { 729 err = 1; 730 printf("cfb_encrypt decrypt error\n"); 731 for (i = 0; i < 24; i += 8) 732 printf("%s\n", pt(&(cfb_buf1[i]))); 733 } 734 return (err); 735} 736 737static int cfb64_test(unsigned char *cfb_cipher) 738{ 739 DES_key_schedule ks; 740 int err = 0, i, n; 741 742 DES_set_key_checked(&cfb_key, &ks); 743 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 744 n = 0; 745 DES_cfb64_encrypt(plain, cfb_buf1, 12, &ks, &cfb_tmp, &n, DES_ENCRYPT); 746 DES_cfb64_encrypt(&(plain[12]), &(cfb_buf1[12]), sizeof(plain) - 12, &ks, 747 &cfb_tmp, &n, DES_ENCRYPT); 748 if (memcmp(cfb_cipher, cfb_buf1, sizeof(plain)) != 0) { 749 err = 1; 750 printf("cfb_encrypt encrypt error\n"); 751 for (i = 0; i < 24; i += 8) 752 printf("%s\n", pt(&(cfb_buf1[i]))); 753 } 754 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 755 n = 0; 756 DES_cfb64_encrypt(cfb_buf1, cfb_buf2, 17, &ks, &cfb_tmp, &n, DES_DECRYPT); 757 DES_cfb64_encrypt(&(cfb_buf1[17]), &(cfb_buf2[17]), 758 sizeof(plain) - 17, &ks, &cfb_tmp, &n, DES_DECRYPT); 759 if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) { 760 err = 1; 761 printf("cfb_encrypt decrypt error\n"); 762 for (i = 0; i < 24; i += 8) 763 printf("%s\n", pt(&(cfb_buf2[i]))); 764 } 765 return (err); 766} 767 768static int ede_cfb64_test(unsigned char *cfb_cipher) 769{ 770 DES_key_schedule ks; 771 int err = 0, i, n; 772 773 DES_set_key_checked(&cfb_key, &ks); 774 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 775 n = 0; 776 DES_ede3_cfb64_encrypt(plain, cfb_buf1, 12, &ks, &ks, &ks, &cfb_tmp, &n, 777 DES_ENCRYPT); 778 DES_ede3_cfb64_encrypt(&(plain[12]), &(cfb_buf1[12]), 779 sizeof(plain) - 12, &ks, &ks, &ks, 780 &cfb_tmp, &n, DES_ENCRYPT); 781 if (memcmp(cfb_cipher, cfb_buf1, sizeof(plain)) != 0) { 782 err = 1; 783 printf("ede_cfb_encrypt encrypt error\n"); 784 for (i = 0; i < 24; i += 8) 785 printf("%s\n", pt(&(cfb_buf1[i]))); 786 } 787 memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 788 n = 0; 789 DES_ede3_cfb64_encrypt(cfb_buf1, cfb_buf2, (long)17, &ks, &ks, &ks, 790 &cfb_tmp, &n, DES_DECRYPT); 791 DES_ede3_cfb64_encrypt(&(cfb_buf1[17]), &(cfb_buf2[17]), 792 sizeof(plain) - 17, &ks, &ks, &ks, 793 &cfb_tmp, &n, DES_DECRYPT); 794 if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) { 795 err = 1; 796 printf("ede_cfb_encrypt decrypt error\n"); 797 for (i = 0; i < 24; i += 8) 798 printf("%s\n", pt(&(cfb_buf2[i]))); 799 } 800 return (err); 801} 802 803# endif 804#endif 805