Removed MIT DES implementation; only use Fergeson DES
authorTheodore Tso <tytso@mit.edu>
Fri, 30 Sep 1994 02:05:40 +0000 (02:05 +0000)
committerTheodore Tso <tytso@mit.edu>
Fri, 30 Sep 1994 02:05:40 +0000 (02:05 +0000)
Fix destest and verify so that they work with the new DES libraries.

"make check" will run the DES test suite.  (Note that all of the krb5 libraries
have to be built, since they depend on them.)

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@4393 dc483132-0cff-0310-8789-dd5450dbe970

19 files changed:
src/lib/crypto/des/Makefile.in
src/lib/crypto/des/configure.in
src/lib/crypto/des/des.c [deleted file]
src/lib/crypto/des/destest.c
src/lib/crypto/des/f_cbc.c
src/lib/crypto/des/f_cksum.c
src/lib/crypto/des/key_parity.c [deleted file]
src/lib/crypto/des/make_e.c [deleted file]
src/lib/crypto/des/make_fp.c [deleted file]
src/lib/crypto/des/make_ip.c [deleted file]
src/lib/crypto/des/make_kp.c [deleted file]
src/lib/crypto/des/make_odd.c [deleted file]
src/lib/crypto/des/make_p.c [deleted file]
src/lib/crypto/des/make_pt.c [deleted file]
src/lib/crypto/des/make_s.c [deleted file]
src/lib/crypto/des/make_st.c [deleted file]
src/lib/crypto/des/misc.c [deleted file]
src/lib/crypto/des/tables.h [deleted file]
src/lib/crypto/des/verify.c

index 196ffc91f01b86dc91b071832a448ee7c14d4075..8f475bc2717f67610ebcc6bca9f686840a1d820d 100644 (file)
@@ -1,18 +1,22 @@
 CFLAGS = $(CCOPTS) $(DEFS)
 LDFLAGS = -g
 
+ISODELIB=@ISODELIB@
+COMERRLIB=$(BUILDTOP)/util/et/libcom_err.a
+
 all:: $(OBJS)
 
+KLIB = $(TOPLIBD)/libkrb5.a $(TOPLIBD)/libcrypto.a $(ISODELIB) $(COMERRLIB)
+DEPKLIB = $(TOPLIBD)/libkrb5.a $(TOPLIBD)/libcrypto.a $(COMERRLIB)
+
 OTHERSRCS=$(srcdir)/f_cbc.c $(srcdir)/f_cksum.c $(srcdir)/f_pcbc.c \
        $(srcdir)/f_sched.c $(srcdir)/f_ecb.c $(srcdir)/f_parity.c \
        $(srcdir)/f_tables.c
 
 OTHEROBJS=f_cbc.o f_cksum.o f_pcbc.o f_sched.o f_ecb.o f_parity.o f_tables.o
 
-OBJS=  cksum.o         \
-       cbc_cksum.o     \
+OBJS=  cbc_cksum.o     \
        cs_entry.o      \
-       enc_dec.o       \
        krb_glue.o      \
        finish_key.o    \
        fin_rndkey.o    \
@@ -25,10 +29,8 @@ OBJS=        cksum.o         \
        weak_key.o      \
        $(OTHEROBJS)
 
-SRCS=  $(srcdir)/cksum.c       \
-       $(srcdir)/cs_entry.c    \
+SRCS=  $(srcdir)/cs_entry.c    \
        $(srcdir)/cbc_cksum.c   \
-       $(srcdir)/enc_dec.c     \
        $(srcdir)/krb_glue.c    \
        $(srcdir)/finish_key.c  \
        $(srcdir)/fin_rndkey.c  \
@@ -49,22 +51,20 @@ depend:: $(SRCS)
 clean::
        $(RM) fp.c ip.c key_perm.h odd.h p.c p_table.h s_table.h
 
-EXT_LIB = $(TOP)/lib/krb5/error_tables/krb5_err.o \
-                  $(TOP)/lib/krb5/error_tables/isode_err.o \
-                  $(TOP)/lib/crypto/cryptoconf.o \
-                  $(TOP)/lib/crypto/crc-32/libcrc32.a \
-                  libdes.a $(OSLIB) $(COMERRLIB)
-
-verify: verify.o libdes.o
-       $(RM) verify.o
-       $(CC) -o $@ verify.o $(LDFLAGS) $(EXT_LIB)
+verify: verify.o $(DEPKLIB)
+       $(CC) -o $@ verify.o $(KLIB) $(LIBS) $(LDFLAGS) 
 
 clean::
-       $(RM) verify
+       $(RM) verify destest 
+
+destest: destest.o $(DEPKLIB)
+       $(CC) -o $@ destest.o $(KLIB) $(LIBS) $(LDFLAGS) 
 
-destest: destest.o libdes.o
-       $(RM) destest.o
-       $(CC) -o $@ destest.o $(LDFLAGS) $(EXT_LIB)
+check:: destest verify
+       ./verify -z
+       ./verify -m
+       ./verify
+       ./destest < $(srcdir)/keytest.data
 
 clean::
        $(RM) destest
index 52832f2ac724c6b5340f34b8d849c57a0c3ac03d..34428817164ffcbad56486374d5871c072941ecb 100644 (file)
@@ -2,6 +2,9 @@ AC_INIT(configure.in)
 WITH_CCOPTS
 AC_SET_BUILDTOP
 CONFIG_RULES
+AC_HAVE_LIBRARY(socket)
+AC_HAVE_LIBRARY(nsl)
 SubdirLibraryRule([${OBJS}])
 KRB_INCLUDE
+ISODE_INCLUDE
 AC_OUTPUT(Makefile,[EXTRA_RULES])
