diff options
Diffstat (limited to 'eBones/des/rand_key.c')
-rw-r--r-- | eBones/des/rand_key.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/eBones/des/rand_key.c b/eBones/des/rand_key.c new file mode 100644 index 0000000..d8d2345 --- /dev/null +++ b/eBones/des/rand_key.c @@ -0,0 +1,45 @@ +/* rand_key.c */ +/* Copyright (C) 1993 Eric Young - see README for more details */ + +/*- + * $Id: rand_key.c,v 1.2 1994/07/19 19:22:04 g89r4222 Exp $ + */ + +#include "des_locl.h" + +int des_random_key(ret) +des_cblock ret; + { + des_key_schedule ks; + static unsigned long c=0; + static unsigned short pid=0; + static des_cblock data={0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef}; + des_cblock key; + unsigned char *p; + unsigned long t; + +#ifdef MSDOS + pid=1; +#else + if (!pid) pid=getpid(); +#endif + p=key; + t=(unsigned long)time(NULL); + l2c(t,p); + t=(unsigned long)((pid)|((c++)<<16)); + l2c(t,p); + + des_set_odd_parity((des_cblock *)data); + des_set__key((des_cblock *)data,ks); + des_cbc_cksum((des_cblock *)key,(des_cblock *)key, + (long)sizeof(key),ks,(des_cblock *)data); + des_set_odd_parity((des_cblock *)key); + des_cbc_cksum((des_cblock *)key,(des_cblock *)key, + (long)sizeof(key),ks,(des_cblock *)data); + + bcopy(key,ret,sizeof(key)); + bzero(key,sizeof(key)); + bzero(ks,sizeof(ks)); + t=0; + return(0); + } |