static const uchar SMB_LMHash_Magic[8] =
{ 'K', 'G', 'S', '!', '@', '#', '$', '%' };
uchar *smb_LMHash( const uchar *password, uchar *result )
/* ---------------------------------------------------- **
* Generate an LM Hash.
* password - pointer to the raw password string.
* result - pointer to at least 16 bytes of memory
* into which the LM Hash will be written.
* Returns a pointer to the LM Hash (== result).
* ---------------------------------------------------- **
*/
{
uchar tmp_pass[14] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
uchar *hash;
uchar K1[7];
uchar K2[7];
int i;
/* Copy at most 14 bytes of password to tmp_pass.
* If the string is shorter, the unused bytes will
* be nul-filled.
*/
(void)strncpy( tmp_pass, password, 14 );
/* Convert to upper-case.
*/
for( i = 0; i < 14; i++ )
tmp_pass[i] = toupper( tmp_pass[i] );
/* Split tmp_pass into two 7-byte keys.
*/
(void)memcpy( K1, tmp_pass, 7 );
(void)memcpy( K2, (tmp_pass + 7), 7 );
/* Use the keys to encrypt the 'magic' string.
* Place each encrypted half into the result
* buffer.
*/
hash = DES( K1, SMB_LMHash_Magic );
(void)memcpy( result, hash, 8 );
hash = DES( K2, SMB_LMHash_Magic );
(void)memcpy( (result + 8), hash, 8 );
/* Return a pointer to the result.
*/
return( result );
} /* smb_LMHash */
|
$Revision: 1.4 $ $Date: 2003/01/04 18:55:20 $ |
Copyright © 2002-2003 Christopher R. Hertel Released under the terms of the LGPL |