diff --git a/src/lib/crypto/des/des.c b/src/lib/crypto/des/des.c
deleted file mode 100644 (file)
index af04eb1..0000000
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
- * lib/crypto/des/des.c
- *
- * Copyright 1985, 1986, 1987, 1988, 1990 by the Massachusetts Institute
- * of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- *   require a specific license from the United States Government.
- *   It is the responsibility of any person or organization contemplating
- *   export to obtain such a license before exporting.
- * 
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- * 
- *
- * These routines perform encryption and decryption using the DES
- * private key algorithm, or else a subset of it-- fewer inner loops.
- * (AUTH_DES_ITER defaults to 16, may be less.)
- *
- * Under U.S. law, this software may not be exported outside the US
- * without license from the U.S. Commerce department.
- *
- * The key schedule is passed as an arg, as well as the cleartext or
- * ciphertext.
- *
- * All registers labeled imply Vax using the Ultrix or 4.2bsd
- * compiler.
- *
- *
- *     NOTE:  bit and byte numbering:
- *                     DES algorithm is defined in terms of bits of L
- *                     followed by bits of R.
- *             bit 0  ==> lsb of L
- *             bit 63 ==> msb of R
- *
- * Always work in register pairs, FROM L1,R1 TO L2,R2 to make
- * bookkeeping easier.
- *
- * originally written by Steve Miller, MIT Project Athena
- */
-
-
-
-#include <krb5/krb5.h>
-#include <krb5/ext-proto.h>
-#include "des_int.h"
-#include "s_table.h"
-#include "p_table.h"
-
-#ifdef DEBUG
-#define DBG_PRINT(s) if (mit_des_debug & 2) \
-    mit_des_debug_print(s,i,L1&0xffff,(L1>>16)&0xffff, \
-               R1&0xffff,(R1>>16)&0xffff)
-#else
-#define DBG_PRINT(s)
-#endif
-
-extern int mit_des_debug;
-
-int
-mit_des_ecb_encrypt(clear, cipher, schedule, encrypt)
-    unsigned long *clear;
-    unsigned long *cipher;
-    int encrypt;               /* 0 ==> decrypt, else encrypt */
-    register mit_des_key_schedule schedule; /* r11 */
-{
-
-    /* better pass 8 bytes, length not checked here */
-
-    register unsigned long R1, L1; /* R1 = r10, L1 = r9 */
-    register unsigned long R2, L2; /* R2 = r8, L2 = r7 */
-    long i;
-    /* one more registers left on VAX, see below P_temp_p */
-#ifdef BITS16
-    sbox_in_16_a S_in_16_a;
-    sbox_in_16_b S_in_16_b;
-    sbox_in_16_c S_in_16_c;
-    unsigned int *S_in_a_16_p = (unsigned int *) &S_in_16_a;
-    unsigned int *S_in_b_16_p = (unsigned int *) &S_in_16_b;
-    unsigned int *S_in_c_16_p = (unsigned int *) &S_in_16_c;
-#endif
-#ifndef BITS32
-#ifndef BITS16
-    dunno how to do this machine type, you lose;
-#endif
-#endif
-    unsigned long P_temp;
-    register unsigned char *P_temp_p = (unsigned char *) & P_temp;
-#ifdef BITS16
-    sbox_out S_out;
-    unsigned long *S_out_p = (unsigned long *) &S_out;
-#endif
-    unsigned long R_save, L_save;
-#ifdef DEBUG
-    unsigned long dbg_tmp[2];
-#endif
-
-    /*
-     * Use L1,R1 and L2,R2 as two sets of "64-bit" registers always
-     * work from L1,R1 input to L2,R2 output; initialize the cleartext
-     * into registers.
-     */
-#ifdef MUSTALIGN
-#ifdef DEBUG
-    /*
-     * If the alignment is wrong, the programmer really screwed up --
-     * we aren't even getting the right data type.  His problem.  Keep
-     * this code for debugging.
-     */
-    /* Make sure schedule is ok */
-    if ((long) schedule & 3) {
-       fprintf(stderr,"des.c schedule arg pointer not aligned\n");
-       abort();
-    }
-#endif
-    if ((long) clear & 3) {
-       memcpy((char *)&L_save,(char *)clear++,sizeof(L_save));
-       memcpy((char *)&R_save,(char *)clear,sizeof(R_save));
-       L1 = L_save;
-       R1 = R_save;
-    }
-    else
-#endif
-    {
-       if (clear) L1 = *clear++;
-       else L1 = 0;
-       if (clear) R1 = *clear;
-       else R1 = 0;
-    }
-
-#ifdef DEBUG
-    if (mit_des_debug & 2) {
-       printf("All values printed from low byte (bit 0)");
-       printf(" --> high byte (bit 63)\n");
-       i = 0;
-       dbg_tmp[0] = L1;
-       dbg_tmp[1] = R1;
-       printf("iter = %2d  before IP\n\t\tL1 R1 = ",i);
-       mit_des_cblock_print_file (dbg_tmp, stdout);
-    }
-
-    DBG_PRINT("before IP");
-#endif
-
-/*   IP_start:*/
-
-    /* all the Initial Permutation code is in the include file */
-#include "ip.c"
-    /* reset input to L1,R1 */
-    L1 = L2;
-    R1 = R2;
-
-    /* iterate through the inner loop */
-    for (i = 0; i <= (AUTH_DES_ITER-1); i++) {
-
-#ifdef DEBUG
-       if (mit_des_debug & 2) {
-           dbg_tmp[0] = L1;
-           dbg_tmp[1] = R1;
-           printf("iter = %2d  start loop\n\t\tL1 R1 = ",i);
-           mit_des_cblock_print_file (dbg_tmp, stdout);
-           DBG_PRINT("start loop");
-       }
-
-#endif
-
-       R_save = R1;
-       L_save = L1;
-
-/*   E_start:*/
-       /* apply the E permutation from R1 to L2, R2 */
-#ifndef VAXASM
-#ifdef SLOW_E
-#include "e.c"
-#else /* Bill's fast E */
-       L2 = (R1 << 1);
-       if (R1 & (1<<31))
-           L2 |= 1<<0;
-       L2 &= 077;
-       L2 |= (R1 <<3) & 07700;
-       L2 |= (R1 <<5) & 0770000;
-       L2 |= (R1 <<7) & 077000000;
-       L2 |= (R1 <<9) & 07700000000;
-       L2 |= (R1 <<11) & 030000000000;
-
-       /* now from right to right */
-
-       R2 = ((R1 >> 17) & 0176000);
-       if (R1 & (1<<0)) R2 |= 1<<15;
-
-       R2 |= ((R1 >> 21) & 017);
-       R2 |= ((R1 >> 19) & 01760);
-#endif /* SLOW_E */
-#else /* VAXASM */
-       /* E operations */
-       /* right to left */
-       asm("   rotl    $1,r10,r7");
-       L2 &= 077;
-       L2 |= (R1 <<3) & 07700;
-       L2 |= (R1 <<5) & 0770000;
-       L2 |= (R1 <<7) & 077000000;
-       L2 |= (R1 <<9) & 07700000000;
-       L2 |= (R1 <<11) & 030000000000;
-
-       asm("   rotl    $-17,r10,r8");
-       R2 &= 0176000;
-       asm("   rotl    $-21,r10,r0");
-       asm("   bicl2   $-16,r0");
-       asm("  bisl2    r0,r8");
-       asm("   rotl    $-19,r10,r0");
-       asm("   bicl2   $-1009,r0");
-       asm("  bisl2    r0,r8");
-
-#endif
-
-       /* reset input to L1,R1 */
-       L1 = L2;
-       R1 = R2;
-
-#ifdef DEBUG
-       if (mit_des_debug & 2) {
-           dbg_tmp[0] = L1;
-           dbg_tmp[1] = R1;
-           DBG_PRINT("after e");
-           printf("iter = %2d  after e\n\t\tL1 R1 = ",i);
-           mit_des_cblock_print_file (dbg_tmp, stdout);
-       }
-#endif
-
-/*   XOR_start:*/
-       /*
-        * XOR with the key schedule, "schedule"
-        *
-        * If this is an encryption operation, use schedule[i],
-        * otherwise use schedule [AUTH_DES_ITER-i-1]
-        *
-        * First XOR left half.
-        */
-       if (encrypt) {
-           L1 ^= *(((unsigned long *) &schedule[i] )+0);
-           /* now right half */
-           R1 ^= *(((unsigned long *) &schedule[i] )+1);
-       }
-       else {
-           L1 ^= *(((unsigned long *) &schedule[AUTH_DES_ITER-i-1] )+0);
-           /* now right half */
-           R1 ^= *(((unsigned long *) &schedule[AUTH_DES_ITER-i-1] )+1);
-       }
-
-       /* dont have to reset input to L1, R1 */
-
-#ifdef DEBUG
-       if (mit_des_debug & 2) {
-           dbg_tmp[0] = L1;
-           dbg_tmp[1] = R1;
-           DBG_PRINT("after xor");
-           printf("iter = %2d  after xor\n\t\tL1 R1 =",i);
-           mit_des_cblock_print_file (dbg_tmp, stdout);
-       }
-#endif
-
-/*   S_start:*/
-       /* apply the S selection from L1, R1 to R2 */
-
-#ifdef notdef
-#include "s.c"
-#endif
-
-       /* S operations , cant use registers for bit field stuff */
-       /* from S_in to S_out */
-
-#ifdef BITS16
-       *S_in_a_16_p = L1&0xffff;
-       *S_in_b_16_p = (L1>>16)&0xffff;
-       *S_in_c_16_p = R1&0xffff;
-       (*(unsigned long *) &S_out) =
-           (unsigned) S_adj[0][S_in_16_a.b0];
-       S_out.b1 = (unsigned) S_adj[1][S_in_16_a.b1];
-       /* b2 spans two words */
-       S_out.b2 = (unsigned)
-           S_adj[2][(unsigned) S_in_16_a.b2
-                    + (((unsigned) S_in_16_b.b2) << 4)];
-       S_out.b3 = (unsigned) S_adj[3][S_in_16_b.b3];
-       S_out.b4 = (unsigned) S_adj[4][S_in_16_b.b4];
-       /* b5 spans both parts */
-       S_out.b5 = (unsigned)
-           S_adj[5][(unsigned) S_in_16_b.b5
-                    + (((unsigned) S_in_16_c.b5) << 2)];
-       S_out.b6 = (unsigned) S_adj[6][S_in_16_c.b6];
-       S_out.b7 = (unsigned) S_adj[7][S_in_16_c.b7];
-       R1 = *S_out_p;
-#else
-       /* is a 32 bit sys */
-#ifndef VAXASM
-       R2 =  (unsigned) S_adj[0][L1 & 077];
-       L2 = (unsigned) S_adj[1][(L1 >> 6) & 077];
-       R2 |= (L2 <<4 );
-       L2 = (unsigned) S_adj[2][(L1 >> 12) & 077];
-       R2 |= (L2 <<8);
-       L2 = (unsigned) S_adj[3][(L1 >> 18) & 077];
-       R2 |= (L2 <<12);
-       L2 = (unsigned) S_adj[4][(L1 >> 24) & 077];
-       R2 |= (L2 <<16);
-       /* b5 spans both parts */
-       L2 = (unsigned)
-           S_adj[5][(unsigned) ((L1 >>30) & 03) + ((R1 & 017) << 2)];
-       R2 |= (L2 << 20);
-       L2 = (unsigned) S_adj[6][(R1 >> 4) & 077];
-       R2 |= (L2 <<24);
-       L2 = (unsigned) S_adj[7][(R1 >> 10) & 077];
-       R1 = R2 | (L2 <<28);
-       /* reset input to L1, R1 */
-#else /* vaxasm */
-       /*
-        * this is the c code produced above, with
-        * extzv replaced by rotl
-        */
-       asm("bicl3      $-64,r9,r0");
-       asm("movzbl     _S_adj[r0],r8");
-       asm("rotl       $-6,r9,r0");
-       asm("bicl2      $-64,r0");
-       asm("movzbl     _S_adj+64[r0],r7");
-       asm("ashl       $4,r7,r0");
-       asm("bisl2      r0,r8");
-       asm("rotl       $-12,r9,r0");
-       asm("bicl2      $-64,r0");
-       asm("movzbl     _S_adj+128[r0],r7");
-       asm("ashl       $8,r7,r0");
-       asm("bisl2      r0,r8");
-       asm("rotl       $-18,r9,r0");
-       asm("bicl2      $-64,r0");
-       asm("movzbl     _S_adj+192[r0],r7");
-       asm("ashl       $12,r7,r0");
-       asm("bisl2      r0,r8");
-       asm("rotl       $-24,r9,r0");
-       asm("bicl2      $-64,r0");
-       asm("movzbl     _S_adj+256[r0],r7");
-       asm("ashl       $16,r7,r0");
-       asm("bisl2      r0,r8");
-       asm("rotl       $-30,r9,r0");
-       asm("bicl2      $-4,r0");
-       asm("bicl3      $-16,r10,r1");
-       asm("ashl       $2,r1,r1");
-       asm("addl2      r1,r0");
-       asm("movzbl     _S_adj+320[r0],r7");
-       asm("ashl       $20,r7,r0");
-       asm("bisl2      r0,r8");
-       asm("rotl       $-4,r10,r0");
-       asm("bicl2      $-64,r0");
-       asm("movzbl     _S_adj+384[r0],r7");
-       asm("ashl       $24,r7,r0");
-       asm("bisl2      r0,r8");
-       asm("rotl       $-10,r10,r0");
-       asm("bicl2      $-64,r0");
-       asm("movzbl     _S_adj+448[r0],r7");
-       asm("ashl       $28,r7,r0");
-       asm("bisl2      r8,r0");
-       asm("movl       r0,r10");
-
-#endif /* vaxasm */
-#endif
-
-#ifdef DEBUG
-       if (mit_des_debug & 2) {
-           dbg_tmp[0] = L1;
-           dbg_tmp[1] = R1;
-           DBG_PRINT("after s");
-           printf("iter = %2d  after s\n\t\tL1 R1 = ",i);
-           mit_des_cblock_print_file (dbg_tmp, stdout);
-       }
-#endif
-
-/*   P_start:*/
-       /* and then the p permutation from R1 into R2 */
-#include "p.c"
-       /* reset the input to L1, R1 */
-       R1 = R2;
-
-#ifdef DEBUG
-       if (mit_des_debug & 2) {
-           dbg_tmp[0] = L1;
-           dbg_tmp[1] = R1;
-           DBG_PRINT("after p");
-           printf("iter = %2d  after p\n\t\tL1 R1 = ",i);
-           mit_des_cblock_print_file (dbg_tmp, stdout);
-       }
-#endif
-
-       /* R1 is the output value from the f() */
-       /* move R[iter] to L[iter+1] */
-/*   XOR_2_start:*/
-       L1 = R_save;
-       /* xor with left */
-       R1 = L_save ^ R1;
-       /* reset the input */
-    }
-
-    /* flip left and right before final permutation */
-    L2 = R1;                   /* flip */
-    R2 = L1;
-    /* reset the input */
-    L1 = L2;
-    R1 = R2;
-
-#ifdef DEBUG
-    if (mit_des_debug & 2) {
-       dbg_tmp[0] = L1;
-       dbg_tmp[1] = R1;
-       DBG_PRINT("before FP");
-       printf("iter = %2d  before FP\n\t\tL1 R1 = ",i);
-       mit_des_cblock_print_file (dbg_tmp, stdout);
-    }
-
-#endif
-
-/*FP_start:*/
-    /* do the final permutation from L1R1 to L2R2 */
-    /* all the fp code is in the include file */
-#include "fp.c"
-
-    /* copy the output to the ciphertext string;
-     * can be same as cleartext
-     */
-
-#ifdef MUSTALIGN
-    if ((long) cipher & 3) {
-       L_save = L2;    /* cant bcopy a reg */
-       R_save = R2;
-       memcpy((char *)cipher++,(char *)&L_save,sizeof(L_save));
-       memcpy((char *)cipher,(char *)&R_save,sizeof(R_save));
-    }
-    else
-#endif
-    {
-       *cipher++ = L2;
-       *cipher = R2;
-    }
-
-#ifdef DEBUG
-    if (mit_des_debug & 2) {
-       L1 = L2;
-       R1 = R2;
-       dbg_tmp[0] = L1;
-       dbg_tmp[1] = R1;
-       DBG_PRINT("done");
-       printf("iter = %2d  done\n\t\tL1 R1 = ",i);
-       mit_des_cblock_print_file (dbg_tmp, stdout);
-    }
-#endif
-
-    /* that's it, no errors can be returned */
-    return 0;
-}
-
index a3824be66e160c0052ebbd18e6486ee85cd8cede..19075354b77b3b797a91991c42ebcaaa7786378f 100644 (file)
  */
 
 
