www.pudn.com > sslref30.zip > str2key.c


/* str2key.c */ 
/* Copyright (C) 1993 Eric Young - see README for more details */ 
#include "des_locl.h" 
 
extern int des_check_key; 
 
int des_string_to_key(str,key) 
char *str; 
des_cblock *key; 
    { 
    des_key_schedule ks; 
    int i,length; 
    register unsigned char j; 
 
    bzero(key,8); 
    length=strlen(str); 
#ifdef OLD_STR_TO_KEY 
    for (i=0; i>4)&0x0f); 
            j=((j<<2)&0xcc)|((j>>2)&0x33); 
            j=((j<<1)&0xaa)|((j>>1)&0x55); 
            (*key)[7-(i%8)]^=j; 
            } 
        } 
#endif 
    des_set_odd_parity((des_cblock *)key); 
    i=des_check_key; 
    des_check_key=0; 
    des_set_key((des_cblock *)key,ks); 
    des_check_key=i; 
    des_cbc_cksum((des_cblock *)str,(des_cblock *)key,(long)length,ks, 
        (des_cblock *)key); 
    bzero(ks,sizeof(ks)); 
    des_set_odd_parity((des_cblock *)key); 
    return(0); 
    } 
 
int des_string_to_2keys(str,key1,key2) 
char *str; 
des_cblock *key1,*key2; 
    { 
    des_key_schedule ks; 
    int i,length; 
    register unsigned char j; 
 
    bzero(key1,8); 
    bzero(key2,8); 
    length=strlen(str); 
#ifdef OLD_STR_TO_KEY 
    if (length <= 8) 
        { 
        for (i=0; i>4)&0x0f); 
            j=((j<<2)&0xcc)|((j>>2)&0x33); 
            j=((j<<1)&0xaa)|((j>>1)&0x55); 
            if ((i%16) < 8) 
                (*key1)[7-(i%8)]^=j; 
            else 
                (*key2)[7-(i%8)]^=j; 
            } 
        } 
    if (length <= 8) bcopy(key1,key2,8); 
#endif 
    des_set_odd_parity((des_cblock *)key1); 
    des_set_odd_parity((des_cblock *)key2); 
    i=des_check_key; 
    des_check_key=0; 
    des_set_key((des_cblock *)key1,ks); 
    des_cbc_cksum((des_cblock *)str,(des_cblock *)key1,(long)length,ks, 
        (des_cblock *)key1); 
    des_set_key((des_cblock *)key2,ks); 
    des_cbc_cksum((des_cblock *)str,(des_cblock *)key2,(long)length,ks, 
        (des_cblock *)key2); 
    des_check_key=i; 
    bzero(ks,sizeof(ks)); 
    des_set_odd_parity(key1); 
    des_set_odd_parity(key2); 
    return(0); 
    }