1 krisbash 1.1 #include "encrypt.h"
2
3 #if defined(_MSC_VER)
4 #include <wincrypt.h>
5 #endif
6
7 _Success_(return == 0)
8 int EncryptData(
9 _In_bytecount_(inbufferLength) const void *inbuffer,
10 PAL_Uint32 inbufferLength,
11 _Out_writes_bytes_to_opt_(outbufferLength, *outbufferLengthNeeded) void *outbuffer,
12 PAL_Uint32 outbufferLength,
13 _When_(return == -2, _Out_) _When_(return == 0, _Out_) PAL_Uint32 *outbufferLengthNeeded)
14 {
15 PAL_Uint32 realOutBufferNeeded = inbufferLength;
16
17 if (outbufferLengthNeeded == NULL)
18 return -1;
19
20 #if defined (_MSC_VER)
21 if (inbufferLength%CRYPTPROTECTMEMORY_BLOCK_SIZE)
22 krisbash 1.1 {
23 realOutBufferNeeded += (CRYPTPROTECTMEMORY_BLOCK_SIZE-(inbufferLength%CRYPTPROTECTMEMORY_BLOCK_SIZE));
24 }
25 #endif
26
27 *outbufferLengthNeeded = realOutBufferNeeded;
28
29 if (inbuffer == NULL)
30 return -1;
31
32 if (outbufferLength < realOutBufferNeeded)
33 return -2;
34
35 if (outbuffer == NULL)
36 return -1;
37
38 memcpy(outbuffer, inbuffer, inbufferLength);
39
40 #if defined(_MSC_VER)
41 if (!CryptProtectMemory(outbuffer, realOutBufferNeeded, CRYPTPROTECTMEMORY_SAME_PROCESS))
42 {
43 krisbash 1.1 //printf("error = %u\n", GetLastError());
44 SecureZeroMemory(outbuffer, outbufferLength);
45 return -1;
46 }
47 #endif
48 return 0;
49 }
50
51
52
53 _Success_(return == 0)
54 int DecryptData(
55 _In_bytecount_(inbufferLength) const void *inbuffer,
56 PAL_Uint32 inbufferLength,
57 _Out_writes_bytes_to_opt_(outbufferLength, *outbufferLengthNeeded) void *outbuffer,
58 PAL_Uint32 outbufferLength,
59 _When_(return == -2, _Out_) _When_(return == 0, _Out_) PAL_Uint32 *outbufferLengthNeeded)
60 {
61 PAL_Uint32 realOutBufferNeeded = inbufferLength;
62
63 if (outbufferLengthNeeded == NULL)
64 krisbash 1.1 return -1;
65
66 *outbufferLengthNeeded = realOutBufferNeeded;
67
68 #if defined (_MSC_VER)
69 if (inbufferLength%CRYPTPROTECTMEMORY_BLOCK_SIZE)
70 {
71 *outbufferLengthNeeded += (CRYPTPROTECTMEMORY_BLOCK_SIZE-(inbufferLength%CRYPTPROTECTMEMORY_BLOCK_SIZE));
72 return -1;
73 }
74 #endif
75
76
77 if (inbuffer == NULL)
78 return -1;
79
80 if (outbufferLength < realOutBufferNeeded)
81 return -2;
82
83 if (outbuffer == NULL)
84 return -1;
85 krisbash 1.1
86 memcpy(outbuffer, inbuffer, inbufferLength);
87
88 #if defined(_MSC_VER)
89 if (!CryptUnprotectMemory(outbuffer, realOutBufferNeeded, CRYPTPROTECTMEMORY_SAME_PROCESS))
90 {
91 SecureZeroMemory(outbuffer, outbufferLength);
92 return -1;
93 }
94 #endif
95 return 0;
96 }
|