-/*
- * -DBSD_DES will test the BSD DES library.
- * without, it will test the MIT DES implementation.
- */
-
-#ifndef BSD_DES
 #include <krb5/krb5.h>
 #include <krb5/mit-des.h>
 #include <krb5/ext-proto.h>
 #include <com_err.h>
 
 extern int errno;
-extern krb5_cryptosystem_entry mit_des_cryptosystem_entry;
 extern mit_des_ecb_encrypt();
-#endif
 
 #include <stdio.h>
 
@@ -53,41 +45,23 @@ char *argv[];
 {
     char block1[17], block2[17], block3[17];
 
-#ifdef BSD_DES
-    char oldkey[65], oldinput[65], oldoutput[65];
-#else
     krb5_encrypt_block eblock;
     krb5_keyblock keyblock;
     mit_des_cblock key, input, output, output2;
     krb5_error_code retval;
-#endif
+    int num = 0;
 
     int error = 0;
 
-#ifndef BSD_DES
     /* do some initialisation */
     initialize_krb5_error_table();
 
-    eblock.crypto_entry = &mit_des_cryptosystem_entry;
+    krb5_use_cstype(&eblock, ETYPE_DES_CBC_CRC);
     keyblock.keytype = KEYTYPE_DES;
     keyblock.length = sizeof (mit_des_cblock);
     keyblock.contents = (krb5_octet *)key;
-#endif
 
     while (scanf("%16s %16s %16s", block1, block2, block3) == 3) {
-#ifdef BSD_DES
-       convert(block1, oldkey);
-       convert(block2, oldinput);
-       convert(block3, oldoutput);
-       setkey(oldkey);
-       encrypt(oldinput, 0);
-       if (strncmp(oldinput, oldoutput, 64)) {
-           fprintf(stderr, 
-                   "DES ERROR, key %s, text %s\n\treal cipher %s\n\tcomputed %s\n",
-                   block1, block2, oldoutput, oldinput);
-           error++;
-       }
-#else
        convert(block1, key);
        convert(block2, input);
        convert(block3, output);
@@ -101,7 +75,22 @@ char *argv[];
 
        if (memcmp((char *)output2, (char *)output, 8)) {
            fprintf(stderr, 
-                   "DES ERROR, key %s, text %s, real cipher %s, computed %02X%02X%02X%02X%02X%02X%02X%02X\n",
+                   "DES ENCRYPT ERROR, key %s, text %s, real cipher %s, computed cyphertext %02X%02X%02X%02X%02X%02X%02X%02X\n",
+                   block1, block2, block3,
+                   output2[0],output2[1],output2[2],output2[3],
+                   output2[4],output2[5],output2[6],output2[7]);
+           error++;
+       }
+
+       /*
+        * Now try decrypting....
+        */
+       mit_des_ecb_encrypt(output, output2,
+                           (struct mit_des_ks_struct *)eblock.priv,0);
+
+       if (memcmp((char *)output2, (char *)input, 8)) {
+           fprintf(stderr, 
+                   "DES DECRYPT ERROR, key %s, text %s, real cipher %s, computed cleartext %02X%02X%02X%02X%02X%02X%02X%02X\n",
                    block1, block2, block3,
                    output2[0],output2[1],output2[2],output2[3],
                    output2[4],output2[5],output2[6],output2[7]);
@@ -112,13 +101,13 @@ char *argv[];
             com_err("des verify", retval, "can't finish key");
             exit(-1);
         }
-#endif
+       num++;
     }
 
     if (error) 
        printf("destest: failed to pass the test\n");
     else
-       printf("destest: test is passed successfully\n");
+       printf("destest: %d tests passed successfully\n", num);
 
     exit( (error > 256 && error % 256) ? 1 : error);
 }
@@ -142,32 +131,6 @@ unsigned int value[128] = {
 -1, -1, -1, -1, -1, -1, -1, -1,
 };
 
-#ifdef BSD_DES
-char *value2[16] = {
-    "0000", "0001", "0010", "0011",
-    "0100", "0101", "0110", "0111",
-    "1000", "1001", "1010", "1011",
-    "1100", "1101", "1110", "1111",
-};
-
-void
-convert(text, cblock)
-char *text;
-char cblock[];
-{
-    register int i;
-    for (i = 0; i < 16; i++) {
-       if (value[text[i]] == -1) {
-           printf("Bad value nybble %d in %s\n", i, text);
-           exit(1);
-       }
-       memcpy(&cblock[i*4], value2[value[text[i]]], 4);
-    }
-    cblock[64] = 0;
-    return;
-}
-
-#else
 void
 convert(text, cblock)
 char *text;
@@ -183,23 +146,19 @@ unsigned char cblock[];
     }
     return;
 }
-#endif
 
-#ifndef BSD_DES
+/*
+ * Fake out the DES library, for the purposes of testing.
+ */
+
+#include "des.h"
+
 int
 mit_des_is_weak_key(key)
     mit_des_cblock key;
 {
     return 0;                          /* fake it out for testing */
 }
-#endif
-
-#ifndef __STDC__
-#define const
-#endif
-
-#ifndef BSD_DES
-#include "odd.h"
 
 void
 des_cblock_print_file(x, fp)
@@ -218,20 +177,45 @@ des_cblock_print_file(x, fp)
     fprintf(fp," }");
 }
 
+
+#define smask(step) ((1<<step)-1)
+#define pstep(x,step) (((x)&smask(step))^(((x)>>step)&smask(step)))
+#define parity_char(x) pstep(pstep(pstep((x),4),2),1)
+
+/*
+ * des_check_key_parity: returns true iff key has the correct des parity.
+ *                       See des_fix_key_parity for the definition of
+ *                       correct des parity.
+ */
 int
