155714Skris/* crypto/bf/bftest.c */ 255714Skris/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 355714Skris * All rights reserved. 455714Skris * 555714Skris * This package is an SSL implementation written 655714Skris * by Eric Young (eay@cryptsoft.com). 755714Skris * The implementation was written so as to conform with Netscapes SSL. 8280304Sjkim * 955714Skris * This library is free for commercial and non-commercial use as long as 1055714Skris * the following conditions are aheared to. The following conditions 1155714Skris * apply to all code found in this distribution, be it the RC4, RSA, 1255714Skris * lhash, DES, etc., code; not just the SSL code. The SSL documentation 1355714Skris * included with this distribution is covered by the same copyright terms 1455714Skris * except that the holder is Tim Hudson (tjh@cryptsoft.com). 15280304Sjkim * 1655714Skris * Copyright remains Eric Young's, and as such any Copyright notices in 1755714Skris * the code are not to be removed. 1855714Skris * If this package is used in a product, Eric Young should be given attribution 1955714Skris * as the author of the parts of the library used. 2055714Skris * This can be in the form of a textual message at program startup or 2155714Skris * in documentation (online or textual) provided with the package. 22280304Sjkim * 2355714Skris * Redistribution and use in source and binary forms, with or without 2455714Skris * modification, are permitted provided that the following conditions 2555714Skris * are met: 2655714Skris * 1. Redistributions of source code must retain the copyright 2755714Skris * notice, this list of conditions and the following disclaimer. 2855714Skris * 2. Redistributions in binary form must reproduce the above copyright 2955714Skris * notice, this list of conditions and the following disclaimer in the 3055714Skris * documentation and/or other materials provided with the distribution. 3155714Skris * 3. All advertising materials mentioning features or use of this software 3255714Skris * must display the following acknowledgement: 3355714Skris * "This product includes cryptographic software written by 3455714Skris * Eric Young (eay@cryptsoft.com)" 3555714Skris * The word 'cryptographic' can be left out if the rouines from the library 3655714Skris * being used are not cryptographic related :-). 37280304Sjkim * 4. If you include any Windows specific code (or a derivative thereof) from 3855714Skris * the apps directory (application code) you must include an acknowledgement: 3955714Skris * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 40280304Sjkim * 4155714Skris * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 4255714Skris * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 4355714Skris * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 4455714Skris * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 4555714Skris * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 4655714Skris * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 4755714Skris * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 4855714Skris * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 4955714Skris * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 5055714Skris * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 5155714Skris * SUCH DAMAGE. 52280304Sjkim * 5355714Skris * The licence and distribution terms for any publically available version or 5455714Skris * derivative of this code cannot be changed. i.e. this code cannot simply be 5555714Skris * copied and put under another distribution licence 5655714Skris * [including the GNU Public Licence.] 5755714Skris */ 5855714Skris 59280304Sjkim/* 60280304Sjkim * This has been a quickly hacked 'ideatest.c'. When I add tests for other 61280304Sjkim * RC2 modes, more of the code will be uncommented. 62280304Sjkim */ 6355714Skris 6455714Skris#include <stdio.h> 6555714Skris#include <string.h> 6655714Skris#include <stdlib.h> 67160814Ssimon#include <openssl/opensslconf.h> /* To see if OPENSSL_NO_BF is defined */ 6855714Skris 69109998Smarkm#include "../e_os.h" 70109998Smarkm 71109998Smarkm#ifdef OPENSSL_NO_BF 7255714Skrisint main(int argc, char *argv[]) 7355714Skris{ 7455714Skris printf("No BF support\n"); 75280304Sjkim return (0); 7655714Skris} 7755714Skris#else 78280304Sjkim# include <openssl/blowfish.h> 7955714Skris 80280304Sjkim# ifdef CHARSET_EBCDIC 81280304Sjkim# include <openssl/ebcdic.h> 82280304Sjkim# endif 8355714Skris 84280304Sjkimstatic char *bf_key[2] = { 85280304Sjkim "abcdefghijklmnopqrstuvwxyz", 86280304Sjkim "Who is John Galt?" 87280304Sjkim}; 8855714Skris 8955714Skris/* big endian */ 90280304Sjkimstatic BF_LONG bf_plain[2][2] = { 91280304Sjkim {0x424c4f57L, 0x46495348L}, 92280304Sjkim {0xfedcba98L, 0x76543210L} 93280304Sjkim}; 9455714Skris 95280304Sjkimstatic BF_LONG bf_cipher[2][2] = { 96280304Sjkim {0x324ed0feL, 0xf413a203L}, 97280304Sjkim {0xcc91732bL, 0x8022f684L} 98280304Sjkim}; 99280304Sjkim 10055714Skris/************/ 10155714Skris 10255714Skris/* Lets use the DES test vectors :-) */ 103280304Sjkim# define NUM_TESTS 34 104280304Sjkimstatic unsigned char ecb_data[NUM_TESTS][8] = { 105280304Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 106280304Sjkim {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 107280304Sjkim {0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 108280304Sjkim {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 109280304Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 110280304Sjkim {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 111280304Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 112280304Sjkim {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, 113280304Sjkim {0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57}, 114280304Sjkim {0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E}, 115280304Sjkim {0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86}, 116280304Sjkim {0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E}, 117280304Sjkim {0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6}, 118280304Sjkim {0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE}, 119280304Sjkim {0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6}, 120280304Sjkim {0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE}, 121280304Sjkim {0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16}, 122280304Sjkim {0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F}, 123280304Sjkim {0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46}, 124280304Sjkim {0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E}, 125280304Sjkim {0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76}, 126280304Sjkim {0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07}, 127280304Sjkim {0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F}, 128280304Sjkim {0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7}, 129280304Sjkim {0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF}, 130280304Sjkim {0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6}, 131280304Sjkim {0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF}, 132280304Sjkim {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 133280304Sjkim {0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E}, 134280304Sjkim {0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE}, 135280304Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 136280304Sjkim {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 137280304Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 138280304Sjkim {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10} 139280304Sjkim}; 14055714Skris 141280304Sjkimstatic unsigned char plain_data[NUM_TESTS][8] = { 142280304Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 143280304Sjkim {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 144280304Sjkim {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, 145280304Sjkim {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 146280304Sjkim {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 147280304Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 148280304Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 149280304Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 150280304Sjkim {0x01, 0xA1, 0xD6, 0xD0, 0x39, 0x77, 0x67, 0x42}, 151280304Sjkim {0x5C, 0xD5, 0x4C, 0xA8, 0x3D, 0xEF, 0x57, 0xDA}, 152280304Sjkim {0x02, 0x48, 0xD4, 0x38, 0x06, 0xF6, 0x71, 0x72}, 153280304Sjkim {0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A}, 154280304Sjkim {0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2}, 155280304Sjkim {0x05, 0x9B, 0x5E, 0x08, 0x51, 0xCF, 0x14, 0x3A}, 156280304Sjkim {0x07, 0x56, 0xD8, 0xE0, 0x77, 0x47, 0x61, 0xD2}, 157280304Sjkim {0x76, 0x25, 0x14, 0xB8, 0x29, 0xBF, 0x48, 0x6A}, 158280304Sjkim {0x3B, 0xDD, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02}, 159280304Sjkim {0x26, 0x95, 0x5F, 0x68, 0x35, 0xAF, 0x60, 0x9A}, 160280304Sjkim {0x16, 0x4D, 0x5E, 0x40, 0x4F, 0x27, 0x52, 0x32}, 161280304Sjkim {0x6B, 0x05, 0x6E, 0x18, 0x75, 0x9F, 0x5C, 0xCA}, 162280304Sjkim {0x00, 0x4B, 0xD6, 0xEF, 0x09, 0x17, 0x60, 0x62}, 163280304Sjkim {0x48, 0x0D, 0x39, 0x00, 0x6E, 0xE7, 0x62, 0xF2}, 164280304Sjkim {0x43, 0x75, 0x40, 0xC8, 0x69, 0x8F, 0x3C, 0xFA}, 165280304Sjkim {0x07, 0x2D, 0x43, 0xA0, 0x77, 0x07, 0x52, 0x92}, 166280304Sjkim {0x02, 0xFE, 0x55, 0x77, 0x81, 0x17, 0xF1, 0x2A}, 167280304Sjkim {0x1D, 0x9D, 0x5C, 0x50, 0x18, 0xF7, 0x28, 0xC2}, 168280304Sjkim {0x30, 0x55, 0x32, 0x28, 0x6D, 0x6F, 0x29, 0x5A}, 169280304Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 170280304Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 171280304Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 172280304Sjkim {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 173280304Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 174280304Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 175280304Sjkim {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} 176280304Sjkim}; 17755714Skris 178280304Sjkimstatic unsigned char cipher_data[NUM_TESTS][8] = { 179280304Sjkim {0x4E, 0xF9, 0x97, 0x45, 0x61, 0x98, 0xDD, 0x78}, 180280304Sjkim {0x51, 0x86, 0x6F, 0xD5, 0xB8, 0x5E, 0xCB, 0x8A}, 181280304Sjkim {0x7D, 0x85, 0x6F, 0x9A, 0x61, 0x30, 0x63, 0xF2}, 182280304Sjkim {0x24, 0x66, 0xDD, 0x87, 0x8B, 0x96, 0x3C, 0x9D}, 183280304Sjkim {0x61, 0xF9, 0xC3, 0x80, 0x22, 0x81, 0xB0, 0x96}, 184280304Sjkim {0x7D, 0x0C, 0xC6, 0x30, 0xAF, 0xDA, 0x1E, 0xC7}, 185280304Sjkim {0x4E, 0xF9, 0x97, 0x45, 0x61, 0x98, 0xDD, 0x78}, 186280304Sjkim {0x0A, 0xCE, 0xAB, 0x0F, 0xC6, 0xA0, 0xA2, 0x8D}, 187280304Sjkim {0x59, 0xC6, 0x82, 0x45, 0xEB, 0x05, 0x28, 0x2B}, 188280304Sjkim {0xB1, 0xB8, 0xCC, 0x0B, 0x25, 0x0F, 0x09, 0xA0}, 189280304Sjkim {0x17, 0x30, 0xE5, 0x77, 0x8B, 0xEA, 0x1D, 0xA4}, 190280304Sjkim {0xA2, 0x5E, 0x78, 0x56, 0xCF, 0x26, 0x51, 0xEB}, 191280304Sjkim {0x35, 0x38, 0x82, 0xB1, 0x09, 0xCE, 0x8F, 0x1A}, 192280304Sjkim {0x48, 0xF4, 0xD0, 0x88, 0x4C, 0x37, 0x99, 0x18}, 193280304Sjkim {0x43, 0x21, 0x93, 0xB7, 0x89, 0x51, 0xFC, 0x98}, 194280304Sjkim {0x13, 0xF0, 0x41, 0x54, 0xD6, 0x9D, 0x1A, 0xE5}, 195280304Sjkim {0x2E, 0xED, 0xDA, 0x93, 0xFF, 0xD3, 0x9C, 0x79}, 196280304Sjkim {0xD8, 0x87, 0xE0, 0x39, 0x3C, 0x2D, 0xA6, 0xE3}, 197280304Sjkim {0x5F, 0x99, 0xD0, 0x4F, 0x5B, 0x16, 0x39, 0x69}, 198280304Sjkim {0x4A, 0x05, 0x7A, 0x3B, 0x24, 0xD3, 0x97, 0x7B}, 199280304Sjkim {0x45, 0x20, 0x31, 0xC1, 0xE4, 0xFA, 0xDA, 0x8E}, 200280304Sjkim {0x75, 0x55, 0xAE, 0x39, 0xF5, 0x9B, 0x87, 0xBD}, 201280304Sjkim {0x53, 0xC5, 0x5F, 0x9C, 0xB4, 0x9F, 0xC0, 0x19}, 202280304Sjkim {0x7A, 0x8E, 0x7B, 0xFA, 0x93, 0x7E, 0x89, 0xA3}, 203280304Sjkim {0xCF, 0x9C, 0x5D, 0x7A, 0x49, 0x86, 0xAD, 0xB5}, 204280304Sjkim {0xD1, 0xAB, 0xB2, 0x90, 0x65, 0x8B, 0xC7, 0x78}, 205280304Sjkim {0x55, 0xCB, 0x37, 0x74, 0xD1, 0x3E, 0xF2, 0x01}, 206280304Sjkim {0xFA, 0x34, 0xEC, 0x48, 0x47, 0xB2, 0x68, 0xB2}, 207280304Sjkim {0xA7, 0x90, 0x79, 0x51, 0x08, 0xEA, 0x3C, 0xAE}, 208280304Sjkim {0xC3, 0x9E, 0x07, 0x2D, 0x9F, 0xAC, 0x63, 0x1D}, 209280304Sjkim {0x01, 0x49, 0x33, 0xE0, 0xCD, 0xAF, 0xF6, 0xE4}, 210280304Sjkim {0xF2, 0x1E, 0x9A, 0x77, 0xB7, 0x1C, 0x49, 0xBC}, 211280304Sjkim {0x24, 0x59, 0x46, 0x88, 0x57, 0x54, 0x36, 0x9A}, 212280304Sjkim {0x6B, 0x5C, 0x5A, 0x9C, 0x5D, 0x9E, 0x0A, 0x5A}, 213280304Sjkim}; 21455714Skris 215280304Sjkimstatic unsigned char cbc_key[16] = { 216280304Sjkim 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 217280304Sjkim 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 218280304Sjkim}; 219280304Sjkimstatic unsigned char cbc_iv[8] = 220280304Sjkim { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }; 221280304Sjkimstatic char cbc_data[40] = "7654321 Now is the time for "; 222280304Sjkimstatic unsigned char cbc_ok[32] = { 223280304Sjkim 0x6B, 0x77, 0xB4, 0xD6, 0x30, 0x06, 0xDE, 0xE6, 224280304Sjkim 0x05, 0xB1, 0x56, 0xE2, 0x74, 0x03, 0x97, 0x93, 225280304Sjkim 0x58, 0xDE, 0xB9, 0xE7, 0x15, 0x46, 0x16, 0xD9, 226280304Sjkim 0x59, 0xF1, 0x65, 0x2B, 0xD5, 0xFF, 0x92, 0xCC 227280304Sjkim}; 22855714Skris 229280304Sjkimstatic unsigned char cfb64_ok[] = { 230280304Sjkim 0xE7, 0x32, 0x14, 0xA2, 0x82, 0x21, 0x39, 0xCA, 231280304Sjkim 0xF2, 0x6E, 0xCF, 0x6D, 0x2E, 0xB9, 0xE7, 0x6E, 232280304Sjkim 0x3D, 0xA3, 0xDE, 0x04, 0xD1, 0x51, 0x72, 0x00, 233280304Sjkim 0x51, 0x9D, 0x57, 0xA6, 0xC3 234280304Sjkim}; 23555714Skris 236280304Sjkimstatic unsigned char ofb64_ok[] = { 237280304Sjkim 0xE7, 0x32, 0x14, 0xA2, 0x82, 0x21, 0x39, 0xCA, 238280304Sjkim 0x62, 0xB3, 0x43, 0xCC, 0x5B, 0x65, 0x58, 0x73, 239280304Sjkim 0x10, 0xDD, 0x90, 0x8D, 0x0C, 0x24, 0x1B, 0x22, 240280304Sjkim 0x63, 0xC2, 0xCF, 0x80, 0xDA 241280304Sjkim}; 24255714Skris 243280304Sjkim# define KEY_TEST_NUM 25 244280304Sjkimstatic unsigned char key_test[KEY_TEST_NUM] = { 245280304Sjkim 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87, 246280304Sjkim 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f, 247280304Sjkim 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 248280304Sjkim 0x88 249280304Sjkim}; 25055714Skris 251280304Sjkimstatic unsigned char key_data[8] = 252280304Sjkim { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 }; 25355714Skris 254280304Sjkimstatic unsigned char key_out[KEY_TEST_NUM][8] = { 255280304Sjkim {0xF9, 0xAD, 0x59, 0x7C, 0x49, 0xDB, 0x00, 0x5E}, 256280304Sjkim {0xE9, 0x1D, 0x21, 0xC1, 0xD9, 0x61, 0xA6, 0xD6}, 257280304Sjkim {0xE9, 0xC2, 0xB7, 0x0A, 0x1B, 0xC6, 0x5C, 0xF3}, 258280304Sjkim {0xBE, 0x1E, 0x63, 0x94, 0x08, 0x64, 0x0F, 0x05}, 259280304Sjkim {0xB3, 0x9E, 0x44, 0x48, 0x1B, 0xDB, 0x1E, 0x6E}, 260280304Sjkim {0x94, 0x57, 0xAA, 0x83, 0xB1, 0x92, 0x8C, 0x0D}, 261280304Sjkim {0x8B, 0xB7, 0x70, 0x32, 0xF9, 0x60, 0x62, 0x9D}, 262280304Sjkim {0xE8, 0x7A, 0x24, 0x4E, 0x2C, 0xC8, 0x5E, 0x82}, 263280304Sjkim {0x15, 0x75, 0x0E, 0x7A, 0x4F, 0x4E, 0xC5, 0x77}, 264280304Sjkim {0x12, 0x2B, 0xA7, 0x0B, 0x3A, 0xB6, 0x4A, 0xE0}, 265280304Sjkim {0x3A, 0x83, 0x3C, 0x9A, 0xFF, 0xC5, 0x37, 0xF6}, 266280304Sjkim {0x94, 0x09, 0xDA, 0x87, 0xA9, 0x0F, 0x6B, 0xF2}, 267280304Sjkim {0x88, 0x4F, 0x80, 0x62, 0x50, 0x60, 0xB8, 0xB4}, 268280304Sjkim {0x1F, 0x85, 0x03, 0x1C, 0x19, 0xE1, 0x19, 0x68}, 269280304Sjkim {0x79, 0xD9, 0x37, 0x3A, 0x71, 0x4C, 0xA3, 0x4F}, 270280304Sjkim {0x93, 0x14, 0x28, 0x87, 0xEE, 0x3B, 0xE1, 0x5C}, 271280304Sjkim {0x03, 0x42, 0x9E, 0x83, 0x8C, 0xE2, 0xD1, 0x4B}, 272280304Sjkim {0xA4, 0x29, 0x9E, 0x27, 0x46, 0x9F, 0xF6, 0x7B}, 273280304Sjkim {0xAF, 0xD5, 0xAE, 0xD1, 0xC1, 0xBC, 0x96, 0xA8}, 274280304Sjkim {0x10, 0x85, 0x1C, 0x0E, 0x38, 0x58, 0xDA, 0x9F}, 275280304Sjkim {0xE6, 0xF5, 0x1E, 0xD7, 0x9B, 0x9D, 0xB2, 0x1F}, 276280304Sjkim {0x64, 0xA6, 0xE1, 0x4A, 0xFD, 0x36, 0xB4, 0x6F}, 277280304Sjkim {0x80, 0xC7, 0xD7, 0xD4, 0x5A, 0x54, 0x79, 0xAD}, 278280304Sjkim {0x05, 0x04, 0x4B, 0x62, 0xFA, 0x52, 0xD0, 0x80}, 279280304Sjkim}; 28055714Skris 281280304Sjkimstatic int test(void); 282280304Sjkimstatic int print_test_data(void); 28355714Skrisint main(int argc, char *argv[]) 284280304Sjkim{ 285280304Sjkim int ret; 28655714Skris 287280304Sjkim if (argc > 1) 288280304Sjkim ret = print_test_data(); 289280304Sjkim else 290280304Sjkim ret = test(); 29155714Skris 292280304Sjkim# ifdef OPENSSL_SYS_NETWARE 293280304Sjkim if (ret) 294280304Sjkim printf("ERROR: %d\n", ret); 295280304Sjkim# endif 296280304Sjkim EXIT(ret); 297280304Sjkim return (0); 298280304Sjkim} 29955714Skris 30055714Skrisstatic int print_test_data(void) 301280304Sjkim{ 302280304Sjkim unsigned int i, j; 30355714Skris 304280304Sjkim printf("ecb test data\n"); 305280304Sjkim printf("key bytes\t\tclear bytes\t\tcipher bytes\n"); 306280304Sjkim for (i = 0; i < NUM_TESTS; i++) { 307280304Sjkim for (j = 0; j < 8; j++) 308280304Sjkim printf("%02X", ecb_data[i][j]); 309280304Sjkim printf("\t"); 310280304Sjkim for (j = 0; j < 8; j++) 311280304Sjkim printf("%02X", plain_data[i][j]); 312280304Sjkim printf("\t"); 313280304Sjkim for (j = 0; j < 8; j++) 314280304Sjkim printf("%02X", cipher_data[i][j]); 315280304Sjkim printf("\n"); 316280304Sjkim } 31755714Skris 318280304Sjkim printf("set_key test data\n"); 319280304Sjkim printf("data[8]= "); 320280304Sjkim for (j = 0; j < 8; j++) 321280304Sjkim printf("%02X", key_data[j]); 322280304Sjkim printf("\n"); 323280304Sjkim for (i = 0; i < KEY_TEST_NUM - 1; i++) { 324280304Sjkim printf("c="); 325280304Sjkim for (j = 0; j < 8; j++) 326280304Sjkim printf("%02X", key_out[i][j]); 327280304Sjkim printf(" k[%2u]=", i + 1); 328280304Sjkim for (j = 0; j < i + 1; j++) 329280304Sjkim printf("%02X", key_test[j]); 330280304Sjkim printf("\n"); 331280304Sjkim } 33255714Skris 333280304Sjkim printf("\nchaining mode test data\n"); 334280304Sjkim printf("key[16] = "); 335280304Sjkim for (j = 0; j < 16; j++) 336280304Sjkim printf("%02X", cbc_key[j]); 337280304Sjkim printf("\niv[8] = "); 338280304Sjkim for (j = 0; j < 8; j++) 339280304Sjkim printf("%02X", cbc_iv[j]); 340280304Sjkim printf("\ndata[%d] = '%s'", (int)strlen(cbc_data) + 1, cbc_data); 341280304Sjkim printf("\ndata[%d] = ", (int)strlen(cbc_data) + 1); 342280304Sjkim for (j = 0; j < strlen(cbc_data) + 1; j++) 343280304Sjkim printf("%02X", cbc_data[j]); 344280304Sjkim printf("\n"); 345280304Sjkim printf("cbc cipher text\n"); 346280304Sjkim printf("cipher[%d]= ", 32); 347280304Sjkim for (j = 0; j < 32; j++) 348280304Sjkim printf("%02X", cbc_ok[j]); 349280304Sjkim printf("\n"); 35055714Skris 351280304Sjkim printf("cfb64 cipher text\n"); 352280304Sjkim printf("cipher[%d]= ", (int)strlen(cbc_data) + 1); 353280304Sjkim for (j = 0; j < strlen(cbc_data) + 1; j++) 354280304Sjkim printf("%02X", cfb64_ok[j]); 355280304Sjkim printf("\n"); 35655714Skris 357280304Sjkim printf("ofb64 cipher text\n"); 358280304Sjkim printf("cipher[%d]= ", (int)strlen(cbc_data) + 1); 359280304Sjkim for (j = 0; j < strlen(cbc_data) + 1; j++) 360280304Sjkim printf("%02X", ofb64_ok[j]); 361280304Sjkim printf("\n"); 362280304Sjkim return (0); 363280304Sjkim} 36455714Skris 36555714Skrisstatic int test(void) 366280304Sjkim{ 367280304Sjkim unsigned char cbc_in[40], cbc_out[40], iv[8]; 368280304Sjkim int i, n, err = 0; 369280304Sjkim BF_KEY key; 370280304Sjkim BF_LONG data[2]; 371280304Sjkim unsigned char out[8]; 372280304Sjkim BF_LONG len; 37355714Skris 374280304Sjkim# ifdef CHARSET_EBCDIC 375280304Sjkim ebcdic2ascii(cbc_data, cbc_data, strlen(cbc_data)); 376280304Sjkim# endif 37755714Skris 378280304Sjkim printf("testing blowfish in raw ecb mode\n"); 379280304Sjkim for (n = 0; n < 2; n++) { 380280304Sjkim# ifdef CHARSET_EBCDIC 381280304Sjkim ebcdic2ascii(bf_key[n], bf_key[n], strlen(bf_key[n])); 382280304Sjkim# endif 383280304Sjkim BF_set_key(&key, strlen(bf_key[n]), (unsigned char *)bf_key[n]); 38455714Skris 385280304Sjkim data[0] = bf_plain[n][0]; 386280304Sjkim data[1] = bf_plain[n][1]; 387280304Sjkim BF_encrypt(data, &key); 388280304Sjkim if (memcmp(&(bf_cipher[n][0]), &(data[0]), 8) != 0) { 389280304Sjkim printf("BF_encrypt error encrypting\n"); 390280304Sjkim printf("got :"); 391280304Sjkim for (i = 0; i < 2; i++) 392280304Sjkim printf("%08lX ", (unsigned long)data[i]); 393280304Sjkim printf("\n"); 394280304Sjkim printf("expected:"); 395280304Sjkim for (i = 0; i < 2; i++) 396280304Sjkim printf("%08lX ", (unsigned long)bf_cipher[n][i]); 397280304Sjkim err = 1; 398280304Sjkim printf("\n"); 399280304Sjkim } 40055714Skris 401280304Sjkim BF_decrypt(&(data[0]), &key); 402280304Sjkim if (memcmp(&(bf_plain[n][0]), &(data[0]), 8) != 0) { 403280304Sjkim printf("BF_encrypt error decrypting\n"); 404280304Sjkim printf("got :"); 405280304Sjkim for (i = 0; i < 2; i++) 406280304Sjkim printf("%08lX ", (unsigned long)data[i]); 407280304Sjkim printf("\n"); 408280304Sjkim printf("expected:"); 409280304Sjkim for (i = 0; i < 2; i++) 410280304Sjkim printf("%08lX ", (unsigned long)bf_plain[n][i]); 411280304Sjkim printf("\n"); 412280304Sjkim err = 1; 413280304Sjkim } 414280304Sjkim } 41555714Skris 416280304Sjkim printf("testing blowfish in ecb mode\n"); 41755714Skris 418280304Sjkim for (n = 0; n < NUM_TESTS; n++) { 419280304Sjkim BF_set_key(&key, 8, ecb_data[n]); 42055714Skris 421280304Sjkim BF_ecb_encrypt(&(plain_data[n][0]), out, &key, BF_ENCRYPT); 422280304Sjkim if (memcmp(&(cipher_data[n][0]), out, 8) != 0) { 423280304Sjkim printf("BF_ecb_encrypt blowfish error encrypting\n"); 424280304Sjkim printf("got :"); 425280304Sjkim for (i = 0; i < 8; i++) 426280304Sjkim printf("%02X ", out[i]); 427280304Sjkim printf("\n"); 428280304Sjkim printf("expected:"); 429280304Sjkim for (i = 0; i < 8; i++) 430280304Sjkim printf("%02X ", cipher_data[n][i]); 431280304Sjkim err = 1; 432280304Sjkim printf("\n"); 433280304Sjkim } 43455714Skris 435280304Sjkim BF_ecb_encrypt(out, out, &key, BF_DECRYPT); 436280304Sjkim if (memcmp(&(plain_data[n][0]), out, 8) != 0) { 437280304Sjkim printf("BF_ecb_encrypt error decrypting\n"); 438280304Sjkim printf("got :"); 439280304Sjkim for (i = 0; i < 8; i++) 440280304Sjkim printf("%02X ", out[i]); 441280304Sjkim printf("\n"); 442280304Sjkim printf("expected:"); 443280304Sjkim for (i = 0; i < 8; i++) 444280304Sjkim printf("%02X ", plain_data[n][i]); 445280304Sjkim printf("\n"); 446280304Sjkim err = 1; 447280304Sjkim } 448280304Sjkim } 44955714Skris 450280304Sjkim printf("testing blowfish set_key\n"); 451280304Sjkim for (n = 1; n < KEY_TEST_NUM; n++) { 452280304Sjkim BF_set_key(&key, n, key_test); 453280304Sjkim BF_ecb_encrypt(key_data, out, &key, BF_ENCRYPT); 454280304Sjkim /* mips-sgi-irix6.5-gcc vv -mabi=64 bug workaround */ 455280304Sjkim if (memcmp(out, &(key_out[i = n - 1][0]), 8) != 0) { 456280304Sjkim printf("blowfish setkey error\n"); 457280304Sjkim err = 1; 458280304Sjkim } 459280304Sjkim } 46055714Skris 461280304Sjkim printf("testing blowfish in cbc mode\n"); 462280304Sjkim len = strlen(cbc_data) + 1; 46355714Skris 464280304Sjkim BF_set_key(&key, 16, cbc_key); 465280304Sjkim memset(cbc_in, 0, sizeof cbc_in); 466280304Sjkim memset(cbc_out, 0, sizeof cbc_out); 467280304Sjkim memcpy(iv, cbc_iv, sizeof iv); 468280304Sjkim BF_cbc_encrypt((unsigned char *)cbc_data, cbc_out, len, 469280304Sjkim &key, iv, BF_ENCRYPT); 470280304Sjkim if (memcmp(cbc_out, cbc_ok, 32) != 0) { 471280304Sjkim err = 1; 472280304Sjkim printf("BF_cbc_encrypt encrypt error\n"); 473280304Sjkim for (i = 0; i < 32; i++) 474280304Sjkim printf("0x%02X,", cbc_out[i]); 475280304Sjkim } 476280304Sjkim memcpy(iv, cbc_iv, 8); 477280304Sjkim BF_cbc_encrypt(cbc_out, cbc_in, len, &key, iv, BF_DECRYPT); 478280304Sjkim if (memcmp(cbc_in, cbc_data, strlen(cbc_data) + 1) != 0) { 479280304Sjkim printf("BF_cbc_encrypt decrypt error\n"); 480280304Sjkim err = 1; 481280304Sjkim } 48255714Skris 483280304Sjkim printf("testing blowfish in cfb64 mode\n"); 48455714Skris 485280304Sjkim BF_set_key(&key, 16, cbc_key); 486280304Sjkim memset(cbc_in, 0, 40); 487280304Sjkim memset(cbc_out, 0, 40); 488280304Sjkim memcpy(iv, cbc_iv, 8); 489280304Sjkim n = 0; 490280304Sjkim BF_cfb64_encrypt((unsigned char *)cbc_data, cbc_out, (long)13, 491280304Sjkim &key, iv, &n, BF_ENCRYPT); 492280304Sjkim BF_cfb64_encrypt((unsigned char *)&(cbc_data[13]), &(cbc_out[13]), 493280304Sjkim len - 13, &key, iv, &n, BF_ENCRYPT); 494280304Sjkim if (memcmp(cbc_out, cfb64_ok, (int)len) != 0) { 495280304Sjkim err = 1; 496280304Sjkim printf("BF_cfb64_encrypt encrypt error\n"); 497280304Sjkim for (i = 0; i < (int)len; i++) 498280304Sjkim printf("0x%02X,", cbc_out[i]); 499280304Sjkim } 500280304Sjkim n = 0; 501280304Sjkim memcpy(iv, cbc_iv, 8); 502280304Sjkim BF_cfb64_encrypt(cbc_out, cbc_in, 17, &key, iv, &n, BF_DECRYPT); 503280304Sjkim BF_cfb64_encrypt(&(cbc_out[17]), &(cbc_in[17]), len - 17, 504280304Sjkim &key, iv, &n, BF_DECRYPT); 505280304Sjkim if (memcmp(cbc_in, cbc_data, (int)len) != 0) { 506280304Sjkim printf("BF_cfb64_encrypt decrypt error\n"); 507280304Sjkim err = 1; 508280304Sjkim } 50955714Skris 510280304Sjkim printf("testing blowfish in ofb64\n"); 51155714Skris 512280304Sjkim BF_set_key(&key, 16, cbc_key); 513280304Sjkim memset(cbc_in, 0, 40); 514280304Sjkim memset(cbc_out, 0, 40); 515280304Sjkim memcpy(iv, cbc_iv, 8); 516280304Sjkim n = 0; 517280304Sjkim BF_ofb64_encrypt((unsigned char *)cbc_data, cbc_out, (long)13, &key, iv, 518280304Sjkim &n); 519280304Sjkim BF_ofb64_encrypt((unsigned char *)&(cbc_data[13]), &(cbc_out[13]), 520280304Sjkim len - 13, &key, iv, &n); 521280304Sjkim if (memcmp(cbc_out, ofb64_ok, (int)len) != 0) { 522280304Sjkim err = 1; 523280304Sjkim printf("BF_ofb64_encrypt encrypt error\n"); 524280304Sjkim for (i = 0; i < (int)len; i++) 525280304Sjkim printf("0x%02X,", cbc_out[i]); 526280304Sjkim } 527280304Sjkim n = 0; 528280304Sjkim memcpy(iv, cbc_iv, 8); 529280304Sjkim BF_ofb64_encrypt(cbc_out, cbc_in, 17, &key, iv, &n); 530280304Sjkim BF_ofb64_encrypt(&(cbc_out[17]), &(cbc_in[17]), len - 17, &key, iv, &n); 531280304Sjkim if (memcmp(cbc_in, cbc_data, (int)len) != 0) { 532280304Sjkim printf("BF_ofb64_encrypt decrypt error\n"); 533280304Sjkim err = 1; 534280304Sjkim } 53555714Skris 536280304Sjkim return (err); 537280304Sjkim} 53855714Skris#endif 539