Example #1
0
static BOOL test_crypto_hash_md5(void)
{
	BYTE hash[WINPR_MD5_DIGEST_LENGTH];
	WINPR_MD5_CTX ctx;

	if (!winpr_MD5_Init(&ctx))
		return FALSE;
	if (!winpr_MD5_Update(&ctx, (BYTE*) TEST_MD5_DATA, strlen(TEST_MD5_DATA)))
		return FALSE;
	if (!winpr_MD5_Final(&ctx, hash, sizeof(hash)))
		return FALSE;

	if (memcmp(hash, TEST_MD5_HASH, WINPR_MD5_DIGEST_LENGTH) != 0)
	{
		char* actual;
		char* expected;

		actual = winpr_BinToHexString(hash, WINPR_MD5_DIGEST_LENGTH, FALSE);
		expected = winpr_BinToHexString(TEST_MD5_HASH, WINPR_MD5_DIGEST_LENGTH, FALSE);

		fprintf(stderr, "unexpected MD5 hash: Actual: %s Expected: %s\n", actual, expected);

		free(actual);
		free(expected);

		return FALSE;
	}

	return TRUE;
}
Example #2
0
void winpr_MD5(const BYTE* input, size_t ilen, BYTE* output)
{
	WINPR_MD5_CTX ctx;
	winpr_MD5_Init(&ctx);
	winpr_MD5_Update(&ctx, input, ilen);
	winpr_MD5_Final(&ctx, output);
}
Example #3
0
int ntlm_generate_sealing_key(BYTE* exported_session_key, PSecBuffer seal_magic, BYTE* sealing_key)
{
	BYTE* p;
	WINPR_MD5_CTX md5;
	SecBuffer buffer;

	if (!sspi_SecBufferAlloc(&buffer, WINPR_MD5_DIGEST_LENGTH + seal_magic->cbBuffer))
		return -1;

	p = (BYTE*) buffer.pvBuffer;
	/* Concatenate ExportedSessionKey with seal magic */
	CopyMemory(p, exported_session_key, WINPR_MD5_DIGEST_LENGTH);
	CopyMemory(&p[WINPR_MD5_DIGEST_LENGTH], seal_magic->pvBuffer, seal_magic->cbBuffer);
	winpr_MD5_Init(&md5);
	winpr_MD5_Update(&md5, buffer.pvBuffer, buffer.cbBuffer);
	winpr_MD5_Final(&md5, sealing_key, WINPR_MD5_DIGEST_LENGTH);
	sspi_SecBufferFree(&buffer);
	return 1;
}
Example #4
0
int ntlm_generate_signing_key(BYTE* exported_session_key, PSecBuffer sign_magic, BYTE* signing_key)
{
	int length;
	BYTE* value;
	WINPR_MD5_CTX md5;

	length = WINPR_MD5_DIGEST_LENGTH + sign_magic->cbBuffer;
	value = (BYTE*) malloc(length);

	if (!value)
		return -1;

	/* Concatenate ExportedSessionKey with sign magic */
	CopyMemory(value, exported_session_key, WINPR_MD5_DIGEST_LENGTH);
	CopyMemory(&value[WINPR_MD5_DIGEST_LENGTH], sign_magic->pvBuffer, sign_magic->cbBuffer);
	winpr_MD5_Init(&md5);
	winpr_MD5_Update(&md5, value, length);
	winpr_MD5_Final(&md5, signing_key, WINPR_MD5_DIGEST_LENGTH);
	free(value);
	return 1;
}