-des_check_key_parity(key)
-    register mit_des_cblock key;
+mit_des_check_key_parity(key)
+     register des_cblock key;
 {
     int i;
+    
+    for (i=0; i<sizeof(des_cblock); i++) {
+       if ((key[i] & 1) == parity_char(0xfe&key[i])) {
+           printf("warning: bad parity key:");
+           des_cblock_print_file(key, stdout); 
+           putchar('\n');
+             
+           return 1;
+       }
+    }
 
-    for (i=0; i<sizeof(mit_des_cblock); i++)
-      if (key[i] != odd_parity[key[i]]) {
-         printf("warning: bad parity key:");
-         des_cblock_print_file(key, stdout); 
-         putchar('\n');
-         return(1);
-      }
     return(1);
 }
 
-#endif
+void
+mit_des_fixup_key_parity(key)
+     register des_cblock key;
+{
+    int i;
+    for (i=0; i<sizeof(des_cblock); i++) 
+      {
+       key[i] &= 0xfe;
+       key[i] |= 1^parity_char(key[i]);
+      }
+  
+    return;
+}
index c04f9053edd8e37561dd7465140ce12b5e733e4a..72a9198e1c7e9629fbf8cddefd5cd5a84dee987a 100644 (file)
 /*
  * des_cbc_encrypt - {en,de}crypt a stream in CBC mode
  */
+
+/*
+ * This routine performs DES cipher-block-chaining operation, either
+ * encrypting from cleartext to ciphertext, if encrypt != 0 or
+ * decrypting from ciphertext to cleartext, if encrypt == 0.
+ *
+ * The key schedule is passed as an arg, as well as the cleartext or
+ * ciphertext.  The cleartext and ciphertext should be in host order.
+ *
+ * NOTE-- the output is ALWAYS an multiple of 8 bytes long.  If not
+ * enough space was provided, your program will get trashed.
+ *
+ * For encryption, the cleartext string is null padded, at the end, to
+ * an integral multiple of eight bytes.
+ *
+ * For decryption, the ciphertext will be used in integral multiples
+ * of 8 bytes, but only the first "length" bytes returned into the
+ * cleartext.
+ */
+
 int
 mit_des_cbc_encrypt(in, out, length, schedule, ivec, encrypt)
        des_cblock *in;
index 0497b978944b9b4ce405db5c1ef10b432afc4377..05f09263226dc7807b28f1984ef25f7d0291303a 100644 (file)
 #include "des.h"
 #include "f_tables.h"
 
+/*
+ * This routine performs DES cipher-block-chaining checksum operation,
+ * a.k.a.  Message Authentication Code.  It ALWAYS encrypts from input
+ * to a single 64 bit output MAC checksum.
+ *
+ * The key schedule is passed as an arg, as well as the cleartext or
+ * ciphertext. The cleartext and ciphertext should be in host order.
+ *
+ * NOTE-- the output is ALWAYS 8 bytes long.  If not enough space was
+ * provided, your program will get trashed.
+ *
+ * The input is null padded, at the end (highest addr), to an integral
+ * multiple of eight bytes.
+ */
+
 unsigned long
 mit_des_cbc_cksum(in, out, length, schedule, ivec)
        des_cblock *in;
