155714Skris/* crypto/des/destest.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. 8280297Sjkim * 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). 15280297Sjkim * 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. 22280297Sjkim * 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 :-). 37280297Sjkim * 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)" 40280297Sjkim * 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. 52280297Sjkim * 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 59109998Smarkm#include <stdio.h> 60109998Smarkm#include <stdlib.h> 61109998Smarkm 62109998Smarkm#include <openssl/e_os2.h> 63109998Smarkm#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN16) || defined(OPENSSL_SYS_WINDOWS) 64280297Sjkim# ifndef OPENSSL_SYS_MSDOS 65280297Sjkim# define OPENSSL_SYS_MSDOS 66280297Sjkim# endif 6755714Skris#endif 6855714Skris 69109998Smarkm#ifndef OPENSSL_SYS_MSDOS 70280297Sjkim# if !defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_VMS_DECC) 71280297Sjkim# include OPENSSL_UNISTD 72280297Sjkim# endif 7355714Skris#else 74280297Sjkim# include <io.h> 7555714Skris#endif 7655714Skris#include <string.h> 7755714Skris 78109998Smarkm#ifdef OPENSSL_NO_DES 7955714Skrisint main(int argc, char *argv[]) 8055714Skris{ 8155714Skris printf("No DES support\n"); 82280297Sjkim return (0); 8355714Skris} 8455714Skris#else 85280297Sjkim# include <openssl/des.h> 8655714Skris 87280297Sjkim# define crypt(c,s) (DES_crypt((c),(s))) 8855714Skris 8955714Skris/* tisk tisk - the test keys don't all have odd parity :-( */ 9055714Skris/* test data */ 91280297Sjkim# define NUM_TESTS 34 92280297Sjkimstatic unsigned char key_data[NUM_TESTS][8] = { 93280297Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 94280297Sjkim {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 95280297Sjkim {0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 96280297Sjkim {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 97280297Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 98280297Sjkim {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 99280297Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 100280297Sjkim {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, 101280297Sjkim {0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57}, 102280297Sjkim {0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E}, 103280297Sjkim {0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86}, 104280297Sjkim {0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E}, 105280297Sjkim {0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6}, 106280297Sjkim {0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE}, 107280297Sjkim {0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6}, 108280297Sjkim {0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE}, 109280297Sjkim {0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16}, 110280297Sjkim {0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F}, 111280297Sjkim {0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46}, 112280297Sjkim {0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E}, 113280297Sjkim {0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76}, 114280297Sjkim {0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07}, 115280297Sjkim {0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F}, 116280297Sjkim {0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7}, 117280297Sjkim {0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF}, 118280297Sjkim {0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6}, 119280297Sjkim {0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF}, 120280297Sjkim {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 121280297Sjkim {0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E}, 122280297Sjkim {0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE}, 123280297Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 124280297Sjkim {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 125280297Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 126280297Sjkim {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10} 127280297Sjkim}; 12855714Skris 129280297Sjkimstatic unsigned char plain_data[NUM_TESTS][8] = { 130280297Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 131280297Sjkim {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 132280297Sjkim {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, 133280297Sjkim {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 134280297Sjkim {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 135280297Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 136280297Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 137280297Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 138280297Sjkim {0x01, 0xA1, 0xD6, 0xD0, 0x39, 0x77, 0x67, 0x42}, 139280297Sjkim {0x5C, 0xD5, 0x4C, 0xA8, 0x3D, 0xEF, 0x57, 0xDA}, 140280297Sjkim {0x02, 0x48, 0xD4, 0x38, 0x06, 0xF6, 0x71, 0x72}, 141280297Sjkim {0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A}, 142280297Sjkim {0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2}, 143280297Sjkim {0x05, 0x9B, 0x5E, 0x08, 0x51, 0xCF, 0x14, 0x3A}, 144280297Sjkim {0x07, 0x56, 0xD8, 0xE0, 0x77, 0x47, 0x61, 0xD2}, 145280297Sjkim {0x76, 0x25, 0x14, 0xB8, 0x29, 0xBF, 0x48, 0x6A}, 146280297Sjkim {0x3B, 0xDD, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02}, 147280297Sjkim {0x26, 0x95, 0x5F, 0x68, 0x35, 0xAF, 0x60, 0x9A}, 148280297Sjkim {0x16, 0x4D, 0x5E, 0x40, 0x4F, 0x27, 0x52, 0x32}, 149280297Sjkim {0x6B, 0x05, 0x6E, 0x18, 0x75, 0x9F, 0x5C, 0xCA}, 150280297Sjkim {0x00, 0x4B, 0xD6, 0xEF, 0x09, 0x17, 0x60, 0x62}, 151280297Sjkim {0x48, 0x0D, 0x39, 0x00, 0x6E, 0xE7, 0x62, 0xF2}, 152280297Sjkim {0x43, 0x75, 0x40, 0xC8, 0x69, 0x8F, 0x3C, 0xFA}, 153280297Sjkim {0x07, 0x2D, 0x43, 0xA0, 0x77, 0x07, 0x52, 0x92}, 154280297Sjkim {0x02, 0xFE, 0x55, 0x77, 0x81, 0x17, 0xF1, 0x2A}, 155280297Sjkim {0x1D, 0x9D, 0x5C, 0x50, 0x18, 0xF7, 0x28, 0xC2}, 156280297Sjkim {0x30, 0x55, 0x32, 0x28, 0x6D, 0x6F, 0x29, 0x5A}, 157280297Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 158280297Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 159280297Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 160280297Sjkim {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 161280297Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 162280297Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 163280297Sjkim {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} 164280297Sjkim}; 16555714Skris 166280297Sjkimstatic unsigned char cipher_data[NUM_TESTS][8] = { 167280297Sjkim {0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7}, 168280297Sjkim {0x73, 0x59, 0xB2, 0x16, 0x3E, 0x4E, 0xDC, 0x58}, 169280297Sjkim {0x95, 0x8E, 0x6E, 0x62, 0x7A, 0x05, 0x55, 0x7B}, 170280297Sjkim {0xF4, 0x03, 0x79, 0xAB, 0x9E, 0x0E, 0xC5, 0x33}, 171280297Sjkim {0x17, 0x66, 0x8D, 0xFC, 0x72, 0x92, 0x53, 0x2D}, 172280297Sjkim {0x8A, 0x5A, 0xE1, 0xF8, 0x1A, 0xB8, 0xF2, 0xDD}, 173280297Sjkim {0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7}, 174280297Sjkim {0xED, 0x39, 0xD9, 0x50, 0xFA, 0x74, 0xBC, 0xC4}, 175280297Sjkim {0x69, 0x0F, 0x5B, 0x0D, 0x9A, 0x26, 0x93, 0x9B}, 176280297Sjkim {0x7A, 0x38, 0x9D, 0x10, 0x35, 0x4B, 0xD2, 0x71}, 177280297Sjkim {0x86, 0x8E, 0xBB, 0x51, 0xCA, 0xB4, 0x59, 0x9A}, 178280297Sjkim {0x71, 0x78, 0x87, 0x6E, 0x01, 0xF1, 0x9B, 0x2A}, 179280297Sjkim {0xAF, 0x37, 0xFB, 0x42, 0x1F, 0x8C, 0x40, 0x95}, 180280297Sjkim {0x86, 0xA5, 0x60, 0xF1, 0x0E, 0xC6, 0xD8, 0x5B}, 181280297Sjkim {0x0C, 0xD3, 0xDA, 0x02, 0x00, 0x21, 0xDC, 0x09}, 182280297Sjkim {0xEA, 0x67, 0x6B, 0x2C, 0xB7, 0xDB, 0x2B, 0x7A}, 183280297Sjkim {0xDF, 0xD6, 0x4A, 0x81, 0x5C, 0xAF, 0x1A, 0x0F}, 184280297Sjkim {0x5C, 0x51, 0x3C, 0x9C, 0x48, 0x86, 0xC0, 0x88}, 185280297Sjkim {0x0A, 0x2A, 0xEE, 0xAE, 0x3F, 0xF4, 0xAB, 0x77}, 186280297Sjkim {0xEF, 0x1B, 0xF0, 0x3E, 0x5D, 0xFA, 0x57, 0x5A}, 187280297Sjkim {0x88, 0xBF, 0x0D, 0xB6, 0xD7, 0x0D, 0xEE, 0x56}, 188280297Sjkim {0xA1, 0xF9, 0x91, 0x55, 0x41, 0x02, 0x0B, 0x56}, 189280297Sjkim {0x6F, 0xBF, 0x1C, 0xAF, 0xCF, 0xFD, 0x05, 0x56}, 190280297Sjkim {0x2F, 0x22, 0xE4, 0x9B, 0xAB, 0x7C, 0xA1, 0xAC}, 191280297Sjkim {0x5A, 0x6B, 0x61, 0x2C, 0xC2, 0x6C, 0xCE, 0x4A}, 192280297Sjkim {0x5F, 0x4C, 0x03, 0x8E, 0xD1, 0x2B, 0x2E, 0x41}, 193280297Sjkim {0x63, 0xFA, 0xC0, 0xD0, 0x34, 0xD9, 0xF7, 0x93}, 194280297Sjkim {0x61, 0x7B, 0x3A, 0x0C, 0xE8, 0xF0, 0x71, 0x00}, 195280297Sjkim {0xDB, 0x95, 0x86, 0x05, 0xF8, 0xC8, 0xC6, 0x06}, 196280297Sjkim {0xED, 0xBF, 0xD1, 0xC6, 0x6C, 0x29, 0xCC, 0xC7}, 197280297Sjkim {0x35, 0x55, 0x50, 0xB2, 0x15, 0x0E, 0x24, 0x51}, 198280297Sjkim {0xCA, 0xAA, 0xAF, 0x4D, 0xEA, 0xF1, 0xDB, 0xAE}, 199280297Sjkim {0xD5, 0xD4, 0x4F, 0xF7, 0x20, 0x68, 0x3D, 0x0D}, 200280297Sjkim {0x2A, 0x2B, 0xB0, 0x08, 0xDF, 0x97, 0xC2, 0xF2} 201280297Sjkim}; 20255714Skris 203280297Sjkimstatic unsigned char cipher_ecb2[NUM_TESTS - 1][8] = { 204280297Sjkim {0x92, 0x95, 0xB5, 0x9B, 0xB3, 0x84, 0x73, 0x6E}, 205280297Sjkim {0x19, 0x9E, 0x9D, 0x6D, 0xF3, 0x9A, 0xA8, 0x16}, 206280297Sjkim {0x2A, 0x4B, 0x4D, 0x24, 0x52, 0x43, 0x84, 0x27}, 207280297Sjkim {0x35, 0x84, 0x3C, 0x01, 0x9D, 0x18, 0xC5, 0xB6}, 208280297Sjkim {0x4A, 0x5B, 0x2F, 0x42, 0xAA, 0x77, 0x19, 0x25}, 209280297Sjkim {0xA0, 0x6B, 0xA9, 0xB8, 0xCA, 0x5B, 0x17, 0x8A}, 210280297Sjkim {0xAB, 0x9D, 0xB7, 0xFB, 0xED, 0x95, 0xF2, 0x74}, 211280297Sjkim {0x3D, 0x25, 0x6C, 0x23, 0xA7, 0x25, 0x2F, 0xD6}, 212280297Sjkim {0xB7, 0x6F, 0xAB, 0x4F, 0xBD, 0xBD, 0xB7, 0x67}, 213280297Sjkim {0x8F, 0x68, 0x27, 0xD6, 0x9C, 0xF4, 0x1A, 0x10}, 214280297Sjkim {0x82, 0x57, 0xA1, 0xD6, 0x50, 0x5E, 0x81, 0x85}, 215280297Sjkim {0xA2, 0x0F, 0x0A, 0xCD, 0x80, 0x89, 0x7D, 0xFA}, 216280297Sjkim {0xCD, 0x2A, 0x53, 0x3A, 0xDB, 0x0D, 0x7E, 0xF3}, 217280297Sjkim {0xD2, 0xC2, 0xBE, 0x27, 0xE8, 0x1B, 0x68, 0xE3}, 218280297Sjkim {0xE9, 0x24, 0xCF, 0x4F, 0x89, 0x3C, 0x5B, 0x0A}, 219280297Sjkim {0xA7, 0x18, 0xC3, 0x9F, 0xFA, 0x9F, 0xD7, 0x69}, 220280297Sjkim {0x77, 0x2C, 0x79, 0xB1, 0xD2, 0x31, 0x7E, 0xB1}, 221280297Sjkim {0x49, 0xAB, 0x92, 0x7F, 0xD0, 0x22, 0x00, 0xB7}, 222280297Sjkim {0xCE, 0x1C, 0x6C, 0x7D, 0x85, 0xE3, 0x4A, 0x6F}, 223280297Sjkim {0xBE, 0x91, 0xD6, 0xE1, 0x27, 0xB2, 0xE9, 0x87}, 224280297Sjkim {0x70, 0x28, 0xAE, 0x8F, 0xD1, 0xF5, 0x74, 0x1A}, 225280297Sjkim {0xAA, 0x37, 0x80, 0xBB, 0xF3, 0x22, 0x1D, 0xDE}, 226280297Sjkim {0xA6, 0xC4, 0xD2, 0x5E, 0x28, 0x93, 0xAC, 0xB3}, 227280297Sjkim {0x22, 0x07, 0x81, 0x5A, 0xE4, 0xB7, 0x1A, 0xAD}, 228280297Sjkim {0xDC, 0xCE, 0x05, 0xE7, 0x07, 0xBD, 0xF5, 0x84}, 229280297Sjkim {0x26, 0x1D, 0x39, 0x2C, 0xB3, 0xBA, 0xA5, 0x85}, 230280297Sjkim {0xB4, 0xF7, 0x0F, 0x72, 0xFB, 0x04, 0xF0, 0xDC}, 231280297Sjkim {0x95, 0xBA, 0xA9, 0x4E, 0x87, 0x36, 0xF2, 0x89}, 232280297Sjkim {0xD4, 0x07, 0x3A, 0xF1, 0x5A, 0x17, 0x82, 0x0E}, 233280297Sjkim {0xEF, 0x6F, 0xAF, 0xA7, 0x66, 0x1A, 0x7E, 0x89}, 234280297Sjkim {0xC1, 0x97, 0xF5, 0x58, 0x74, 0x8A, 0x20, 0xE7}, 235280297Sjkim {0x43, 0x34, 0xCF, 0xDA, 0x22, 0xC4, 0x86, 0xC8}, 236280297Sjkim {0x08, 0xD7, 0xB4, 0xFB, 0x62, 0x9D, 0x08, 0x85} 237280297Sjkim}; 23855714Skris 239280297Sjkimstatic unsigned char cbc_key[8] = 240280297Sjkim { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; 241280297Sjkimstatic unsigned char cbc2_key[8] = 242280297Sjkim { 0xf1, 0xe0, 0xd3, 0xc2, 0xb5, 0xa4, 0x97, 0x86 }; 243280297Sjkimstatic unsigned char cbc3_key[8] = 244280297Sjkim { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }; 245280297Sjkimstatic unsigned char cbc_iv[8] = 246280297Sjkim { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }; 247280297Sjkim/* 248280297Sjkim * Changed the following text constant to binary so it will work on ebcdic 249280297Sjkim * machines :-) 250280297Sjkim */ 25155714Skris/* static char cbc_data[40]="7654321 Now is the time for \0001"; */ 252280297Sjkimstatic unsigned char cbc_data[40] = { 253280297Sjkim 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20, 254280297Sjkim 0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74, 255280297Sjkim 0x68, 0x65, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x20, 256280297Sjkim 0x66, 0x6F, 0x72, 0x20, 0x00, 0x31, 0x00, 0x00, 257280297Sjkim 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 258280297Sjkim}; 25955714Skris 260280297Sjkimstatic unsigned char cbc_ok[32] = { 261280297Sjkim 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4, 262280297Sjkim 0xac, 0xd8, 0xae, 0xfd, 0xdf, 0xd8, 0xa1, 0xeb, 263280297Sjkim 0x46, 0x8e, 0x91, 0x15, 0x78, 0x88, 0xba, 0x68, 264280297Sjkim 0x1d, 0x26, 0x93, 0x97, 0xf7, 0xfe, 0x62, 0xb4 265280297Sjkim}; 26655714Skris 267280297Sjkim# ifdef SCREW_THE_PARITY 268280297Sjkim# error "SCREW_THE_PARITY is not ment to be defined." 269280297Sjkim# error "Original vectors are preserved for reference only." 270280297Sjkimstatic unsigned char cbc2_key[8] = 271280297Sjkim { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 }; 272280297Sjkimstatic unsigned char xcbc_ok[32] = { 273280297Sjkim 0x86, 0x74, 0x81, 0x0D, 0x61, 0xA4, 0xA5, 0x48, 274280297Sjkim 0xB9, 0x93, 0x03, 0xE1, 0xB8, 0xBB, 0xBD, 0xBD, 275280297Sjkim 0x64, 0x30, 0x0B, 0xB9, 0x06, 0x65, 0x81, 0x76, 276280297Sjkim 0x04, 0x1D, 0x77, 0x62, 0x17, 0xCA, 0x2B, 0xD2, 277280297Sjkim}; 278280297Sjkim# else 279280297Sjkimstatic unsigned char xcbc_ok[32] = { 280280297Sjkim 0x84, 0x6B, 0x29, 0x14, 0x85, 0x1E, 0x9A, 0x29, 281280297Sjkim 0x54, 0x73, 0x2F, 0x8A, 0xA0, 0xA6, 0x11, 0xC1, 282280297Sjkim 0x15, 0xCD, 0xC2, 0xD7, 0x95, 0x1B, 0x10, 0x53, 283280297Sjkim 0xA6, 0x3C, 0x5E, 0x03, 0xB2, 0x1A, 0xA3, 0xC4, 284280297Sjkim}; 285280297Sjkim# endif 28655714Skris 287280297Sjkimstatic unsigned char cbc3_ok[32] = { 288280297Sjkim 0x3F, 0xE3, 0x01, 0xC9, 0x62, 0xAC, 0x01, 0xD0, 289280297Sjkim 0x22, 0x13, 0x76, 0x3C, 0x1C, 0xBD, 0x4C, 0xDC, 290280297Sjkim 0x79, 0x96, 0x57, 0xC0, 0x64, 0xEC, 0xF5, 0xD4, 291280297Sjkim 0x1C, 0x67, 0x38, 0x12, 0xCF, 0xDE, 0x96, 0x75 292280297Sjkim}; 29355714Skris 294280297Sjkimstatic unsigned char pcbc_ok[32] = { 295280297Sjkim 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4, 296280297Sjkim 0x6d, 0xec, 0xb4, 0x70, 0xa0, 0xe5, 0x6b, 0x15, 297280297Sjkim 0xae, 0xa6, 0xbf, 0x61, 0xed, 0x7d, 0x9c, 0x9f, 298280297Sjkim 0xf7, 0x17, 0x46, 0x3b, 0x8a, 0xb3, 0xcc, 0x88 299280297Sjkim}; 30055714Skris 301280297Sjkimstatic unsigned char cfb_key[8] = 302280297Sjkim { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; 303280297Sjkimstatic unsigned char cfb_iv[8] = 304280297Sjkim { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef }; 305280297Sjkimstatic unsigned char cfb_buf1[40], cfb_buf2[40], cfb_tmp[8]; 306280297Sjkimstatic unsigned char plain[24] = { 307280297Sjkim 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 308280297Sjkim 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 309280297Sjkim 0x69, 0x6d, 0x65, 0x20, 0x66, 0x6f, 310280297Sjkim 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20 311280297Sjkim}; 31255714Skris 313280297Sjkimstatic unsigned char cfb_cipher8[24] = { 314280297Sjkim 0xf3, 0x1f, 0xda, 0x07, 0x01, 0x14, 0x62, 0xee, 0x18, 0x7f, 0x43, 0xd8, 315280297Sjkim 0x0a, 0x7c, 0xd9, 0xb5, 0xb0, 0xd2, 0x90, 0xda, 0x6e, 0x5b, 0x9a, 0x87 316280297Sjkim}; 31755714Skris 318280297Sjkimstatic unsigned char cfb_cipher16[24] = { 319280297Sjkim 0xF3, 0x09, 0x87, 0x87, 0x7F, 0x57, 0xF7, 0x3C, 0x36, 0xB6, 0xDB, 0x70, 320280297Sjkim 0xD8, 0xD5, 0x34, 0x19, 0xD3, 0x86, 0xB2, 0x23, 0xB7, 0xB2, 0xAD, 0x1B 321280297Sjkim}; 32255714Skris 323280297Sjkimstatic unsigned char cfb_cipher32[24] = { 324280297Sjkim 0xF3, 0x09, 0x62, 0x49, 0xA4, 0xDF, 0xA4, 0x9F, 0x33, 0xDC, 0x7B, 0xAD, 325280297Sjkim 0x4C, 0xC8, 0x9F, 0x64, 0xE4, 0x53, 0xE5, 0xEC, 0x67, 0x20, 0xDA, 0xB6 326280297Sjkim}; 327280297Sjkim 328280297Sjkimstatic unsigned char cfb_cipher48[24] = { 329280297Sjkim 0xF3, 0x09, 0x62, 0x49, 0xC7, 0xF4, 0x30, 0xB5, 0x15, 0xEC, 0xBB, 0x85, 330280297Sjkim 0x97, 0x5A, 0x13, 0x8C, 0x68, 0x60, 0xE2, 0x38, 0x34, 0x3C, 0xDC, 0x1F 331280297Sjkim}; 332280297Sjkim 333280297Sjkimstatic unsigned char cfb_cipher64[24] = { 334280297Sjkim 0xF3, 0x09, 0x62, 0x49, 0xC7, 0xF4, 0x6E, 0x51, 0xA6, 0x9E, 0x83, 0x9B, 335280297Sjkim 0x1A, 0x92, 0xF7, 0x84, 0x03, 0x46, 0x71, 0x33, 0x89, 0x8E, 0xA6, 0x22 336280297Sjkim}; 337280297Sjkim 338280297Sjkimstatic unsigned char ofb_key[8] = 339280297Sjkim { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; 340280297Sjkimstatic unsigned char ofb_iv[8] = 341280297Sjkim { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef }; 342280297Sjkimstatic unsigned char ofb_buf1[24], ofb_buf2[24], ofb_tmp[8]; 343280297Sjkimstatic unsigned char ofb_cipher[24] = { 344280297Sjkim 0xf3, 0x09, 0x62, 0x49, 0xc7, 0xf4, 0x6e, 0x51, 345280297Sjkim 0x35, 0xf2, 0x4a, 0x24, 0x2e, 0xeb, 0x3d, 0x3f, 346280297Sjkim 0x3d, 0x6d, 0x5b, 0xe3, 0x25, 0x5a, 0xf8, 0xc3 347280297Sjkim}; 348280297Sjkim 349280297Sjkim# if 0 350280297Sjkimstatic DES_LONG cbc_cksum_ret = 0xB462FEF7L; 351280297Sjkim# else 352280297Sjkimstatic DES_LONG cbc_cksum_ret = 0xF7FE62B4L; 353280297Sjkim# endif 354280297Sjkimstatic unsigned char cbc_cksum_data[8] = 355280297Sjkim { 0x1D, 0x26, 0x93, 0x97, 0xf7, 0xfe, 0x62, 0xb4 }; 356280297Sjkim 35755714Skrisstatic char *pt(unsigned char *p); 35855714Skrisstatic int cfb_test(int bits, unsigned char *cfb_cipher); 35955714Skrisstatic int cfb64_test(unsigned char *cfb_cipher); 36055714Skrisstatic int ede_cfb64_test(unsigned char *cfb_cipher); 36155714Skrisint main(int argc, char *argv[]) 362280297Sjkim{ 363280297Sjkim int j, err = 0; 364280297Sjkim unsigned int i; 365280297Sjkim des_cblock in, out, outin, iv3, iv2; 366280297Sjkim des_key_schedule ks, ks2, ks3; 367280297Sjkim unsigned char cbc_in[40]; 368280297Sjkim unsigned char cbc_out[40]; 369280297Sjkim DES_LONG cs; 370280297Sjkim unsigned char cret[8]; 371280297Sjkim# ifdef _CRAY 372280297Sjkim struct { 373280297Sjkim int a:32; 374280297Sjkim int b:32; 375280297Sjkim } lqret[2]; 376280297Sjkim# else 377280297Sjkim DES_LONG lqret[4]; 378280297Sjkim# endif 379280297Sjkim int num; 380280297Sjkim char *str; 38155714Skris 382280297Sjkim# ifndef OPENSSL_NO_DESCBCM 383280297Sjkim printf("Doing cbcm\n"); 384280297Sjkim if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) { 385280297Sjkim printf("Key error %d\n", j); 386280297Sjkim err = 1; 387280297Sjkim } 388280297Sjkim if ((j = DES_set_key_checked(&cbc2_key, &ks2)) != 0) { 389280297Sjkim printf("Key error %d\n", j); 390280297Sjkim err = 1; 391280297Sjkim } 392280297Sjkim if ((j = DES_set_key_checked(&cbc3_key, &ks3)) != 0) { 393280297Sjkim printf("Key error %d\n", j); 394280297Sjkim err = 1; 395280297Sjkim } 396280297Sjkim memset(cbc_out, 0, 40); 397280297Sjkim memset(cbc_in, 0, 40); 398280297Sjkim i = strlen((char *)cbc_data) + 1; 399280297Sjkim /* i=((i+7)/8)*8; */ 400280297Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 401280297Sjkim memset(iv2, '\0', sizeof iv2); 40255714Skris 403280297Sjkim DES_ede3_cbcm_encrypt(cbc_data, cbc_out, 16L, &ks, &ks2, &ks3, &iv3, &iv2, 404280297Sjkim DES_ENCRYPT); 405280297Sjkim DES_ede3_cbcm_encrypt(&cbc_data[16], &cbc_out[16], i - 16, &ks, &ks2, 406280297Sjkim &ks3, &iv3, &iv2, DES_ENCRYPT); 407280297Sjkim/*- if (memcmp(cbc_out,cbc3_ok, 408280297Sjkim (unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0) 409280297Sjkim { 410280297Sjkim printf("des_ede3_cbc_encrypt encrypt error\n"); 411280297Sjkim err=1; 412280297Sjkim } 413280297Sjkim*/ 414280297Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 415280297Sjkim memset(iv2, '\0', sizeof iv2); 416280297Sjkim DES_ede3_cbcm_encrypt(cbc_out, cbc_in, i, &ks, &ks2, &ks3, &iv3, &iv2, 417280297Sjkim DES_DECRYPT); 418280297Sjkim if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data) + 1) != 0) { 419280297Sjkim unsigned int n; 42055714Skris 421280297Sjkim printf("des_ede3_cbcm_encrypt decrypt error\n"); 422280297Sjkim for (n = 0; n < i; ++n) 423280297Sjkim printf(" %02x", cbc_data[n]); 424280297Sjkim printf("\n"); 425280297Sjkim for (n = 0; n < i; ++n) 426280297Sjkim printf(" %02x", cbc_in[n]); 427280297Sjkim printf("\n"); 428280297Sjkim err = 1; 429280297Sjkim } 430280297Sjkim# endif 43155714Skris 432280297Sjkim printf("Doing ecb\n"); 433280297Sjkim for (i = 0; i < NUM_TESTS; i++) { 434280297Sjkim DES_set_key_unchecked(&key_data[i], &ks); 435280297Sjkim memcpy(in, plain_data[i], 8); 436280297Sjkim memset(out, 0, 8); 437280297Sjkim memset(outin, 0, 8); 438280297Sjkim des_ecb_encrypt(&in, &out, ks, DES_ENCRYPT); 439280297Sjkim des_ecb_encrypt(&out, &outin, ks, DES_DECRYPT); 44055714Skris 441280297Sjkim if (memcmp(out, cipher_data[i], 8) != 0) { 442280297Sjkim printf("Encryption error %2d\nk=%s p=%s o=%s act=%s\n", 443280297Sjkim i + 1, pt(key_data[i]), pt(in), pt(cipher_data[i]), 444280297Sjkim pt(out)); 445280297Sjkim err = 1; 446280297Sjkim } 447280297Sjkim if (memcmp(in, outin, 8) != 0) { 448280297Sjkim printf("Decryption error %2d\nk=%s p=%s o=%s act=%s\n", 449280297Sjkim i + 1, pt(key_data[i]), pt(out), pt(in), pt(outin)); 450280297Sjkim err = 1; 451280297Sjkim } 452280297Sjkim } 45355714Skris 454280297Sjkim# ifndef LIBDES_LIT 455280297Sjkim printf("Doing ede ecb\n"); 456280297Sjkim for (i = 0; i < (NUM_TESTS - 2); i++) { 457280297Sjkim DES_set_key_unchecked(&key_data[i], &ks); 458280297Sjkim DES_set_key_unchecked(&key_data[i + 1], &ks2); 459280297Sjkim DES_set_key_unchecked(&key_data[i + 2], &ks3); 460280297Sjkim memcpy(in, plain_data[i], 8); 461280297Sjkim memset(out, 0, 8); 462280297Sjkim memset(outin, 0, 8); 463280297Sjkim des_ecb2_encrypt(&in, &out, ks, ks2, DES_ENCRYPT); 464280297Sjkim des_ecb2_encrypt(&out, &outin, ks, ks2, DES_DECRYPT); 46555714Skris 466280297Sjkim if (memcmp(out, cipher_ecb2[i], 8) != 0) { 467280297Sjkim printf("Encryption error %2d\nk=%s p=%s o=%s act=%s\n", 468280297Sjkim i + 1, pt(key_data[i]), pt(in), pt(cipher_ecb2[i]), 469280297Sjkim pt(out)); 470280297Sjkim err = 1; 471280297Sjkim } 472280297Sjkim if (memcmp(in, outin, 8) != 0) { 473280297Sjkim printf("Decryption error %2d\nk=%s p=%s o=%s act=%s\n", 474280297Sjkim i + 1, pt(key_data[i]), pt(out), pt(in), pt(outin)); 475280297Sjkim err = 1; 476280297Sjkim } 477280297Sjkim } 478280297Sjkim# endif 47955714Skris 480280297Sjkim printf("Doing cbc\n"); 481280297Sjkim if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) { 482280297Sjkim printf("Key error %d\n", j); 483280297Sjkim err = 1; 484280297Sjkim } 485280297Sjkim memset(cbc_out, 0, 40); 486280297Sjkim memset(cbc_in, 0, 40); 487280297Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 488280297Sjkim des_ncbc_encrypt(cbc_data, cbc_out, strlen((char *)cbc_data) + 1, ks, 489280297Sjkim &iv3, DES_ENCRYPT); 490280297Sjkim if (memcmp(cbc_out, cbc_ok, 32) != 0) { 491280297Sjkim printf("cbc_encrypt encrypt error\n"); 492280297Sjkim err = 1; 493280297Sjkim } 49455714Skris 495280297Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 496280297Sjkim des_ncbc_encrypt(cbc_out, cbc_in, strlen((char *)cbc_data) + 1, ks, 497280297Sjkim &iv3, DES_DECRYPT); 498280297Sjkim if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data)) != 0) { 499280297Sjkim printf("cbc_encrypt decrypt error\n"); 500280297Sjkim err = 1; 501280297Sjkim } 502280297Sjkim# ifndef LIBDES_LIT 503280297Sjkim printf("Doing desx cbc\n"); 504280297Sjkim if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) { 505280297Sjkim printf("Key error %d\n", j); 506280297Sjkim err = 1; 507280297Sjkim } 508280297Sjkim memset(cbc_out, 0, 40); 509280297Sjkim memset(cbc_in, 0, 40); 510280297Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 511280297Sjkim des_xcbc_encrypt(cbc_data, cbc_out, strlen((char *)cbc_data) + 1, ks, 512280297Sjkim &iv3, &cbc2_key, &cbc3_key, DES_ENCRYPT); 513280297Sjkim if (memcmp(cbc_out, xcbc_ok, 32) != 0) { 514280297Sjkim printf("des_xcbc_encrypt encrypt error\n"); 515280297Sjkim err = 1; 516280297Sjkim } 517280297Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 518280297Sjkim des_xcbc_encrypt(cbc_out, cbc_in, strlen((char *)cbc_data) + 1, ks, 519280297Sjkim &iv3, &cbc2_key, &cbc3_key, DES_DECRYPT); 520280297Sjkim if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data) + 1) != 0) { 521280297Sjkim printf("des_xcbc_encrypt decrypt error\n"); 522280297Sjkim err = 1; 523280297Sjkim } 524280297Sjkim# endif 52555714Skris 526280297Sjkim printf("Doing ede cbc\n"); 527280297Sjkim if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) { 528280297Sjkim printf("Key error %d\n", j); 529280297Sjkim err = 1; 530280297Sjkim } 531280297Sjkim if ((j = DES_set_key_checked(&cbc2_key, &ks2)) != 0) { 532280297Sjkim printf("Key error %d\n", j); 533280297Sjkim err = 1; 534280297Sjkim } 535280297Sjkim if ((j = DES_set_key_checked(&cbc3_key, &ks3)) != 0) { 536280297Sjkim printf("Key error %d\n", j); 537280297Sjkim err = 1; 538280297Sjkim } 539280297Sjkim memset(cbc_out, 0, 40); 540280297Sjkim memset(cbc_in, 0, 40); 541280297Sjkim i = strlen((char *)cbc_data) + 1; 542280297Sjkim /* i=((i+7)/8)*8; */ 543280297Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 54455714Skris 545280297Sjkim des_ede3_cbc_encrypt(cbc_data, cbc_out, 16L, ks, ks2, ks3, &iv3, 546280297Sjkim DES_ENCRYPT); 547280297Sjkim des_ede3_cbc_encrypt(&(cbc_data[16]), &(cbc_out[16]), i - 16, ks, ks2, 548280297Sjkim ks3, &iv3, DES_ENCRYPT); 549280297Sjkim if (memcmp 550280297Sjkim (cbc_out, cbc3_ok, 551280297Sjkim (unsigned int)(strlen((char *)cbc_data) + 1 + 7) / 8 * 8) != 0) { 552280297Sjkim unsigned int n; 55355714Skris 554280297Sjkim printf("des_ede3_cbc_encrypt encrypt error\n"); 555280297Sjkim for (n = 0; n < i; ++n) 556280297Sjkim printf(" %02x", cbc_out[n]); 557280297Sjkim printf("\n"); 558280297Sjkim for (n = 0; n < i; ++n) 559280297Sjkim printf(" %02x", cbc3_ok[n]); 560280297Sjkim printf("\n"); 561280297Sjkim err = 1; 562280297Sjkim } 563109998Smarkm 564280297Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 565280297Sjkim des_ede3_cbc_encrypt(cbc_out, cbc_in, i, ks, ks2, ks3, &iv3, DES_DECRYPT); 566280297Sjkim if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data) + 1) != 0) { 567280297Sjkim unsigned int n; 56855714Skris 569280297Sjkim printf("des_ede3_cbc_encrypt decrypt error\n"); 570280297Sjkim for (n = 0; n < i; ++n) 571280297Sjkim printf(" %02x", cbc_data[n]); 572280297Sjkim printf("\n"); 573280297Sjkim for (n = 0; n < i; ++n) 574280297Sjkim printf(" %02x", cbc_in[n]); 575280297Sjkim printf("\n"); 576280297Sjkim err = 1; 577280297Sjkim } 578280297Sjkim# ifndef LIBDES_LIT 579280297Sjkim printf("Doing pcbc\n"); 580280297Sjkim if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) { 581280297Sjkim printf("Key error %d\n", j); 582280297Sjkim err = 1; 583280297Sjkim } 584280297Sjkim memset(cbc_out, 0, 40); 585280297Sjkim memset(cbc_in, 0, 40); 586280297Sjkim des_pcbc_encrypt(cbc_data, cbc_out, strlen((char *)cbc_data) + 1, ks, 587280297Sjkim &cbc_iv, DES_ENCRYPT); 588280297Sjkim if (memcmp(cbc_out, pcbc_ok, 32) != 0) { 589280297Sjkim printf("pcbc_encrypt encrypt error\n"); 590280297Sjkim err = 1; 591280297Sjkim } 592280297Sjkim des_pcbc_encrypt(cbc_out, cbc_in, strlen((char *)cbc_data) + 1, ks, 593280297Sjkim &cbc_iv, DES_DECRYPT); 594280297Sjkim if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data) + 1) != 0) { 595280297Sjkim printf("pcbc_encrypt decrypt error\n"); 596280297Sjkim err = 1; 597280297Sjkim } 598109998Smarkm 599280297Sjkim printf("Doing "); 600280297Sjkim printf("cfb8 "); 601280297Sjkim err += cfb_test(8, cfb_cipher8); 602280297Sjkim printf("cfb16 "); 603280297Sjkim err += cfb_test(16, cfb_cipher16); 604280297Sjkim printf("cfb32 "); 605280297Sjkim err += cfb_test(32, cfb_cipher32); 606280297Sjkim printf("cfb48 "); 607280297Sjkim err += cfb_test(48, cfb_cipher48); 608280297Sjkim printf("cfb64 "); 609280297Sjkim err += cfb_test(64, cfb_cipher64); 61055714Skris 611280297Sjkim printf("cfb64() "); 612280297Sjkim err += cfb64_test(cfb_cipher64); 61355714Skris 614280297Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 615280297Sjkim for (i = 0; i < sizeof(plain); i++) 616280297Sjkim des_cfb_encrypt(&(plain[i]), &(cfb_buf1[i]), 617280297Sjkim 8, 1, ks, &cfb_tmp, DES_ENCRYPT); 618280297Sjkim if (memcmp(cfb_cipher8, cfb_buf1, sizeof(plain)) != 0) { 619280297Sjkim printf("cfb_encrypt small encrypt error\n"); 620280297Sjkim err = 1; 621280297Sjkim } 62255714Skris 623280297Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 624280297Sjkim for (i = 0; i < sizeof(plain); i++) 625280297Sjkim des_cfb_encrypt(&(cfb_buf1[i]), &(cfb_buf2[i]), 626280297Sjkim 8, 1, ks, &cfb_tmp, DES_DECRYPT); 627280297Sjkim if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) { 628280297Sjkim printf("cfb_encrypt small decrypt error\n"); 629280297Sjkim err = 1; 630280297Sjkim } 63155714Skris 632280297Sjkim printf("ede_cfb64() "); 633280297Sjkim err += ede_cfb64_test(cfb_cipher64); 63455714Skris 635280297Sjkim printf("done\n"); 63655714Skris 637280297Sjkim printf("Doing ofb\n"); 638280297Sjkim DES_set_key_checked(&ofb_key, &ks); 639280297Sjkim memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 640280297Sjkim des_ofb_encrypt(plain, ofb_buf1, 64, sizeof(plain) / 8, ks, &ofb_tmp); 641280297Sjkim if (memcmp(ofb_cipher, ofb_buf1, sizeof(ofb_buf1)) != 0) { 642280297Sjkim printf("ofb_encrypt encrypt error\n"); 643280297Sjkim printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", 644280297Sjkim ofb_buf1[8 + 0], ofb_buf1[8 + 1], ofb_buf1[8 + 2], 645280297Sjkim ofb_buf1[8 + 3], ofb_buf1[8 + 4], ofb_buf1[8 + 5], 646280297Sjkim ofb_buf1[8 + 6], ofb_buf1[8 + 7]); 647280297Sjkim printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", ofb_buf1[8 + 0], 648280297Sjkim ofb_cipher[8 + 1], ofb_cipher[8 + 2], ofb_cipher[8 + 3], 649280297Sjkim ofb_buf1[8 + 4], ofb_cipher[8 + 5], ofb_cipher[8 + 6], 650280297Sjkim ofb_cipher[8 + 7]); 651280297Sjkim err = 1; 652280297Sjkim } 653280297Sjkim memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 654280297Sjkim des_ofb_encrypt(ofb_buf1, ofb_buf2, 64, sizeof(ofb_buf1) / 8, ks, 655280297Sjkim &ofb_tmp); 656280297Sjkim if (memcmp(plain, ofb_buf2, sizeof(ofb_buf2)) != 0) { 657280297Sjkim printf("ofb_encrypt decrypt error\n"); 658280297Sjkim printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", 659280297Sjkim ofb_buf2[8 + 0], ofb_buf2[8 + 1], ofb_buf2[8 + 2], 660280297Sjkim ofb_buf2[8 + 3], ofb_buf2[8 + 4], ofb_buf2[8 + 5], 661280297Sjkim ofb_buf2[8 + 6], ofb_buf2[8 + 7]); 662280297Sjkim printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", plain[8 + 0], 663280297Sjkim plain[8 + 1], plain[8 + 2], plain[8 + 3], plain[8 + 4], 664280297Sjkim plain[8 + 5], plain[8 + 6], plain[8 + 7]); 665280297Sjkim err = 1; 666280297Sjkim } 66755714Skris 668280297Sjkim printf("Doing ofb64\n"); 669280297Sjkim DES_set_key_checked(&ofb_key, &ks); 670280297Sjkim memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 671280297Sjkim memset(ofb_buf1, 0, sizeof(ofb_buf1)); 672280297Sjkim memset(ofb_buf2, 0, sizeof(ofb_buf1)); 673280297Sjkim num = 0; 674280297Sjkim for (i = 0; i < sizeof(plain); i++) { 675280297Sjkim des_ofb64_encrypt(&(plain[i]), &(ofb_buf1[i]), 1, ks, &ofb_tmp, &num); 676280297Sjkim } 677280297Sjkim if (memcmp(ofb_cipher, ofb_buf1, sizeof(ofb_buf1)) != 0) { 678280297Sjkim printf("ofb64_encrypt encrypt error\n"); 679280297Sjkim err = 1; 680280297Sjkim } 681280297Sjkim memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 682280297Sjkim num = 0; 683280297Sjkim des_ofb64_encrypt(ofb_buf1, ofb_buf2, sizeof(ofb_buf1), ks, &ofb_tmp, 684280297Sjkim &num); 685280297Sjkim if (memcmp(plain, ofb_buf2, sizeof(ofb_buf2)) != 0) { 686280297Sjkim printf("ofb64_encrypt decrypt error\n"); 687280297Sjkim err = 1; 688280297Sjkim } 68955714Skris 690280297Sjkim printf("Doing ede_ofb64\n"); 691280297Sjkim DES_set_key_checked(&ofb_key, &ks); 692280297Sjkim memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 693280297Sjkim memset(ofb_buf1, 0, sizeof(ofb_buf1)); 694280297Sjkim memset(ofb_buf2, 0, sizeof(ofb_buf1)); 695280297Sjkim num = 0; 696280297Sjkim for (i = 0; i < sizeof(plain); i++) { 697280297Sjkim des_ede3_ofb64_encrypt(&(plain[i]), &(ofb_buf1[i]), 1, ks, ks, 698280297Sjkim ks, &ofb_tmp, &num); 699280297Sjkim } 700280297Sjkim if (memcmp(ofb_cipher, ofb_buf1, sizeof(ofb_buf1)) != 0) { 701280297Sjkim printf("ede_ofb64_encrypt encrypt error\n"); 702280297Sjkim err = 1; 703280297Sjkim } 704280297Sjkim memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 705280297Sjkim num = 0; 706280297Sjkim des_ede3_ofb64_encrypt(ofb_buf1, ofb_buf2, sizeof(ofb_buf1), ks, ks, ks, 707280297Sjkim &ofb_tmp, &num); 708280297Sjkim if (memcmp(plain, ofb_buf2, sizeof(ofb_buf2)) != 0) { 709280297Sjkim printf("ede_ofb64_encrypt decrypt error\n"); 710280297Sjkim err = 1; 711280297Sjkim } 71255714Skris 713280297Sjkim printf("Doing cbc_cksum\n"); 714280297Sjkim DES_set_key_checked(&cbc_key, &ks); 715280297Sjkim cs = des_cbc_cksum(cbc_data, &cret, strlen((char *)cbc_data), ks, 716280297Sjkim &cbc_iv); 717280297Sjkim if (cs != cbc_cksum_ret) { 718280297Sjkim printf("bad return value (%08lX), should be %08lX\n", 719280297Sjkim (unsigned long)cs, (unsigned long)cbc_cksum_ret); 720280297Sjkim err = 1; 721280297Sjkim } 722280297Sjkim if (memcmp(cret, cbc_cksum_data, 8) != 0) { 723280297Sjkim printf("bad cbc_cksum block returned\n"); 724280297Sjkim err = 1; 725280297Sjkim } 72655714Skris 727280297Sjkim printf("Doing quad_cksum\n"); 728280297Sjkim cs = des_quad_cksum(cbc_data, (des_cblock *)lqret, 729280297Sjkim (long)strlen((char *)cbc_data), 2, 730280297Sjkim (des_cblock *)cbc_iv); 731280297Sjkim if (cs != 0x70d7a63aL) { 732280297Sjkim printf("quad_cksum error, ret %08lx should be 70d7a63a\n", 733280297Sjkim (unsigned long)cs); 734280297Sjkim err = 1; 735280297Sjkim } 736280297Sjkim# ifdef _CRAY 737280297Sjkim if (lqret[0].a != 0x327eba8dL) { 738280297Sjkim printf("quad_cksum error, out[0] %08lx is not %08lx\n", 739280297Sjkim (unsigned long)lqret[0].a, 0x327eba8dUL); 740280297Sjkim err = 1; 741280297Sjkim } 742280297Sjkim if (lqret[0].b != 0x201a49ccL) { 743280297Sjkim printf("quad_cksum error, out[1] %08lx is not %08lx\n", 744280297Sjkim (unsigned long)lqret[0].b, 0x201a49ccUL); 745280297Sjkim err = 1; 746280297Sjkim } 747280297Sjkim if (lqret[1].a != 0x70d7a63aL) { 748280297Sjkim printf("quad_cksum error, out[2] %08lx is not %08lx\n", 749280297Sjkim (unsigned long)lqret[1].a, 0x70d7a63aUL); 750280297Sjkim err = 1; 751280297Sjkim } 752280297Sjkim if (lqret[1].b != 0x501c2c26L) { 753280297Sjkim printf("quad_cksum error, out[3] %08lx is not %08lx\n", 754280297Sjkim (unsigned long)lqret[1].b, 0x501c2c26UL); 755280297Sjkim err = 1; 756280297Sjkim } 757280297Sjkim# else 758280297Sjkim if (lqret[0] != 0x327eba8dL) { 759280297Sjkim printf("quad_cksum error, out[0] %08lx is not %08lx\n", 760280297Sjkim (unsigned long)lqret[0], 0x327eba8dUL); 761280297Sjkim err = 1; 762280297Sjkim } 763280297Sjkim if (lqret[1] != 0x201a49ccL) { 764280297Sjkim printf("quad_cksum error, out[1] %08lx is not %08lx\n", 765280297Sjkim (unsigned long)lqret[1], 0x201a49ccUL); 766280297Sjkim err = 1; 767280297Sjkim } 768280297Sjkim if (lqret[2] != 0x70d7a63aL) { 769280297Sjkim printf("quad_cksum error, out[2] %08lx is not %08lx\n", 770280297Sjkim (unsigned long)lqret[2], 0x70d7a63aUL); 771280297Sjkim err = 1; 772280297Sjkim } 773280297Sjkim if (lqret[3] != 0x501c2c26L) { 774280297Sjkim printf("quad_cksum error, out[3] %08lx is not %08lx\n", 775280297Sjkim (unsigned long)lqret[3], 0x501c2c26UL); 776280297Sjkim err = 1; 777280297Sjkim } 778280297Sjkim# endif 779280297Sjkim# endif 78055714Skris 781280297Sjkim printf("input word alignment test"); 782280297Sjkim for (i = 0; i < 4; i++) { 783280297Sjkim printf(" %d", i); 784280297Sjkim des_ncbc_encrypt(&(cbc_out[i]), cbc_in, 785280297Sjkim strlen((char *)cbc_data) + 1, ks, 786280297Sjkim &cbc_iv, DES_ENCRYPT); 787280297Sjkim } 788280297Sjkim printf("\noutput word alignment test"); 789280297Sjkim for (i = 0; i < 4; i++) { 790280297Sjkim printf(" %d", i); 791280297Sjkim des_ncbc_encrypt(cbc_out, &(cbc_in[i]), 792280297Sjkim strlen((char *)cbc_data) + 1, ks, 793280297Sjkim &cbc_iv, DES_ENCRYPT); 794280297Sjkim } 795280297Sjkim printf("\n"); 796280297Sjkim printf("fast crypt test "); 797280297Sjkim str = crypt("testing", "ef"); 798280297Sjkim if (strcmp("efGnQx2725bI2", str) != 0) { 799280297Sjkim printf("fast crypt error, %s should be efGnQx2725bI2\n", str); 800280297Sjkim err = 1; 801280297Sjkim } 802280297Sjkim str = crypt("bca76;23", "yA"); 803280297Sjkim if (strcmp("yA1Rp/1hZXIJk", str) != 0) { 804280297Sjkim printf("fast crypt error, %s should be yA1Rp/1hZXIJk\n", str); 805280297Sjkim err = 1; 806280297Sjkim } 807280297Sjkim# ifdef OPENSSL_SYS_NETWARE 808280297Sjkim if (err) 809280297Sjkim printf("ERROR: %d\n", err); 810280297Sjkim# endif 811280297Sjkim printf("\n"); 812280297Sjkim return (err); 813280297Sjkim} 81455714Skris 81555714Skrisstatic char *pt(unsigned char *p) 816280297Sjkim{ 817280297Sjkim static char bufs[10][20]; 818280297Sjkim static int bnum = 0; 819280297Sjkim char *ret; 820280297Sjkim int i; 821280297Sjkim static char *f = "0123456789ABCDEF"; 82255714Skris 823280297Sjkim ret = &(bufs[bnum++][0]); 824280297Sjkim bnum %= 10; 825280297Sjkim for (i = 0; i < 8; i++) { 826280297Sjkim ret[i * 2] = f[(p[i] >> 4) & 0xf]; 827280297Sjkim ret[i * 2 + 1] = f[p[i] & 0xf]; 828280297Sjkim } 829280297Sjkim ret[16] = '\0'; 830280297Sjkim return (ret); 831280297Sjkim} 83255714Skris 833280297Sjkim# ifndef LIBDES_LIT 83455714Skris 83555714Skrisstatic int cfb_test(int bits, unsigned char *cfb_cipher) 836280297Sjkim{ 837280297Sjkim des_key_schedule ks; 838280297Sjkim int i, err = 0; 83955714Skris 840280297Sjkim DES_set_key_checked(&cfb_key, &ks); 841280297Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 842280297Sjkim des_cfb_encrypt(plain, cfb_buf1, bits, sizeof(plain), ks, &cfb_tmp, 843280297Sjkim DES_ENCRYPT); 844280297Sjkim if (memcmp(cfb_cipher, cfb_buf1, sizeof(plain)) != 0) { 845280297Sjkim err = 1; 846280297Sjkim printf("cfb_encrypt encrypt error\n"); 847280297Sjkim for (i = 0; i < 24; i += 8) 848280297Sjkim printf("%s\n", pt(&(cfb_buf1[i]))); 849280297Sjkim } 850280297Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 851280297Sjkim des_cfb_encrypt(cfb_buf1, cfb_buf2, bits, sizeof(plain), ks, &cfb_tmp, 852280297Sjkim DES_DECRYPT); 853280297Sjkim if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) { 854280297Sjkim err = 1; 855280297Sjkim printf("cfb_encrypt decrypt error\n"); 856280297Sjkim for (i = 0; i < 24; i += 8) 857280297Sjkim printf("%s\n", pt(&(cfb_buf1[i]))); 858280297Sjkim } 859280297Sjkim return (err); 860280297Sjkim} 86155714Skris 86255714Skrisstatic int cfb64_test(unsigned char *cfb_cipher) 863280297Sjkim{ 864280297Sjkim des_key_schedule ks; 865280297Sjkim int err = 0, i, n; 86655714Skris 867280297Sjkim DES_set_key_checked(&cfb_key, &ks); 868280297Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 869280297Sjkim n = 0; 870280297Sjkim des_cfb64_encrypt(plain, cfb_buf1, 12, ks, &cfb_tmp, &n, DES_ENCRYPT); 871280297Sjkim des_cfb64_encrypt(&(plain[12]), &(cfb_buf1[12]), sizeof(plain) - 12, ks, 872280297Sjkim &cfb_tmp, &n, DES_ENCRYPT); 873280297Sjkim if (memcmp(cfb_cipher, cfb_buf1, sizeof(plain)) != 0) { 874280297Sjkim err = 1; 875280297Sjkim printf("cfb_encrypt encrypt error\n"); 876280297Sjkim for (i = 0; i < 24; i += 8) 877280297Sjkim printf("%s\n", pt(&(cfb_buf1[i]))); 878280297Sjkim } 879280297Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 880280297Sjkim n = 0; 881280297Sjkim des_cfb64_encrypt(cfb_buf1, cfb_buf2, 17, ks, &cfb_tmp, &n, DES_DECRYPT); 882280297Sjkim des_cfb64_encrypt(&(cfb_buf1[17]), &(cfb_buf2[17]), 883280297Sjkim sizeof(plain) - 17, ks, &cfb_tmp, &n, DES_DECRYPT); 884280297Sjkim if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) { 885280297Sjkim err = 1; 886280297Sjkim printf("cfb_encrypt decrypt error\n"); 887280297Sjkim for (i = 0; i < 24; i += 8) 888280297Sjkim printf("%s\n", pt(&(cfb_buf2[i]))); 889280297Sjkim } 890280297Sjkim return (err); 891280297Sjkim} 89255714Skris 89355714Skrisstatic int ede_cfb64_test(unsigned char *cfb_cipher) 894280297Sjkim{ 895280297Sjkim des_key_schedule ks; 896280297Sjkim int err = 0, i, n; 89755714Skris 898280297Sjkim DES_set_key_checked(&cfb_key, &ks); 899280297Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 900280297Sjkim n = 0; 901280297Sjkim des_ede3_cfb64_encrypt(plain, cfb_buf1, 12, ks, ks, ks, &cfb_tmp, &n, 902280297Sjkim DES_ENCRYPT); 903280297Sjkim des_ede3_cfb64_encrypt(&(plain[12]), &(cfb_buf1[12]), 904280297Sjkim sizeof(plain) - 12, ks, ks, ks, 905280297Sjkim &cfb_tmp, &n, DES_ENCRYPT); 906280297Sjkim if (memcmp(cfb_cipher, cfb_buf1, sizeof(plain)) != 0) { 907280297Sjkim err = 1; 908280297Sjkim printf("ede_cfb_encrypt encrypt error\n"); 909280297Sjkim for (i = 0; i < 24; i += 8) 910280297Sjkim printf("%s\n", pt(&(cfb_buf1[i]))); 911280297Sjkim } 912280297Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 913280297Sjkim n = 0; 914280297Sjkim des_ede3_cfb64_encrypt(cfb_buf1, cfb_buf2, (long)17, ks, ks, ks, 915280297Sjkim &cfb_tmp, &n, DES_DECRYPT); 916280297Sjkim des_ede3_cfb64_encrypt(&(cfb_buf1[17]), &(cfb_buf2[17]), 917280297Sjkim sizeof(plain) - 17, ks, ks, ks, 918280297Sjkim &cfb_tmp, &n, DES_DECRYPT); 919280297Sjkim if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) { 920280297Sjkim err = 1; 921280297Sjkim printf("ede_cfb_encrypt decrypt error\n"); 922280297Sjkim for (i = 0; i < 24; i += 8) 923280297Sjkim printf("%s\n", pt(&(cfb_buf2[i]))); 924280297Sjkim } 925280297Sjkim return (err); 926280297Sjkim} 92755714Skris 928280297Sjkim# endif 92955714Skris#endif 930