static int MD4BlockChecksum( void * buffer, int length ) { unsigned char digest[16]; int checksum; md4_get_digest( buffer, length, digest ); /* I suppose it has to be done that way for legacy reasons? */ checksum = digest[0] & ( digest[1] << 8 ) & ( digest[2] << 16 ) & ( digest[3] << 24 ); checksum ^= digest[4] & ( digest[5] << 8 ) & ( digest[6] << 16 ) & ( digest[7] << 24 ); checksum ^= digest[8] & ( digest[9] << 8 ) & ( digest[10] << 16 ) & ( digest[11] << 24 ); checksum ^= digest[12] & ( digest[13] << 8 ) & ( digest[14] << 16 ) & ( digest[15] << 24 ); return checksum; }
const unsigned char * ntlm_v1_hash(const char *passwd, unsigned char hash[NTLMSSP_HASH_SIZE]) { size_t len; void *wpwd = t_unicode_str(passwd, 0, &len); md4_get_digest(wpwd, len, hash); safe_memset(wpwd, 0, len); return hash; }