diff --git a/src/lib/crypto/des/key_parity.c b/src/lib/crypto/des/key_parity.c
deleted file mode 100644 (file)
index 796b2e5..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * lib/crypto/des/key_parity.c
- *
- * Copyright 1989, 1990 by the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- *   require a specific license from the United States Government.
- *   It is the responsibility of any person or organization contemplating
- *   export to obtain such a license before exporting.
- * 
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- * 
- *
- * These routines check and fix parity of encryption keys for the DES
- * algorithm.
- *
- * Under U.S. law, this software may not be exported outside the US
- * without license from the U.S. Commerce department.
- *
- * These routines form the library interface to the DES facilities.
- *
- */
-
-
-#include <krb5/krb5.h>
-#include "des_int.h"
-
-#include "odd.h"          /* Load compile-time generated odd_parity table */
-
-/*
- * des_fixup_key_parity: Forces odd parity per byte; parity is bits
- *                       8,16,...64 in des order, implies 0, 8, 16, ...
- *                       vax order.
- */
-void
-mit_des_fixup_key_parity(key)
-     register mit_des_cblock key;
-{
-    int i;
-
-    for (i=0; i<sizeof(mit_des_cblock); i++)
-      key[i] = odd_parity[key[i]];
-
-    return;
-}
-
-/*
- * des_check_key_parity: returns true iff key has the correct des parity.
- *                       See des_fix_key_parity for the definition of
- *                       correct des parity.
- */
-int
-mit_des_check_key_parity(key)
-     register mit_des_cblock key;
-{
-    int i;
-
-    for (i=0; i<sizeof(mit_des_cblock); i++)
-      if (key[i] != odd_parity[key[i]])
-       return(0);
-
-    return(1);
-}
diff --git a/src/lib/crypto/des/make_e.c b/src/lib/crypto/des/make_e.c
deleted file mode 100644 (file)
index d519cc0..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * lib/crypto/des/make_e.c
- *
- * Copyright 1987, 1988, 1990 by the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- *   require a specific license from the United States Government.
- *   It is the responsibility of any person or organization contemplating
- *   export to obtain such a license before exporting.
- * 
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- * 
- *
- * This routine generates source code that implements the "E"
- * operations of the DES.
- */
-
-
-#include <krb5/krb5.h>
-#include <stdio.h>
-#include "des_int.h"
-#include "tables.h"
-
-void gen(stream)
-    FILE *stream;
-{
-    register i;
-
-    /* clear the output */
-    fprintf(stream, "    L2 = 0; R2 = 0;\n");
-
-    /* only take bits from R1, put into either L2 or R2 */
-    /* first setup E */
-    fprintf(stream, "/* E operations */\n/* right to left */\n");
-    /* first list mapping from left to left */
-
-    for (i = 0; i <= 31; i++)
-       if (E[i] < 32)
-           fprintf(stream,
-                   "    if (R1 & (1<<%2d)) L2 |= 1<<%2d;\n", E[i], i);
-
-    fprintf(stream, "\n/* now from right to right */\n");
-    /*  list mapping from left to right */
-    for (i = 32; i <= 47; i++)
-       if (E[i] <32)
-           fprintf(stream, "    if (R1 & (1<<%2d)) R2 |= 1<<%2d;\n",
-                   E[i], i-32);
-}
diff --git a/src/lib/crypto/des/make_fp.c b/src/lib/crypto/des/make_fp.c
deleted file mode 100644 (file)
index 500ea85..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * lib/crypto/des/make_fp.c
- *
- * Copyright 1988, 1990 by the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- *   require a specific license from the United States Government.
- *   It is the responsibility of any person or organization contemplating
- *   export to obtain such a license before exporting.
- * 
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- * 
- *
- * This file contains a generation routine for source code
- * implementing the final permutation of the DES.
- */
-
-
-#include <krb5/krb5.h>
-#include <stdio.h>
-#include <krb5/ext-proto.h>
-#include "des_int.h"
-#include "tables.h"
-
-void gen (stream)
-    FILE * stream;
-{
-    register    i;
-
-    /* clear the output */
-    fprintf(stream,"    L2 = 0; R2 = 0;\n");
-
-    /*
-     *  NOTE: As part of the final permutation, we also have to adjust
-     *  for host bit order via "swap_bit_pos_0()".  Since L2,R2 are
-     *  the output from this, we adjust the bit positions written into
-     *  L2,R2.
-     */
-
-#define SWAP(i,j) \
-    swap_long_bytes_bit_number(swap_bit_pos_0_to_ansi((unsigned)i)-j)
-
-    /* first setup FP */
-    fprintf(stream,
-            "/* FP operations */\n/* first left to left */\n");
-
-    /* first list mapping from left to left */
-    for (i = 0; i <= 31; i++)
-        if (FP[i] < 32)
-            test_set(stream, "L1", FP[i], "L2", SWAP(i,0));
-
-    /* now mapping from right to left */
-    fprintf(stream,"\n\n/* now from right to left */\n");
-    for (i = 0; i <= 31; i++)
-        if (FP[i] >= 32)
-            test_set(stream, "R1", FP[i]-32, "L2", SWAP(i,0));
-
-    fprintf(stream,"\n/* now from left to right */\n");
-
-    /*  list mapping from left to right */
-    for (i = 32; i <= 63; i++)
-        if (FP[i] <32)
-            test_set(stream, "L1", FP[i], "R2", SWAP(i,32));
-
-    /* now mapping from right to right */
-    fprintf(stream,"\n/* last from right to right */\n");
-    for (i = 32; i <= 63; i++)
-        if (FP[i] >= 32)
-            test_set(stream, "R1", FP[i]-32, "R2", SWAP(i,32));
-}
diff --git a/src/lib/crypto/des/make_ip.c b/src/lib/crypto/des/make_ip.c
deleted file mode 100644 (file)
index 5c0113f..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * lib/crypto/des/make_ip.c
- *
- * Copyright 1987, 1988,1990 by the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- *   require a specific license from the United States Government.
- *   It is the responsibility of any person or organization contemplating
- *   export to obtain such a license before exporting.
- * 
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- * 
- *
- * This routine generates source code implementing the initial
- * permutation of the DES.
- */
-
-
-#include <krb5/krb5.h>
-#include <stdio.h>
-#include "des_int.h"
-#include "tables.h"
-
-
-#define SWAP(x) swap_long_bytes_bit_number(swap_bit_pos_0_to_ansi(x))
-
-void gen(stream)
-    FILE *stream;
-{
-    register i;
-
-    /* clear the output */
-    fprintf(stream,"    L2 = 0; R2 = 0;\n");
-
-    /* first setup IP */
-    fprintf(stream,"/* IP operations */\n/* first left to left */\n");
-
-    /* first list mapping from left to left */
-    for (i = 0; i <= 31; i++)
-        if (IP[i] < 32)
-            test_set(stream, "L1", SWAP(IP[i]), "L2", i);
-
-    /* now mapping from right to left */
-    fprintf(stream,"\n/* now from right to left */\n");
-    for (i = 0; i <= 31; i++)
-        if (IP[i] >= 32)
-            test_set(stream, "R1", SWAP(IP[i]-32), "L2", i);
-
-    fprintf(stream,"\n/* now from left to right */\n");
-    /*  list mapping from left to right */
-    for (i = 32; i <= 63; i++)
-        if (IP[i] <32)
-            test_set(stream, "L1", SWAP(IP[i]), "R2", i-32);
-
-    /* now mapping from right to right */
-    fprintf(stream,"\n/* last from right to right */\n");
-    for (i = 32; i <= 63; i++)
-        if (IP[i] >= 32)
-            test_set(stream, "R1", SWAP(IP[i]-32), "R2", i-32);
-    exit(0);
-}
diff --git a/src/lib/crypto/des/make_kp.c b/src/lib/crypto/des/make_kp.c
deleted file mode 100644 (file)
index 42cfe8c..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * lib/crypto/des/make_kp.c
- *
- * Copyright 1988,1990 by the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- *   require a specific license from the United States Government.
- *   It is the responsibility of any person or organization contemplating
- *   export to obtain such a license before exporting.
- * 
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- * 
- *
- * This routine calculates an effective Key schedule set of
- * permutations for des.  Beginning with the pre-defined key schedule
- * algorithm, it reduces it to a set of 16 permutations upon the
- * initial key.  Only needs to execute once to produce a header file.
- * Note that we subtract one from the values ouput to fix up for C
- * subscripts starting at 0.
- */
-
-#include <krb5/krb5.h>
-#include <stdio.h>
-#include "des_int.h"
-
-
-char *progname;
-extern int errno;
-int sflag;
-int vflag;
-int dflag;
-int pid;
-int child_status;
-
-int key_position[64+1];
-int C[28+1];
-int D[28+1];
-int C_temp, D_temp;
-
-/*
- *  CONVENTIONS for numbering the bits
- *  bit 0 ==> lsb
- *  L starts at bit 0
- *  R starts at bit 64
- *
- *  BEWARE-- some stuff starts at 0, some at 1;  perhaps some bugs still?
- */
-
-/*
- * Sequence of shifts used for the key schedule.
- */
-int  shift[16+1] = { 0,
-    1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,
-};
-
-int pc_1[64+1] = { 0,
-
-    57,49,41,33,25,17, 9,
-     1,58,50,42,34,26,18,
-    10, 2,59,51,43,35,27,
-    19,11, 3,60,52,44,36,
-
-    63,55,47,39,31,23,15,
-     7,62,54,46,38,30,22,
-    14, 6,61,53,45,37,29,
-    21,13, 5,28,20,12, 4,
-};
-
-
-/*
- * Permuted-choice 2, to pick out the bits from
- * the CD array that generate the key schedule.
- */
-int  pc_2[48+1] = { 0,
-
-    14,17,11,24, 1, 5,
-     3,28,15, 6,21,10,
-    23,19,12, 4,26, 8,
-    16, 7,27,20,13, 2,
-
-    41,52,31,37,47,55,
-    30,40,51,45,33,48,
-    44,49,39,56,34,53,
-    46,42,50,36,29,32,
-};
-
-int ks_perm[16+1][48+1];
-
-int mit_des_debug;
-
-void gen(stream)
-    FILE *stream;
-{
-    /*  Local Declarations */
-    register i, j, iter;
-
-    /*
-     * initialize the key_position array s.t. key_position[i] = i;
-     * that is, each element is equal to its starting position.
-     *
-     * Also adjust for the bit order within bytes.
-     */
-
-    for (i=0; i<65; i++)
-        key_position[i]= swap_bit_pos_1(i);
-
-    fprintf(stream,"static int const key_perm[16][48] = {\n");
-
-    /*
-     * apply pc_1 to initial key_position to create C[0] and D[0]
-     * Start at pc_1[1], not pc_1[0]
-     */
-    for (i=1; i<=28; i++) {
-        C[i] = key_position[pc_1[i]];
-        D[i] = key_position[pc_1[i+28]];
-    }
-
-    /*
-     * major loop over the 16 iterations
-     * start at iter = 1, not zero.
-     */
-    for (iter = 1; iter <= 16; iter++) {
-        if (mit_des_debug) {
-            /*  for debugging */
-            printf(
-                    "/* DEBUG-- start iteration = %d  shifts = %d",
-                    iter, shift[iter]);
-            printf("\nC array");
-            for (i = 1; i <=4 ; i++) {
-                printf("\n");
-                for (j = 1; j<=7; j++)
-                    printf("%d, ",C[(i-1)*7+j]);
-            }
-            printf("\n\nD array");
-            for (i = 1; i <=4 ; i++) {
-                printf("\n");
-                for (j = 1; j<=7; j++)
-                    printf("%d, ",D[(i-1)*7+j]);
-            }
-            printf("\n */");
-            fflush(stdout);
-        }
-
-        /* apply the appropriate left shifts */
-        for (i = 1; i <= shift[iter]; i++) {
-            C_temp = C[1];
-            D_temp = D[1];
-            for (j =1; j<=27; j++) {
-                C[j] = C[j+1];
-                D[j] = D[j+1];
-            }
-            C[j] = C_temp;
-            D[j] = D_temp;
-        }
-
-
-        if (mit_des_debug) {
-            /* for debugging */
-            printf("/* DEBUG:\n");
-            printf(" * after shifts, iteration = %d  shifts = %d",
-                    iter, shift[iter]);
-            printf("\nC array");
-            for (i = 1; i <=4 ; i++) {
-                printf("\n");
-                for (j = 1; j<=7; j++)
-                    printf("%d, ",C[(i-1)*7+j]);
-            }
-            printf("\n\nD array");
-            for (i = 1; i <=4 ; i++) {
-                printf("\n");
-                for (j = 1; j<=7; j++)
-                    printf("%d, ",D[(i-1)*7+j]);
-            }
-            printf("\n */");
-            fflush(stdout);
-        }
-
-        /*
-         * apply pc_2
-         * Start at pc_2[1], not pc_2[0]
-         *
-         * Start stuffing ks_perm[1][1], not ks_perm[0][0]
-         *
-         * Adjust ks_perm for bit order if needed.
-         */
-        for (i = 1; i <= 48; i++) {
-            if (pc_2[i] <= 28)
-                ks_perm[iter][(i)] = C[pc_2[i]];
-            else
-                ks_perm[iter][(i)] = D[pc_2[i]-28];
-        }
-
-        /* now output the resulting key permutation */
-        fprintf(stream, "    /* ks permutation iteration = %2d */",
-                iter);
-        for (i = 1; i <= 6; i++) {
-            fprintf(stream, "\n    ");
-            for (j = 1; j <= 8; j++) {
-                /*
-                 * IMPORTANT -- subtract one from value to adjust to a
-                 * zero-based subscript for key
-                 */
-                fprintf(stream, "%d", ks_perm[iter][(i-1)*8+j]-1);
-                /* omit last comma */
-                if ((j != 8) || (i != 6) || (iter != 16)) {
-                    fprintf(stream,", ");
-                }
-            }
-        }
-    }
-    fprintf(stream,"\n};\n");
-}
diff --git a/src/lib/crypto/des/make_odd.c b/src/lib/crypto/des/make_odd.c
deleted file mode 100644 (file)
index 9405e84..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * lib/crypto/des/make_odd.c
- *
- * Copyright 1988,1990 by the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- *   require a specific license from the United States Government.
- *   It is the responsibility of any person or organization contemplating
- *   export to obtain such a license before exporting.
- *
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- *
- *
- * This routine generates an odd-parity table for use in key generation.
- */
-
-
-#include <stdio.h>
-
-void gen(stream)
-    FILE *stream;
-{
-    /*
-     * map a byte into its equivalent with odd parity, where odd
-     * parity is in the least significant bit
-     */
-    register i, j, k, odd;
-
-    fprintf(stream,
-            "static unsigned char const odd_parity[256] = {\n");
-
-    for (i = 0; i < 256; i++) {
-        odd = 0;
-        /* shift out the lsb parity bit */
-        k = i >> 1;
-        /* then count the other bits */
-        for (j = 0; j < 7; j++) {
-            odd ^= (k&1);
-            k = k >> 1;
-        }
-        k = i&~1;
-        if (!odd)
-            k |= 1;
-        fprintf(stream, "%3d", k);
-        if (i < 255)
-            fprintf(stream, ", ");
-        if (i%8 == 0)
-            fprintf(stream, "\n");
-    }
-    fprintf(stream, "};\n");
-}
diff --git a/src/lib/crypto/des/make_p.c b/src/lib/crypto/des/make_p.c
deleted file mode 100644 (file)
index 0446c9c..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * lib/crypto/des/make_p.c
- *
- * Copyright 1985, 1988,1990 by the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- *   require a specific license from the United States Government.
- *   It is the responsibility of any person or organization contemplating
- *   export to obtain such a license before exporting.
- *
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- *
- *
- * This routine generates the P permutation code for the DES.
- */
-
-
-#include <krb5/krb5.h>
-#include <stdio.h>
-#include "des_int.h"
-#include "tables.h"
-
-void gen(stream)
-    FILE *stream;
-{
-    /* P permutes 32 bit input R1 into 32 bit output R2 */     
-
-    /* clear the output */
-    fprintf(stream,"    L2 = 0;\n");
-#ifndef        BIG
-    fprintf(stream,"    R2 = 0;\n");
-    fprintf(stream,
-           "/* P operations */\n/* from right to right */\n");
-    /* first list mapping from left to left */
-    for (i = 0; i <=31; i++)
-       if (P[i] < 32)
-           fprintf(stream,
-                   "    if (R1 & (1<<%d)) R2 |= 1<<%d;\n",P[i],i);
-#else /* BIG */
-    /* flip p into p_temp */
-    fprintf(stream,"    P_temp = R1;\n");
-    fprintf(stream,"    P_temp_p = (unsigned char *) &P_temp;\n");
-#ifdef LSBFIRST
-    fprintf(stream,"    R2 = P_prime[0][*P_temp_p++];\n");
-    fprintf(stream,"    R2 |= P_prime[1][*P_temp_p++];\n");
-    fprintf(stream,"    R2 |= P_prime[2][*P_temp_p++];\n");
-    fprintf(stream,"    R2 |= P_prime[3][*P_temp_p];\n");
-#else /* MSBFIRST */
-    fprintf(stream,"    R2 = P_prime[3][*P_temp_p++];\n");
-    fprintf(stream,"    R2 |= P_prime[2][*P_temp_p++];\n");
-    fprintf(stream,"    R2 |= P_prime[1][*P_temp_p++];\n");
-    fprintf(stream,"    R2 |= P_prime[0][*P_temp_p];\n");
-#endif /* MSBFIRST */
-#endif /* BIG */
-}
diff --git a/src/lib/crypto/des/make_pt.c b/src/lib/crypto/des/make_pt.c
deleted file mode 100644 (file)
index 804cb33..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * lib/crypto/des/make_pt.c
- *
- * Copyright 1985, 1988, 1990 by the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- *   require a specific license from the United States Government.
- *   It is the responsibility of any person or organization contemplating
- *   export to obtain such a license before exporting.
- * 
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- * 
- *
- */
-
-
-#include <krb5/krb5.h>
-#include <stdio.h>
-#include "des_int.h"
-#include "tables.h"
-
-static unsigned char P_temp[32];
-static unsigned long P_prime[4][256];
-
-void gen(stream)
-    FILE *stream;
-{
-    register i,j,k,m;
-    /* P permutes 32 bit input R1 into 32 bit output R2 */
-
-#ifdef BIG
-    /* flip p into p_temp */
-    for (i = 0; i<32; i++)
-       P_temp[P[rev_swap_bit_pos_0(i)]] = rev_swap_bit_pos_0(i);
-
-    /*
-     * now for each byte of input, figure out all possible combinations
-     */
-    for (i = 0; i <4 ; i ++) { /* each input byte */
-       for (j = 0; j<256; j++) { /* each possible byte value */
-           /* flip bit order */
-           k = j;
-           /* swap_byte_bits(j); */
-           for (m = 0; m < 8; m++) { /* each bit */
-               if (k & (1 << m)) {
-                   /* set output values */
-                   P_prime[i][j] |= 1 << P_temp[(i*8)+m];
-               }
-           }
-       }
-    }
-
-    fprintf(stream,
-           "\n\tstatic unsigned long const P_prime[4][256] = {\n\t");
-    for (i = 0; i < 4; i++) {
-       fprintf(stream,"\n");
-       for (j = 0; j < 64; j++) {
-           fprintf(stream,"\n");
-           for (k = 0; k < 4; k++) {
-               fprintf(stream,"0x%08X",P_prime[i][j*4+k]);
-               if ((i == 3) && (j == 63) && (k == 3))
-                   fprintf(stream,"\n};");
-               else
-                   fprintf(stream,", ");
-           }
-       }
-    }
-
-#endif
-    fprintf(stream,"\n");
-}
diff --git a/src/lib/crypto/des/make_s.c b/src/lib/crypto/des/make_s.c
deleted file mode 100644 (file)
index 4ae7ff2..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * lib/crypto/des/make_s.c
- *
- * Copyright 1985, 1988, 1990 by the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- *   require a specific license from the United States Government.
- *   It is the responsibility of any person or organization contemplating
- *   export to obtain such a license before exporting.
- *
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- *
- */
-
-
-
-#include <krb5/krb5.h>
-#include <stdio.h>
-#include "des_int.h"
-#include "s_table.h"
-
-void gen(stream)
-    FILE *stream;
-{
-    /* clear the output */
-    fprintf(stream,"\n\tL2 = 0; R2 = 0;");
-
-#ifdef notdef
-    /* P permutes 32 bit input R1 into 32 bit output R2 */
-
-    fprintf(stream,"\n/* P operations */\n/* first left to left */\n");
-    /* first list mapping from left to left */
-    for (i = 0; i <=31; i++)
-       if (S[i] < 32)
-           fprintf(stream,
-                   "\n\tif (R1 & (1<<%d)) R2 |= 1<<%d;",S[i],i);
-#endif
-    fprintf(stream,"\n");
-}
diff --git a/src/lib/crypto/des/make_st.c b/src/lib/crypto/des/make_st.c
deleted file mode 100644 (file)
index 9dcd08c..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * lib/crypto/des/make_st.c
- *
- * Copyright 1985, 1988, 1990 by the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- *   require a specific license from the United States Government.
- *   It is the responsibility of any person or organization contemplating
- *   export to obtain such a license before exporting.
- *
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- *
- */
-
-
-#include <krb5/krb5.h>
-#include <stdio.h>
-#include "des_int.h"
-#include "tables.h"
-
-char temp[8][64];
-int mit_des_debug;
-
-void gen(stream)
-    FILE *stream;
-{
-    register unsigned long i,j,k,l,m,n;
-
-    /* rearrange the S table entries, and adjust for host bit order */
-
-    fprintf(stream, "static unsigned char const S_adj[8][64] = {");
-    fprintf(stream, "    /* adjusted */\n");
-
-    for (i = 0; i<=7 ; i++) {
-        for (j = 0; j <= 63; j++) {
-            /*
-             * figure out which one to put in the new S[i][j]
-             *
-             * start by assuming the value of the input bits is "j" in
-             * host order, then figure out what it means in standard
-             * form.
-             */
-            k = swap_six_bits_to_ansi(j);
-            /* figure out the index for k */
-            l = (((k >> 5) & 01) << 5)
-                + ((k & 01) <<4) + ((k >> 1) & 0xf);
-            m = S[i][l];
-            /* restore in host order */
-            n = swap_four_bits_to_ansi(m);
-            if (mit_des_debug)
-                fprintf(stderr,
-                "i = %d, j = %d, k = %d, l = %d, m = %d, n = %d\n",
-                        i,j,k,l,m,n);
-            temp[i][j] = n;
-        }
-    }
-
-    for (i = 0; i<=7; i++) {
-        fprintf(stream,"\n");
-        k =0;
-        for (j = 0; j<= 3; j++) {
-            fprintf(stream,"\n");
-            for (m = 0; m <= 15; m++) {
-                fprintf(stream,"%2d",temp[i][k]);
-                if ((k++ != 63) || (i !=7)) {
-                    fprintf(stream,", ");
-                }
-            }
-        }
-    }
-
-    fprintf(stream,"\n};\n");
-}
diff --git a/src/lib/crypto/des/misc.c b/src/lib/crypto/des/misc.c
deleted file mode 100644 (file)
index a4e5955..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * lib/crypto/des/misc.c
- *
- * Copyright 1988, 1990 by the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- *   require a specific license from the United States Government.
- *   It is the responsibility of any person or organization contemplating
- *   export to obtain such a license before exporting.
- * 
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- * 
- *
- * This file contains most of the routines needed by the various
- * make_foo programs, to account for bit- and byte-ordering on
- * different machine types.  It also contains other routines useful in
- * generating the intermediate source files.
- */
-
-
-#include <krb5/krb5.h>
-#include <krb5/ext-proto.h>
-#include <stdio.h>
-
-#include "des_int.h"
-
-/*
- * The DES algorithm is defined in terms of MSBFIRST, so sometimes,
- * e.g.  VAXes, we need to fix it up.  ANSI order means the DES
- * MSBFIRST order.
- */
-
-#if 0 /* These don't seem to get used anywhere.... */
-void swap_bits(array)
-    char *array;
-{
-#ifdef MSBFIRST
-    /* just return */
-    return;
-#else /* LSBFIRST */
-    register old,new,i,j;
-
-    /* for an eight byte block-- */
-    /* flips the bit order within each byte from 0 lsb to 0 msb */
-    for (i = 0; i<=7; i++) {
-        old = *array;
-        new = 0;
-        for (j = 0; j<=7; j++) {
-            new |= old & 01;    /* copy a bit */
-            if (j < 7) {
-                /* rotate in opposite directions */
-                old = old >> 1;
-                new = new << 1;
-            }
-        }
-        *array++ = new;
-    }
-#endif /* MSBFIRST */
-}
-
-unsigned long long_swap_bits(x)
-    unsigned long x;
-{
-#ifdef MSBFIRST
-    return x;
-#else
-    char *array = (char *) &x;
-    register old,new,i,j;
-
-    /* flips the bit order within each byte from 0 lsb to 0 msb */
-    for (i = 0; i <= (sizeof(long)-1); i++) {
-        old = *array;
-        new = 0;
-        for (j = 0; j<=7; j++) {
-            if (old & 01)
-                new = new | 01;
-            if (j < 7) {
-                old = old >> 1;
-                new = new << 1;
-            }
-        }
-        *array++ = new;
-    }
-    return x;
-#endif /* LSBFIRST */
-}
-#endif /* 0 */
-
-unsigned long swap_six_bits_to_ansi(old)
-    unsigned long old;
-{
-    register unsigned long new, j;
-
-    /* flips the bit order within each byte from 0 lsb to 0 msb */
-    new = 0;
-    for (j = 0; j<=5; j++) {
-        new |= old & 01;        /* copy a bit */
-        if (j < 5) {
-            /* rotate in opposite directions */
-            old = old >> 1;
-            new = new << 1;
-        }
-    }
-    return new;
-}
-
-unsigned long swap_four_bits_to_ansi(old)
-    unsigned long old;
-{
-    register unsigned long new,j;
-
-    /* flips the bit order within each byte from 0 lsb to 0 msb */
-    new = 0;
-    for (j = 0; j<=3; j++) {
-        new |= (old & 01);      /* copy a bit */
-        if (j < 3) {
-            old = old >> 1;
-            new = new << 1;
-        }
-    }
-    return new;
-}
-
-unsigned long swap_bit_pos_1(x)
-    unsigned long x;
-{
-    /*
-     * This corrects for the bit ordering of the algorithm, e.g.
-     * bit 0 ==> msb, bit 7 lsb.
-     *
-     * given the number of a bit position, >=1, flips the bit order
-     * each byte. e.g. bit 3 --> bit 6, bit 13 --> bit 12
-     */
-    register y,z;
-
-    /* always do it, only used by mit_des_make_key_perm.c so far */
-    y = (x-1)/8;
-    z = (x-1)%8;
-
-    x = (8-z) + (y*8);
-
-    return x;
-}
-
-unsigned long swap_bit_pos_0(x)
-    unsigned long x;
-{
-    /*  zero based version */
-
-    /*
-     * This corrects for the bit ordering of the algorithm, e.g.
-     * bit 0 ==> msb, bit 7 lsb.
-     */
-
-#ifdef MSBFIRST
-    return x;
-#else /* LSBFIRST */
-    register y,z;
-
-    /*
-     * given the number of a bit position, >=0, flips the bit order
-     * each byte. e.g. bit 3 --> bit 6, bit 13 --> bit 12
-     */
-    y = x/8;
-    z = x%8;
-
-    x = (7-z) + (y*8);
-
-    return x;
-#endif /* LSBFIRST */
-}
-
-unsigned long swap_bit_pos_0_to_ansi(x)
-    unsigned long x;
-{
-    /* zero based version */
-
-    /*
-     * This corrects for the bit ordering of the algorithm, e.g.
-     * bit 0 ==> msb, bit 7 lsb.
-     */
-
-    register y,z;
-    /*
-     * given the number of a bit position, >=0, flips the bit order each
-     * byte. e.g. bit 3 --> bit 6, bit 13 --> bit 12
-     */
-    y = x/8;
-    z = x%8;
-
-    x = (7-z) + (y*8);
-
-    return x;
-}
-
-unsigned long rev_swap_bit_pos_0(x)
-    unsigned long x;
-{
-    /* zero based version */
-
-    /*
-     * This corrects for the bit ordering of the algorithm, e.g.
-     *  bit 0 ==> msb, bit 7 lsb.
-     *
-     * Role of LSB and MSB flipped from the swap_bit_pos_0()
-     */
-
-#ifdef LSBFIRST
-    return x;
-#else /* MSBFIRST */
-
-    register y,z;
-
-    /*
-     * given the number of a bit position, >=0, flips the bit order each
-     * byte. e.g. bit 3 --> bit 6, bit 13 --> bit 12
-     */
-    y = x/8;
-    z = x%8;
-
-    x = (7-z) + (y*8);
-
-    return x;
-#endif /* MSBFIRST */
-}
-
-unsigned long swap_byte_bits(x)
-    unsigned long x;
-{
-#ifdef MSBFIRST
-    return x;
-#else /* LSBFIRST */
-
-    char *array = (char *) &x;
-    register unsigned long old,new,j;
-
-    /* flips the bit order within each byte from 0 lsb to 0 msb */
-    old = *array;
-    new = 0;
-    for (j = 0; j<=7; j++) {
-        new |= (old & 01);      /* copy a bit */
-        if (j < 7) {
-            old = old >> 1;
-            new = new << 1;
-        }
-    }
-    return new;
-#endif /* LSBFIRST */
-}
-
-unsigned long
-swap_long_bytes_bit_number(x)
-    unsigned long x;
-{
-    /*
-     * given a bit number (0-31) from a vax, swap the byte part of the
-     * bit number to change the byte ordering to mSBFIRST type
-     */
-#ifdef LSBFIRST
-    return x;
-#else /* MSBFIRST */
-    unsigned long y,z;
-
-    y = x/8;                    /* initial byte component */
-    z = x%8;                    /* bit within byte */
-
-    x = (3-y)*8 +z;
-    return x;
-#endif /* MSBFIRST */
-}
-
-void test_set(stream, src, testbit, dest, setbit)
-    FILE *stream;
-    const char *src;
-    int testbit;
-    const char *dest;
-    int setbit;
-{
-#ifdef DES_SHIFT_SHIFT
-    if (testbit == setbit)
-        fprintf(stream, "    %s |=  %s & (1<<%2d);\n",
-                dest, src, testbit);
-    else
-        fprintf(stream, "    %s |= (%s & (1<<%2d)) %s %2d;\n",
-                dest, src, testbit,
-                (testbit < setbit) ? "<<" : ">>",
-                abs(testbit - setbit));
-#else
-    fprintf(stream,
-            "    if (%s & (1<<%2d))  %s |= 1<<%2d;\n",
-            src, testbit, dest, setbit);
-#endif
-}
-
-extern void gen PROTOTYPE((FILE *));
-int mit_des_debug;
-char const *whoami;
-
-void
-main(argc, argv)
-    int argc;
-    char *argv[];
-{
-    char *filename;
-    char *arg;
-    FILE *stream = 0;
-
-    whoami = argv[0];
-    filename = (char *)NULL;
-
-    while (argc--, *++argv) {
-        arg = *argv;
-        if (*arg == '-') {
-           if (!strcmp(arg, "-d") || !strcmp(arg, "-debug"))
-                mit_des_debug++;
-            else {
-                fprintf(stderr, "%s: unknown control argument %s\n",
-                        whoami, arg);
-                goto usage;
-            }
-        }
-        else if (filename) {
-            fprintf(stderr,
-                    "%s: multiple file names provided: %s, %s\n",
-                    whoami, filename, arg);
-            goto usage;
-        }
-        else
-            filename = arg;
-    }
-
-    if (!filename) {
-        fprintf(stderr, "%s: no file name provided\n", whoami);
-        goto usage;
-    }
-
-    stream = fopen(filename, "w");
-    if (!stream) {
-        perror(filename);
-    usage:
-        fprintf(stderr, "usage: %s [-debug] filename\n", whoami);
-        exit(1);
-    }
-
-    fputs(
-      "/* This file is automatically generated.  Do not edit it. */\n",
-          stream);
-
-    /* This routine will generate the contents of the file. */
-    gen(stream);
-    if (fclose(stream) == EOF) {
-        perror(filename);
-        exit(1);
-    }
-    exit(0);
-}
diff --git a/src/lib/crypto/des/tables.h b/src/lib/crypto/des/tables.h
deleted file mode 100644 (file)
index 42bac36..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * lib/crypto/des/tables.h
- *
- * Copyright 1988,1990 by the Massachusetts Institute of Technology.
- * All Rights Reserved.
- *
- * Export of this software from the United States of America may
- *   require a specific license from the United States Government.
- *   It is the responsibility of any person or organization contemplating
- *   export to obtain such a license before exporting.
- * 
- * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
- * distribute this software and its documentation for any purpose and
- * without fee is hereby granted, provided that the above copyright
- * notice appear in all copies and that both that copyright notice and
- * this permission notice appear in supporting documentation, and that
- * the name of M.I.T. not be used in advertising or publicity pertaining
- * to distribution of the software without specific, written prior
- * permission.  M.I.T. makes no representations about the suitability of
- * this software for any purpose.  It is provided "as is" without express
- * or implied warranty.
- * 
- *
- * part of the Athena Kerberos encryption system
- *
- * spm 8/85
- */
-
-/*
- * Initial permutation, adjust to zero based subscript
- */
-static char    IP[] = {
-       58-1, 50-1, 42-1, 34-1, 26-1, 18-1, 10-1,  2-1, 
-       60-1, 52-1, 44-1, 36-1, 28-1, 20-1, 12-1,  4-1, 
-       62-1, 54-1, 46-1, 38-1, 30-1, 22-1, 14-1,  6-1, 
-       64-1, 56-1, 48-1, 40-1, 32-1, 24-1, 16-1,  8-1, 
-       57-1, 49-1, 41-1, 33-1, 25-1, 17-1,  9-1,  1-1, 
-       59-1, 51-1, 43-1, 35-1, 27-1, 19-1, 11-1,  3-1, 
-       61-1, 53-1, 45-1, 37-1, 29-1, 21-1, 13-1,  5-1, 
-       63-1, 55-1, 47-1, 39-1, 31-1, 23-1, 15-1,  7-1, 
-};
-
-/*
- * Final permutation,  FP = IP^(-1) adjust to zero based subscript
- */
-static char    FP[] = {
-       40-1,  8-1, 48-1, 16-1, 56-1, 24-1, 64-1, 32-1, 
-       39-1,  7-1, 47-1, 15-1, 55-1, 23-1, 63-1, 31-1, 
-       38-1,  6-1, 46-1, 14-1, 54-1, 22-1, 62-1, 30-1, 
-       37-1,  5-1, 45-1, 13-1, 53-1, 21-1, 61-1, 29-1, 
-       36-1,  4-1, 44-1, 12-1, 52-1, 20-1, 60-1, 28-1, 
-       35-1,  3-1, 43-1, 11-1, 51-1, 19-1, 59-1, 27-1, 
-       34-1,  2-1, 42-1, 10-1, 50-1, 18-1, 58-1, 26-1, 
-       33-1,  1-1, 41-1,  9-1, 49-1, 17-1, 57-1, 25-1, 
-};
-
-/* the E selection function, adjusted to zero based subscripts */
-static char    E[] = {
-       32-1,   1-1,    2-1,    3-1,    4-1,    5-1,
-        4-1,   5-1,    6-1,    7-1,    8-1,    9-1,
-        8-1,   9-1,    10-1,   11-1,   12-1,   13-1,
-       12-1,   13-1,   14-1,   15-1,   16-1,   17-1,
-       16-1,   17-1,   18-1,   19-1,   20-1,   21-1,
-       20-1,   21-1,   22-1,   23-1,   24-1,   25-1,
-       24-1,   25-1,   26-1,   27-1,   28-1,   29-1,
-       28-1,   29-1,   30-1,   31-1,   32-1,   1-1,
-};
-
-/* the P permutation, adjusted to zero based subscripts */
-static char    P[] = {
-       16-1,    7-1,   20-1,   21-1,   
-       29-1,   12-1,   28-1,   17-1,   
-        1-1,   15-1,   23-1,   26-1,   
-        5-1,   18-1,   31-1,   10-1,   
-        2-1,    8-1,   24-1,   14-1,   
-       32-1,   27-1,    3-1,    9-1,   
-       19-1,   13-1,   30-1,    6-1,   
-       22-1,   11-1,    4-1,   25-1,   
-};
-
-/* S tables, original form */
-static char    S[8][64] = {
-       14, 4,13, 1, 2,15,11, 8, 3,10, 6,12, 5, 9, 0, 7,
-        0,15, 7, 4,14, 2,13, 1,10, 6,12,11, 9, 5, 3, 8,
-        4, 1,14, 8,13, 6, 2,11,15,12, 9, 7, 3,10, 5, 0,
-       15,12, 8, 2, 4, 9, 1, 7, 5,11, 3,14,10, 0, 6,13,
-
-       15, 1, 8,14, 6,11, 3, 4, 9, 7, 2,13,12, 0, 5,10,
-        3,13, 4, 7,15, 2, 8,14,12, 0, 1,10, 6, 9,11, 5,
-        0,14, 7,11,10, 4,13, 1, 5, 8,12, 6, 9, 3, 2,15,
-       13, 8,10, 1, 3,15, 4, 2,11, 6, 7,12, 0, 5,14, 9,
-
-       10, 0, 9,14, 6, 3,15, 5, 1,13,12, 7,11, 4, 2, 8,
-       13, 7, 0, 9, 3, 4, 6,10, 2, 8, 5,14,12,11,15, 1,
-       13, 6, 4, 9, 8,15, 3, 0,11, 1, 2,12, 5,10,14, 7,
-        1,10,13, 0, 6, 9, 8, 7, 4,15,14, 3,11, 5, 2,12,
-
-        7,13,14, 3, 0, 6, 9,10, 1, 2, 8, 5,11,12, 4,15,
-       13, 8,11, 5, 6,15, 0, 3, 4, 7, 2,12, 1,10,14, 9,
-       10, 6, 9, 0,12,11, 7,13,15, 1, 3,14, 5, 2, 8, 4,
-        3,15, 0, 6,10, 1,13, 8, 9, 4, 5,11,12, 7, 2,14,
-
-        2,12, 4, 1, 7,10,11, 6, 8, 5, 3,15,13, 0,14, 9,
-       14,11, 2,12, 4, 7,13, 1, 5, 0,15,10, 3, 9, 8, 6,
-        4, 2, 1,11,10,13, 7, 8,15, 9,12, 5, 6, 3, 0,14,
-       11, 8,12, 7, 1,14, 2,13, 6,15, 0, 9,10, 4, 5, 3,
-
-       12, 1,10,15, 9, 2, 6, 8, 0,13, 3, 4,14, 7, 5,11,
-       10,15, 4, 2, 7,12, 9, 5, 6, 1,13,14, 0,11, 3, 8,
-        9,14,15, 5, 2, 8,12, 3, 7, 0, 4,10, 1,13,11, 6,
-        4, 3, 2,12, 9, 5,15,10,11,14, 1, 7, 6, 0, 8,13,
-
-        4,11, 2,14,15, 0, 8,13, 3,12, 9, 7, 5,10, 6, 1,
-       13, 0,11, 7, 4, 9, 1,10,14, 3, 5,12, 2,15, 8, 6,
-        1, 4,11,13,12, 3, 7,14,10,15, 6, 8, 0, 5, 9, 2,
-        6,11,13, 8, 1, 4,10, 7, 9, 5, 0,15,14, 2, 3,12,
-
-       13, 2, 8, 4, 6,15,11, 1,10, 9, 3,14, 5, 0,12, 7,
-        1,15,13, 8,10, 3, 7, 4,12, 5, 6,11, 0,14, 9, 2,
-        7,11, 4, 1, 9,12,14, 2, 0, 6,10,13,15, 3, 5, 8,
-        2, 1,14, 7, 4,10, 8,13,15,12, 9, 0, 3, 5, 6,11,
-};
index b5ac9929b4d0298981f2db3c142aa5b64b012e53..270647c5bfc36dbbebd1c9622c0f44a0ed17615f 100644 (file)
@@ -88,6 +88,16 @@ unsigned char cipher3[64] = {
 unsigned char checksum[8] = {
     0x58,0xd2,0xe7,0x7e,0x86,0x06,0x27,0x33
 };
+
+unsigned char zresult[8] = {
+    0x8c, 0xa6, 0x4d, 0xe9, 0xc1, 0xb1, 0x23, 0xa7
+};
+
+unsigned char mresult[8] = {
+    0xa3, 0x80, 0xe0, 0x2a, 0x6b, 0xe5, 0x46, 0x96
+};
+
+    
 /*
  * Can also add :
  * plaintext = 0, key = 0, cipher = 0x8ca64de9c1b123a7 (or is it a 1?)
@@ -143,7 +153,7 @@ main(argc,argv)
     /* do some initialisation */
     initialize_krb5_error_table(); 
 
-    eblock.crypto_entry = &mit_des_cryptosystem_entry;
+    krb5_use_cstype(&eblock, ETYPE_DES_CBC_CRC);
     keyblock.keytype = KEYTYPE_DES;
     keyblock.length = sizeof (mit_des_cblock);
 
@@ -168,6 +178,10 @@ main(argc,argv)
            com_err("des verify", retval, "can't finish zero key");
            exit(-1);
        }
