* des425.h: Deleted to avoid confusion with the other des.h in the tree. All
authorKen Raeburn <raeburn@mit.edu>
Tue, 10 Apr 2001 02:47:42 +0000 (02:47 +0000)
committerKen Raeburn <raeburn@mit.edu>
Tue, 10 Apr 2001 02:47:42 +0000 (02:47 +0000)
files changed to include des_int.h and (the other) des.h instead.
* new_rnd_key.c (des_init_random_number_generator): Cast seed data pointer to
keep compiler happy.
* read_passwd.c (intr_routine, des_read_pw_string): Add prototypes.
(des_read_password): Fix call sequence for des_string_to_key.
* str_to_key.c (des_string_to_key): Remove static storage in favor of automatic
storage.  Fix call sequence to des_key_sched.  Delete no-op while loop.
* t_quad.c (main): Fix call sequence for des_quad_cksum.
* verify.c (des_string_to_key, des_key_sched, des_ecb_encrypt,
des_cbc_encrypt): Removed declarations.
(do_encrypt, do_decrypt): Prototype.  Make args point to unsigned char, and
return types void.
(main): Declare return type.  Make automatic var in_length be unsigned long;
discard some casts, but cast it when passing to memcmp.  Remove extra arg
passed to des_cbc_cksum.
(flip): Delete unused function.

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

17 files changed:
src/lib/des425/ChangeLog
src/lib/des425/cksum.c
src/lib/des425/des.c
src/lib/des425/des425.h [deleted file]
src/lib/des425/enc_dec.c
src/lib/des425/key_parity.c
src/lib/des425/key_sched.c
src/lib/des425/new_rnd_key.c
src/lib/des425/quad_cksum.c
src/lib/des425/random_key.c
src/lib/des425/read_passwd.c
src/lib/des425/str_to_key.c
src/lib/des425/string2key.c
src/lib/des425/t_quad.c
src/lib/des425/util.c
src/lib/des425/verify.c
src/lib/des425/weak_key.c

index 034580f7c9051d794ccd3128acfc7759fa520375..3efa1a30eeef848a9f9b968731f3d39e22f3c5e1 100644 (file)
@@ -1,8 +1,25 @@
 2001-04-09  Ken Raeburn  <raeburn@mit.edu>
 
-       * des425.h: Renamed from des.h to avoid confusion with the other
-       des.h in the source tree.  Adjust include directives in all other
-       files.
+       * des.h: Deleted to avoid confusion with the other des.h in the
+       tree.  All files changed to include des_int.h and
+       (the other) des.h instead.
+       * new_rnd_key.c (des_init_random_number_generator): Cast seed data
+       pointer to keep compiler happy.
+       * read_passwd.c (intr_routine, des_read_pw_string): Add
+       prototypes.
+       (des_read_password): Fix call sequence for des_string_to_key.
+       * str_to_key.c (des_string_to_key): Remove static storage in favor
+       of automatic storage.  Fix call sequence to des_key_sched.  Delete
+       no-op while loop.
+       * t_quad.c (main): Fix call sequence for des_quad_cksum.
+       * verify.c (des_string_to_key, des_key_sched, des_ecb_encrypt,
+       des_cbc_encrypt): Removed declarations.
+       (do_encrypt, do_decrypt): Prototype.  Make args point to unsigned
+       char, and return types void.
+       (main): Declare return type.  Make automatic var in_length be
+       unsigned long; discard some casts, but cast it when passing to
+       memcmp.  Remove extra arg passed to des_cbc_cksum.
+       (flip): Delete unused function.
 
        * quad_cksum.c (des_quad_cksum): Add comments.  Force 32-bit
        arithmetic just to be careful.
index e435231181fce2900eb5c2db20114d5adb864370..deff03c6569d30f4e0b0fe607a45a88d13982239 100644 (file)
@@ -37,8 +37,8 @@
  *     spm     8/85    MIT project athena
  */
 
