Annotation of 43BSDReno/kerberosIV/des/random_key.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * $Source: /mit/kerberos/src/lib/des/RCS/random_key.c,v $
        !             3:  * $Author: jtkohl $
        !             4:  *
        !             5:  * Copyright 1988 by the Massachusetts Institute of Technology.
        !             6:  *
        !             7:  * For copying and distribution information, please see the file
        !             8:  * <mit-copyright.h>.
        !             9:  *
        !            10:  * These routines perform encryption and decryption using the DES
        !            11:  * private key algorithm, or else a subset of it-- fewer inner loops.
        !            12:  * ( AUTH_DES_ITER defaults to 16, may be less)
        !            13:  *
        !            14:  * Under U.S. law, this software may not be exported outside the US
        !            15:  * without license from the U.S. Commerce department.
        !            16:  *
        !            17:  * The key schedule is passed as an arg, as well as the cleartext or
        !            18:  * ciphertext.  The cleartext and ciphertext should be in host order.
        !            19:  *
        !            20:  * These routines form the library interface to the des facilities.
        !            21:  *
        !            22:  * spm 8/85    MIT project athena
        !            23:  */
        !            24: 
        !            25: #ifndef        lint
        !            26: static char rcsid_random_key_c[] =
        !            27: "$Header: random_key.c,v 4.8 89/01/21 16:50:39 jtkohl Exp $";
        !            28: #endif lint
        !            29: 
        !            30: #include <mit-copyright.h>
        !            31: #include <stdio.h>
        !            32: 
        !            33: #include <des.h>
        !            34: #include "des_internal.h"
        !            35: 
        !            36: #ifdef BSDUNIX
        !            37: #include <sys/time.h>
        !            38: #endif
        !            39: 
        !            40: extern int des_debug;
        !            41: extern int des_debug_print();
        !            42: 
        !            43: /* random_key */
        !            44: int
        !            45: des_random_key(key)
        !            46:     des_cblock *key;
        !            47: {
        !            48:     /*
        !            49:      * create a random des key; should force odd parity per byte;
        !            50:      * parity is bits 8,16,...64 in des order, implies 0, 8, 16, ...
        !            51:      * vax order
        !            52:      */
        !            53: 
        !            54:     register unsigned int temp;
        !            55:     register int odd;
        !            56:     register unsigned char *c = (unsigned char *) key;
        !            57:     unsigned long *k = (unsigned long *) key;
        !            58:     static long p = 0;
        !            59:     static long n = 0;
        !            60:     long gethostid(), random();
        !            61: 
        !            62:     int i,j;
        !            63: 
        !            64: #ifdef BSDUNIX
        !            65:     static struct timeval time;
        !            66: 
        !            67:     if (!p) {
        !            68:        p = getpid();
        !            69:        p ^= gethostid();
        !            70:     }
        !            71: 
        !            72:     (void) gettimeofday(&time,(struct timezone *)0);
        !            73:     /* randomize start */
        !            74:     srandom(time.tv_usec ^ time.tv_sec ^ p ^ n++);
        !            75: 
        !            76:     *k++ = random();
        !            77:     *k = random();
        !            78: 
        !            79:     /* make each byte parity odd */
        !            80:     for (i = 0; i <= 7; i++) {
        !            81:        odd = 0;
        !            82:        temp = (unsigned int) *c;
        !            83:        /* ignore bit 0, lsb,  it will be parity (on vax) */
        !            84:        /* should do this with a table lookup */
        !            85:        for (j = 0; j <= 6; j++) {
        !            86:            temp = temp >> 1;
        !            87:            odd ^= temp & 01;
        !            88:        }
        !            89:        /* set odd parity in lsb */
        !            90:        if (!odd)
        !            91:            *c |= 1;
        !            92:        else
        !            93:            *c &= ~1;
        !            94:        c++;
        !            95:     }
        !            96: 
        !            97:     /* **** */
        !            98: #else
        !            99:     dont know how to do random numbers for this machine;
        !           100: #endif
        !           101: 
        !           102:     return 0;
        !           103: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.