Home | History | Annotate | Line # | Download | only in libdes
      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