-
-#include "des425.h"
+#include "des_int.h"
+#include "des.h"
 
 /*
  * This routine performs DES cipher-block-chaining checksum operation,
index 2315b434b1f9bb784488efc5d08f6345bb1f9bc8..9dfdce3e3e837dd39040b8dcabe192e3f64100b3 100644 (file)
  * originally written by Steve Miller, MIT Project Athena
  */
 
-
-#include "des425.h"
+#include "des_int.h"
+#include "des.h"
 
 KRB5_DLLIMP int KRB5_CALLCONV
 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 */
+    int encrypt;               /* 0 ==> decrypt, else encrypt */
 {
     static des_cblock iv;
 
diff --git a/src/lib/des425/des425.h b/src/lib/des425/des425.h
deleted file mode 100644 (file)
index 9ccc82c..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * lib/des425/des425.h (formerly des.h)
- *
- * Copyright 1991 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.  Furthermore if you modify this software you must label
- * your software as modified software and not distribute it in such a
- * fashion that it might be confused with the original M.I.T. software.
- * 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 file for the Data Encryption Standard library.
- */
-
-/* only do the whole thing once         */
-#ifndef DES_DEFS
-#define DES_DEFS
-
-#include <des_int.h>
-
-typedef mit_des_cblock des_cblock;     /* crypto-block size */
-
-/* Key schedule */
-typedef mit_des_key_schedule des_key_schedule;
-
-#define DES_KEY_SZ     (sizeof(des_cblock))
-#define DES_ENCRYPT    1
-#define DES_DECRYPT    0
-
-#ifndef NCOMPAT
-#define C_Block des_cblock
-#define Key_schedule des_key_schedule
-#define ENCRYPT DES_ENCRYPT
-#define DECRYPT DES_DECRYPT
-#define KEY_SZ DES_KEY_SZ
-#define string_to_key des_string_to_key
-#define read_pw_string des_read_pw_string
-#define random_key des_random_key
-#define pcbc_encrypt des_pcbc_encrypt
-#define key_sched des_key_sched
-#define cbc_encrypt des_cbc_encrypt
-#define cbc_cksum des_cbc_cksum
-#define C_Block_print des_cblock_print
-#define quad_cksum des_quad_cksum
-typedef struct des_ks_struct bit_64;
-#endif
-
-#define des_cblock_print(x) des_cblock_print_file(x, stdout)
-
-/*
- * Windows needs everything prototyped because we're exporting all the fuctions.
- */
-void des_cbc_cksum();
-KRB5_DLLIMP int KRB5_CALLCONV des_ecb_encrypt();
-int des_cbc_encrypt();
-void des_fixup_key_parity();
-int des_check_key_parity();
-KRB5_DLLIMP int KRB5_CALLCONV des_key_sched();
-KRB5_DLLIMP int KRB5_CALLCONV des_new_random_key();
-void des_init_random_number_generator();
-KRB5_DLLIMP void KRB5_CALLCONV des_set_random_generator_seed();
-void des_set_sequence_number();
-void des_generate_random_block();
-KRB5_DLLIMP int KRB5_CALLCONV des_pcbc_encrypt();
-KRB5_DLLIMP unsigned long KRB5_CALLCONV des_quad_cksum();
-int des_random_key();
-krb5_error_code des_read_password();
-KRB5_DLLIMP int KRB5_CALLCONV des_string_to_key();
-int des_is_weak_key();
-
-#endif /* DES_DEFS */
index 0be356075c84c01fea431cd37d243a245775f672..f0e0daa50865dca00f832880c88d517f41d1dede 100644 (file)
@@ -38,8 +38,8 @@
  *
  */
 
-
-#include "des425.h"
+#include "des_int.h"
+#include "des.h"
 
 /*
  * This routine performs DES cipher-block-chaining operation, either
index 67480d53fa3903ac9c16ff99ae7bc9847b9544f8..d52676c7818a77048b306ecc1803a3641232ea47 100644 (file)
@@ -34,8 +34,8 @@
  *
  */
 
-
-#include "des425.h"
+#include "des_int.h"
+#include "des.h"
 
 /*
  * des_fixup_key_parity: Forces odd parity per byte; parity is bits
index b30571c20c97ee4d8675ae05e17a120bb281583b..cb62a502f933017a0f669d663b060e9e5983b9ce 100644 (file)
 
 
 #include <stdio.h>
-#include "des425.h"
+#include "des_int.h"
+#include "des.h"
 
 KRB5_DLLIMP int KRB5_CALLCONV
 des_key_sched(k,schedule)
-    register mit_des_cblock k; /* r11 */
-    mit_des_key_schedule schedule;
+    des_cblock k;
+    des_key_schedule schedule;
 {
-       return (mit_des_key_sched(k, schedule));
+    return (mit_des_key_sched(k, schedule));
 }
index 2dd6cb103c2382de948b8543cece8dd8ffb58ffc..f04f25a72ed5d927badc920969ef87a161929200 100644 (file)
@@ -52,8 +52,8 @@
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
-
-#include "des425.h"
+#include "des_int.h"
+#include "des.h"
 
 /*
  * des_init_random_number_generator:
@@ -76,7 +76,7 @@ des_init_random_number_generator(key)
     krb5_data seed;
 
     seed.length = sizeof(key);
-    seed.data = key;
+    seed.data = (char *) key;
 
     if (krb5_c_random_seed(/* XXX */ 0, &seed))
        /* XXX */ abort();
