Blame winpr/libwinpr/crypto/test/TestCryptoProtectMemory.c

Packit Service fa4841
Packit Service fa4841
#include <winpr/crt.h>
Packit Service fa4841
#include <winpr/print.h>
Packit Service fa4841
#include <winpr/crypto.h>
Packit Service fa4841
#include <winpr/ssl.h>
Packit Service fa4841
#include <winpr/wlog.h>
Packit Service fa4841
Packit Service fa4841
static const char* SECRET_PASSWORD_TEST = "MySecretPassword123!";
Packit Service fa4841
Packit Service fa4841
int TestCryptoProtectMemory(int argc, char* argv[])
Packit Service fa4841
{
Packit Service fa4841
	int cbPlainText;
Packit Service fa4841
	int cbCipherText;
Packit Service fa4841
	const char* pPlainText;
Packit Service fa4841
	BYTE* pCipherText;
Packit Service fa4841
	pPlainText = SECRET_PASSWORD_TEST;
Packit Service fa4841
	cbPlainText = strlen(pPlainText) + 1;
Packit Service fa4841
	cbCipherText = cbPlainText +
Packit Service fa4841
	               (CRYPTPROTECTMEMORY_BLOCK_SIZE - (cbPlainText % CRYPTPROTECTMEMORY_BLOCK_SIZE));
Packit Service fa4841
	printf("cbPlainText: %d cbCipherText: %d\n", cbPlainText, cbCipherText);
Packit Service fa4841
	pCipherText = (BYTE*)malloc(cbCipherText);
Packit Service fa4841
	if (!pCipherText)
Packit Service fa4841
	{
Packit Service fa4841
		printf("Unable to allocate memory\n");
Packit Service fa4841
		return -1;
Packit Service fa4841
	}
Packit Service fa4841
	CopyMemory(pCipherText, pPlainText, cbPlainText);
Packit Service fa4841
	ZeroMemory(&pCipherText[cbPlainText], (cbCipherText - cbPlainText));
Packit Service fa4841
	winpr_InitializeSSL(WINPR_SSL_INIT_DEFAULT);
Packit Service fa4841
Packit Service fa4841
	if (!CryptProtectMemory(pCipherText, cbCipherText, CRYPTPROTECTMEMORY_SAME_PROCESS))
Packit Service fa4841
	{
Packit Service fa4841
		printf("CryptProtectMemory failure\n");
Packit Service fa4841
		return -1;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	printf("PlainText: %s (cbPlainText = %d, cbCipherText = %d)\n", pPlainText, cbPlainText,
Packit Service fa4841
	       cbCipherText);
Packit Service fa4841
	winpr_HexDump("crypto.test", WLOG_DEBUG, pCipherText, cbCipherText);
Packit Service fa4841
Packit Service fa4841
	if (!CryptUnprotectMemory(pCipherText, cbCipherText, CRYPTPROTECTMEMORY_SAME_PROCESS))
Packit Service fa4841
	{
Packit Service fa4841
		printf("CryptUnprotectMemory failure\n");
Packit Service fa4841
		return -1;
Packit Service fa4841
	}
Packit Service fa4841
Packit Service fa4841
	printf("Decrypted CipherText: %s\n", pCipherText);
Packit Service fa4841
	SecureZeroMemory(pCipherText, cbCipherText);
Packit Service fa4841
	free(pCipherText);
Packit Service fa4841
	return 0;
Packit Service fa4841
}