From ddec4f25357d056b01aa539cf106ffdee78b8692 Mon Sep 17 00:00:00 2001 From: CSRG Date: Mon, 1 Jan 1990 19:47:04 -0800 Subject: [PATCH] BSD 4_4_Lite1 development Work on file usr/src/kerberosIV/des/string_to_key.c Work on file Domestic/src/kerberosIV/des/string_to_key.c Synthesized-from: CSRG/cd2/4.4BSD-Lite1 --- Domestic/src/kerberosIV/des/string_to_key.c | 124 ++++++++++++++++++++ usr/src/kerberosIV/des/string_to_key.c | 124 ++++++++++++++++++++ 2 files changed, 248 insertions(+) create mode 100644 Domestic/src/kerberosIV/des/string_to_key.c create mode 100644 usr/src/kerberosIV/des/string_to_key.c diff --git a/Domestic/src/kerberosIV/des/string_to_key.c b/Domestic/src/kerberosIV/des/string_to_key.c new file mode 100644 index 0000000000..6e70280c63 --- /dev/null +++ b/Domestic/src/kerberosIV/des/string_to_key.c @@ -0,0 +1,124 @@ +/* + * $Source: /afs/athena.mit.edu/astaff/project/kerberos/src/lib/des/RCS/string_to_key.c,v $ + * $Author: jtkohl $ + * + * Copyright 1985, 1986, 1987, 1988, 1989 by the Massachusetts Institute + * of Technology. + * + * For copying and distribution information, please see the file + * . + * + * 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. The cleartext and ciphertext should be in host order. + * + * These routines form the library interface to the DES facilities. + * + * spm 8/85 MIT project athena + */ + +#ifndef lint +static char rcsid_string_to_key_c[] = +"$Id: string_to_key.c,v 4.11 90/01/02 13:46:38 jtkohl Exp $"; +#endif lint + +#include +#include +#include +#include "des_internal.h" + +extern int des_debug; +extern int des_debug_print(); +extern void des_fixup_key_parity(); + +/* + * convert an arbitrary length string to a DES key + */ +int +des_string_to_key(str,key) + char *str; + register des_cblock *key; +{ + register char *in_str; + register unsigned temp,i; + register int j; + register long length; + static unsigned char *k_p; + static int forward; + register char *p_char; + static char k_char[64]; + static des_key_schedule key_sked; + extern unsigned long des_cbc_cksum(); + + in_str = str; + forward = 1; + p_char = k_char; + length = strlen(str); + + /* init key array for bits */ + bzero(k_char,sizeof(k_char)); + +#ifdef DEBUG + if (des_debug) + fprintf(stdout, + "\n\ninput str length = %d string = %s\nstring = 0x ", + length,str); +#endif + + /* get next 8 bytes, strip parity, xor */ + for (i = 1; i <= length; i++) { + /* get next input key byte */ + temp = (unsigned int) *str++; +#ifdef DEBUG + if (des_debug) + fprintf(stdout,"%02x ",temp & 0xff); +#endif + /* loop through bits within byte, ignore parity */ + for (j = 0; j <= 6; j++) { + if (forward) + *p_char++ ^= (int) temp & 01; + else + *--p_char ^= (int) temp & 01; + temp = temp >> 1; + } while (--j > 0); + + /* check and flip direction */ + if ((i%8) == 0) + forward = !forward; + } + + /* now stuff into the key des_cblock, and force odd parity */ + p_char = k_char; + k_p = (unsigned char *) key; + + for (i = 0; i <= 7; i++) { + temp = 0; + for (j = 0; j <= 6; j++) + temp |= *p_char++ << (1+j); + *k_p++ = (unsigned char) temp; + } + + /* fix key parity */ + des_fixup_key_parity(key); + + /* Now one-way encrypt it with the folded key */ + (void) des_key_sched(key,key_sked); + (void) des_cbc_cksum((des_cblock *)in_str,key,length,key_sked,key); + /* erase key_sked */ + bzero((char *)key_sked,sizeof(key_sked)); + + /* now fix up key parity again */ + des_fixup_key_parity(key); + + if (des_debug) + fprintf(stdout, + "\nResulting string_to_key = 0x%x 0x%x\n", + *((unsigned long *) key), + *((unsigned long *) key+1)); +} diff --git a/usr/src/kerberosIV/des/string_to_key.c b/usr/src/kerberosIV/des/string_to_key.c new file mode 100644 index 0000000000..6e70280c63 --- /dev/null +++ b/usr/src/kerberosIV/des/string_to_key.c @@ -0,0 +1,124 @@ +/* + * $Source: /afs/athena.mit.edu/astaff/project/kerberos/src/lib/des/RCS/string_to_key.c,v $ + * $Author: jtkohl $ + * + * Copyright 1985, 1986, 1987, 1988, 1989 by the Massachusetts Institute + * of Technology. + * + * For copying and distribution information, please see the file + * . + * + * 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. The cleartext and ciphertext should be in host order. + * + * These routines form the library interface to the DES facilities. + * + * spm 8/85 MIT project athena + */ + +#ifndef lint +static char rcsid_string_to_key_c[] = +"$Id: string_to_key.c,v 4.11 90/01/02 13:46:38 jtkohl Exp $"; +#endif lint + +#include +#include +#include +#include "des_internal.h" + +extern int des_debug; +extern int des_debug_print(); +extern void des_fixup_key_parity(); + +/* + * convert an arbitrary length string to a DES key + */ +int +des_string_to_key(str,key) + char *str; + register des_cblock *key; +{ + register char *in_str; + register unsigned temp,i; + register int j; + register long length; + static unsigned char *k_p; + static int forward; + register char *p_char; + static char k_char[64]; + static des_key_schedule key_sked; + extern unsigned long des_cbc_cksum(); + + in_str = str; + forward = 1; + p_char = k_char; + length = strlen(str); + + /* init key array for bits */ + bzero(k_char,sizeof(k_char)); + +#ifdef DEBUG + if (des_debug) + fprintf(stdout, + "\n\ninput str length = %d string = %s\nstring = 0x ", + length,str); +#endif + + /* get next 8 bytes, strip parity, xor */ + for (i = 1; i <= length; i++) { + /* get next input key byte */ + temp = (unsigned int) *str++; +#ifdef DEBUG + if (des_debug) + fprintf(stdout,"%02x ",temp & 0xff); +#endif + /* loop through bits within byte, ignore parity */ + for (j = 0; j <= 6; j++) { + if (forward) + *p_char++ ^= (int) temp & 01; + else + *--p_char ^= (int) temp & 01; + temp = temp >> 1; + } while (--j > 0); + + /* check and flip direction */ + if ((i%8) == 0) + forward = !forward; + } + + /* now stuff into the key des_cblock, and force odd parity */ + p_char = k_char; + k_p = (unsigned char *) key; + + for (i = 0; i <= 7; i++) { + temp = 0; + for (j = 0; j <= 6; j++) + temp |= *p_char++ << (1+j); + *k_p++ = (unsigned char) temp; + } + + /* fix key parity */ + des_fixup_key_parity(key); + + /* Now one-way encrypt it with the folded key */ + (void) des_key_sched(key,key_sked); + (void) des_cbc_cksum((des_cblock *)in_str,key,length,key_sked,key); + /* erase key_sked */ + bzero((char *)key_sked,sizeof(key_sked)); + + /* now fix up key parity again */ + des_fixup_key_parity(key); + + if (des_debug) + fprintf(stdout, + "\nResulting string_to_key = 0x%x 0x%x\n", + *((unsigned long *) key), + *((unsigned long *) key+1)); +} -- 2.20.1