index 2dc51f2c42716e38e91f7d28221a0115630bc50d..cdf81c3f7951f8eb738af39718ba28ac16ee2962 100644 (file)
 #include <stdio.h>
 #include <errno.h>
 
-#include "des425.h"
+#include "des_int.h"
+#include "des.h"
 
 /* Definitions for byte swapping */
 
index 10e1a3c4e17f689b9a4ebe8ef73be0d15e266457..f367fc8175dff00dfd9e5e3c7f3f62684eca445e 100644 (file)
@@ -52,7 +52,8 @@
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  */
 
-#include "des425.h"
+#include "des_int.h"
+#include "des.h"
 
 /* random_key */
 int
index f09020161713ba4d5cc45f18b85537747c971cd4..31bbd97634adba34e62aa0555575131cde558152 100644 (file)
@@ -32,7 +32,8 @@
 
 #if !defined(_MSDOS)&&!defined(_WIN32)
 
-#include "des425.h"
+#include "des_int.h"
+#include "des.h"
 #include <stdio.h>
 #include <errno.h>
 #include <signal.h>
@@ -43,6 +44,9 @@
 
 static jmp_buf pwd_jump;
 
+static krb5_sigtype intr_routine (int);
+krb5_error_code des_read_pw_string (char *, int, char *, char *);
+
 static krb5_sigtype
 intr_routine(signo)
     int signo;
@@ -177,7 +181,7 @@ des_read_password/*_v4_compat_crock*/(k,prompt,verify)
                            prompt, verify ? prompt2 : 0);
     
     if (ok == 0)
-       des_string_to_key(key_string, k);
+       des_string_to_key(key_string, *k);
 
     memset(key_string, 0, sizeof (key_string));
     return ok;
index 7bf75fb8d75cd48fe8f740ab12d2aa653d2ea19c..4489471250101cdd92d02b88d300ba401be755d7 100644 (file)
 
 #include <stdio.h>
 #include <string.h>
