|
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 |
}
|