1 1.3 andvar /* $NetBSD: t_des.c,v 1.3 2024/02/10 18:43:53 andvar Exp $ */ 2 1.1 jmmv 3 1.1 jmmv /* 4 1.1 jmmv * Copyright (C) 1995-1998 Eric Young (eay (at) cryptsoft.com) All rights 5 1.1 jmmv * reserved. 6 1.1 jmmv * 7 1.1 jmmv * This package is an SSL implementation written by Eric Young 8 1.1 jmmv * (eay (at) cryptsoft.com). The implementation was written so as to conform with 9 1.1 jmmv * Netscapes SSL. 10 1.1 jmmv * 11 1.1 jmmv * This library is free for commercial and non-commercial use as long as the 12 1.1 jmmv * following conditions are aheared to. The following conditions apply to 13 1.1 jmmv * all code found in this distribution, be it the RC4, RSA, lhash, DES, etc., 14 1.1 jmmv * code; not just the SSL code. The SSL documentation included with this 15 1.1 jmmv * distribution is covered by the same copyright terms except that the holder 16 1.1 jmmv * is Tim Hudson (tjh (at) cryptsoft.com). 17 1.1 jmmv * 18 1.1 jmmv * Copyright remains Eric Young's, and as such any Copyright notices in the code 19 1.1 jmmv * are not to be removed. If this package is used in a product, Eric Young 20 1.1 jmmv * should be given attribution as the author of the parts of the library 21 1.1 jmmv * used. This can be in the form of a textual message at program startup or 22 1.1 jmmv * in documentation (online or textual) provided with the package. 23 1.1 jmmv * 24 1.1 jmmv * Redistribution and use in source and binary forms, with or without 25 1.1 jmmv * modification, are permitted provided that the following conditions are 26 1.1 jmmv * met: 1. Redistributions of source code must retain the copyright notice, 27 1.1 jmmv * this list of conditions and the following disclaimer. 2. Redistributions 28 1.1 jmmv * in binary form must reproduce the above copyright notice, this list of 29 1.1 jmmv * conditions and the following disclaimer in the documentation and/or other 30 1.1 jmmv * materials provided with the distribution. 3. All advertising materials 31 1.1 jmmv * mentioning features or use of this software must display the following 32 1.1 jmmv * acknowledgement: "This product includes cryptographic software written by 33 1.1 jmmv * Eric Young (eay (at) cryptsoft.com)" The word 'cryptographic' can be left out 34 1.2 msaitoh * if the routines from the library being used are not cryptographic related 35 1.1 jmmv * :-). 4. If you include any Windows specific code (or a derivative thereof) 36 1.1 jmmv * from the apps directory (application code) you must include an 37 1.1 jmmv * acknowledgement: "This product includes software written by Tim Hudson 38 1.1 jmmv * (tjh (at) cryptsoft.com)" 39 1.1 jmmv * 40 1.1 jmmv * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND ANY EXPRESS OR IMPLIED 41 1.1 jmmv * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 42 1.1 jmmv * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN 43 1.1 jmmv * NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 44 1.1 jmmv * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 45 1.1 jmmv * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 46 1.1 jmmv * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 47 1.1 jmmv * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 48 1.1 jmmv * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 49 1.1 jmmv * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 50 1.1 jmmv * SUCH DAMAGE. 51 1.1 jmmv * 52 1.1 jmmv * The licence and distribution terms for any publically available version or 53 1.1 jmmv * derivative of this code cannot be changed. i.e. this code cannot simply 54 1.1 jmmv * be copied and put under another distribution licence [including the GNU 55 1.1 jmmv * Public Licence.] 56 1.1 jmmv */ 57 1.1 jmmv 58 1.1 jmmv #include <atf-c.h> 59 1.1 jmmv #include <des.h> 60 1.1 jmmv #include <stdio.h> 61 1.1 jmmv #include <stdlib.h> 62 1.1 jmmv #include <string.h> 63 1.1 jmmv #include <unistd.h> 64 1.1 jmmv 65 1.1 jmmv #define crypt(c,s) (des_crypt((c),(s))) 66 1.1 jmmv 67 1.1 jmmv /* tisk tisk - the test keys don't all have odd parity :-( */ 68 1.1 jmmv /* test data */ 69 1.1 jmmv #define NUM_TESTS 34 70 1.1 jmmv static unsigned char key_data[NUM_TESTS][8] = { 71 1.1 jmmv {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 72 1.1 jmmv {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 73 1.1 jmmv {0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 74 1.1 jmmv {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 75 1.1 jmmv {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 76 1.1 jmmv {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 77 1.1 jmmv {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 78 1.1 jmmv {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, 79 1.1 jmmv {0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57}, 80 1.1 jmmv {0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E}, 81 1.1 jmmv {0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86}, 82 1.1 jmmv {0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E}, 83 1.1 jmmv {0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6}, 84 1.1 jmmv {0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE}, 85 1.1 jmmv {0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6}, 86 1.1 jmmv {0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE}, 87 1.1 jmmv {0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16}, 88 1.1 jmmv {0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F}, 89 1.1 jmmv {0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46}, 90 1.1 jmmv {0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E}, 91 1.1 jmmv {0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76}, 92 1.1 jmmv {0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07}, 93 1.1 jmmv {0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F}, 94 1.1 jmmv {0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7}, 95 1.1 jmmv {0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF}, 96 1.1 jmmv {0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6}, 97 1.1 jmmv {0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF}, 98 1.1 jmmv {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, 99 1.1 jmmv {0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E}, 100 1.1 jmmv {0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE}, 101 1.1 jmmv {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 102 1.1 jmmv {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 103 1.1 jmmv {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 104 1.1 jmmv {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10} 105 1.1 jmmv }; 106 1.1 jmmv 107 1.1 jmmv static unsigned char plain_data[NUM_TESTS][8] = { 108 1.1 jmmv {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 109 1.1 jmmv {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 110 1.1 jmmv {0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, 111 1.1 jmmv {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 112 1.1 jmmv {0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, 113 1.1 jmmv {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 114 1.1 jmmv {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 115 1.1 jmmv {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 116 1.1 jmmv {0x01, 0xA1, 0xD6, 0xD0, 0x39, 0x77, 0x67, 0x42}, 117 1.1 jmmv {0x5C, 0xD5, 0x4C, 0xA8, 0x3D, 0xEF, 0x57, 0xDA}, 118 1.1 jmmv {0x02, 0x48, 0xD4, 0x38, 0x06, 0xF6, 0x71, 0x72}, 119 1.1 jmmv {0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A}, 120 1.1 jmmv {0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2}, 121 1.1 jmmv {0x05, 0x9B, 0x5E, 0x08, 0x51, 0xCF, 0x14, 0x3A}, 122 1.1 jmmv {0x07, 0x56, 0xD8, 0xE0, 0x77, 0x47, 0x61, 0xD2}, 123 1.1 jmmv {0x76, 0x25, 0x14, 0xB8, 0x29, 0xBF, 0x48, 0x6A}, 124 1.1 jmmv {0x3B, 0xDD, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02}, 125 1.1 jmmv {0x26, 0x95, 0x5F, 0x68, 0x35, 0xAF, 0x60, 0x9A}, 126 1.1 jmmv {0x16, 0x4D, 0x5E, 0x40, 0x4F, 0x27, 0x52, 0x32}, 127 1.1 jmmv {0x6B, 0x05, 0x6E, 0x18, 0x75, 0x9F, 0x5C, 0xCA}, 128 1.1 jmmv {0x00, 0x4B, 0xD6, 0xEF, 0x09, 0x17, 0x60, 0x62}, 129 1.1 jmmv {0x48, 0x0D, 0x39, 0x00, 0x6E, 0xE7, 0x62, 0xF2}, 130 1.1 jmmv {0x43, 0x75, 0x40, 0xC8, 0x69, 0x8F, 0x3C, 0xFA}, 131 1.1 jmmv {0x07, 0x2D, 0x43, 0xA0, 0x77, 0x07, 0x52, 0x92}, 132 1.1 jmmv {0x02, 0xFE, 0x55, 0x77, 0x81, 0x17, 0xF1, 0x2A}, 133 1.1 jmmv {0x1D, 0x9D, 0x5C, 0x50, 0x18, 0xF7, 0x28, 0xC2}, 134 1.1 jmmv {0x30, 0x55, 0x32, 0x28, 0x6D, 0x6F, 0x29, 0x5A}, 135 1.1 jmmv {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 136 1.1 jmmv {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 137 1.1 jmmv {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, 138 1.1 jmmv {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, 139 1.1 jmmv {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 140 1.1 jmmv {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 141 1.1 jmmv {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} 142 1.1 jmmv }; 143 1.1 jmmv 144 1.1 jmmv static unsigned char cipher_data[NUM_TESTS][8] = { 145 1.1 jmmv {0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7}, 146 1.1 jmmv {0x73, 0x59, 0xB2, 0x16, 0x3E, 0x4E, 0xDC, 0x58}, 147 1.1 jmmv {0x95, 0x8E, 0x6E, 0x62, 0x7A, 0x05, 0x55, 0x7B}, 148 1.1 jmmv {0xF4, 0x03, 0x79, 0xAB, 0x9E, 0x0E, 0xC5, 0x33}, 149 1.1 jmmv {0x17, 0x66, 0x8D, 0xFC, 0x72, 0x92, 0x53, 0x2D}, 150 1.1 jmmv {0x8A, 0x5A, 0xE1, 0xF8, 0x1A, 0xB8, 0xF2, 0xDD}, 151 1.1 jmmv {0x8C, 0xA6, 0x4D, 0xE9, 0xC1, 0xB1, 0x23, 0xA7}, 152 1.1 jmmv {0xED, 0x39, 0xD9, 0x50, 0xFA, 0x74, 0xBC, 0xC4}, 153 1.1 jmmv {0x69, 0x0F, 0x5B, 0x0D, 0x9A, 0x26, 0x93, 0x9B}, 154 1.1 jmmv {0x7A, 0x38, 0x9D, 0x10, 0x35, 0x4B, 0xD2, 0x71}, 155 1.1 jmmv {0x86, 0x8E, 0xBB, 0x51, 0xCA, 0xB4, 0x59, 0x9A}, 156 1.1 jmmv {0x71, 0x78, 0x87, 0x6E, 0x01, 0xF1, 0x9B, 0x2A}, 157 1.1 jmmv {0xAF, 0x37, 0xFB, 0x42, 0x1F, 0x8C, 0x40, 0x95}, 158 1.1 jmmv {0x86, 0xA5, 0x60, 0xF1, 0x0E, 0xC6, 0xD8, 0x5B}, 159 1.1 jmmv {0x0C, 0xD3, 0xDA, 0x02, 0x00, 0x21, 0xDC, 0x09}, 160 1.1 jmmv {0xEA, 0x67, 0x6B, 0x2C, 0xB7, 0xDB, 0x2B, 0x7A}, 161 1.1 jmmv {0xDF, 0xD6, 0x4A, 0x81, 0x5C, 0xAF, 0x1A, 0x0F}, 162 1.1 jmmv {0x5C, 0x51, 0x3C, 0x9C, 0x48, 0x86, 0xC0, 0x88}, 163 1.1 jmmv {0x0A, 0x2A, 0xEE, 0xAE, 0x3F, 0xF4, 0xAB, 0x77}, 164 1.1 jmmv {0xEF, 0x1B, 0xF0, 0x3E, 0x5D, 0xFA, 0x57, 0x5A}, 165 1.1 jmmv {0x88, 0xBF, 0x0D, 0xB6, 0xD7, 0x0D, 0xEE, 0x56}, 166 1.1 jmmv {0xA1, 0xF9, 0x91, 0x55, 0x41, 0x02, 0x0B, 0x56}, 167 1.1 jmmv {0x6F, 0xBF, 0x1C, 0xAF, 0xCF, 0xFD, 0x05, 0x56}, 168 1.1 jmmv {0x2F, 0x22, 0xE4, 0x9B, 0xAB, 0x7C, 0xA1, 0xAC}, 169 1.1 jmmv {0x5A, 0x6B, 0x61, 0x2C, 0xC2, 0x6C, 0xCE, 0x4A}, 170 1.1 jmmv {0x5F, 0x4C, 0x03, 0x8E, 0xD1, 0x2B, 0x2E, 0x41}, 171 1.1 jmmv {0x63, 0xFA, 0xC0, 0xD0, 0x34, 0xD9, 0xF7, 0x93}, 172 1.1 jmmv {0x61, 0x7B, 0x3A, 0x0C, 0xE8, 0xF0, 0x71, 0x00}, 173 1.1 jmmv {0xDB, 0x95, 0x86, 0x05, 0xF8, 0xC8, 0xC6, 0x06}, 174 1.1 jmmv {0xED, 0xBF, 0xD1, 0xC6, 0x6C, 0x29, 0xCC, 0xC7}, 175 1.1 jmmv {0x35, 0x55, 0x50, 0xB2, 0x15, 0x0E, 0x24, 0x51}, 176 1.1 jmmv {0xCA, 0xAA, 0xAF, 0x4D, 0xEA, 0xF1, 0xDB, 0xAE}, 177 1.1 jmmv {0xD5, 0xD4, 0x4F, 0xF7, 0x20, 0x68, 0x3D, 0x0D}, 178 1.1 jmmv {0x2A, 0x2B, 0xB0, 0x08, 0xDF, 0x97, 0xC2, 0xF2} 179 1.1 jmmv }; 180 1.1 jmmv 181 1.1 jmmv static unsigned char cipher_ecb2[NUM_TESTS - 1][8] = { 182 1.1 jmmv {0x92, 0x95, 0xB5, 0x9B, 0xB3, 0x84, 0x73, 0x6E}, 183 1.1 jmmv {0x19, 0x9E, 0x9D, 0x6D, 0xF3, 0x9A, 0xA8, 0x16}, 184 1.1 jmmv {0x2A, 0x4B, 0x4D, 0x24, 0x52, 0x43, 0x84, 0x27}, 185 1.1 jmmv {0x35, 0x84, 0x3C, 0x01, 0x9D, 0x18, 0xC5, 0xB6}, 186 1.1 jmmv {0x4A, 0x5B, 0x2F, 0x42, 0xAA, 0x77, 0x19, 0x25}, 187 1.1 jmmv {0xA0, 0x6B, 0xA9, 0xB8, 0xCA, 0x5B, 0x17, 0x8A}, 188 1.1 jmmv {0xAB, 0x9D, 0xB7, 0xFB, 0xED, 0x95, 0xF2, 0x74}, 189 1.1 jmmv {0x3D, 0x25, 0x6C, 0x23, 0xA7, 0x25, 0x2F, 0xD6}, 190 1.1 jmmv {0xB7, 0x6F, 0xAB, 0x4F, 0xBD, 0xBD, 0xB7, 0x67}, 191 1.1 jmmv {0x8F, 0x68, 0x27, 0xD6, 0x9C, 0xF4, 0x1A, 0x10}, 192 1.1 jmmv {0x82, 0x57, 0xA1, 0xD6, 0x50, 0x5E, 0x81, 0x85}, 193 1.1 jmmv {0xA2, 0x0F, 0x0A, 0xCD, 0x80, 0x89, 0x7D, 0xFA}, 194 1.1 jmmv {0xCD, 0x2A, 0x53, 0x3A, 0xDB, 0x0D, 0x7E, 0xF3}, 195 1.1 jmmv {0xD2, 0xC2, 0xBE, 0x27, 0xE8, 0x1B, 0x68, 0xE3}, 196 1.1 jmmv {0xE9, 0x24, 0xCF, 0x4F, 0x89, 0x3C, 0x5B, 0x0A}, 197 1.1 jmmv {0xA7, 0x18, 0xC3, 0x9F, 0xFA, 0x9F, 0xD7, 0x69}, 198 1.1 jmmv {0x77, 0x2C, 0x79, 0xB1, 0xD2, 0x31, 0x7E, 0xB1}, 199 1.1 jmmv {0x49, 0xAB, 0x92, 0x7F, 0xD0, 0x22, 0x00, 0xB7}, 200 1.1 jmmv {0xCE, 0x1C, 0x6C, 0x7D, 0x85, 0xE3, 0x4A, 0x6F}, 201 1.1 jmmv {0xBE, 0x91, 0xD6, 0xE1, 0x27, 0xB2, 0xE9, 0x87}, 202 1.1 jmmv {0x70, 0x28, 0xAE, 0x8F, 0xD1, 0xF5, 0x74, 0x1A}, 203 1.1 jmmv {0xAA, 0x37, 0x80, 0xBB, 0xF3, 0x22, 0x1D, 0xDE}, 204 1.1 jmmv {0xA6, 0xC4, 0xD2, 0x5E, 0x28, 0x93, 0xAC, 0xB3}, 205 1.1 jmmv {0x22, 0x07, 0x81, 0x5A, 0xE4, 0xB7, 0x1A, 0xAD}, 206 1.1 jmmv {0xDC, 0xCE, 0x05, 0xE7, 0x07, 0xBD, 0xF5, 0x84}, 207 1.1 jmmv {0x26, 0x1D, 0x39, 0x2C, 0xB3, 0xBA, 0xA5, 0x85}, 208 1.1 jmmv {0xB4, 0xF7, 0x0F, 0x72, 0xFB, 0x04, 0xF0, 0xDC}, 209 1.1 jmmv {0x95, 0xBA, 0xA9, 0x4E, 0x87, 0x36, 0xF2, 0x89}, 210 1.1 jmmv {0xD4, 0x07, 0x3A, 0xF1, 0x5A, 0x17, 0x82, 0x0E}, 211 1.1 jmmv {0xEF, 0x6F, 0xAF, 0xA7, 0x66, 0x1A, 0x7E, 0x89}, 212 1.1 jmmv {0xC1, 0x97, 0xF5, 0x58, 0x74, 0x8A, 0x20, 0xE7}, 213 1.1 jmmv {0x43, 0x34, 0xCF, 0xDA, 0x22, 0xC4, 0x86, 0xC8}, 214 1.1 jmmv {0x08, 0xD7, 0xB4, 0xFB, 0x62, 0x9D, 0x08, 0x85} 215 1.1 jmmv }; 216 1.1 jmmv 217 1.1 jmmv static unsigned char cbc_key[8] = { 218 1.1 jmmv 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 219 1.1 jmmv }; 220 1.1 jmmv static unsigned char cbc2_key[8] = { 221 1.1 jmmv 0xf1, 0xe0, 0xd3, 0xc2, 0xb5, 0xa4, 0x97, 0x86, 222 1.1 jmmv }; 223 1.1 jmmv static unsigned char cbc3_key[8] = { 224 1.1 jmmv 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 225 1.1 jmmv }; 226 1.1 jmmv static unsigned char cbc_iv[8] = { 227 1.1 jmmv 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 228 1.1 jmmv }; 229 1.1 jmmv /* 230 1.1 jmmv * Changed the following text constant to binary so it will work on ebcdic 231 1.1 jmmv * machines :-) 232 1.1 jmmv */ 233 1.1 jmmv /* static char cbc_data[40]="7654321 Now is the time for \0001"; */ 234 1.1 jmmv static unsigned char cbc_data[40] = { 235 1.1 jmmv 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x20, 236 1.1 jmmv 0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74, 237 1.1 jmmv 0x68, 0x65, 0x20, 0x74, 0x69, 0x6D, 0x65, 0x20, 238 1.1 jmmv 0x66, 0x6F, 0x72, 0x20, 0x00, 0x31, 0x00, 0x00, 239 1.1 jmmv 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 240 1.1 jmmv }; 241 1.1 jmmv 242 1.1 jmmv static unsigned char cbc_ok[32] = { 243 1.1 jmmv 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4, 244 1.1 jmmv 0xac, 0xd8, 0xae, 0xfd, 0xdf, 0xd8, 0xa1, 0xeb, 245 1.1 jmmv 0x46, 0x8e, 0x91, 0x15, 0x78, 0x88, 0xba, 0x68, 246 1.1 jmmv 0x1d, 0x26, 0x93, 0x97, 0xf7, 0xfe, 0x62, 0xb4, 247 1.1 jmmv }; 248 1.1 jmmv 249 1.1 jmmv #ifdef SCREW_THE_PARITY 250 1.3 andvar #error "SCREW_THE_PARITY is not meant to be defined." 251 1.1 jmmv #error "Original vectors are preserved for reference only." 252 1.1 jmmv static unsigned char cbc2_key[8] = { 253 1.1 jmmv 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87, 254 1.1 jmmv }; 255 1.1 jmmv static unsigned char xcbc_ok[32] = { 256 1.1 jmmv 0x86, 0x74, 0x81, 0x0D, 0x61, 0xA4, 0xA5, 0x48, 257 1.1 jmmv 0xB9, 0x93, 0x03, 0xE1, 0xB8, 0xBB, 0xBD, 0xBD, 258 1.1 jmmv 0x64, 0x30, 0x0B, 0xB9, 0x06, 0x65, 0x81, 0x76, 259 1.1 jmmv 0x04, 0x1D, 0x77, 0x62, 0x17, 0xCA, 0x2B, 0xD2, 260 1.1 jmmv }; 261 1.1 jmmv #else 262 1.1 jmmv static unsigned char xcbc_ok[32] = { 263 1.1 jmmv 0x84, 0x6B, 0x29, 0x14, 0x85, 0x1E, 0x9A, 0x29, 264 1.1 jmmv 0x54, 0x73, 0x2F, 0x8A, 0xA0, 0xA6, 0x11, 0xC1, 265 1.1 jmmv 0x15, 0xCD, 0xC2, 0xD7, 0x95, 0x1B, 0x10, 0x53, 266 1.1 jmmv 0xA6, 0x3C, 0x5E, 0x03, 0xB2, 0x1A, 0xA3, 0xC4, 267 1.1 jmmv }; 268 1.1 jmmv #endif 269 1.1 jmmv 270 1.1 jmmv static unsigned char cbc3_ok[32] = { 271 1.1 jmmv 0x3F, 0xE3, 0x01, 0xC9, 0x62, 0xAC, 0x01, 0xD0, 272 1.1 jmmv 0x22, 0x13, 0x76, 0x3C, 0x1C, 0xBD, 0x4C, 0xDC, 273 1.1 jmmv 0x79, 0x96, 0x57, 0xC0, 0x64, 0xEC, 0xF5, 0xD4, 274 1.1 jmmv 0x1C, 0x67, 0x38, 0x12, 0xCF, 0xDE, 0x96, 0x75 275 1.1 jmmv }; 276 1.1 jmmv 277 1.1 jmmv static unsigned char pcbc_ok[32] = { 278 1.1 jmmv 0xcc, 0xd1, 0x73, 0xff, 0xab, 0x20, 0x39, 0xf4, 279 1.1 jmmv 0x6d, 0xec, 0xb4, 0x70, 0xa0, 0xe5, 0x6b, 0x15, 280 1.1 jmmv 0xae, 0xa6, 0xbf, 0x61, 0xed, 0x7d, 0x9c, 0x9f, 281 1.1 jmmv 0xf7, 0x17, 0x46, 0x3b, 0x8a, 0xb3, 0xcc, 0x88 282 1.1 jmmv }; 283 1.1 jmmv 284 1.1 jmmv static unsigned char cfb_key[8] = { 285 1.1 jmmv 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 286 1.1 jmmv }; 287 1.1 jmmv static unsigned char cfb_iv[8] = { 288 1.1 jmmv 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef, 289 1.1 jmmv }; 290 1.1 jmmv static unsigned char cfb_buf1[40], cfb_buf2[40], cfb_tmp[8]; 291 1.1 jmmv static unsigned char plain[24] = 292 1.1 jmmv { 293 1.1 jmmv 0x4e, 0x6f, 0x77, 0x20, 0x69, 0x73, 294 1.1 jmmv 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 295 1.1 jmmv 0x69, 0x6d, 0x65, 0x20, 0x66, 0x6f, 296 1.1 jmmv 0x72, 0x20, 0x61, 0x6c, 0x6c, 0x20, 297 1.1 jmmv }; 298 1.1 jmmv static unsigned char cfb_cipher8[24] = { 299 1.1 jmmv 0xf3, 0x1f, 0xda, 0x07, 0x01, 0x14, 300 1.1 jmmv 0x62, 0xee, 0x18, 0x7f, 0x43, 0xd8, 301 1.1 jmmv 0x0a, 0x7c, 0xd9, 0xb5, 0xb0, 0xd2, 302 1.1 jmmv 0x90, 0xda, 0x6e, 0x5b, 0x9a, 0x87, 303 1.1 jmmv }; 304 1.1 jmmv static unsigned char cfb_cipher16[24] = { 305 1.1 jmmv 0xF3, 0x09, 0x87, 0x87, 0x7F, 0x57, 306 1.1 jmmv 0xF7, 0x3C, 0x36, 0xB6, 0xDB, 0x70, 307 1.1 jmmv 0xD8, 0xD5, 0x34, 0x19, 0xD3, 0x86, 308 1.1 jmmv 0xB2, 0x23, 0xB7, 0xB2, 0xAD, 0x1B, 309 1.1 jmmv }; 310 1.1 jmmv static unsigned char cfb_cipher32[24] = { 311 1.1 jmmv 0xF3, 0x09, 0x62, 0x49, 0xA4, 0xDF, 312 1.1 jmmv 0xA4, 0x9F, 0x33, 0xDC, 0x7B, 0xAD, 313 1.1 jmmv 0x4C, 0xC8, 0x9F, 0x64, 0xE4, 0x53, 314 1.1 jmmv 0xE5, 0xEC, 0x67, 0x20, 0xDA, 0xB6, 315 1.1 jmmv }; 316 1.1 jmmv static unsigned char cfb_cipher48[24] = { 317 1.1 jmmv 0xF3, 0x09, 0x62, 0x49, 0xC7, 0xF4, 318 1.1 jmmv 0x30, 0xB5, 0x15, 0xEC, 0xBB, 0x85, 319 1.1 jmmv 0x97, 0x5A, 0x13, 0x8C, 0x68, 0x60, 320 1.1 jmmv 0xE2, 0x38, 0x34, 0x3C, 0xDC, 0x1F, 321 1.1 jmmv }; 322 1.1 jmmv static unsigned char cfb_cipher64[24] = { 323 1.1 jmmv 0xF3, 0x09, 0x62, 0x49, 0xC7, 0xF4, 324 1.1 jmmv 0x6E, 0x51, 0xA6, 0x9E, 0x83, 0x9B, 325 1.1 jmmv 0x1A, 0x92, 0xF7, 0x84, 0x03, 0x46, 326 1.1 jmmv 0x71, 0x33, 0x89, 0x8E, 0xA6, 0x22, 327 1.1 jmmv }; 328 1.1 jmmv 329 1.1 jmmv static unsigned char ofb_key[8] = { 330 1.1 jmmv 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, 331 1.1 jmmv }; 332 1.1 jmmv static unsigned char ofb_iv[8] = { 333 1.1 jmmv 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef, 334 1.1 jmmv }; 335 1.1 jmmv static unsigned char ofb_buf1[24], ofb_buf2[24], ofb_tmp[8]; 336 1.1 jmmv static unsigned char ofb_cipher[24] = 337 1.1 jmmv { 338 1.1 jmmv 0xf3, 0x09, 0x62, 0x49, 0xc7, 0xf4, 0x6e, 0x51, 339 1.1 jmmv 0x35, 0xf2, 0x4a, 0x24, 0x2e, 0xeb, 0x3d, 0x3f, 340 1.1 jmmv 0x3d, 0x6d, 0x5b, 0xe3, 0x25, 0x5a, 0xf8, 0xc3 341 1.1 jmmv }; 342 1.1 jmmv 343 1.1 jmmv static DES_LONG cbc_cksum_ret = 0xB462FEF7L; 344 1.1 jmmv static unsigned char cbc_cksum_data[8] = { 345 1.1 jmmv 0x1D, 0x26, 0x93, 0x97, 0xf7, 0xfe, 0x62, 0xb4, 346 1.1 jmmv }; 347 1.1 jmmv 348 1.1 jmmv static char * 349 1.1 jmmv pt(unsigned char *p) 350 1.1 jmmv { 351 1.1 jmmv static char bufs[10][20]; 352 1.1 jmmv static int bnum = 0; 353 1.1 jmmv char *ret; 354 1.1 jmmv int i; 355 1.1 jmmv static const char *f = "0123456789ABCDEF"; 356 1.1 jmmv 357 1.1 jmmv ret = &(bufs[bnum++][0]); 358 1.1 jmmv bnum %= 10; 359 1.1 jmmv for (i = 0; i < 8; i++) { 360 1.1 jmmv ret[i * 2] = f[(p[i] >> 4) & 0xf]; 361 1.1 jmmv ret[i * 2 + 1] = f[p[i] & 0xf]; 362 1.1 jmmv } 363 1.1 jmmv ret[16] = '\0'; 364 1.1 jmmv return (ret); 365 1.1 jmmv } 366 1.1 jmmv 367 1.1 jmmv static void 368 1.1 jmmv fail_cfb_buf(const char *msg, unsigned char *ptr) 369 1.1 jmmv { 370 1.1 jmmv char buf[1024]; 371 1.1 jmmv int i; 372 1.1 jmmv 373 1.1 jmmv *buf = '\0'; 374 1.1 jmmv for (i = 0; i < 24; i += 8) { 375 1.1 jmmv char buf2[128]; 376 1.1 jmmv snprintf(buf2, sizeof(buf2), "%s /", pt(&(cfb_buf1[i]))); 377 1.1 jmmv strlcat(buf, buf2, sizeof(buf)); 378 1.1 jmmv } 379 1.1 jmmv 380 1.1 jmmv atf_tc_fail_nonfatal("%s: %s", msg, buf); 381 1.1 jmmv } 382 1.1 jmmv 383 1.1 jmmv #if !defined(LIBDES_LIT) 384 1.1 jmmv static void 385 1.1 jmmv cfb_test(int bits, unsigned char *cfb_cipher) 386 1.1 jmmv { 387 1.1 jmmv des_key_schedule ks; 388 1.1 jmmv 389 1.1 jmmv des_set_key_checked(&cfb_key, ks); 390 1.1 jmmv memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 391 1.1 jmmv des_cfb_encrypt(plain, cfb_buf1, bits, sizeof(plain), ks, &cfb_tmp, 392 1.1 jmmv DES_ENCRYPT); 393 1.1 jmmv if (memcmp(cfb_cipher, cfb_buf1, sizeof(plain)) != 0) 394 1.1 jmmv fail_cfb_buf("cfb_encrypt encrypt error", cfb_buf1); 395 1.1 jmmv memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 396 1.1 jmmv des_cfb_encrypt(cfb_buf1, cfb_buf2, bits, sizeof(plain), ks, &cfb_tmp, 397 1.1 jmmv DES_DECRYPT); 398 1.1 jmmv if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) 399 1.1 jmmv fail_cfb_buf("cfb_encrypt decrypt error", cfb_buf2); 400 1.1 jmmv } 401 1.1 jmmv #endif /* !defined(LIBDES_LIT) */ 402 1.1 jmmv 403 1.1 jmmv #if !defined(LIBDES_LIT) 404 1.1 jmmv static void 405 1.1 jmmv cfb64_test(unsigned char *cfb_cipher) 406 1.1 jmmv { 407 1.1 jmmv int n; 408 1.1 jmmv des_key_schedule ks; 409 1.1 jmmv 410 1.1 jmmv des_set_key_checked(&cfb_key, ks); 411 1.1 jmmv memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 412 1.1 jmmv n = 0; 413 1.1 jmmv des_cfb64_encrypt(plain, cfb_buf1, 12, ks, &cfb_tmp, &n, DES_ENCRYPT); 414 1.1 jmmv des_cfb64_encrypt(&(plain[12]), &(cfb_buf1[12]), sizeof(plain) - 12, ks, 415 1.1 jmmv &cfb_tmp, &n, DES_ENCRYPT); 416 1.1 jmmv if (memcmp(cfb_cipher, cfb_buf1, sizeof(plain)) != 0) 417 1.1 jmmv fail_cfb_buf("cfb_encrypt encrypt error", cfb_buf1); 418 1.1 jmmv memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 419 1.1 jmmv n = 0; 420 1.1 jmmv des_cfb64_encrypt(cfb_buf1, cfb_buf2, 17, ks, &cfb_tmp, &n, DES_DECRYPT); 421 1.1 jmmv des_cfb64_encrypt(&(cfb_buf1[17]), &(cfb_buf2[17]), 422 1.1 jmmv sizeof(plain) - 17, ks, &cfb_tmp, &n, DES_DECRYPT); 423 1.1 jmmv if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) 424 1.1 jmmv fail_cfb_buf("cfb_encrypt decrypt error", cfb_buf2); 425 1.1 jmmv } 426 1.1 jmmv #endif /* !defined(LIBDES_LIT) */ 427 1.1 jmmv 428 1.1 jmmv #if !defined(LIBDES_LIT) 429 1.1 jmmv static void 430 1.1 jmmv ede_cfb64_test(unsigned char *cfb_cipher) 431 1.1 jmmv { 432 1.1 jmmv int n; 433 1.1 jmmv des_key_schedule ks; 434 1.1 jmmv 435 1.1 jmmv des_set_key_checked(&cfb_key, ks); 436 1.1 jmmv memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 437 1.1 jmmv n = 0; 438 1.1 jmmv des_ede3_cfb64_encrypt(plain, cfb_buf1, 12, ks, ks, ks, &cfb_tmp, &n, 439 1.1 jmmv DES_ENCRYPT); 440 1.1 jmmv des_ede3_cfb64_encrypt(&(plain[12]), &(cfb_buf1[12]), 441 1.1 jmmv sizeof(plain) - 12, ks, ks, ks, 442 1.1 jmmv &cfb_tmp, &n, DES_ENCRYPT); 443 1.1 jmmv if (memcmp(cfb_cipher, cfb_buf1, sizeof(plain)) != 0) 444 1.1 jmmv fail_cfb_buf("ede_cfb_encrypt encrypt error", cfb_buf1); 445 1.1 jmmv memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 446 1.1 jmmv n = 0; 447 1.1 jmmv des_ede3_cfb64_encrypt(cfb_buf1, cfb_buf2, (long) 17, ks, ks, ks, 448 1.1 jmmv &cfb_tmp, &n, DES_DECRYPT); 449 1.1 jmmv des_ede3_cfb64_encrypt(&(cfb_buf1[17]), &(cfb_buf2[17]), 450 1.1 jmmv sizeof(plain) - 17, ks, ks, ks, 451 1.1 jmmv &cfb_tmp, &n, DES_DECRYPT); 452 1.1 jmmv if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) 453 1.1 jmmv fail_cfb_buf("ede_cfb_encrypt decrypt error", cfb_buf2); 454 1.1 jmmv } 455 1.1 jmmv #endif /* !defined(LIBDES_LIT) */ 456 1.1 jmmv 457 1.1 jmmv ATF_TC_WITHOUT_HEAD(cbcm); 458 1.1 jmmv #if defined(NO_DESCBCM) 459 1.1 jmmv ATF_TC_BODY(cbcm, tc) 460 1.1 jmmv { 461 1.1 jmmv atf_tc_skip("Test program built with NO_DESCBCM"); 462 1.1 jmmv } 463 1.1 jmmv #else /* defined(NO_DESCBM) */ 464 1.1 jmmv ATF_TC_BODY(cbcm, tc) 465 1.1 jmmv { 466 1.1 jmmv int i, j; 467 1.1 jmmv des_cblock iv3, iv2; 468 1.1 jmmv unsigned char cbc_in[40], cbc_out[40]; 469 1.1 jmmv des_key_schedule ks, ks2, ks3; 470 1.1 jmmv 471 1.1 jmmv if ((j = des_set_key_checked(&cbc_key, ks)) != 0) { 472 1.1 jmmv atf_tc_fail_nonfatal("Key error %d\n", j); 473 1.1 jmmv } 474 1.1 jmmv if ((j = des_set_key_checked(&cbc2_key, ks2)) != 0) { 475 1.1 jmmv atf_tc_fail_nonfatal("Key error %d\n", j); 476 1.1 jmmv } 477 1.1 jmmv if ((j = des_set_key_checked(&cbc3_key, ks3)) != 0) { 478 1.1 jmmv atf_tc_fail_nonfatal("Key error %d\n", j); 479 1.1 jmmv } 480 1.1 jmmv memset(cbc_out, 0, 40); 481 1.1 jmmv memset(cbc_in, 0, 40); 482 1.1 jmmv i = strlen((char *) cbc_data) + 1; 483 1.1 jmmv /* i=((i+7)/8)*8; */ 484 1.1 jmmv memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 485 1.1 jmmv memset(iv2, '\0', sizeof iv2); 486 1.1 jmmv 487 1.1 jmmv des_ede3_cbcm_encrypt(cbc_data, cbc_out, 16L, ks, ks2, ks3, &iv3, &iv2, 488 1.1 jmmv DES_ENCRYPT); 489 1.1 jmmv des_ede3_cbcm_encrypt(&cbc_data[16], &cbc_out[16], i - 16, ks, ks2, ks3, 490 1.1 jmmv &iv3, &iv2, DES_ENCRYPT); 491 1.1 jmmv /* 492 1.1 jmmv * if (memcmp(cbc_out,cbc3_ok, (unsigned int)(strlen((char 493 1.1 jmmv * *)cbc_data)+1+7)/8*8) != 0) { printf("des_ede3_cbc_encrypt encrypt 494 1.1 jmmv * error\n"); err=1; } 495 1.1 jmmv */ 496 1.1 jmmv memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 497 1.1 jmmv memset(iv2, '\0', sizeof iv2); 498 1.1 jmmv des_ede3_cbcm_encrypt(cbc_out, cbc_in, i, ks, ks2, ks3, &iv3, &iv2, 499 1.1 jmmv DES_DECRYPT); 500 1.1 jmmv if (memcmp(cbc_in, cbc_data, strlen((char *) cbc_data) + 1) != 0) { 501 1.1 jmmv char buf[1024]; 502 1.1 jmmv int n; 503 1.1 jmmv 504 1.1 jmmv *buf = '\0'; 505 1.1 jmmv for (n = 0; n < i; ++n) { 506 1.1 jmmv char buf2[16]; 507 1.1 jmmv snprintf(buf2, sizeof(buf2), " %02x", cbc_data[n]); 508 1.1 jmmv strlcat(buf, buf2, sizeof(buf)); 509 1.1 jmmv } 510 1.1 jmmv strlcat(buf, ", ", sizeof(buf)); 511 1.1 jmmv for (n = 0; n < i; ++n) { 512 1.1 jmmv char buf2[16]; 513 1.1 jmmv snprintf(buf2, sizeof(buf2), " %02x", cbc_in[n]); 514 1.1 jmmv strlcat(buf, buf2, sizeof(buf)); 515 1.1 jmmv } 516 1.1 jmmv 517 1.1 jmmv atf_tc_fail_nonfatal("des_ede3_cbcm_encrypt decrypt error: %s", 518 1.1 jmmv buf); 519 1.1 jmmv } 520 1.1 jmmv } 521 1.1 jmmv #endif /* defined(NO_DESCBM) */ 522 1.1 jmmv 523 1.1 jmmv ATF_TC_WITHOUT_HEAD(ecb); 524 1.1 jmmv ATF_TC_BODY(ecb, tc) 525 1.1 jmmv { 526 1.1 jmmv int i; 527 1.1 jmmv des_cblock in, out, outin; 528 1.1 jmmv des_key_schedule ks; 529 1.1 jmmv 530 1.1 jmmv for (i = 0; i < NUM_TESTS; i++) { 531 1.1 jmmv des_set_key_unchecked(&key_data[i], ks); 532 1.1 jmmv memcpy(in, plain_data[i], 8); 533 1.1 jmmv memset(out, 0, 8); 534 1.1 jmmv memset(outin, 0, 8); 535 1.1 jmmv des_ecb_encrypt(&in, &out, ks, DES_ENCRYPT); 536 1.1 jmmv des_ecb_encrypt(&out, &outin, ks, DES_DECRYPT); 537 1.1 jmmv 538 1.1 jmmv if (memcmp(out, cipher_data[i], 8) != 0) { 539 1.1 jmmv atf_tc_fail_nonfatal("Encryption error %2d\nk=%s p=%s " 540 1.1 jmmv "o=%s act=%s\n", i + 1, 541 1.1 jmmv pt(key_data[i]), pt(in), 542 1.1 jmmv pt(cipher_data[i]), pt(out)); 543 1.1 jmmv } 544 1.1 jmmv if (memcmp(in, outin, 8) != 0) { 545 1.1 jmmv atf_tc_fail_nonfatal("Decryption error %2d\nk=%s p=%s " 546 1.1 jmmv "o=%s act=%s\n", i + 1, 547 1.1 jmmv pt(key_data[i]), pt(out), pt(in), 548 1.1 jmmv pt(outin)); 549 1.1 jmmv } 550 1.1 jmmv } 551 1.1 jmmv } 552 1.1 jmmv 553 1.1 jmmv ATF_TC_WITHOUT_HEAD(ede_ecb); 554 1.1 jmmv #if defined(LIBDES_LIT) 555 1.1 jmmv ATF_TC_BODY(ede_ecb, tc) 556 1.1 jmmv { 557 1.1 jmmv atf_tc_skip("Test program built with LIBDES_LIT"); 558 1.1 jmmv } 559 1.1 jmmv #else /* defined(LIBDES_LIT) */ 560 1.1 jmmv ATF_TC_BODY(ede_ecb, tc) 561 1.1 jmmv { 562 1.1 jmmv int i; 563 1.1 jmmv des_cblock in, out, outin; 564 1.1 jmmv des_key_schedule ks, ks2, ks3; 565 1.1 jmmv 566 1.1 jmmv for (i = 0; i < (NUM_TESTS - 1); i++) { 567 1.1 jmmv des_set_key_unchecked(&key_data[i], ks); 568 1.1 jmmv des_set_key_unchecked(&key_data[i + 1], ks2); 569 1.1 jmmv des_set_key_unchecked(&key_data[i + 2], ks3); 570 1.1 jmmv memcpy(in, plain_data[i], 8); 571 1.1 jmmv memset(out, 0, 8); 572 1.1 jmmv memset(outin, 0, 8); 573 1.1 jmmv des_ecb2_encrypt(&in, &out, ks, ks2, DES_ENCRYPT); 574 1.1 jmmv des_ecb2_encrypt(&out, &outin, ks, ks2, DES_DECRYPT); 575 1.1 jmmv 576 1.1 jmmv if (memcmp(out, cipher_ecb2[i], 8) != 0) { 577 1.1 jmmv atf_tc_fail_nonfatal("Encryption error %2d\nk=%s p=%s o=%s act=%s\n", 578 1.1 jmmv i + 1, pt(key_data[i]), pt(in), pt(cipher_ecb2[i]), 579 1.1 jmmv pt(out)); 580 1.1 jmmv } 581 1.1 jmmv if (memcmp(in, outin, 8) != 0) { 582 1.1 jmmv atf_tc_fail_nonfatal("Decryption error %2d\nk=%s p=%s o=%s act=%s\n", 583 1.1 jmmv i + 1, pt(key_data[i]), pt(out), pt(in), pt(outin)); 584 1.1 jmmv } 585 1.1 jmmv } 586 1.1 jmmv } 587 1.1 jmmv #endif /* defined(LIBDES_LIT) */ 588 1.1 jmmv 589 1.1 jmmv ATF_TC_WITHOUT_HEAD(cbc); 590 1.1 jmmv ATF_TC_BODY(cbc, tc) 591 1.1 jmmv { 592 1.1 jmmv int j; 593 1.1 jmmv des_cblock iv3; 594 1.1 jmmv des_key_schedule ks; 595 1.1 jmmv unsigned char cbc_in[40], cbc_out[40]; 596 1.1 jmmv 597 1.1 jmmv if ((j = des_set_key_checked(&cbc_key, ks)) != 0) 598 1.1 jmmv atf_tc_fail_nonfatal("Key error %d\n", j); 599 1.1 jmmv memset(cbc_out, 0, 40); 600 1.1 jmmv memset(cbc_in, 0, 40); 601 1.1 jmmv memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 602 1.1 jmmv des_ncbc_encrypt(cbc_data, cbc_out, strlen((char *) cbc_data) + 1, ks, 603 1.1 jmmv &iv3, DES_ENCRYPT); 604 1.1 jmmv if (memcmp(cbc_out, cbc_ok, 32) != 0) 605 1.1 jmmv atf_tc_fail_nonfatal("cbc_encrypt encrypt error\n"); 606 1.1 jmmv memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 607 1.1 jmmv des_ncbc_encrypt(cbc_out, cbc_in, strlen((char *) cbc_data) + 1, ks, 608 1.1 jmmv &iv3, DES_DECRYPT); 609 1.1 jmmv if (memcmp(cbc_in, cbc_data, strlen((char *) cbc_data)) != 0) 610 1.1 jmmv atf_tc_fail_nonfatal("cbc_encrypt decrypt error\n"); 611 1.1 jmmv } 612 1.1 jmmv 613 1.1 jmmv ATF_TC_WITHOUT_HEAD(desx_cbc); 614 1.1 jmmv #if defined(LIBDES_LIT) 615 1.1 jmmv ATF_TC_BODY(desx_cbc, tc) 616 1.1 jmmv { 617 1.1 jmmv atf_tc_skip("Test program built with LIBDES_LIT"); 618 1.1 jmmv } 619 1.1 jmmv #else /* defined(LIBDES_LIT) */ 620 1.1 jmmv ATF_TC_BODY(desx_cbc, tc) 621 1.1 jmmv { 622 1.1 jmmv int j; 623 1.1 jmmv des_cblock iv3; 624 1.1 jmmv des_key_schedule ks; 625 1.1 jmmv unsigned char cbc_in[40], cbc_out[40]; 626 1.1 jmmv 627 1.1 jmmv if ((j = des_set_key_checked(&cbc_key, ks)) != 0) { 628 1.1 jmmv atf_tc_fail_nonfatal("Key error %d\n", j); 629 1.1 jmmv } 630 1.1 jmmv memset(cbc_out, 0, 40); 631 1.1 jmmv memset(cbc_in, 0, 40); 632 1.1 jmmv memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 633 1.1 jmmv des_xcbc_encrypt(cbc_data, cbc_out, strlen((char *) cbc_data) + 1, ks, 634 1.1 jmmv &iv3, &cbc2_key, &cbc3_key, DES_ENCRYPT); 635 1.1 jmmv if (memcmp(cbc_out, xcbc_ok, 32) != 0) { 636 1.1 jmmv atf_tc_fail_nonfatal("des_xcbc_encrypt encrypt error\n"); 637 1.1 jmmv } 638 1.1 jmmv memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 639 1.1 jmmv des_xcbc_encrypt(cbc_out, cbc_in, strlen((char *) cbc_data) + 1, ks, 640 1.1 jmmv &iv3, &cbc2_key, &cbc3_key, DES_DECRYPT); 641 1.1 jmmv if (memcmp(cbc_in, cbc_data, strlen((char *) cbc_data) + 1) != 0) { 642 1.1 jmmv atf_tc_fail_nonfatal("des_xcbc_encrypt decrypt error\n"); 643 1.1 jmmv } 644 1.1 jmmv } 645 1.1 jmmv #endif /* defined(LIBDES_LIT) */ 646 1.1 jmmv 647 1.1 jmmv ATF_TC_WITHOUT_HEAD(ede_cbc); 648 1.1 jmmv ATF_TC_BODY(ede_cbc, tc) 649 1.1 jmmv { 650 1.1 jmmv int i, j; 651 1.1 jmmv des_cblock iv3; 652 1.1 jmmv des_key_schedule ks, ks2, ks3; 653 1.1 jmmv unsigned char cbc_in[40], cbc_out[40]; 654 1.1 jmmv 655 1.1 jmmv if ((j = des_set_key_checked(&cbc_key, ks)) != 0) 656 1.1 jmmv atf_tc_fail_nonfatal("Key error %d\n", j); 657 1.1 jmmv if ((j = des_set_key_checked(&cbc2_key, ks2)) != 0) 658 1.1 jmmv atf_tc_fail_nonfatal("Key error %d\n", j); 659 1.1 jmmv if ((j = des_set_key_checked(&cbc3_key, ks3)) != 0) 660 1.1 jmmv atf_tc_fail_nonfatal("Key error %d\n", j); 661 1.1 jmmv memset(cbc_out, 0, 40); 662 1.1 jmmv memset(cbc_in, 0, 40); 663 1.1 jmmv i = strlen((char *) cbc_data) + 1; 664 1.1 jmmv /* i=((i+7)/8)*8; */ 665 1.1 jmmv memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 666 1.1 jmmv 667 1.1 jmmv des_ede3_cbc_encrypt(cbc_data, cbc_out, 16L, ks, ks2, ks3, &iv3, 668 1.1 jmmv DES_ENCRYPT); 669 1.1 jmmv des_ede3_cbc_encrypt(&(cbc_data[16]), &(cbc_out[16]), i - 16, ks, ks2, 670 1.1 jmmv ks3, &iv3, DES_ENCRYPT); 671 1.1 jmmv if (memcmp(cbc_out, cbc3_ok, (unsigned int) 672 1.1 jmmv (strlen((char *) cbc_data) + 1 + 7) / 8 * 8) != 0) 673 1.1 jmmv atf_tc_fail_nonfatal("des_ede3_cbc_encrypt encrypt error\n"); 674 1.1 jmmv memcpy(iv3, cbc_iv, sizeof(cbc_iv)); 675 1.1 jmmv des_ede3_cbc_encrypt(cbc_out, cbc_in, i, ks, ks2, ks3, &iv3, 676 1.1 jmmv DES_DECRYPT); 677 1.1 jmmv if (memcmp(cbc_in, cbc_data, strlen((char *) cbc_data) + 1) != 0) 678 1.1 jmmv atf_tc_fail_nonfatal("des_ede3_cbc_encrypt decrypt error\n"); 679 1.1 jmmv } 680 1.1 jmmv 681 1.1 jmmv ATF_TC_WITHOUT_HEAD(pcbc); 682 1.1 jmmv #if defined(LIBDES_LIT) 683 1.1 jmmv ATF_TC_BODY(pcbc, tc) 684 1.1 jmmv { 685 1.1 jmmv atf_tc_skip("Test program built with LIBDES_LIT"); 686 1.1 jmmv } 687 1.1 jmmv #else /* defined(LIBDES_LIT) */ 688 1.1 jmmv ATF_TC_BODY(pcbc, tc) 689 1.1 jmmv { 690 1.1 jmmv int j; 691 1.1 jmmv unsigned char cbc_in[40], cbc_out[40]; 692 1.1 jmmv des_key_schedule ks; 693 1.1 jmmv 694 1.1 jmmv if ((j = des_set_key_checked(&cbc_key, ks)) != 0) { 695 1.1 jmmv atf_tc_fail_nonfatal("Key error %d\n", j); 696 1.1 jmmv } 697 1.1 jmmv memset(cbc_out, 0, 40); 698 1.1 jmmv memset(cbc_in, 0, 40); 699 1.1 jmmv des_pcbc_encrypt(cbc_data, cbc_out, strlen((char *) cbc_data) + 1, ks, 700 1.1 jmmv &cbc_iv, DES_ENCRYPT); 701 1.1 jmmv if (memcmp(cbc_out, pcbc_ok, 32) != 0) { 702 1.1 jmmv atf_tc_fail_nonfatal("pcbc_encrypt encrypt error\n"); 703 1.1 jmmv } 704 1.1 jmmv des_pcbc_encrypt(cbc_out, cbc_in, strlen((char *) cbc_data) + 1, ks, &cbc_iv, 705 1.1 jmmv DES_DECRYPT); 706 1.1 jmmv if (memcmp(cbc_in, cbc_data, strlen((char *) cbc_data) + 1) != 0) { 707 1.1 jmmv atf_tc_fail_nonfatal("pcbc_encrypt decrypt error\n"); 708 1.1 jmmv } 709 1.1 jmmv } 710 1.1 jmmv #endif /* defined(LIBDES_LIT) */ 711 1.1 jmmv 712 1.1 jmmv ATF_TC_WITHOUT_HEAD(cfb); 713 1.1 jmmv #if defined(LIBDES_LIT) 714 1.1 jmmv ATF_TC_BODY(cfb, tc) 715 1.1 jmmv { 716 1.1 jmmv atf_tc_skip("Test program built with LIBDES_LIT"); 717 1.1 jmmv } 718 1.1 jmmv #else /* defined(LIBDES_LIT) */ 719 1.1 jmmv ATF_TC_BODY(cfb, tc) 720 1.1 jmmv { 721 1.1 jmmv size_t i; 722 1.1 jmmv des_key_schedule ks; 723 1.1 jmmv 724 1.1 jmmv printf("cfb8\n"); 725 1.1 jmmv cfb_test(8, cfb_cipher8); 726 1.1 jmmv printf("cfb16\n"); 727 1.1 jmmv cfb_test(16, cfb_cipher16); 728 1.1 jmmv printf("cfb32\n"); 729 1.1 jmmv cfb_test(32, cfb_cipher32); 730 1.1 jmmv printf("cfb48\n"); 731 1.1 jmmv cfb_test(48, cfb_cipher48); 732 1.1 jmmv printf("cfb64\n"); 733 1.1 jmmv cfb_test(64, cfb_cipher64); 734 1.1 jmmv 735 1.1 jmmv printf("cfb64()\n"); 736 1.1 jmmv cfb64_test(cfb_cipher64); 737 1.1 jmmv 738 1.1 jmmv des_set_key_checked(&cfb_key, ks); 739 1.1 jmmv memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 740 1.1 jmmv for (i = 0; i < sizeof(plain); i++) 741 1.1 jmmv des_cfb_encrypt(&(plain[i]), &(cfb_buf1[i]), 742 1.1 jmmv 8, 1, ks, &cfb_tmp, DES_ENCRYPT); 743 1.1 jmmv if (memcmp(cfb_cipher8, cfb_buf1, sizeof(plain)) != 0) 744 1.1 jmmv atf_tc_fail_nonfatal("cfb_encrypt small encrypt error\n"); 745 1.1 jmmv memcpy(cfb_tmp, cfb_iv, sizeof(cfb_iv)); 746 1.1 jmmv for (i = 0; i < sizeof(plain); i++) 747 1.1 jmmv des_cfb_encrypt(&(cfb_buf1[i]), &(cfb_buf2[i]), 748 1.1 jmmv 8, 1, ks, &cfb_tmp, DES_DECRYPT); 749 1.1 jmmv if (memcmp(plain, cfb_buf2, sizeof(plain)) != 0) 750 1.1 jmmv atf_tc_fail_nonfatal("cfb_encrypt small decrypt error\n"); 751 1.1 jmmv printf("ede_cfb64()\n"); 752 1.1 jmmv ede_cfb64_test(cfb_cipher64); 753 1.1 jmmv } 754 1.1 jmmv #endif /* defined(LIBDES_LIT) */ 755 1.1 jmmv 756 1.1 jmmv ATF_TC_WITHOUT_HEAD(ofb); 757 1.1 jmmv #if defined(LIBDES_LIT) 758 1.1 jmmv ATF_TC_BODY(ofb, tc) 759 1.1 jmmv { 760 1.1 jmmv atf_tc_skip("Test program built with LIBDES_LIT"); 761 1.1 jmmv } 762 1.1 jmmv #else /* defined(LIBDES_LIT) */ 763 1.1 jmmv ATF_TC_BODY(ofb, tc) 764 1.1 jmmv { 765 1.1 jmmv des_key_schedule ks; 766 1.1 jmmv 767 1.1 jmmv des_set_key_checked(&ofb_key, ks); 768 1.1 jmmv memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 769 1.1 jmmv des_ofb_encrypt(plain, ofb_buf1, 64, sizeof(plain) / 8, ks, &ofb_tmp); 770 1.1 jmmv if (memcmp(ofb_cipher, ofb_buf1, sizeof(ofb_buf1)) != 0) { 771 1.1 jmmv atf_tc_fail_nonfatal("ofb_encrypt encrypt error: " 772 1.1 jmmv "%02X %02X %02X %02X %02X %02X %02X %02X, " 773 1.1 jmmv "%02X %02X %02X %02X %02X %02X %02X %02X", 774 1.1 jmmv ofb_buf1[8 + 0], ofb_buf1[8 + 1], 775 1.1 jmmv ofb_buf1[8 + 2], ofb_buf1[8 + 3], 776 1.1 jmmv ofb_buf1[8 + 4], ofb_buf1[8 + 5], 777 1.1 jmmv ofb_buf1[8 + 6], ofb_buf1[8 + 7], 778 1.1 jmmv ofb_buf1[8 + 0], ofb_cipher[8 + 1], 779 1.1 jmmv ofb_cipher[8 + 2], ofb_cipher[8 + 3], 780 1.1 jmmv ofb_buf1[8 + 4], ofb_cipher[8 + 5], 781 1.1 jmmv ofb_cipher[8 + 6], ofb_cipher[8 + 7]); 782 1.1 jmmv } 783 1.1 jmmv memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 784 1.1 jmmv des_ofb_encrypt(ofb_buf1, ofb_buf2, 64, sizeof(ofb_buf1) / 8, ks, 785 1.1 jmmv &ofb_tmp); 786 1.1 jmmv if (memcmp(plain, ofb_buf2, sizeof(ofb_buf2)) != 0) { 787 1.1 jmmv atf_tc_fail_nonfatal("ofb_encrypt decrypt error: " 788 1.1 jmmv "%02X %02X %02X %02X %02X %02X %02X %02X, " 789 1.1 jmmv "%02X %02X %02X %02X %02X %02X %02X %02X", 790 1.1 jmmv ofb_buf2[8 + 0], ofb_buf2[8 + 1], 791 1.1 jmmv ofb_buf2[8 + 2], ofb_buf2[8 + 3], 792 1.1 jmmv ofb_buf2[8 + 4], ofb_buf2[8 + 5], 793 1.1 jmmv ofb_buf2[8 + 6], ofb_buf2[8 + 7], 794 1.1 jmmv plain[8 + 0], plain[8 + 1], 795 1.1 jmmv plain[8 + 2], plain[8 + 3], 796 1.1 jmmv plain[8 + 4], plain[8 + 5], 797 1.1 jmmv plain[8 + 6], plain[8 + 7]); 798 1.1 jmmv } 799 1.1 jmmv } 800 1.1 jmmv #endif /* defined(LIBDES_LIT) */ 801 1.1 jmmv 802 1.1 jmmv ATF_TC_WITHOUT_HEAD(ofb64); 803 1.1 jmmv #if defined(LIBDES_LIT) 804 1.1 jmmv ATF_TC_BODY(ofb64, tc) 805 1.1 jmmv { 806 1.1 jmmv atf_tc_skip("Test program built with LIBDES_LIT"); 807 1.1 jmmv } 808 1.1 jmmv #else /* defined(LIBDES_LIT) */ 809 1.1 jmmv ATF_TC_BODY(ofb64, tc) 810 1.1 jmmv { 811 1.1 jmmv int num; 812 1.1 jmmv size_t i; 813 1.1 jmmv des_key_schedule ks; 814 1.1 jmmv 815 1.1 jmmv des_set_key_checked(&ofb_key, ks); 816 1.1 jmmv memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 817 1.1 jmmv memset(ofb_buf1, 0, sizeof(ofb_buf1)); 818 1.1 jmmv memset(ofb_buf2, 0, sizeof(ofb_buf1)); 819 1.1 jmmv num = 0; 820 1.1 jmmv for (i = 0; i < sizeof(plain); i++) { 821 1.1 jmmv des_ofb64_encrypt(&(plain[i]), &(ofb_buf1[i]), 1, ks, &ofb_tmp, 822 1.1 jmmv &num); 823 1.1 jmmv } 824 1.1 jmmv if (memcmp(ofb_cipher, ofb_buf1, sizeof(ofb_buf1)) != 0) { 825 1.1 jmmv atf_tc_fail_nonfatal("ofb64_encrypt encrypt error\n"); 826 1.1 jmmv } 827 1.1 jmmv memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 828 1.1 jmmv num = 0; 829 1.1 jmmv des_ofb64_encrypt(ofb_buf1, ofb_buf2, sizeof(ofb_buf1), ks, &ofb_tmp, &num); 830 1.1 jmmv if (memcmp(plain, ofb_buf2, sizeof(ofb_buf2)) != 0) { 831 1.1 jmmv atf_tc_fail_nonfatal("ofb64_encrypt decrypt error\n"); 832 1.1 jmmv } 833 1.1 jmmv } 834 1.1 jmmv #endif /* defined(LIBDES_LIT) */ 835 1.1 jmmv 836 1.1 jmmv ATF_TC_WITHOUT_HEAD(ede_ofb64); 837 1.1 jmmv #if defined(LIBDES_LIT) 838 1.1 jmmv ATF_TC_BODY(ede_ofb64, tc) 839 1.1 jmmv { 840 1.1 jmmv atf_tc_skip("Test program built with LIBDES_LIT"); 841 1.1 jmmv } 842 1.1 jmmv #else /* defined(LIBDES_LIT) */ 843 1.1 jmmv ATF_TC_BODY(ede_ofb64, tc) 844 1.1 jmmv { 845 1.1 jmmv int num; 846 1.1 jmmv size_t i; 847 1.1 jmmv des_key_schedule ks; 848 1.1 jmmv 849 1.1 jmmv des_set_key_checked(&ofb_key, ks); 850 1.1 jmmv memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 851 1.1 jmmv memset(ofb_buf1, 0, sizeof(ofb_buf1)); 852 1.1 jmmv memset(ofb_buf2, 0, sizeof(ofb_buf1)); 853 1.1 jmmv num = 0; 854 1.1 jmmv for (i = 0; i < sizeof(plain); i++) { 855 1.1 jmmv des_ede3_ofb64_encrypt(&(plain[i]), &(ofb_buf1[i]), 1, ks, ks, ks, 856 1.1 jmmv &ofb_tmp, &num); 857 1.1 jmmv } 858 1.1 jmmv if (memcmp(ofb_cipher, ofb_buf1, sizeof(ofb_buf1)) != 0) { 859 1.1 jmmv atf_tc_fail_nonfatal("ede_ofb64_encrypt encrypt error\n"); 860 1.1 jmmv } 861 1.1 jmmv memcpy(ofb_tmp, ofb_iv, sizeof(ofb_iv)); 862 1.1 jmmv num = 0; 863 1.1 jmmv des_ede3_ofb64_encrypt(ofb_buf1, ofb_buf2, sizeof(ofb_buf1), ks, 864 1.1 jmmv ks, ks, &ofb_tmp, &num); 865 1.1 jmmv if (memcmp(plain, ofb_buf2, sizeof(ofb_buf2)) != 0) { 866 1.1 jmmv atf_tc_fail_nonfatal("ede_ofb64_encrypt decrypt error\n"); 867 1.1 jmmv } 868 1.1 jmmv } 869 1.1 jmmv #endif /* defined(LIBDES_LIT) */ 870 1.1 jmmv 871 1.1 jmmv ATF_TC_WITHOUT_HEAD(cbc_cksum); 872 1.1 jmmv #if defined(LIBDES_LIT) 873 1.1 jmmv ATF_TC_BODY(cbc_cksum, tc) 874 1.1 jmmv { 875 1.1 jmmv atf_tc_skip("Test program built with LIBDES_LIT"); 876 1.1 jmmv } 877 1.1 jmmv #else /* defined(LIBDES_LIT) */ 878 1.1 jmmv ATF_TC_BODY(cbc_cksum, tc) 879 1.1 jmmv { 880 1.1 jmmv unsigned char cret[8]; 881 1.1 jmmv des_key_schedule ks; 882 1.1 jmmv DES_LONG cs; 883 1.1 jmmv 884 1.1 jmmv des_set_key_checked(&cbc_key, ks); 885 1.1 jmmv cs = des_cbc_cksum(cbc_data, &cret, strlen((char *) cbc_data), ks, &cbc_iv); 886 1.1 jmmv if (cs != cbc_cksum_ret) { 887 1.1 jmmv atf_tc_fail_nonfatal("bad return value (%08lX), should be %08lX\n", 888 1.1 jmmv (unsigned long) cs, (unsigned long) cbc_cksum_ret); 889 1.1 jmmv } 890 1.1 jmmv if (memcmp(cret, cbc_cksum_data, 8) != 0) { 891 1.1 jmmv atf_tc_fail_nonfatal("bad cbc_cksum block returned\n"); 892 1.1 jmmv } 893 1.1 jmmv } 894 1.1 jmmv #endif /* defined(LIBDES_LIT) */ 895 1.1 jmmv 896 1.1 jmmv ATF_TC_WITHOUT_HEAD(quad_cksum); 897 1.1 jmmv #if defined(LIBDES_LIT) 898 1.1 jmmv ATF_TC_BODY(quad_cksum, tc) 899 1.1 jmmv { 900 1.1 jmmv atf_tc_skip("Test program built with LIBDES_LIT"); 901 1.1 jmmv } 902 1.1 jmmv #else /* defined(LIBDES_LIT) */ 903 1.1 jmmv ATF_TC_BODY(quad_cksum, tc) 904 1.1 jmmv { 905 1.1 jmmv DES_LONG cs, lqret[4]; 906 1.1 jmmv 907 1.1 jmmv cs = quad_cksum(cbc_data, (des_cblock *) lqret, 908 1.1 jmmv (long) strlen((char *) cbc_data), 2, (des_cblock *) cbc_iv); 909 1.1 jmmv if (cs != 0x70d7a63aL) { 910 1.1 jmmv atf_tc_fail_nonfatal("quad_cksum error, ret %08lx should be 70d7a63a\n", 911 1.1 jmmv (unsigned long) cs); 912 1.1 jmmv } 913 1.1 jmmv if (lqret[0] != 0x327eba8dL) { 914 1.1 jmmv atf_tc_fail_nonfatal("quad_cksum error, out[0] %08lx is not %08lx\n", 915 1.1 jmmv (unsigned long) lqret[0], 0x327eba8dUL); 916 1.1 jmmv } 917 1.1 jmmv if (lqret[1] != 0x201a49ccL) { 918 1.1 jmmv atf_tc_fail_nonfatal("quad_cksum error, out[1] %08lx is not %08lx\n", 919 1.1 jmmv (unsigned long) lqret[1], 0x201a49ccUL); 920 1.1 jmmv } 921 1.1 jmmv if (lqret[2] != 0x70d7a63aL) { 922 1.1 jmmv atf_tc_fail_nonfatal("quad_cksum error, out[2] %08lx is not %08lx\n", 923 1.1 jmmv (unsigned long) lqret[2], 0x70d7a63aUL); 924 1.1 jmmv } 925 1.1 jmmv if (lqret[3] != 0x501c2c26L) { 926 1.1 jmmv atf_tc_fail_nonfatal("quad_cksum error, out[3] %08lx is not %08lx\n", 927 1.1 jmmv (unsigned long) lqret[3], 0x501c2c26UL); 928 1.1 jmmv } 929 1.1 jmmv } 930 1.1 jmmv #endif /* defined(LIBDES_LIT) */ 931 1.1 jmmv 932 1.1 jmmv ATF_TC_WITHOUT_HEAD(align); 933 1.1 jmmv ATF_TC_BODY(align, tc) 934 1.1 jmmv { 935 1.1 jmmv int i; 936 1.1 jmmv unsigned char cbc_in[40], cbc_out[40]; 937 1.1 jmmv des_key_schedule ks; 938 1.1 jmmv 939 1.1 jmmv printf("input word alignment test"); 940 1.1 jmmv for (i = 0; i < 4; i++) { 941 1.1 jmmv printf(" %d", i); 942 1.1 jmmv des_ncbc_encrypt(&(cbc_out[i]), cbc_in, 943 1.1 jmmv strlen((char *) cbc_data) + 1, ks, 944 1.1 jmmv &cbc_iv, DES_ENCRYPT); 945 1.1 jmmv } 946 1.1 jmmv 947 1.1 jmmv printf("\noutput word alignment test"); 948 1.1 jmmv for (i = 0; i < 4; i++) { 949 1.1 jmmv printf(" %d", i); 950 1.1 jmmv des_ncbc_encrypt(cbc_out, &(cbc_in[i]), 951 1.1 jmmv strlen((char *) cbc_data) + 1, ks, 952 1.1 jmmv &cbc_iv, DES_ENCRYPT); 953 1.1 jmmv } 954 1.1 jmmv } 955 1.1 jmmv 956 1.1 jmmv ATF_TC_WITHOUT_HEAD(fast_crypt); 957 1.1 jmmv ATF_TC_BODY(fast_crypt, tc) 958 1.1 jmmv { 959 1.1 jmmv char *str; 960 1.1 jmmv 961 1.1 jmmv str = crypt("testing", "ef"); 962 1.1 jmmv if (strcmp("efGnQx2725bI2", str) != 0) 963 1.1 jmmv atf_tc_fail_nonfatal("fast crypt error, %s should be efGnQx2725bI2\n", str); 964 1.1 jmmv str = crypt("bca76;23", "yA"); 965 1.1 jmmv if (strcmp("yA1Rp/1hZXIJk", str) != 0) 966 1.1 jmmv atf_tc_fail_nonfatal("fast crypt error, %s should be yA1Rp/1hZXIJk\n", str); 967 1.1 jmmv } 968 1.1 jmmv 969 1.1 jmmv ATF_TP_ADD_TCS(tp) 970 1.1 jmmv { 971 1.1 jmmv 972 1.1 jmmv ATF_TP_ADD_TC(tp, cbcm); 973 1.1 jmmv ATF_TP_ADD_TC(tp, ecb); 974 1.1 jmmv ATF_TP_ADD_TC(tp, ede_ecb); 975 1.1 jmmv ATF_TP_ADD_TC(tp, cbc); 976 1.1 jmmv ATF_TP_ADD_TC(tp, desx_cbc); 977 1.1 jmmv ATF_TP_ADD_TC(tp, ede_cbc); 978 1.1 jmmv ATF_TP_ADD_TC(tp, pcbc); 979 1.1 jmmv ATF_TP_ADD_TC(tp, cfb); 980 1.1 jmmv ATF_TP_ADD_TC(tp, ofb); 981 1.1 jmmv ATF_TP_ADD_TC(tp, ofb64); 982 1.1 jmmv ATF_TP_ADD_TC(tp, ede_ofb64); 983 1.1 jmmv ATF_TP_ADD_TC(tp, cbc_cksum); 984 1.1 jmmv ATF_TP_ADD_TC(tp, quad_cksum); 985 1.1 jmmv ATF_TP_ADD_TC(tp, align); 986 1.1 jmmv ATF_TP_ADD_TC(tp, fast_crypt); 987 1.1 jmmv 988 1.1 jmmv return atf_no_error(); 989 1.1 jmmv } 990