(file) Return to encrypt.c CVS log (file) (dir) Up to [OMI] / omi / pal

 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              }

ViewCVS 0.9.2