-#include "des425.h"
-/*   #include "des_internal.h" */
+#include "des_int.h"
+#include "des.h"
 
 extern int mit_des_debug;
 
 /*
- * convert an arbitrary length string to a DES key
+ * Convert an arbitrary length string to a DES key.
+ */
+
+/*
+ * For krb5, a change was made to this algorithm: When each key is
+ * generated, after fixing parity, a check for weak and semi-weak keys
+ * is done.  If the key is weak or semi-weak, we XOR the last byte
+ * with 0xF0.  (In the case of the intermediate key, the weakness is
+ * probably irrelevant, but there it is.)  The odds that this will
+ * generate a different key for a random input string are pretty low,
+ * but non-zero.  So we need this different function for krb4 to use.
  */
 KRB5_DLLIMP int KRB5_CALLCONV
 des_string_to_key(str,key)
@@ -60,11 +70,11 @@ des_string_to_key(str,key)
     register unsigned temp;
     register int j;
     register long i, length;
-    static unsigned char *k_p;
-    static int forward;
+    unsigned char *k_p;
+    int forward;
     register char *p_char;
-    static char k_char[64];
-    static mit_des_key_schedule key_sked;
+    char k_char[64];
+    mit_des_key_schedule key_sked;
     extern void des_cbc_cksum();
 
     in_str = str;
@@ -97,7 +107,7 @@ des_string_to_key(str,key)
            else
                *--p_char ^= (int) temp & 01;
            temp = temp >> 1;
-       } while (--j > 0);
+       }
 
        /* check and flip direction */
        if ((i%8) == 0)
@@ -119,7 +129,7 @@ des_string_to_key(str,key)
     des_fixup_key_parity(key);
 
     /* Now one-way encrypt it with the folded key */
-    (void) des_key_sched(key,key_sked);
+    (void) des_key_sched(key, *(Key_schedule *)&key_sked);
     (void) des_cbc_cksum((des_cblock *)in_str,key,length,key_sked,key);
     /* erase key_sked */
     memset((char *)key_sked, 0,sizeof(key_sked));
index 5078d5a958e5c66bc8e798a016702fce2c0cd6cd..8756787a1ab629e7a0c79aa72671b34f1a3d5b44 100644 (file)
@@ -29,7 +29,7 @@
  */
 
 
-#include "des425.h"
+#include "des.h"
 #include "des_int.h"
 
 #ifdef DEBUG
index 373a5a49e328863dab6dd976260365bc64206f3f..421a5558481786dce173348c15fe7d1a8d152c2c 100644 (file)
@@ -27,7 +27,8 @@
 
 #include <stdio.h>
 #include <errno.h>
-#include "des425.h"
+#include "des_int.h"
+#include "des.h"
 
 extern char *errmsg();
 extern int errno;
@@ -79,7 +80,8 @@ main(argc,argv)
 
     for (i = 0; i < 3; i++) {
        int wrong = 0, j;
-       des_quad_cksum (tests[i].text, out, 64L, 4, default_key);
+       des_quad_cksum (tests[i].text, out, 64L, 4,
+                       (mit_des_cblock *) &default_key);
        if (tests[i].text[0] == 2)
            printf ("quad_cksum(<binary blob 1>) = {");
        else
index 6f0330269f9e23cb4002e67a0ef5d8142d939eef..54545fcf0aa5f0373568195c7277a544146cefe0 100644 (file)
@@ -13,7 +13,8 @@
 
 /* Application include files */
 #include "k5-int.h"
-#include "des425.h"
+#include "des_int.h"
+#include "des.h"
 
 void des_cblock_print_file(x, fp)
     des_cblock *x;
index abce4584979adc324897c03011522aa8a0729298..cb141b06c3051debcf8bb821ccfa8b74c311bed3 100644 (file)
 
 #include <stdio.h>
 #include <errno.h>
-#include "des425.h"
+#include "des_int.h"
+#include "des.h"
 
 extern char *errmsg();
 extern int errno;
-extern int des_string_to_key();
-extern int des_key_sched();
-extern int des_ecb_encrypt();
-extern int des_cbc_encrypt();
 char *progname;
 int nflag = 2;
 int vflag;
@@ -96,18 +93,22 @@ 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?)
  */
 
