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. 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 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) 64280304Sjkim# ifndef OPENSSL_SYS_MSDOS 65280304Sjkim# define OPENSSL_SYS_MSDOS 66280304Sjkim# endif 6755714Skris#endif 6855714Skris 69109998Smarkm#ifndef OPENSSL_SYS_MSDOS 70280304Sjkim# if !defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_VMS_DECC) 71280304Sjkim# include OPENSSL_UNISTD 72280304Sjkim# endif 7355714Skris#else 74280304Sjkim# 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"); 82280304Sjkim return (0); 8355714Skris} 8455714Skris#else 85280304Sjkim# include <openssl/des.h> 8655714Skris 87280304Sjkim# define crypt(c,s) (DES_crypt((c),(s))) 8855714Skris 8955714Skris/* tisk tisk - the test keys don't all have odd parity :-( */ 9055714Skris/* test data */ 91280304Sjkim# define NUM_TESTS 34 92280304Sjkimstatic unsigned char key_data[NUM_TESTS][8] = { 93280304Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 94280304Sjkim {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 95280304Sjkim {0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 96280304Sjkim {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 97280304Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 98280304Sjkim {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 99280304Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 100280304Sjkim {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, 101280304Sjkim {0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57}, 102280304Sjkim {0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E}, 103280304Sjkim {0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86}, 104280304Sjkim {0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E}, 105280304Sjkim {0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6}, 106280304Sjkim {0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE}, 107280304Sjkim {0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6}, 108280304Sjkim {0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE}, 109280304Sjkim {0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16}, 110280304Sjkim {0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F}, 111280304Sjkim {0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46}, 112280304Sjkim {0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E}, 113280304Sjkim {0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76}, 114280304Sjkim {0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07}, 115280304Sjkim {0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F}, 116280304Sjkim {0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7}, 117280304Sjkim {0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF}, 118280304Sjkim {0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6}, 119280304Sjkim {0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF}, 120280304Sjkim {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 121280304Sjkim {0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E}, 122280304Sjkim {0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE}, 123280304Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 124280304Sjkim {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 125280304Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 126280304Sjkim {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10} 127280304Sjkim}; 12855714Skris 129280304Sjkimstatic unsigned char plain_data[NUM_TESTS][8] = { 130280304Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 131280304Sjkim {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 132280304Sjkim {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, 133280304Sjkim {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 134280304Sjkim {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 135280304Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 136280304Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 137280304Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 138280304Sjkim {0x01, 0xA1, 0xD6, 0xD0, 0x39, 0x77, 0x67, 0x42}, 139280304Sjkim {0x5C, 0xD5, 0x4C, 0xA8, 0x3D, 0xEF, 0x57, 0xDA}, 140280304Sjkim {0x02, 0x48, 0xD4, 0x38, 0x06, 0xF6, 0x71, 0x72}, 141280304Sjkim {0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A}, 142280304Sjkim {0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2}, 143280304Sjkim {0x05, 0x9B, 0x5E, 0x08, 0x51, 0xCF, 0x14, 0x3A}, 144280304Sjkim {0x07, 0x56, 0xD8, 0xE0, 0x77, 0x47, 0x61, 0xD2}, 145280304Sjkim {0x76, 0x25, 0x14, 0xB8, 0x29, 0xBF, 0x48, 0x6A}, 146280304Sjkim {0x3B, 0xDD, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02}, 147280304Sjkim {0x26, 0x95, 0x5F, 0x68, 0x35, 0xAF, 0x60, 0x9A}, 148280304Sjkim {0x16, 0x4D, 0x5E, 0x40, 0x4F, 0x27, 0x52, 0x32}, 149280304Sjkim {0x6B, 0x05, 0x6E, 0x18, 0x75, 0x9F, 0x5C, 0xCA}, 150280304Sjkim {0x00, 0x4B, 0xD6, 0xEF, 0x09, 0x17, 0x60, 0x62}, 151280304Sjkim {0x48, 0x0D, 0x39, 0x00, 0x6E, 0xE7, 0x62, 0xF2}, 152280304Sjkim {0x43, 0x75, 0x40, 0xC8, 0x69, 0x8F, 0x3C, 0xFA}, 153280304Sjkim {0x07, 0x2D, 0x43, 0xA0, 0x77, 0x07, 0x52, 0x92}, 154280304Sjkim {0x02, 0xFE, 0x55, 0x77, 0x81, 0x17, 0xF1, 0x2A}, 155280304Sjkim {0x1D, 0x9D, 0x5C, 0x50, 0x18, 0xF7, 0x28, 0xC2}, 156280304Sjkim {0x30, 0x55, 0x32, 0x28, 0x6D, 0x6F, 0x29, 0x5A}, 157280304Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 158280304Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 159280304Sjkim {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 160280304Sjkim {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 161280304Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 162280304Sjkim {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 163280304Sjkim {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} 164280304Sjkim}; 16555714Skris 166280304Sjkimstatic unsigned char cipher_data[NUM_TESTS][8] = { 167280304Sjkim {0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7}, 168280304Sjkim {0x73, 0x59, 0xB2, 0x16, 0x3E, 0x4E, 0xDC, 0x58}, 169280304Sjkim {0x95, 0x8E, 0x6E, 0x62, 0x7A, 0x05, 0x55, 0x7B}, 170280304Sjkim {0xF4, 0x03, 0x79, 0xAB, 0x9E, 0x0E, 0xC5, 0x33}, 171280304Sjkim {0x17, 0x66, 0x8D, 0xFC, 0x72, 0x92, 0x53, 0x2D}, 172280304Sjkim {0x8A, 0x5A, 0xE1, 0xF8, 0x1A, 0xB8, 0xF2, 0xDD}, 173280304Sjkim {0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7}, 174280304Sjkim {0xED, 0x39, 0xD9, 0x50, 0xFA, 0x74, 0xBC, 0xC4}, 175280304Sjkim {0x69, 0x0F, 0x5B, 0x0D, 0x9A, 0x26, 0x93, 0x9B}, 176280304Sjkim {0x7A, 0x38, 0x9D, 0x10, 0x35, 0x4B, 0xD2, 0x71}, 177280304Sjkim {0x86, 0x8E, 0xBB, 0x51, 0xCA, 0xB4, 0x59, 0x9A}, 178280304Sjkim {0x71, 0x78, 0x87, 0x6E, 0x01, 0xF1, 0x9B, 0x2A}, 179280304Sjkim {0xAF, 0x37, 0xFB, 0x42, 0x1F, 0x8C, 0x40, 0x95}, 180280304Sjkim {0x86, 0xA5, 0x60, 0xF1, 0x0E, 0xC6, 0xD8, 0x5B}, 181280304Sjkim {0x0C, 0xD3, 0xDA, 0x02, 0x00, 0x21, 0xDC, 0x09}, 182280304Sjkim {0xEA, 0x67, 0x6B, 0x2C, 0xB7, 0xDB, 0x2B, 0x7A}, 183280304Sjkim {0xDF, 0xD6, 0x4A, 0x81, 0x5C, 0xAF, 0x1A, 0x0F}, 184280304Sjkim {0x5C, 0x51, 0x3C, 0x9C, 0x48, 0x86, 0xC0, 0x88}, 185280304Sjkim {0x0A, 0x2A, 0xEE, 0xAE, 0x3F, 0xF4, 0xAB, 0x77}, 186280304Sjkim {0xEF, 0x1B, 0xF0, 0x3E, 0x5D, 0xFA, 0x57, 0x5A}, 187280304Sjkim {0x88, 0xBF, 0x0D, 0xB6, 0xD7, 0x0D, 0xEE, 0x56}, 188280304Sjkim {0xA1, 0xF9, 0x91, 0x55, 0x41, 0x02, 0x0B, 0x56}, 189280304Sjkim {0x6F, 0xBF, 0x1C, 0xAF, 0xCF, 0xFD, 0x05, 0x56}, 190280304Sjkim {0x2F, 0x22, 0xE4, 0x9B, 0xAB, 0x7C, 0xA1, 0xAC}, 191280304Sjkim {0x5A, 0x6B, 0x61, 0x2C, 0xC2, 0x6C, 0xCE, 0x4A}, 192280304Sjkim {0x5F, 0x4C, 0x03, 0x8E, 0xD1, 0x2B, 0x2E, 0x41}, 193280304Sjkim {0x63, 0xFA, 0xC0, 0xD0, 0x34, 0xD9, 0xF7, 0x93}, 194280304Sjkim {0x61, 0x7B, 0x3A, 0x0C, 0xE8, 0xF0, 0x71, 0x00}, 195280304Sjkim {0xDB, 0x95, 0x86, 0x05, 0xF8, 0xC8, 0xC6, 0x06}, 196280304Sjkim {0xED, 0xBF, 0xD1, 0xC6, 0x6C, 0x29, 0xCC, 0xC7}, 197280304Sjkim {0x35, 0x55, 0x50, 0xB2, 0x15, 0x0E, 0x24, 0x51}, 198280304Sjkim {0xCA, 0xAA, 0xAF, 0x4D, 0xEA, 0xF1, 0xDB, 0xAE}, 199280304Sjkim {0xD5, 0xD4, 0x4F, 0xF7, 0x20, 0x68, 0x3D, 0x0D}, 200280304Sjkim {0x2A, 0x2B, 0xB0, 0x08, 0xDF, 0x97, 0xC2, 0xF2} 201280304Sjkim}; 20255714Skris 203280304Sjkimstatic unsigned char cipher_ecb2[NUM_TESTS - 1][8] = { 204280304Sjkim {0x92, 0x95, 0xB5, 0x9B, 0xB3, 0x84, 0x73, 0x6E}, 205280304Sjkim {0x19, 0x9E, 0x9D, 0x6D, 0xF3, 0x9A, 0xA8, 0x16}, 206280304Sjkim {0x2A, 0x4B, 0x4D, 0x24, 0x52, 0x43, 0x84, 0x27}, 207280304Sjkim {0x35, 0x84, 0x3C, 0x01, 0x9D, 0x18, 0xC5, 0xB6}, 208280304Sjkim {0x4A, 0x5B, 0x2F, 0x42, 0xAA, 0x77, 0x19, 0x25}, 209280304Sjkim {0xA0, 0x6B, 0xA9, 0xB8, 0xCA, 0x5B, 0x17, 0x8A}, 210280304Sjkim {0xAB, 0x9D, 0xB7, 0xFB, 0xED, 0x95, 0xF2, 0x74}, 211280304Sjkim {0x3D, 0x25, 0x6C, 0x23, 0xA7, 0x25, 0x2F, 0xD6}, 212280304Sjkim {0xB7, 0x6F, 0xAB, 0x4F, 0xBD, 0xBD, 0xB7, 0x67}, 213280304Sjkim {0x8F, 0x68, 0x27, 0xD6, 0x9C, 0xF4, 0x1A, 0x10}, 214280304Sjkim {0x82, 0x57, 0xA1, 0xD6, 0x50, 0x5E, 0x81, 0x85}, 215280304Sjkim {0xA2, 0x0F, 0x0A, 0xCD, 0x80, 0x89, 0x7D, 0xFA}, 216280304Sjkim {0xCD, 0x2A, 0x53, 0x3A, 0xDB, 0x0D, 0x7E, 0xF3}, 217280304Sjkim {0xD2, 0xC2, 0xBE, 0x27, 0xE8, 0x1B, 0x68, 0xE3}, 218280304Sjkim {0xE9, 0x24, 0xCF, 0x4F, 0x89, 0x3C, 0x5B, 0x0A}, 219280304Sjkim {0xA7, 0x18, 0xC3, 0x9F, 0xFA, 0x9F, 0xD7, 0x69}, 220280304Sjkim {0x77, 0x2C, 0x79, 0xB1, 0xD2, 0x31, 0x7E, 0xB1}, 221280304Sjkim {0x49, 0xAB, 0x92, 0x7F, 0xD0, 0x22, 0x00, 0xB7}, 222280304Sjkim {0xCE, 0x1C, 0x6C, 0x7D, 0x85, 0xE3, 0x4A, 0x6F}, 223280304Sjkim {0xBE, 0x91, 0xD6, 0xE1, 0x27, 0xB2, 0xE9, 0x87}, 224280304Sjkim {0x70, 0x28, 0xAE, 0x8F, 0xD1, 0xF5, 0x74, 0x1A}, 225280304Sjkim {0xAA, 0x37, 0x80, 0xBB, 0xF3, 0x22, 0x1D, 0xDE}, 226280304Sjkim {0xA6, 0xC4, 0xD2, 0x5E, 0x28, 0x93, 0xAC, 0xB3}, 227280304Sjkim {0x22, 0x07, 0x81, 0x5A, 0xE4, 0xB7, 0x1A, 0xAD}, 228280304Sjkim {0xDC, 0xCE, 0x05, 0xE7, 0x07, 0xBD, 0xF5, 0x84}, 229280304Sjkim {0x26, 0x1D, 0x39, 0x2C, 0xB3, 0xBA, 0xA5, 0x85}, 230280304Sjkim {0xB4, 0xF7, 0x0F, 0x72, 0xFB, 0x04, 0xF0, 0xDC}, 231280304Sjkim {0x95, 0xBA, 0xA9, 0x4E, 0x87, 0x36, 0xF2, 0x89}, 232280304Sjkim {0xD4, 0x07, 0x3A, 0xF1, 0x5A, 0x17, 0x82, 0x0E}, 233280304Sjkim {0xEF, 0x6F, 0xAF, 0xA7, 0x66, 0x1A, 0x7E, 0x89}, 234280304Sjkim {0xC1, 0x97, 0xF5, 0x58, 0x74, 0x8A, 0x20, 0xE7}, 235280304Sjkim {0x43, 0x34, 0xCF, 0xDA, 0x22, 0xC4, 0x86, 0xC8}, 236280304Sjkim {0x08, 0xD7, 0xB4, 0xFB, 0x62, 0x9D, 0x08, 0x85} 237280304Sjkim}; 23855714Skris 239280304Sjkimstatic unsigned char cbc_key[8] = 240280304Sjkim { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; 241280304Sjkimstatic unsigned char cbc2_key[8] = 242280304Sjkim { 0xf1, 0xe0, 0xd3, 0xc2, 0xb5, 0xa4, 0x97, 0x86 }; 243280304Sjkimstatic unsigned char cbc3_key[8] = 244280304Sjkim { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }; 245280304Sjkimstatic unsigned char cbc_iv[8] = 246280304Sjkim { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }; 247280304Sjkim/* 248280304Sjkim * Changed the following text constant to binary so it will work on ebcdic 249280304Sjkim * machines :-) 250280304Sjkim */ 25155714Skris/* static char cbc_data[40]="7654321 Now is the time for \0001"; */ 252280304Sjkimstatic unsigned char cbc_data[40] = { 253280304Sjkim 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20, 254280304Sjkim 0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74, 255280304Sjkim 0x68, 0x65, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x20, 256280304Sjkim 0x66, 0x6F, 0x72, 0x20, 0x00, 0x31, 0x00, 0x00, 257280304Sjkim 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 258280304Sjkim}; 25955714Skris 260280304Sjkimstatic unsigned char cbc_ok[32] = { 261280304Sjkim 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4, 262280304Sjkim 0xac, 0xd8, 0xae, 0xfd, 0xdf, 0xd8, 0xa1, 0xeb, 263280304Sjkim 0x46, 0x8e, 0x91, 0x15, 0x78, 0x88, 0xba, 0x68, 264280304Sjkim 0x1d, 0x26, 0x93, 0x97, 0xf7, 0xfe, 0x62, 0xb4 265280304Sjkim}; 26655714Skris 267280304Sjkim# ifdef SCREW_THE_PARITY 268280304Sjkim# error "SCREW_THE_PARITY is not ment to be defined." 269280304Sjkim# error "Original vectors are preserved for reference only." 270280304Sjkimstatic unsigned char cbc2_key[8] = 271280304Sjkim { 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 }; 272280304Sjkimstatic unsigned char xcbc_ok[32] = { 273280304Sjkim 0x86, 0x74, 0x81, 0x0D, 0x61, 0xA4, 0xA5, 0x48, 274280304Sjkim 0xB9, 0x93, 0x03, 0xE1, 0xB8, 0xBB, 0xBD, 0xBD, 275280304Sjkim 0x64, 0x30, 0x0B, 0xB9, 0x06, 0x65, 0x81, 0x76, 276280304Sjkim 0x04, 0x1D, 0x77, 0x62, 0x17, 0xCA, 0x2B, 0xD2, 277280304Sjkim}; 278280304Sjkim# else 279280304Sjkimstatic unsigned char xcbc_ok[32] = { 280280304Sjkim 0x84, 0x6B, 0x29, 0x14, 0x85, 0x1E, 0x9A, 0x29, 281280304Sjkim 0x54, 0x73, 0x2F, 0x8A, 0xA0, 0xA6, 0x11, 0xC1, 282280304Sjkim 0x15, 0xCD, 0xC2, 0xD7, 0x95, 0x1B, 0x10, 0x53, 283280304Sjkim 0xA6, 0x3C, 0x5E, 0x03, 0xB2, 0x1A, 0xA3, 0xC4, 284280304Sjkim}; 285280304Sjkim# endif 28655714Skris 287280304Sjkimstatic unsigned char cbc3_ok[32] = { 288280304Sjkim 0x3F, 0xE3, 0x01, 0xC9, 0x62, 0xAC, 0x01, 0xD0, 289280304Sjkim 0x22, 0x13, 0x76, 0x3C, 0x1C, 0xBD, 0x4C, 0xDC, 290280304Sjkim 0x79, 0x96, 0x57, 0xC0, 0x64, 0xEC, 0xF5, 0xD4, 291280304Sjkim 0x1C, 0x67, 0x38, 0x12, 0xCF, 0xDE, 0x96, 0x75 292280304Sjkim}; 29355714Skris 294280304Sjkimstatic unsigned char pcbc_ok[32] = { 295280304Sjkim 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4, 296280304Sjkim 0x6d, 0xec, 0xb4, 0x70, 0xa0, 0xe5, 0x6b, 0x15, 297280304Sjkim 0xae, 0xa6, 0xbf, 0x61, 0xed, 0x7d, 0x9c, 0x9f, 298280304Sjkim 0xf7, 0x17, 0x46, 0x3b, 0x8a, 0xb3, 0xcc, 0x88 299280304Sjkim}; 30055714Skris 301280304Sjkimstatic unsigned char cfb_key[8] = 302280304Sjkim { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; 303280304Sjkimstatic unsigned char cfb_iv[8] = 304280304Sjkim { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef }; 305280304Sjkimstatic unsigned char cfb_buf1[40], cfb_buf2[40], cfb_tmp[8]; 306280304Sjkimstatic unsigned char plain[24] = { 307280304Sjkim 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 308280304Sjkim 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 309280304Sjkim 0x69, 0x6d, 0x65, 0x20, 0x66, 0x6f, 310280304Sjkim 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20 311280304Sjkim}; 31255714Skris 313280304Sjkimstatic unsigned char cfb_cipher8[24] = { 314280304Sjkim 0xf3, 0x1f, 0xda, 0x07, 0x01, 0x14, 0x62, 0xee, 0x18, 0x7f, 0x43, 0xd8, 315280304Sjkim 0x0a, 0x7c, 0xd9, 0xb5, 0xb0, 0xd2, 0x90, 0xda, 0x6e, 0x5b, 0x9a, 0x87 316280304Sjkim}; 31755714Skris 318280304Sjkimstatic unsigned char cfb_cipher16[24] = { 319280304Sjkim 0xF3, 0x09, 0x87, 0x87, 0x7F, 0x57, 0xF7, 0x3C, 0x36, 0xB6, 0xDB, 0x70, 320280304Sjkim 0xD8, 0xD5, 0x34, 0x19, 0xD3, 0x86, 0xB2, 0x23, 0xB7, 0xB2, 0xAD, 0x1B 321280304Sjkim}; 32255714Skris 323280304Sjkimstatic unsigned char cfb_cipher32[24] = { 324280304Sjkim 0xF3, 0x09, 0x62, 0x49, 0xA4, 0xDF, 0xA4, 0x9F, 0x33, 0xDC, 0x7B, 0xAD, 325280304Sjkim 0x4C, 0xC8, 0x9F, 0x64, 0xE4, 0x53, 0xE5, 0xEC, 0x67, 0x20, 0xDA, 0xB6 326280304Sjkim}; 327280304Sjkim 328280304Sjkimstatic unsigned char cfb_cipher48[24] = { 329280304Sjkim 0xF3, 0x09, 0x62, 0x49, 0xC7, 0xF4, 0x30, 0xB5, 0x15, 0xEC, 0xBB, 0x85, 330280304Sjkim 0x97, 0x5A, 0x13, 0x8C, 0x68, 0x60, 0xE2, 0x38, 0x34, 0x3C, 0xDC, 0x1F 331280304Sjkim}; 332280304Sjkim 333280304Sjkimstatic unsigned char cfb_cipher64[24] = { 334280304Sjkim 0xF3, 0x09, 0x62, 0x49, 0xC7, 0xF4, 0x6E, 0x51, 0xA6, 0x9E, 0x83, 0x9B, 335280304Sjkim 0x1A, 0x92, 0xF7, 0x84, 0x03, 0x46, 0x71, 0x33, 0x89, 0x8E, 0xA6, 0x22 336280304Sjkim}; 337280304Sjkim 338280304Sjkimstatic unsigned char ofb_key[8] = 339280304Sjkim { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef }; 340280304Sjkimstatic unsigned char ofb_iv[8] = 341280304Sjkim { 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef }; 342280304Sjkimstatic unsigned char ofb_buf1[24], ofb_buf2[24], ofb_tmp[8]; 343280304Sjkimstatic unsigned char ofb_cipher[24] = { 344280304Sjkim 0xf3, 0x09, 0x62, 0x49, 0xc7, 0xf4, 0x6e, 0x51, 345280304Sjkim 0x35, 0xf2, 0x4a, 0x24, 0x2e, 0xeb, 0x3d, 0x3f, 346280304Sjkim 0x3d, 0x6d, 0x5b, 0xe3, 0x25, 0x5a, 0xf8, 0xc3 347280304Sjkim}; 348280304Sjkim 349280304Sjkim# if 0 350280304Sjkimstatic DES_LONG cbc_cksum_ret = 0xB462FEF7L; 351280304Sjkim# else 352280304Sjkimstatic DES_LONG cbc_cksum_ret = 0xF7FE62B4L; 353280304Sjkim# endif 354280304Sjkimstatic unsigned char cbc_cksum_data[8] = 355280304Sjkim { 0x1D, 0x26, 0x93, 0x97, 0xf7, 0xfe, 0x62, 0xb4 }; 356280304Sjkim 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[]) 362280304Sjkim{ 363280304Sjkim int j, err = 0; 364280304Sjkim unsigned int i; 365280304Sjkim des_cblock in, out, outin, iv3, iv2; 366280304Sjkim des_key_schedule ks, ks2, ks3; 367280304Sjkim unsigned char cbc_in[40]; 368280304Sjkim unsigned char cbc_out[40]; 369280304Sjkim DES_LONG cs; 370280304Sjkim unsigned char cret[8]; 371280304Sjkim# ifdef _CRAY 372280304Sjkim struct { 373280304Sjkim int a:32; 374280304Sjkim int b:32; 375280304Sjkim } lqret[2]; 376280304Sjkim# else 377280304Sjkim DES_LONG lqret[4]; 378280304Sjkim# endif 379280304Sjkim int num; 380280304Sjkim char *str; 38155714Skris 382280304Sjkim# ifndef OPENSSL_NO_DESCBCM 383280304Sjkim printf("Doing cbcm\n"); 384280304Sjkim if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) { 385280304Sjkim printf("Key error %d\n", j); 386280304Sjkim err = 1; 387280304Sjkim } 388280304Sjkim if ((j = DES_set_key_checked(&cbc2_key, &ks2)) != 0) { 389280304Sjkim printf("Key error %d\n", j); 390280304Sjkim err = 1; 391280304Sjkim } 392280304Sjkim if ((j = DES_set_key_checked(&cbc3_key, &ks3)) != 0) { 393280304Sjkim printf("Key error %d\n", j); 394280304Sjkim err = 1; 395280304Sjkim } 396280304Sjkim memset(cbc_out, 0, 40); 397280304Sjkim memset(cbc_in, 0, 40); 398280304Sjkim i = strlen((char *)cbc_data) + 1; 399280304Sjkim /* i=((i+7)/8)*8; */ 400280304Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 401280304Sjkim memset(iv2, '\0', sizeof iv2); 40255714Skris 403280304Sjkim DES_ede3_cbcm_encrypt(cbc_data, cbc_out, 16L, &ks, &ks2, &ks3, &iv3, &iv2, 404280304Sjkim DES_ENCRYPT); 405280304Sjkim DES_ede3_cbcm_encrypt(&cbc_data[16], &cbc_out[16], i - 16, &ks, &ks2, 406280304Sjkim &ks3, &iv3, &iv2, DES_ENCRYPT); 407280304Sjkim/*- if (memcmp(cbc_out,cbc3_ok, 408280304Sjkim (unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0) 409280304Sjkim { 410280304Sjkim printf("des_ede3_cbc_encrypt encrypt error\n"); 411280304Sjkim err=1; 412280304Sjkim } 413280304Sjkim*/ 414280304Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 415280304Sjkim memset(iv2, '\0', sizeof iv2); 416280304Sjkim DES_ede3_cbcm_encrypt(cbc_out, cbc_in, i, &ks, &ks2, &ks3, &iv3, &iv2, 417280304Sjkim DES_DECRYPT); 418280304Sjkim if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data) + 1) != 0) { 419280304Sjkim unsigned int n; 42055714Skris 421280304Sjkim printf("des_ede3_cbcm_encrypt decrypt error\n"); 422280304Sjkim for (n = 0; n < i; ++n) 423280304Sjkim printf(" %02x", cbc_data[n]); 424280304Sjkim printf("\n"); 425280304Sjkim for (n = 0; n < i; ++n) 426280304Sjkim printf(" %02x", cbc_in[n]); 427280304Sjkim printf("\n"); 428280304Sjkim err = 1; 429280304Sjkim } 430280304Sjkim# endif 43155714Skris 432280304Sjkim printf("Doing ecb\n"); 433280304Sjkim for (i = 0; i < NUM_TESTS; i++) { 434280304Sjkim DES_set_key_unchecked(&key_data[i], &ks); 435280304Sjkim memcpy(in, plain_data[i], 8); 436280304Sjkim memset(out, 0, 8); 437280304Sjkim memset(outin, 0, 8); 438280304Sjkim des_ecb_encrypt(&in, &out, ks, DES_ENCRYPT); 439280304Sjkim des_ecb_encrypt(&out, &outin, ks, DES_DECRYPT); 44055714Skris 441280304Sjkim if (memcmp(out, cipher_data[i], 8) != 0) { 442280304Sjkim printf("Encryption error %2d\nk=%s p=%s o=%s act=%s\n", 443280304Sjkim i + 1, pt(key_data[i]), pt(in), pt(cipher_data[i]), 444280304Sjkim pt(out)); 445280304Sjkim err = 1; 446280304Sjkim } 447280304Sjkim if (memcmp(in, outin, 8) != 0) { 448280304Sjkim printf("Decryption error %2d\nk=%s p=%s o=%s act=%s\n", 449280304Sjkim i + 1, pt(key_data[i]), pt(out), pt(in), pt(outin)); 450280304Sjkim err = 1; 451280304Sjkim } 452280304Sjkim } 45355714Skris 454280304Sjkim# ifndef LIBDES_LIT 455280304Sjkim printf("Doing ede ecb\n"); 456280304Sjkim for (i = 0; i < (NUM_TESTS - 2); i++) { 457280304Sjkim DES_set_key_unchecked(&key_data[i], &ks); 458280304Sjkim DES_set_key_unchecked(&key_data[i + 1], &ks2); 459280304Sjkim DES_set_key_unchecked(&key_data[i + 2], &ks3); 460280304Sjkim memcpy(in, plain_data[i], 8); 461280304Sjkim memset(out, 0, 8); 462280304Sjkim memset(outin, 0, 8); 463280304Sjkim des_ecb2_encrypt(&in, &out, ks, ks2, DES_ENCRYPT); 464280304Sjkim des_ecb2_encrypt(&out, &outin, ks, ks2, DES_DECRYPT); 46555714Skris 466280304Sjkim if (memcmp(out, cipher_ecb2[i], 8) != 0) { 467280304Sjkim printf("Encryption error %2d\nk=%s p=%s o=%s act=%s\n", 468280304Sjkim i + 1, pt(key_data[i]), pt(in), pt(cipher_ecb2[i]), 469280304Sjkim pt(out)); 470280304Sjkim err = 1; 471280304Sjkim } 472280304Sjkim if (memcmp(in, outin, 8) != 0) { 473280304Sjkim printf("Decryption error %2d\nk=%s p=%s o=%s act=%s\n", 474280304Sjkim i + 1, pt(key_data[i]), pt(out), pt(in), pt(outin)); 475280304Sjkim err = 1; 476280304Sjkim } 477280304Sjkim } 478280304Sjkim# endif 47955714Skris 480280304Sjkim printf("Doing cbc\n"); 481280304Sjkim if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) { 482280304Sjkim printf("Key error %d\n", j); 483280304Sjkim err = 1; 484280304Sjkim } 485280304Sjkim memset(cbc_out, 0, 40); 486280304Sjkim memset(cbc_in, 0, 40); 487280304Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 488280304Sjkim des_ncbc_encrypt(cbc_data, cbc_out, strlen((char *)cbc_data) + 1, ks, 489280304Sjkim &iv3, DES_ENCRYPT); 490280304Sjkim if (memcmp(cbc_out, cbc_ok, 32) != 0) { 491280304Sjkim printf("cbc_encrypt encrypt error\n"); 492280304Sjkim err = 1; 493280304Sjkim } 49455714Skris 495280304Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 496280304Sjkim des_ncbc_encrypt(cbc_out, cbc_in, strlen((char *)cbc_data) + 1, ks, 497280304Sjkim &iv3, DES_DECRYPT); 498280304Sjkim if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data)) != 0) { 499280304Sjkim printf("cbc_encrypt decrypt error\n"); 500280304Sjkim err = 1; 501280304Sjkim } 502280304Sjkim# ifndef LIBDES_LIT 503280304Sjkim printf("Doing desx cbc\n"); 504280304Sjkim if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) { 505280304Sjkim printf("Key error %d\n", j); 506280304Sjkim err = 1; 507280304Sjkim } 508280304Sjkim memset(cbc_out, 0, 40); 509280304Sjkim memset(cbc_in, 0, 40); 510280304Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 511280304Sjkim des_xcbc_encrypt(cbc_data, cbc_out, strlen((char *)cbc_data) + 1, ks, 512280304Sjkim &iv3, &cbc2_key, &cbc3_key, DES_ENCRYPT); 513280304Sjkim if (memcmp(cbc_out, xcbc_ok, 32) != 0) { 514280304Sjkim printf("des_xcbc_encrypt encrypt error\n"); 515280304Sjkim err = 1; 516280304Sjkim } 517280304Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 518280304Sjkim des_xcbc_encrypt(cbc_out, cbc_in, strlen((char *)cbc_data) + 1, ks, 519280304Sjkim &iv3, &cbc2_key, &cbc3_key, DES_DECRYPT); 520280304Sjkim if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data) + 1) != 0) { 521280304Sjkim printf("des_xcbc_encrypt decrypt error\n"); 522280304Sjkim err = 1; 523280304Sjkim } 524280304Sjkim# endif 52555714Skris 526280304Sjkim printf("Doing ede cbc\n"); 527280304Sjkim if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) { 528280304Sjkim printf("Key error %d\n", j); 529280304Sjkim err = 1; 530280304Sjkim } 531280304Sjkim if ((j = DES_set_key_checked(&cbc2_key, &ks2)) != 0) { 532280304Sjkim printf("Key error %d\n", j); 533280304Sjkim err = 1; 534280304Sjkim } 535280304Sjkim if ((j = DES_set_key_checked(&cbc3_key, &ks3)) != 0) { 536280304Sjkim printf("Key error %d\n", j); 537280304Sjkim err = 1; 538280304Sjkim } 539280304Sjkim memset(cbc_out, 0, 40); 540280304Sjkim memset(cbc_in, 0, 40); 541280304Sjkim i = strlen((char *)cbc_data) + 1; 542280304Sjkim /* i=((i+7)/8)*8; */ 543280304Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 54455714Skris 545280304Sjkim des_ede3_cbc_encrypt(cbc_data, cbc_out, 16L, ks, ks2, ks3, &iv3, 546280304Sjkim DES_ENCRYPT); 547280304Sjkim des_ede3_cbc_encrypt(&(cbc_data[16]), &(cbc_out[16]), i - 16, ks, ks2, 548280304Sjkim ks3, &iv3, DES_ENCRYPT); 549280304Sjkim if (memcmp 550280304Sjkim (cbc_out, cbc3_ok, 551280304Sjkim (unsigned int)(strlen((char *)cbc_data) + 1 + 7) / 8 * 8) != 0) { 552280304Sjkim unsigned int n; 55355714Skris 554280304Sjkim printf("des_ede3_cbc_encrypt encrypt error\n"); 555280304Sjkim for (n = 0; n < i; ++n) 556280304Sjkim printf(" %02x", cbc_out[n]); 557280304Sjkim printf("\n"); 558280304Sjkim for (n = 0; n < i; ++n) 559280304Sjkim printf(" %02x", cbc3_ok[n]); 560280304Sjkim printf("\n"); 561280304Sjkim err = 1; 562280304Sjkim } 563109998Smarkm 564280304Sjkim memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 565280304Sjkim des_ede3_cbc_encrypt(cbc_out, cbc_in, i, ks, ks2, ks3, &iv3, DES_DECRYPT); 566280304Sjkim if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data) + 1) != 0) { 567280304Sjkim unsigned int n; 56855714Skris 569280304Sjkim printf("des_ede3_cbc_encrypt decrypt error\n"); 570280304Sjkim for (n = 0; n < i; ++n) 571280304Sjkim printf(" %02x", cbc_data[n]); 572280304Sjkim printf("\n"); 573280304Sjkim for (n = 0; n < i; ++n) 574280304Sjkim printf(" %02x", cbc_in[n]); 575280304Sjkim printf("\n"); 576280304Sjkim err = 1; 577280304Sjkim } 578280304Sjkim# ifndef LIBDES_LIT 579280304Sjkim printf("Doing pcbc\n"); 580280304Sjkim if ((j = DES_set_key_checked(&cbc_key, &ks)) != 0) { 581280304Sjkim printf("Key error %d\n", j); 582280304Sjkim err = 1; 583280304Sjkim } 584280304Sjkim memset(cbc_out, 0, 40); 585280304Sjkim memset(cbc_in, 0, 40); 586280304Sjkim des_pcbc_encrypt(cbc_data, cbc_out, strlen((char *)cbc_data) + 1, ks, 587280304Sjkim &cbc_iv, DES_ENCRYPT); 588280304Sjkim if (memcmp(cbc_out, pcbc_ok, 32) != 0) { 589280304Sjkim printf("pcbc_encrypt encrypt error\n"); 590280304Sjkim err = 1; 591280304Sjkim } 592280304Sjkim des_pcbc_encrypt(cbc_out, cbc_in, strlen((char *)cbc_data) + 1, ks, 593280304Sjkim &cbc_iv, DES_DECRYPT); 594280304Sjkim if (memcmp(cbc_in, cbc_data, strlen((char *)cbc_data) + 1) != 0) { 595280304Sjkim printf("pcbc_encrypt decrypt error\n"); 596280304Sjkim err = 1; 597280304Sjkim } 598109998Smarkm 599280304Sjkim printf("Doing "); 600280304Sjkim printf("cfb8 "); 601280304Sjkim err += cfb_test(8, cfb_cipher8); 602280304Sjkim printf("cfb16 "); 603280304Sjkim err += cfb_test(16, cfb_cipher16); 604280304Sjkim printf("cfb32 "); 605280304Sjkim err += cfb_test(32, cfb_cipher32); 606280304Sjkim printf("cfb48 "); 607280304Sjkim err += cfb_test(48, cfb_cipher48); 608280304Sjkim printf("cfb64 "); 609280304Sjkim err += cfb_test(64, cfb_cipher64); 61055714Skris 611280304Sjkim printf("cfb64() "); 612280304Sjkim err += cfb64_test(cfb_cipher64); 61355714Skris 614280304Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 615280304Sjkim for (i = 0; i < sizeof(plain); i++) 616280304Sjkim des_cfb_encrypt(&(plain[i]), &(cfb_buf1[i]), 617280304Sjkim 8, 1, ks, &cfb_tmp, DES_ENCRYPT); 618280304Sjkim if (memcmp(cfb_cipher8, cfb_buf1, sizeof(plain)) != 0) { 619280304Sjkim printf("cfb_encrypt small encrypt error\n"); 620280304Sjkim err = 1; 621280304Sjkim } 62255714Skris 623280304Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 624280304Sjkim for (i = 0; i < sizeof(plain); i++) 625280304Sjkim des_cfb_encrypt(&(cfb_buf1[i]), &(cfb_buf2[i]), 626280304Sjkim 8, 1, ks, &cfb_tmp, DES_DECRYPT); 627280304Sjkim if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) { 628280304Sjkim printf("cfb_encrypt small decrypt error\n"); 629280304Sjkim err = 1; 630280304Sjkim } 63155714Skris 632280304Sjkim printf("ede_cfb64() "); 633280304Sjkim err += ede_cfb64_test(cfb_cipher64); 63455714Skris 635280304Sjkim printf("done\n"); 63655714Skris 637280304Sjkim printf("Doing ofb\n"); 638280304Sjkim DES_set_key_checked(&ofb_key, &ks); 639280304Sjkim memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 640280304Sjkim des_ofb_encrypt(plain, ofb_buf1, 64, sizeof(plain) / 8, ks, &ofb_tmp); 641280304Sjkim if (memcmp(ofb_cipher, ofb_buf1, sizeof(ofb_buf1)) != 0) { 642280304Sjkim printf("ofb_encrypt encrypt error\n"); 643280304Sjkim printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", 644280304Sjkim ofb_buf1[8 + 0], ofb_buf1[8 + 1], ofb_buf1[8 + 2], 645280304Sjkim ofb_buf1[8 + 3], ofb_buf1[8 + 4], ofb_buf1[8 + 5], 646280304Sjkim ofb_buf1[8 + 6], ofb_buf1[8 + 7]); 647280304Sjkim printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", ofb_buf1[8 + 0], 648280304Sjkim ofb_cipher[8 + 1], ofb_cipher[8 + 2], ofb_cipher[8 + 3], 649280304Sjkim ofb_buf1[8 + 4], ofb_cipher[8 + 5], ofb_cipher[8 + 6], 650280304Sjkim ofb_cipher[8 + 7]); 651280304Sjkim err = 1; 652280304Sjkim } 653280304Sjkim memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 654280304Sjkim des_ofb_encrypt(ofb_buf1, ofb_buf2, 64, sizeof(ofb_buf1) / 8, ks, 655280304Sjkim &ofb_tmp); 656280304Sjkim if (memcmp(plain, ofb_buf2, sizeof(ofb_buf2)) != 0) { 657280304Sjkim printf("ofb_encrypt decrypt error\n"); 658280304Sjkim printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", 659280304Sjkim ofb_buf2[8 + 0], ofb_buf2[8 + 1], ofb_buf2[8 + 2], 660280304Sjkim ofb_buf2[8 + 3], ofb_buf2[8 + 4], ofb_buf2[8 + 5], 661280304Sjkim ofb_buf2[8 + 6], ofb_buf2[8 + 7]); 662280304Sjkim printf("%02X %02X %02X %02X %02X %02X %02X %02X\n", plain[8 + 0], 663280304Sjkim plain[8 + 1], plain[8 + 2], plain[8 + 3], plain[8 + 4], 664280304Sjkim plain[8 + 5], plain[8 + 6], plain[8 + 7]); 665280304Sjkim err = 1; 666280304Sjkim } 66755714Skris 668280304Sjkim printf("Doing ofb64\n"); 669280304Sjkim DES_set_key_checked(&ofb_key, &ks); 670280304Sjkim memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 671280304Sjkim memset(ofb_buf1, 0, sizeof(ofb_buf1)); 672280304Sjkim memset(ofb_buf2, 0, sizeof(ofb_buf1)); 673280304Sjkim num = 0; 674280304Sjkim for (i = 0; i < sizeof(plain); i++) { 675280304Sjkim des_ofb64_encrypt(&(plain[i]), &(ofb_buf1[i]), 1, ks, &ofb_tmp, &num); 676280304Sjkim } 677280304Sjkim if (memcmp(ofb_cipher, ofb_buf1, sizeof(ofb_buf1)) != 0) { 678280304Sjkim printf("ofb64_encrypt encrypt error\n"); 679280304Sjkim err = 1; 680280304Sjkim } 681280304Sjkim memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 682280304Sjkim num = 0; 683280304Sjkim des_ofb64_encrypt(ofb_buf1, ofb_buf2, sizeof(ofb_buf1), ks, &ofb_tmp, 684280304Sjkim &num); 685280304Sjkim if (memcmp(plain, ofb_buf2, sizeof(ofb_buf2)) != 0) { 686280304Sjkim printf("ofb64_encrypt decrypt error\n"); 687280304Sjkim err = 1; 688280304Sjkim } 68955714Skris 690280304Sjkim printf("Doing ede_ofb64\n"); 691280304Sjkim DES_set_key_checked(&ofb_key, &ks); 692280304Sjkim memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 693280304Sjkim memset(ofb_buf1, 0, sizeof(ofb_buf1)); 694280304Sjkim memset(ofb_buf2, 0, sizeof(ofb_buf1)); 695280304Sjkim num = 0; 696280304Sjkim for (i = 0; i < sizeof(plain); i++) { 697280304Sjkim des_ede3_ofb64_encrypt(&(plain[i]), &(ofb_buf1[i]), 1, ks, ks, 698280304Sjkim ks, &ofb_tmp, &num); 699280304Sjkim } 700280304Sjkim if (memcmp(ofb_cipher, ofb_buf1, sizeof(ofb_buf1)) != 0) { 701280304Sjkim printf("ede_ofb64_encrypt encrypt error\n"); 702280304Sjkim err = 1; 703280304Sjkim } 704280304Sjkim memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 705280304Sjkim num = 0; 706280304Sjkim des_ede3_ofb64_encrypt(ofb_buf1, ofb_buf2, sizeof(ofb_buf1), ks, ks, ks, 707280304Sjkim &ofb_tmp, &num); 708280304Sjkim if (memcmp(plain, ofb_buf2, sizeof(ofb_buf2)) != 0) { 709280304Sjkim printf("ede_ofb64_encrypt decrypt error\n"); 710280304Sjkim err = 1; 711280304Sjkim } 71255714Skris 713280304Sjkim printf("Doing cbc_cksum\n"); 714280304Sjkim DES_set_key_checked(&cbc_key, &ks); 715280304Sjkim cs = des_cbc_cksum(cbc_data, &cret, strlen((char *)cbc_data), ks, 716280304Sjkim &cbc_iv); 717280304Sjkim if (cs != cbc_cksum_ret) { 718280304Sjkim printf("bad return value (%08lX), should be %08lX\n", 719280304Sjkim (unsigned long)cs, (unsigned long)cbc_cksum_ret); 720280304Sjkim err = 1; 721280304Sjkim } 722280304Sjkim if (memcmp(cret, cbc_cksum_data, 8) != 0) { 723280304Sjkim printf("bad cbc_cksum block returned\n"); 724280304Sjkim err = 1; 725280304Sjkim } 72655714Skris 727280304Sjkim printf("Doing quad_cksum\n"); 728280304Sjkim cs = des_quad_cksum(cbc_data, (des_cblock *)lqret, 729280304Sjkim (long)strlen((char *)cbc_data), 2, 730280304Sjkim (des_cblock *)cbc_iv); 731280304Sjkim if (cs != 0x70d7a63aL) { 732280304Sjkim printf("quad_cksum error, ret %08lx should be 70d7a63a\n", 733280304Sjkim (unsigned long)cs); 734280304Sjkim err = 1; 735280304Sjkim } 736280304Sjkim# ifdef _CRAY 737280304Sjkim if (lqret[0].a != 0x327eba8dL) { 738280304Sjkim printf("quad_cksum error, out[0] %08lx is not %08lx\n", 739280304Sjkim (unsigned long)lqret[0].a, 0x327eba8dUL); 740280304Sjkim err = 1; 741280304Sjkim } 742280304Sjkim if (lqret[0].b != 0x201a49ccL) { 743280304Sjkim printf("quad_cksum error, out[1] %08lx is not %08lx\n", 744280304Sjkim (unsigned long)lqret[0].b, 0x201a49ccUL); 745280304Sjkim err = 1; 746280304Sjkim } 747280304Sjkim if (lqret[1].a != 0x70d7a63aL) { 748280304Sjkim printf("quad_cksum error, out[2] %08lx is not %08lx\n", 749280304Sjkim (unsigned long)lqret[1].a, 0x70d7a63aUL); 750280304Sjkim err = 1; 751280304Sjkim } 752280304Sjkim if (lqret[1].b != 0x501c2c26L) { 753280304Sjkim printf("quad_cksum error, out[3] %08lx is not %08lx\n", 754280304Sjkim (unsigned long)lqret[1].b, 0x501c2c26UL); 755280304Sjkim err = 1; 756280304Sjkim } 757280304Sjkim# else 758280304Sjkim if (lqret[0] != 0x327eba8dL) { 759280304Sjkim printf("quad_cksum error, out[0] %08lx is not %08lx\n", 760280304Sjkim (unsigned long)lqret[0], 0x327eba8dUL); 761280304Sjkim err = 1; 762280304Sjkim } 763280304Sjkim if (lqret[1] != 0x201a49ccL) { 764280304Sjkim printf("quad_cksum error, out[1] %08lx is not %08lx\n", 765280304Sjkim (unsigned long)lqret[1], 0x201a49ccUL); 766280304Sjkim err = 1; 767280304Sjkim } 768280304Sjkim if (lqret[2] != 0x70d7a63aL) { 769280304Sjkim printf("quad_cksum error, out[2] %08lx is not %08lx\n", 770280304Sjkim (unsigned long)lqret[2], 0x70d7a63aUL); 771280304Sjkim err = 1; 772280304Sjkim } 773280304Sjkim if (lqret[3] != 0x501c2c26L) { 774280304Sjkim printf("quad_cksum error, out[3] %08lx is not %08lx\n", 775280304Sjkim (unsigned long)lqret[3], 0x501c2c26UL); 776280304Sjkim err = 1; 777280304Sjkim } 778280304Sjkim# endif 779280304Sjkim# endif 78055714Skris 781280304Sjkim printf("input word alignment test"); 782280304Sjkim for (i = 0; i < 4; i++) { 783280304Sjkim printf(" %d", i); 784280304Sjkim des_ncbc_encrypt(&(cbc_out[i]), cbc_in, 785280304Sjkim strlen((char *)cbc_data) + 1, ks, 786280304Sjkim &cbc_iv, DES_ENCRYPT); 787280304Sjkim } 788280304Sjkim printf("\noutput word alignment test"); 789280304Sjkim for (i = 0; i < 4; i++) { 790280304Sjkim printf(" %d", i); 791280304Sjkim des_ncbc_encrypt(cbc_out, &(cbc_in[i]), 792280304Sjkim strlen((char *)cbc_data) + 1, ks, 793280304Sjkim &cbc_iv, DES_ENCRYPT); 794280304Sjkim } 795280304Sjkim printf("\n"); 796280304Sjkim printf("fast crypt test "); 797280304Sjkim str = crypt("testing", "ef"); 798280304Sjkim if (strcmp("efGnQx2725bI2", str) != 0) { 799280304Sjkim printf("fast crypt error, %s should be efGnQx2725bI2\n", str); 800280304Sjkim err = 1; 801280304Sjkim } 802280304Sjkim str = crypt("bca76;23", "yA"); 803280304Sjkim if (strcmp("yA1Rp/1hZXIJk", str) != 0) { 804280304Sjkim printf("fast crypt error, %s should be yA1Rp/1hZXIJk\n", str); 805280304Sjkim err = 1; 806280304Sjkim } 807280304Sjkim# ifdef OPENSSL_SYS_NETWARE 808280304Sjkim if (err) 809280304Sjkim printf("ERROR: %d\n", err); 810280304Sjkim# endif 811280304Sjkim printf("\n"); 812280304Sjkim return (err); 813280304Sjkim} 81455714Skris 81555714Skrisstatic char *pt(unsigned char *p) 816280304Sjkim{ 817280304Sjkim static char bufs[10][20]; 818280304Sjkim static int bnum = 0; 819280304Sjkim char *ret; 820280304Sjkim int i; 821280304Sjkim static char *f = "0123456789ABCDEF"; 82255714Skris 823280304Sjkim ret = &(bufs[bnum++][0]); 824280304Sjkim bnum %= 10; 825280304Sjkim for (i = 0; i < 8; i++) { 826280304Sjkim ret[i * 2] = f[(p[i] >> 4) & 0xf]; 827280304Sjkim ret[i * 2 + 1] = f[p[i] & 0xf]; 828280304Sjkim } 829280304Sjkim ret[16] = '\0'; 830280304Sjkim return (ret); 831280304Sjkim} 83255714Skris 833280304Sjkim# ifndef LIBDES_LIT 83455714Skris 83555714Skrisstatic int cfb_test(int bits, unsigned char *cfb_cipher) 836280304Sjkim{ 837280304Sjkim des_key_schedule ks; 838280304Sjkim int i, err = 0; 83955714Skris 840280304Sjkim DES_set_key_checked(&cfb_key, &ks); 841280304Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 842280304Sjkim des_cfb_encrypt(plain, cfb_buf1, bits, sizeof(plain), ks, &cfb_tmp, 843280304Sjkim DES_ENCRYPT); 844280304Sjkim if (memcmp(cfb_cipher, cfb_buf1, sizeof(plain)) != 0) { 845280304Sjkim err = 1; 846280304Sjkim printf("cfb_encrypt encrypt error\n"); 847280304Sjkim for (i = 0; i < 24; i += 8) 848280304Sjkim printf("%s\n", pt(&(cfb_buf1[i]))); 849280304Sjkim } 850280304Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 851280304Sjkim des_cfb_encrypt(cfb_buf1, cfb_buf2, bits, sizeof(plain), ks, &cfb_tmp, 852280304Sjkim DES_DECRYPT); 853280304Sjkim if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) { 854280304Sjkim err = 1; 855280304Sjkim printf("cfb_encrypt decrypt error\n"); 856280304Sjkim for (i = 0; i < 24; i += 8) 857280304Sjkim printf("%s\n", pt(&(cfb_buf1[i]))); 858280304Sjkim } 859280304Sjkim return (err); 860280304Sjkim} 86155714Skris 86255714Skrisstatic int cfb64_test(unsigned char *cfb_cipher) 863280304Sjkim{ 864280304Sjkim des_key_schedule ks; 865280304Sjkim int err = 0, i, n; 86655714Skris 867280304Sjkim DES_set_key_checked(&cfb_key, &ks); 868280304Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 869280304Sjkim n = 0; 870280304Sjkim des_cfb64_encrypt(plain, cfb_buf1, 12, ks, &cfb_tmp, &n, DES_ENCRYPT); 871280304Sjkim des_cfb64_encrypt(&(plain[12]), &(cfb_buf1[12]), sizeof(plain) - 12, ks, 872280304Sjkim &cfb_tmp, &n, DES_ENCRYPT); 873280304Sjkim if (memcmp(cfb_cipher, cfb_buf1, sizeof(plain)) != 0) { 874280304Sjkim err = 1; 875280304Sjkim printf("cfb_encrypt encrypt error\n"); 876280304Sjkim for (i = 0; i < 24; i += 8) 877280304Sjkim printf("%s\n", pt(&(cfb_buf1[i]))); 878280304Sjkim } 879280304Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 880280304Sjkim n = 0; 881280304Sjkim des_cfb64_encrypt(cfb_buf1, cfb_buf2, 17, ks, &cfb_tmp, &n, DES_DECRYPT); 882280304Sjkim des_cfb64_encrypt(&(cfb_buf1[17]), &(cfb_buf2[17]), 883280304Sjkim sizeof(plain) - 17, ks, &cfb_tmp, &n, DES_DECRYPT); 884280304Sjkim if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) { 885280304Sjkim err = 1; 886280304Sjkim printf("cfb_encrypt decrypt error\n"); 887280304Sjkim for (i = 0; i < 24; i += 8) 888280304Sjkim printf("%s\n", pt(&(cfb_buf2[i]))); 889280304Sjkim } 890280304Sjkim return (err); 891280304Sjkim} 89255714Skris 89355714Skrisstatic int ede_cfb64_test(unsigned char *cfb_cipher) 894280304Sjkim{ 895280304Sjkim des_key_schedule ks; 896280304Sjkim int err = 0, i, n; 89755714Skris 898280304Sjkim DES_set_key_checked(&cfb_key, &ks); 899280304Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 900280304Sjkim n = 0; 901280304Sjkim des_ede3_cfb64_encrypt(plain, cfb_buf1, 12, ks, ks, ks, &cfb_tmp, &n, 902280304Sjkim DES_ENCRYPT); 903280304Sjkim des_ede3_cfb64_encrypt(&(plain[12]), &(cfb_buf1[12]), 904280304Sjkim sizeof(plain) - 12, ks, ks, ks, 905280304Sjkim &cfb_tmp, &n, DES_ENCRYPT); 906280304Sjkim if (memcmp(cfb_cipher, cfb_buf1, sizeof(plain)) != 0) { 907280304Sjkim err = 1; 908280304Sjkim printf("ede_cfb_encrypt encrypt error\n"); 909280304Sjkim for (i = 0; i < 24; i += 8) 910280304Sjkim printf("%s\n", pt(&(cfb_buf1[i]))); 911280304Sjkim } 912280304Sjkim memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 913280304Sjkim n = 0; 914280304Sjkim des_ede3_cfb64_encrypt(cfb_buf1, cfb_buf2, (long)17, ks, ks, ks, 915280304Sjkim &cfb_tmp, &n, DES_DECRYPT); 916280304Sjkim des_ede3_cfb64_encrypt(&(cfb_buf1[17]), &(cfb_buf2[17]), 917280304Sjkim sizeof(plain) - 17, ks, ks, ks, 918280304Sjkim &cfb_tmp, &n, DES_DECRYPT); 919280304Sjkim if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) { 920280304Sjkim err = 1; 921280304Sjkim printf("ede_cfb_encrypt decrypt error\n"); 922280304Sjkim for (i = 0; i < 24; i += 8) 923280304Sjkim printf("%s\n", pt(&(cfb_buf2[i]))); 924280304Sjkim } 925280304Sjkim return (err); 926280304Sjkim} 92755714Skris 928280304Sjkim# endif 92955714Skris#endif 930