+       if ( memcmp((char *)cipher_text, (char *)zresult, 8) ) {
+           printf("verify: error in zero key test\n");
+           exit(-1);
+       }
        exit(0);
     }
 
@@ -179,7 +193,8 @@ main(argc,argv)
            exit(-1);
        }
        printf("plaintext = 0x00 00 00 00 00 00 00 40, ");
-       printf("key = 0, cipher = 0x??\n");
+       printf("key = 0x80 01 01 01 01 01 01 01\n");
+       printf("        cipher = 0xa380e02a6be54696\n");
        do_encrypt(input,cipher_text);
        printf("\tcipher  = (low to high bytes)\n\t\t");
        for (j = 0; j<=7; j++) {
@@ -191,6 +206,10 @@ main(argc,argv)
            com_err("des verify", retval, "can't finish key3");
            exit(-1);
        }
+       if ( memcmp((char *)cipher_text, (char *)mresult, 8) ) {
+           printf("verify: error in msb test\n");
+           exit(-1);
+       }
        exit(0);
     }
 
@@ -392,3 +411,17 @@ do_decrypt(in,out)
        }
     }
 }
+
+/*
+ * Fake out the DES library, for the purposes of testing.
+ */
+
+#include "des.h"
+
+int
+mit_des_is_weak_key(key)
+    mit_des_cblock key;
+{
+    return 0;                          /* fake it out for testing */
+}
+