+void do_encrypt (unsigned char *, unsigned char *);
+void do_decrypt (unsigned char *, unsigned char *);
+
+int
 main(argc,argv)
     int argc;
     char *argv[];
 {
     /* Local Declarations */
-    long in_length;
+    unsigned long in_length;
 
     progname=argv[0];          /* salt away invoking program */
 
@@ -240,7 +241,7 @@ main(argc,argv)
 
     printf("ACTUAL CBC\n\tclear \"%s\"\n",input);
     in_length = strlen((char *) input);
-    des_cbc_encrypt(input,cipher_text,(long) in_length,KS,ivec,1);
+    des_cbc_encrypt(input,cipher_text, in_length,KS,ivec,1);
     printf("\tciphertext = (low to high bytes)\n");
     for (i = 0; i <= 7; i++) {
        printf("\t\t");
@@ -249,10 +250,10 @@ main(argc,argv)
        }
        printf("\n");
     }
-    des_cbc_encrypt(cipher_text,clear_text,(long) in_length,KS,ivec,0);
+    des_cbc_encrypt(cipher_text,clear_text,in_length,KS,ivec,0);
     printf("\tdecrypted clear_text = \"%s\"\n",clear_text);
 
-    if ( memcmp((char *)cipher_text, (char *)cipher3, in_length) ) {
+    if ( memcmp(cipher_text, cipher3, (size_t) in_length) ) {
        printf("verify: error in CBC encryption\n");
        exit(-1);
     }
@@ -265,7 +266,7 @@ main(argc,argv)
     printf("\tchecksum\t58 d2 e7 7e 86 06 27 33, ");
     printf("or some part thereof\n");
     input = clear_text2;
-    des_cbc_cksum(input,cipher_text,(long) strlen((char *) input),KS,ivec,1);
+    des_cbc_cksum(input,cipher_text,(long) strlen((char *) input),KS,ivec);
     printf("ACTUAL CBC checksum\n");
     printf("\t\tencrypted cksum = (low to high bytes)\n\t\t");
     for (j = 0; j<=7; j++)
@@ -280,37 +281,17 @@ main(argc,argv)
     exit(0);
 }
 
-flip(array)
-    char *array;
-{
-    register old,new,i,j;
-    /* 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++) {
-           if (old & 01)
-               new = new | 01;
-           if (j < 7) {
-               old = old >> 1;
-               new = new << 1;
-           }
-       }
-       *array = new;
-       array++;
-    }
-}
-
+void
 do_encrypt(in,out)
-    char *in;
-    char *out;
+    unsigned char *in;
+    unsigned char *out;
 {
     for (i =1; i<=nflag; i++) {
        des_ecb_encrypt(in,out,KS,1);
        if (des_debug) {
            printf("\nclear %s\n",in);
            for (j = 0; j<=7; j++)
-               printf("%02 X ",in[j] & 0xff);
+               printf("%02X ",in[j] & 0xff);
            printf("\tcipher ");
            for (j = 0; j<=7; j++)
                printf("%02X ",out[j] & 0xff);
@@ -318,9 +299,10 @@ do_encrypt(in,out)
     }
 }
 
+void
 do_decrypt(in,out)
-    char *out;
-    char *in;
+    unsigned char *out;
+    unsigned char *in;
     /* try to invert it */
 {
     for (i =1; i<=nflag; i++) {
index 6ef232ee05ec4b535af208d56f5a9316b5033ba3..d9f7c37fc0e4bb3a0f0d40a14bb261b3882c4652 100644 (file)
@@ -32,8 +32,8 @@
  * Originally written 8/85 by Steve Miller, MIT Project Athena.
  */
 
-
-#include "des425.h"
+#include "des_int.h"
+#include "des.h"
 
 /*
  * mit_des_is_weak_key: returns true iff key is a [semi-]weak des key.