* $Source: /mit/kerberos/src/lib/des/RCS/random_key.c,v $
* Copyright 1988 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
static char rcsid_random_key_c
[] =
"$Header: random_key.c,v 4.8 89/01/21 16:50:39 jtkohl Exp $";
#include <mit-copyright.h>
#include "des_internal.h"
extern int des_debug_print();
* create a random des key; should force odd parity per byte;
* parity is bits 8,16,...64 in des order, implies 0, 8, 16, ...
register unsigned int temp
;
register unsigned char *c
= (unsigned char *) key
;
unsigned long *k
= (unsigned long *) key
;
long gethostid(), random();
static struct timeval time
;
(void) gettimeofday(&time
,(struct timezone
*)0);
srandom(time
.tv_usec
^ time
.tv_sec
^ p
^ n
++);
/* make each byte parity odd */
for (i
= 0; i
<= 7; i
++) {
temp
= (unsigned int) *c
;
/* ignore bit 0, lsb, it will be parity (on vax) */
/* should do this with a table lookup */
for (j
= 0; j
<= 6; j
++) {
/* set odd parity in lsb */
dont know how to
do random numbers
for this machine
;