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. 8296465Sdelphij * 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). 15296465Sdelphij * 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. 22296465Sdelphij * 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 :-). 37296465Sdelphij * 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)" 40296465Sdelphij * 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. 52296465Sdelphij * 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 59296465Sdelphij/* 60296465Sdelphij * This has been a quickly hacked 'ideatest.c'. When I add tests for other 61296465Sdelphij * RC2 modes, more of the code will be uncommented. 62296465Sdelphij */ 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"); 75296465Sdelphij return (0); 7655714Skris} 7755714Skris#else 78296465Sdelphij# include <openssl/blowfish.h> 7955714Skris 80296465Sdelphij# ifdef CHARSET_EBCDIC 81296465Sdelphij# include <openssl/ebcdic.h> 82296465Sdelphij# endif 8355714Skris 84296465Sdelphijstatic char *bf_key[2] = { 85296465Sdelphij "abcdefghijklmnopqrstuvwxyz", 86296465Sdelphij "Who is John Galt?" 87296465Sdelphij}; 8855714Skris 8955714Skris/* big endian */ 90296465Sdelphijstatic BF_LONG bf_plain[2][2] = { 91296465Sdelphij {0x424c4f57L, 0x46495348L}, 92296465Sdelphij {0xfedcba98L, 0x76543210L} 93296465Sdelphij}; 9455714Skris 95296465Sdelphijstatic BF_LONG bf_cipher[2][2] = { 96296465Sdelphij {0x324ed0feL, 0xf413a203L}, 97296465Sdelphij {0xcc91732bL, 0x8022f684L} 98296465Sdelphij}; 99296465Sdelphij 10055714Skris/************/ 10155714Skris 10255714Skris/* Lets use the DES test vectors :-) */ 103296465Sdelphij# define NUM_TESTS 34 104296465Sdelphijstatic unsigned char ecb_data[NUM_TESTS][8] = { 105296465Sdelphij {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 106296465Sdelphij {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 107296465Sdelphij {0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 108296465Sdelphij {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 109296465Sdelphij {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 110296465Sdelphij {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 111296465Sdelphij {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 112296465Sdelphij {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, 113296465Sdelphij {0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57}, 114296465Sdelphij {0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E}, 115296465Sdelphij {0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86}, 116296465Sdelphij {0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E}, 117296465Sdelphij {0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6}, 118296465Sdelphij {0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE}, 119296465Sdelphij {0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6}, 120296465Sdelphij {0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE}, 121296465Sdelphij {0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16}, 122296465Sdelphij {0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F}, 123296465Sdelphij {0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46}, 124296465Sdelphij {0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E}, 125296465Sdelphij {0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76}, 126296465Sdelphij {0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07}, 127296465Sdelphij {0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F}, 128296465Sdelphij {0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7}, 129296465Sdelphij {0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF}, 130296465Sdelphij {0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6}, 131296465Sdelphij {0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF}, 132296465Sdelphij {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 133296465Sdelphij {0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E}, 134296465Sdelphij {0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE}, 135296465Sdelphij {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 136296465Sdelphij {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 137296465Sdelphij {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 138296465Sdelphij {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10} 139296465Sdelphij}; 14055714Skris 141296465Sdelphijstatic unsigned char plain_data[NUM_TESTS][8] = { 142296465Sdelphij {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 143296465Sdelphij {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 144296465Sdelphij {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, 145296465Sdelphij {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 146296465Sdelphij {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 147296465Sdelphij {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 148296465Sdelphij {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 149296465Sdelphij {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 150296465Sdelphij {0x01, 0xA1, 0xD6, 0xD0, 0x39, 0x77, 0x67, 0x42}, 151296465Sdelphij {0x5C, 0xD5, 0x4C, 0xA8, 0x3D, 0xEF, 0x57, 0xDA}, 152296465Sdelphij {0x02, 0x48, 0xD4, 0x38, 0x06, 0xF6, 0x71, 0x72}, 153296465Sdelphij {0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A}, 154296465Sdelphij {0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2}, 155296465Sdelphij {0x05, 0x9B, 0x5E, 0x08, 0x51, 0xCF, 0x14, 0x3A}, 156296465Sdelphij {0x07, 0x56, 0xD8, 0xE0, 0x77, 0x47, 0x61, 0xD2}, 157296465Sdelphij {0x76, 0x25, 0x14, 0xB8, 0x29, 0xBF, 0x48, 0x6A}, 158296465Sdelphij {0x3B, 0xDD, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02}, 159296465Sdelphij {0x26, 0x95, 0x5F, 0x68, 0x35, 0xAF, 0x60, 0x9A}, 160296465Sdelphij {0x16, 0x4D, 0x5E, 0x40, 0x4F, 0x27, 0x52, 0x32}, 161296465Sdelphij {0x6B, 0x05, 0x6E, 0x18, 0x75, 0x9F, 0x5C, 0xCA}, 162296465Sdelphij {0x00, 0x4B, 0xD6, 0xEF, 0x09, 0x17, 0x60, 0x62}, 163296465Sdelphij {0x48, 0x0D, 0x39, 0x00, 0x6E, 0xE7, 0x62, 0xF2}, 164296465Sdelphij {0x43, 0x75, 0x40, 0xC8, 0x69, 0x8F, 0x3C, 0xFA}, 165296465Sdelphij {0x07, 0x2D, 0x43, 0xA0, 0x77, 0x07, 0x52, 0x92}, 166296465Sdelphij {0x02, 0xFE, 0x55, 0x77, 0x81, 0x17, 0xF1, 0x2A}, 167296465Sdelphij {0x1D, 0x9D, 0x5C, 0x50, 0x18, 0xF7, 0x28, 0xC2}, 168296465Sdelphij {0x30, 0x55, 0x32, 0x28, 0x6D, 0x6F, 0x29, 0x5A}, 169296465Sdelphij {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 170296465Sdelphij {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 171296465Sdelphij {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 172296465Sdelphij {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 173296465Sdelphij {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 174296465Sdelphij {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 175296465Sdelphij {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} 176296465Sdelphij}; 17755714Skris 178296465Sdelphijstatic unsigned char cipher_data[NUM_TESTS][8] = { 179296465Sdelphij {0x4E, 0xF9, 0x97, 0x45, 0x61, 0x98, 0xDD, 0x78}, 180296465Sdelphij {0x51, 0x86, 0x6F, 0xD5, 0xB8, 0x5E, 0xCB, 0x8A}, 181296465Sdelphij {0x7D, 0x85, 0x6F, 0x9A, 0x61, 0x30, 0x63, 0xF2}, 182296465Sdelphij {0x24, 0x66, 0xDD, 0x87, 0x8B, 0x96, 0x3C, 0x9D}, 183296465Sdelphij {0x61, 0xF9, 0xC3, 0x80, 0x22, 0x81, 0xB0, 0x96}, 184296465Sdelphij {0x7D, 0x0C, 0xC6, 0x30, 0xAF, 0xDA, 0x1E, 0xC7}, 185296465Sdelphij {0x4E, 0xF9, 0x97, 0x45, 0x61, 0x98, 0xDD, 0x78}, 186296465Sdelphij {0x0A, 0xCE, 0xAB, 0x0F, 0xC6, 0xA0, 0xA2, 0x8D}, 187296465Sdelphij {0x59, 0xC6, 0x82, 0x45, 0xEB, 0x05, 0x28, 0x2B}, 188296465Sdelphij {0xB1, 0xB8, 0xCC, 0x0B, 0x25, 0x0F, 0x09, 0xA0}, 189296465Sdelphij {0x17, 0x30, 0xE5, 0x77, 0x8B, 0xEA, 0x1D, 0xA4}, 190296465Sdelphij {0xA2, 0x5E, 0x78, 0x56, 0xCF, 0x26, 0x51, 0xEB}, 191296465Sdelphij {0x35, 0x38, 0x82, 0xB1, 0x09, 0xCE, 0x8F, 0x1A}, 192296465Sdelphij {0x48, 0xF4, 0xD0, 0x88, 0x4C, 0x37, 0x99, 0x18}, 193296465Sdelphij {0x43, 0x21, 0x93, 0xB7, 0x89, 0x51, 0xFC, 0x98}, 194296465Sdelphij {0x13, 0xF0, 0x41, 0x54, 0xD6, 0x9D, 0x1A, 0xE5}, 195296465Sdelphij {0x2E, 0xED, 0xDA, 0x93, 0xFF, 0xD3, 0x9C, 0x79}, 196296465Sdelphij {0xD8, 0x87, 0xE0, 0x39, 0x3C, 0x2D, 0xA6, 0xE3}, 197296465Sdelphij {0x5F, 0x99, 0xD0, 0x4F, 0x5B, 0x16, 0x39, 0x69}, 198296465Sdelphij {0x4A, 0x05, 0x7A, 0x3B, 0x24, 0xD3, 0x97, 0x7B}, 199296465Sdelphij {0x45, 0x20, 0x31, 0xC1, 0xE4, 0xFA, 0xDA, 0x8E}, 200296465Sdelphij {0x75, 0x55, 0xAE, 0x39, 0xF5, 0x9B, 0x87, 0xBD}, 201296465Sdelphij {0x53, 0xC5, 0x5F, 0x9C, 0xB4, 0x9F, 0xC0, 0x19}, 202296465Sdelphij {0x7A, 0x8E, 0x7B, 0xFA, 0x93, 0x7E, 0x89, 0xA3}, 203296465Sdelphij {0xCF, 0x9C, 0x5D, 0x7A, 0x49, 0x86, 0xAD, 0xB5}, 204296465Sdelphij {0xD1, 0xAB, 0xB2, 0x90, 0x65, 0x8B, 0xC7, 0x78}, 205296465Sdelphij {0x55, 0xCB, 0x37, 0x74, 0xD1, 0x3E, 0xF2, 0x01}, 206296465Sdelphij {0xFA, 0x34, 0xEC, 0x48, 0x47, 0xB2, 0x68, 0xB2}, 207296465Sdelphij {0xA7, 0x90, 0x79, 0x51, 0x08, 0xEA, 0x3C, 0xAE}, 208296465Sdelphij {0xC3, 0x9E, 0x07, 0x2D, 0x9F, 0xAC, 0x63, 0x1D}, 209296465Sdelphij {0x01, 0x49, 0x33, 0xE0, 0xCD, 0xAF, 0xF6, 0xE4}, 210296465Sdelphij {0xF2, 0x1E, 0x9A, 0x77, 0xB7, 0x1C, 0x49, 0xBC}, 211296465Sdelphij {0x24, 0x59, 0x46, 0x88, 0x57, 0x54, 0x36, 0x9A}, 212296465Sdelphij {0x6B, 0x5C, 0x5A, 0x9C, 0x5D, 0x9E, 0x0A, 0x5A}, 213296465Sdelphij}; 21455714Skris 215296465Sdelphijstatic unsigned char cbc_key[16] = { 216296465Sdelphij 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 217296465Sdelphij 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 218296465Sdelphij}; 219296465Sdelphijstatic unsigned char cbc_iv[8] = 220296465Sdelphij { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }; 221296465Sdelphijstatic char cbc_data[40] = "7654321 Now is the time for "; 222296465Sdelphijstatic unsigned char cbc_ok[32] = { 223296465Sdelphij 0x6B, 0x77, 0xB4, 0xD6, 0x30, 0x06, 0xDE, 0xE6, 224296465Sdelphij 0x05, 0xB1, 0x56, 0xE2, 0x74, 0x03, 0x97, 0x93, 225296465Sdelphij 0x58, 0xDE, 0xB9, 0xE7, 0x15, 0x46, 0x16, 0xD9, 226296465Sdelphij 0x59, 0xF1, 0x65, 0x2B, 0xD5, 0xFF, 0x92, 0xCC 227296465Sdelphij}; 22855714Skris 229296465Sdelphijstatic unsigned char cfb64_ok[] = { 230296465Sdelphij 0xE7, 0x32, 0x14, 0xA2, 0x82, 0x21, 0x39, 0xCA, 231296465Sdelphij 0xF2, 0x6E, 0xCF, 0x6D, 0x2E, 0xB9, 0xE7, 0x6E, 232296465Sdelphij 0x3D, 0xA3, 0xDE, 0x04, 0xD1, 0x51, 0x72, 0x00, 233296465Sdelphij 0x51, 0x9D, 0x57, 0xA6, 0xC3 234296465Sdelphij}; 23555714Skris 236296465Sdelphijstatic unsigned char ofb64_ok[] = { 237296465Sdelphij 0xE7, 0x32, 0x14, 0xA2, 0x82, 0x21, 0x39, 0xCA, 238296465Sdelphij 0x62, 0xB3, 0x43, 0xCC, 0x5B, 0x65, 0x58, 0x73, 239296465Sdelphij 0x10, 0xDD, 0x90, 0x8D, 0x0C, 0x24, 0x1B, 0x22, 240296465Sdelphij 0x63, 0xC2, 0xCF, 0x80, 0xDA 241296465Sdelphij}; 24255714Skris 243296465Sdelphij# define KEY_TEST_NUM 25 244296465Sdelphijstatic unsigned char key_test[KEY_TEST_NUM] = { 245296465Sdelphij 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87, 246296465Sdelphij 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f, 247296465Sdelphij 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 248296465Sdelphij 0x88 249296465Sdelphij}; 25055714Skris 251296465Sdelphijstatic unsigned char key_data[8] = 252296465Sdelphij { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 }; 25355714Skris 254296465Sdelphijstatic unsigned char key_out[KEY_TEST_NUM][8] = { 255296465Sdelphij {0xF9, 0xAD, 0x59, 0x7C, 0x49, 0xDB, 0x00, 0x5E}, 256296465Sdelphij {0xE9, 0x1D, 0x21, 0xC1, 0xD9, 0x61, 0xA6, 0xD6}, 257296465Sdelphij {0xE9, 0xC2, 0xB7, 0x0A, 0x1B, 0xC6, 0x5C, 0xF3}, 258296465Sdelphij {0xBE, 0x1E, 0x63, 0x94, 0x08, 0x64, 0x0F, 0x05}, 259296465Sdelphij {0xB3, 0x9E, 0x44, 0x48, 0x1B, 0xDB, 0x1E, 0x6E}, 260296465Sdelphij {0x94, 0x57, 0xAA, 0x83, 0xB1, 0x92, 0x8C, 0x0D}, 261296465Sdelphij {0x8B, 0xB7, 0x70, 0x32, 0xF9, 0x60, 0x62, 0x9D}, 262296465Sdelphij {0xE8, 0x7A, 0x24, 0x4E, 0x2C, 0xC8, 0x5E, 0x82}, 263296465Sdelphij {0x15, 0x75, 0x0E, 0x7A, 0x4F, 0x4E, 0xC5, 0x77}, 264296465Sdelphij {0x12, 0x2B, 0xA7, 0x0B, 0x3A, 0xB6, 0x4A, 0xE0}, 265296465Sdelphij {0x3A, 0x83, 0x3C, 0x9A, 0xFF, 0xC5, 0x37, 0xF6}, 266296465Sdelphij {0x94, 0x09, 0xDA, 0x87, 0xA9, 0x0F, 0x6B, 0xF2}, 267296465Sdelphij {0x88, 0x4F, 0x80, 0x62, 0x50, 0x60, 0xB8, 0xB4}, 268296465Sdelphij {0x1F, 0x85, 0x03, 0x1C, 0x19, 0xE1, 0x19, 0x68}, 269296465Sdelphij {0x79, 0xD9, 0x37, 0x3A, 0x71, 0x4C, 0xA3, 0x4F}, 270296465Sdelphij {0x93, 0x14, 0x28, 0x87, 0xEE, 0x3B, 0xE1, 0x5C}, 271296465Sdelphij {0x03, 0x42, 0x9E, 0x83, 0x8C, 0xE2, 0xD1, 0x4B}, 272296465Sdelphij {0xA4, 0x29, 0x9E, 0x27, 0x46, 0x9F, 0xF6, 0x7B}, 273296465Sdelphij {0xAF, 0xD5, 0xAE, 0xD1, 0xC1, 0xBC, 0x96, 0xA8}, 274296465Sdelphij {0x10, 0x85, 0x1C, 0x0E, 0x38, 0x58, 0xDA, 0x9F}, 275296465Sdelphij {0xE6, 0xF5, 0x1E, 0xD7, 0x9B, 0x9D, 0xB2, 0x1F}, 276296465Sdelphij {0x64, 0xA6, 0xE1, 0x4A, 0xFD, 0x36, 0xB4, 0x6F}, 277296465Sdelphij {0x80, 0xC7, 0xD7, 0xD4, 0x5A, 0x54, 0x79, 0xAD}, 278296465Sdelphij {0x05, 0x04, 0x4B, 0x62, 0xFA, 0x52, 0xD0, 0x80}, 279296465Sdelphij}; 28055714Skris 281296465Sdelphijstatic int test(void); 282296465Sdelphijstatic int print_test_data(void); 28355714Skrisint main(int argc, char *argv[]) 284296465Sdelphij{ 285296465Sdelphij int ret; 28655714Skris 287296465Sdelphij if (argc > 1) 288296465Sdelphij ret = print_test_data(); 289296465Sdelphij else 290296465Sdelphij ret = test(); 29155714Skris 292296465Sdelphij# ifdef OPENSSL_SYS_NETWARE 293296465Sdelphij if (ret) 294296465Sdelphij printf("ERROR: %d\n", ret); 295296465Sdelphij# endif 296296465Sdelphij EXIT(ret); 297296465Sdelphij return (0); 298296465Sdelphij} 29955714Skris 30055714Skrisstatic int print_test_data(void) 301296465Sdelphij{ 302296465Sdelphij unsigned int i, j; 30355714Skris 304296465Sdelphij printf("ecb test data\n"); 305296465Sdelphij printf("key bytes\t\tclear bytes\t\tcipher bytes\n"); 306296465Sdelphij for (i = 0; i < NUM_TESTS; i++) { 307296465Sdelphij for (j = 0; j < 8; j++) 308296465Sdelphij printf("%02X", ecb_data[i][j]); 309296465Sdelphij printf("\t"); 310296465Sdelphij for (j = 0; j < 8; j++) 311296465Sdelphij printf("%02X", plain_data[i][j]); 312296465Sdelphij printf("\t"); 313296465Sdelphij for (j = 0; j < 8; j++) 314296465Sdelphij printf("%02X", cipher_data[i][j]); 315296465Sdelphij printf("\n"); 316296465Sdelphij } 31755714Skris 318296465Sdelphij printf("set_key test data\n"); 319296465Sdelphij printf("data[8]= "); 320296465Sdelphij for (j = 0; j < 8; j++) 321296465Sdelphij printf("%02X", key_data[j]); 322296465Sdelphij printf("\n"); 323296465Sdelphij for (i = 0; i < KEY_TEST_NUM - 1; i++) { 324296465Sdelphij printf("c="); 325296465Sdelphij for (j = 0; j < 8; j++) 326296465Sdelphij printf("%02X", key_out[i][j]); 327296465Sdelphij printf(" k[%2u]=", i + 1); 328296465Sdelphij for (j = 0; j < i + 1; j++) 329296465Sdelphij printf("%02X", key_test[j]); 330296465Sdelphij printf("\n"); 331296465Sdelphij } 33255714Skris 333296465Sdelphij printf("\nchaining mode test data\n"); 334296465Sdelphij printf("key[16] = "); 335296465Sdelphij for (j = 0; j < 16; j++) 336296465Sdelphij printf("%02X", cbc_key[j]); 337296465Sdelphij printf("\niv[8] = "); 338296465Sdelphij for (j = 0; j < 8; j++) 339296465Sdelphij printf("%02X", cbc_iv[j]); 340296465Sdelphij printf("\ndata[%d] = '%s'", (int)strlen(cbc_data) + 1, cbc_data); 341296465Sdelphij printf("\ndata[%d] = ", (int)strlen(cbc_data) + 1); 342296465Sdelphij for (j = 0; j < strlen(cbc_data) + 1; j++) 343296465Sdelphij printf("%02X", cbc_data[j]); 344296465Sdelphij printf("\n"); 345296465Sdelphij printf("cbc cipher text\n"); 346296465Sdelphij printf("cipher[%d]= ", 32); 347296465Sdelphij for (j = 0; j < 32; j++) 348296465Sdelphij printf("%02X", cbc_ok[j]); 349296465Sdelphij printf("\n"); 35055714Skris 351296465Sdelphij printf("cfb64 cipher text\n"); 352296465Sdelphij printf("cipher[%d]= ", (int)strlen(cbc_data) + 1); 353296465Sdelphij for (j = 0; j < strlen(cbc_data) + 1; j++) 354296465Sdelphij printf("%02X", cfb64_ok[j]); 355296465Sdelphij printf("\n"); 35655714Skris 357296465Sdelphij printf("ofb64 cipher text\n"); 358296465Sdelphij printf("cipher[%d]= ", (int)strlen(cbc_data) + 1); 359296465Sdelphij for (j = 0; j < strlen(cbc_data) + 1; j++) 360296465Sdelphij printf("%02X", ofb64_ok[j]); 361296465Sdelphij printf("\n"); 362296465Sdelphij return (0); 363296465Sdelphij} 36455714Skris 36555714Skrisstatic int test(void) 366296465Sdelphij{ 367296465Sdelphij unsigned char cbc_in[40], cbc_out[40], iv[8]; 368296465Sdelphij int i, n, err = 0; 369296465Sdelphij BF_KEY key; 370296465Sdelphij BF_LONG data[2]; 371296465Sdelphij unsigned char out[8]; 372296465Sdelphij BF_LONG len; 37355714Skris 374296465Sdelphij# ifdef CHARSET_EBCDIC 375296465Sdelphij ebcdic2ascii(cbc_data, cbc_data, strlen(cbc_data)); 376296465Sdelphij# endif 37755714Skris 378296465Sdelphij printf("testing blowfish in raw ecb mode\n"); 379296465Sdelphij for (n = 0; n < 2; n++) { 380296465Sdelphij# ifdef CHARSET_EBCDIC 381296465Sdelphij ebcdic2ascii(bf_key[n], bf_key[n], strlen(bf_key[n])); 382296465Sdelphij# endif 383296465Sdelphij BF_set_key(&key, strlen(bf_key[n]), (unsigned char *)bf_key[n]); 38455714Skris 385296465Sdelphij data[0] = bf_plain[n][0]; 386296465Sdelphij data[1] = bf_plain[n][1]; 387296465Sdelphij BF_encrypt(data, &key); 388296465Sdelphij if (memcmp(&(bf_cipher[n][0]), &(data[0]), 8) != 0) { 389296465Sdelphij printf("BF_encrypt error encrypting\n"); 390296465Sdelphij printf("got :"); 391296465Sdelphij for (i = 0; i < 2; i++) 392296465Sdelphij printf("%08lX ", (unsigned long)data[i]); 393296465Sdelphij printf("\n"); 394296465Sdelphij printf("expected:"); 395296465Sdelphij for (i = 0; i < 2; i++) 396296465Sdelphij printf("%08lX ", (unsigned long)bf_cipher[n][i]); 397296465Sdelphij err = 1; 398296465Sdelphij printf("\n"); 399296465Sdelphij } 40055714Skris 401296465Sdelphij BF_decrypt(&(data[0]), &key); 402296465Sdelphij if (memcmp(&(bf_plain[n][0]), &(data[0]), 8) != 0) { 403296465Sdelphij printf("BF_encrypt error decrypting\n"); 404296465Sdelphij printf("got :"); 405296465Sdelphij for (i = 0; i < 2; i++) 406296465Sdelphij printf("%08lX ", (unsigned long)data[i]); 407296465Sdelphij printf("\n"); 408296465Sdelphij printf("expected:"); 409296465Sdelphij for (i = 0; i < 2; i++) 410296465Sdelphij printf("%08lX ", (unsigned long)bf_plain[n][i]); 411296465Sdelphij printf("\n"); 412296465Sdelphij err = 1; 413296465Sdelphij } 414296465Sdelphij } 41555714Skris 416296465Sdelphij printf("testing blowfish in ecb mode\n"); 41755714Skris 418296465Sdelphij for (n = 0; n < NUM_TESTS; n++) { 419296465Sdelphij BF_set_key(&key, 8, ecb_data[n]); 42055714Skris 421296465Sdelphij BF_ecb_encrypt(&(plain_data[n][0]), out, &key, BF_ENCRYPT); 422296465Sdelphij if (memcmp(&(cipher_data[n][0]), out, 8) != 0) { 423296465Sdelphij printf("BF_ecb_encrypt blowfish error encrypting\n"); 424296465Sdelphij printf("got :"); 425296465Sdelphij for (i = 0; i < 8; i++) 426296465Sdelphij printf("%02X ", out[i]); 427296465Sdelphij printf("\n"); 428296465Sdelphij printf("expected:"); 429296465Sdelphij for (i = 0; i < 8; i++) 430296465Sdelphij printf("%02X ", cipher_data[n][i]); 431296465Sdelphij err = 1; 432296465Sdelphij printf("\n"); 433296465Sdelphij } 43455714Skris 435296465Sdelphij BF_ecb_encrypt(out, out, &key, BF_DECRYPT); 436296465Sdelphij if (memcmp(&(plain_data[n][0]), out, 8) != 0) { 437296465Sdelphij printf("BF_ecb_encrypt error decrypting\n"); 438296465Sdelphij printf("got :"); 439296465Sdelphij for (i = 0; i < 8; i++) 440296465Sdelphij printf("%02X ", out[i]); 441296465Sdelphij printf("\n"); 442296465Sdelphij printf("expected:"); 443296465Sdelphij for (i = 0; i < 8; i++) 444296465Sdelphij printf("%02X ", plain_data[n][i]); 445296465Sdelphij printf("\n"); 446296465Sdelphij err = 1; 447296465Sdelphij } 448296465Sdelphij } 44955714Skris 450296465Sdelphij printf("testing blowfish set_key\n"); 451296465Sdelphij for (n = 1; n < KEY_TEST_NUM; n++) { 452296465Sdelphij BF_set_key(&key, n, key_test); 453296465Sdelphij BF_ecb_encrypt(key_data, out, &key, BF_ENCRYPT); 454296465Sdelphij /* mips-sgi-irix6.5-gcc vv -mabi=64 bug workaround */ 455296465Sdelphij if (memcmp(out, &(key_out[i = n - 1][0]), 8) != 0) { 456296465Sdelphij printf("blowfish setkey error\n"); 457296465Sdelphij err = 1; 458296465Sdelphij } 459296465Sdelphij } 46055714Skris 461296465Sdelphij printf("testing blowfish in cbc mode\n"); 462296465Sdelphij len = strlen(cbc_data) + 1; 46355714Skris 464296465Sdelphij BF_set_key(&key, 16, cbc_key); 465296465Sdelphij memset(cbc_in, 0, sizeof cbc_in); 466296465Sdelphij memset(cbc_out, 0, sizeof cbc_out); 467296465Sdelphij memcpy(iv, cbc_iv, sizeof iv); 468296465Sdelphij BF_cbc_encrypt((unsigned char *)cbc_data, cbc_out, len, 469296465Sdelphij &key, iv, BF_ENCRYPT); 470296465Sdelphij if (memcmp(cbc_out, cbc_ok, 32) != 0) { 471296465Sdelphij err = 1; 472296465Sdelphij printf("BF_cbc_encrypt encrypt error\n"); 473296465Sdelphij for (i = 0; i < 32; i++) 474296465Sdelphij printf("0x%02X,", cbc_out[i]); 475296465Sdelphij } 476296465Sdelphij memcpy(iv, cbc_iv, 8); 477296465Sdelphij BF_cbc_encrypt(cbc_out, cbc_in, len, &key, iv, BF_DECRYPT); 478296465Sdelphij if (memcmp(cbc_in, cbc_data, strlen(cbc_data) + 1) != 0) { 479296465Sdelphij printf("BF_cbc_encrypt decrypt error\n"); 480296465Sdelphij err = 1; 481296465Sdelphij } 48255714Skris 483296465Sdelphij printf("testing blowfish in cfb64 mode\n"); 48455714Skris 485296465Sdelphij BF_set_key(&key, 16, cbc_key); 486296465Sdelphij memset(cbc_in, 0, 40); 487296465Sdelphij memset(cbc_out, 0, 40); 488296465Sdelphij memcpy(iv, cbc_iv, 8); 489296465Sdelphij n = 0; 490296465Sdelphij BF_cfb64_encrypt((unsigned char *)cbc_data, cbc_out, (long)13, 491296465Sdelphij &key, iv, &n, BF_ENCRYPT); 492296465Sdelphij BF_cfb64_encrypt((unsigned char *)&(cbc_data[13]), &(cbc_out[13]), 493296465Sdelphij len - 13, &key, iv, &n, BF_ENCRYPT); 494296465Sdelphij if (memcmp(cbc_out, cfb64_ok, (int)len) != 0) { 495296465Sdelphij err = 1; 496296465Sdelphij printf("BF_cfb64_encrypt encrypt error\n"); 497296465Sdelphij for (i = 0; i < (int)len; i++) 498296465Sdelphij printf("0x%02X,", cbc_out[i]); 499296465Sdelphij } 500296465Sdelphij n = 0; 501296465Sdelphij memcpy(iv, cbc_iv, 8); 502296465Sdelphij BF_cfb64_encrypt(cbc_out, cbc_in, 17, &key, iv, &n, BF_DECRYPT); 503296465Sdelphij BF_cfb64_encrypt(&(cbc_out[17]), &(cbc_in[17]), len - 17, 504296465Sdelphij &key, iv, &n, BF_DECRYPT); 505296465Sdelphij if (memcmp(cbc_in, cbc_data, (int)len) != 0) { 506296465Sdelphij printf("BF_cfb64_encrypt decrypt error\n"); 507296465Sdelphij err = 1; 508296465Sdelphij } 50955714Skris 510296465Sdelphij printf("testing blowfish in ofb64\n"); 51155714Skris 512296465Sdelphij BF_set_key(&key, 16, cbc_key); 513296465Sdelphij memset(cbc_in, 0, 40); 514296465Sdelphij memset(cbc_out, 0, 40); 515296465Sdelphij memcpy(iv, cbc_iv, 8); 516296465Sdelphij n = 0; 517296465Sdelphij BF_ofb64_encrypt((unsigned char *)cbc_data, cbc_out, (long)13, &key, iv, 518296465Sdelphij &n); 519296465Sdelphij BF_ofb64_encrypt((unsigned char *)&(cbc_data[13]), &(cbc_out[13]), 520296465Sdelphij len - 13, &key, iv, &n); 521296465Sdelphij if (memcmp(cbc_out, ofb64_ok, (int)len) != 0) { 522296465Sdelphij err = 1; 523296465Sdelphij printf("BF_ofb64_encrypt encrypt error\n"); 524296465Sdelphij for (i = 0; i < (int)len; i++) 525296465Sdelphij printf("0x%02X,", cbc_out[i]); 526296465Sdelphij } 527296465Sdelphij n = 0; 528296465Sdelphij memcpy(iv, cbc_iv, 8); 529296465Sdelphij BF_ofb64_encrypt(cbc_out, cbc_in, 17, &key, iv, &n); 530296465Sdelphij BF_ofb64_encrypt(&(cbc_out[17]), &(cbc_in[17]), len - 17, &key, iv, &n); 531296465Sdelphij if (memcmp(cbc_in, cbc_data, (int)len) != 0) { 532296465Sdelphij printf("BF_ofb64_encrypt decrypt error\n"); 533296465Sdelphij err = 1; 534296465Sdelphij } 53555714Skris 536296465Sdelphij return (err); 537296465Sdelphij} 53855714Skris#endif 539