uchar *smb_LMResponse( const uchar *LMHash, uchar *chal, uchar *resp ) /* ---------------------------------------------------- ** * Generate an LM Response * LMHash - pointer to the LM Hash of the password. * chal - Pointer to the challenge. * resp - pointer to at least 24 bytes of memory * into which the LM response will be written. * Returns a pointer to the LM response (== resp). * ---------------------------------------------------- ** */ { uchar P21[21]; uchar K[7]; uchar *result; int i; /* Copy the LM Hash to P21 and pad with nuls to 21 bytes. */ (void)memcpy( P21, LMHash, 16 ); (void)memset( (P21 + 16), 0, 5 ); /* A compact method of splitting P21 into three keys, * generating a DES encryption of the challenge for * each key, and combining the results. * (i * 7) will give 0, 7, 14 and * (i * 8) will give 0, 8, 16. */ for( i = 0; i < 3; i++ ) { (void)memcpy( K, (P21 + (i * 7)) , 7 ); result = DES( K, chal ); (void)memcpy( (resp + (i * 8)), result, 8 ); } /* Return the response. */ return( resp ); } /* smb_LMResponse */
$Revision: 1.3 $ $Date: 2003/01/04 18:55:20 $ |
Copyright © 2002-2003 Christopher R. Hertel Released under the terms of the LGPL |