2 * PROJECT: ReactOS Applications Manager
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: base/applications/rapps/integrity.cpp
5 * PURPOSE: Various integrity check mechanisms
6 * PROGRAMMERS: Ismael Ferreras Morezuelas (swyterzone+ros@gmail.com)
13 BOOL
VerifyInteg(const ATL::CStringW
&SHA1Hash
, const ATL::CStringW
&FileName
)
15 return VerifyInteg(SHA1Hash
.GetString(), FileName
.GetString());
18 BOOL
VerifyInteg(LPCWSTR lpSHA1Hash
, LPCWSTR lpFileName
)
22 /* first off, does it exist at all? */
23 HANDLE file
= CreateFileW(lpFileName
, GENERIC_READ
, 0, NULL
, OPEN_EXISTING
, FILE_ATTRIBUTE_READONLY
, NULL
);
25 if (file
== INVALID_HANDLE_VALUE
)
28 /* let's grab the actual file size to organize the mmap'ing rounds */
30 GetFileSizeEx(file
, &size
);
32 /* retrieve a handle to map the file contents to memory */
33 HANDLE map
= CreateFileMappingW(file
, NULL
, PAGE_READONLY
, 0, 0, NULL
);
36 /* map that thing in address space */
37 const unsigned char *file_map
= static_cast<const unsigned char *>(MapViewOfFile(map
, FILE_MAP_READ
, 0, 0, 0));
41 /* initialize the SHA-1 context */
44 /* feed the data to the cookie monster */
45 A_SHAUpdate(&ctx
, file_map
, size
.LowPart
);
47 /* cool, we don't need this anymore */
48 UnmapViewOfFile(file_map
);
50 /* we're done, compute the final hash */
52 A_SHAFinal(&ctx
, sha
);
54 WCHAR buf
[(sizeof(sha
) * 2) + 1];
55 for (UINT i
= 0; i
< sizeof(sha
); i
++)
56 swprintf(buf
+ 2 * i
, L
"%02x", ((unsigned char *) sha
)[i
]);
57 /* does the resulting SHA1 match with the provided one? */
58 if (!_wcsicmp(buf
, lpSHA1Hash
))