summaryrefslogtreecommitdiffstats
path: root/src/lib/crypto/des
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/crypto/des')
-rw-r--r--src/lib/crypto/des/Makefile.in38
-rw-r--r--src/lib/crypto/des/configure.in3
-rw-r--r--src/lib/crypto/des/des.c463
-rw-r--r--src/lib/crypto/des/destest.c138
-rw-r--r--src/lib/crypto/des/f_cbc.c20
-rw-r--r--src/lib/crypto/des/f_cksum.c15
-rw-r--r--src/lib/crypto/des/key_parity.c73
-rw-r--r--src/lib/crypto/des/make_e.c58
-rw-r--r--src/lib/crypto/des/make_fp.c80
-rw-r--r--src/lib/crypto/des/make_ip.c71
-rw-r--r--src/lib/crypto/des/make_kp.c222
-rw-r--r--src/lib/crypto/des/make_odd.c61
-rw-r--r--src/lib/crypto/des/make_p.c66
-rw-r--r--src/lib/crypto/des/make_pt.c81
-rw-r--r--src/lib/crypto/des/make_s.c49
-rw-r--r--src/lib/crypto/des/make_st.c83
-rw-r--r--src/lib/crypto/des/misc.c366
-rw-r--r--src/lib/crypto/des/tables.h122
-rw-r--r--src/lib/crypto/des/verify.c37
19 files changed, 153 insertions, 1893 deletions
diff --git a/src/lib/crypto/des/Makefile.in b/src/lib/crypto/des/Makefile.in
index 196ffc91f..8f475bc27 100644
--- a/src/lib/crypto/des/Makefile.in
+++ b/src/lib/crypto/des/Makefile.in
@@ -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
diff --git a/src/lib/crypto/des/configure.in b/src/lib/crypto/des/configure.in
index 52832f2ac..344288171 100644
--- a/src/lib/crypto/des/configure.in
+++ b/src/lib/crypto/des/configure.in
@@ -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
index af04eb195..000000000
--- a/src/lib/crypto/des/des.c
+++ /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;
-}
-
diff --git a/src/lib/crypto/des/destest.c b/src/lib/crypto/des/destest.c
index a3824be66..19075354b 100644
--- a/src/lib/crypto/des/destest.c
+++ b/src/lib/crypto/des/destest.c
@@ -25,21 +25,13 @@
*/
-/*
- * -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;
+}
diff --git a/src/lib/crypto/des/f_cbc.c b/src/lib/crypto/des/f_cbc.c
index c04f9053e..72a9198e1 100644
--- a/src/lib/crypto/des/f_cbc.c
+++ b/src/lib/crypto/des/f_cbc.c
@@ -16,6 +16,26 @@
/*
* 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;
diff --git a/src/lib/crypto/des/f_cksum.c b/src/lib/crypto/des/f_cksum.c
index 0497b9789..05f092632 100644
--- a/src/lib/crypto/des/f_cksum.c
+++ b/src/lib/crypto/des/f_cksum.c
@@ -13,6 +13,21 @@
#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
index 796b2e5f4..000000000
--- a/src/lib/crypto/des/key_parity.c
+++ /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
index d519cc08b..000000000
--- a/src/lib/crypto/des/make_e.c
+++ /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
index 500ea8516..000000000
--- a/src/lib/crypto/des/make_fp.c
+++ /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
index 5c0113f7e..000000000
--- a/src/lib/crypto/des/make_ip.c
+++ /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
index 42cfe8c4d..000000000
--- a/src/lib/crypto/des/make_kp.c
+++ /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
index 9405e8448..000000000
--- a/src/lib/crypto/des/make_odd.c
+++ /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
index 0446c9c6f..000000000
--- a/src/lib/crypto/des/make_p.c
+++ /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
index 804cb33a5..000000000
--- a/src/lib/crypto/des/make_pt.c
+++ /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
index 4ae7ff24b..000000000
--- a/src/lib/crypto/des/make_s.c
+++ /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
index 9dcd08c9a..000000000
--- a/src/lib/crypto/des/make_st.c
+++ /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
index a4e595575..000000000
--- a/src/lib/crypto/des/misc.c
+++ /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
index 42bac36d2..000000000
--- a/src/lib/crypto/des/tables.h
+++ /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,
-};
diff --git a/src/lib/crypto/des/verify.c b/src/lib/crypto/des/verify.c
index b5ac9929b..270647c5b 100644
--- a/src/lib/crypto/des/verify.c
+++ b/src/lib/crypto/des/verify.c
@@ -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 */
+}
+