mirror of
https://github.com/X11Libre/xserver.git
synced 2026-09-22 20:35:43 +00:00
os: Add CryptoAPI as a choice of SHA1 implementation
Both Cygwin and MinGW can use Windows' native CryptoAPI for SHA1, saving a dependency on libgcrypt or OpenSSL. The necessary functions are in ADVAPI32.DLL, which is among the default lib flags and is already used in hw/xwin for accessing the registry. Signed-off-by: Yaakov Selkowitz <yselkowitz@users.sourceforge.net> Reviewed-by: Mikhail Gusarov <dottedmag@dottedmag.net> Reviewed-by: Jon TURNEY <jon.turney@dronecode.org.uk> Reviewed-by: Colin Harrison <colin.harrison@virgin.net> Tested-by: Colin Harrison <colin.harrison@virgin.net>
This commit is contained in:
parent
97041364a6
commit
e6461db6dc
3 changed files with 59 additions and 1 deletions
42
os/xsha1.c
42
os/xsha1.c
|
|
@ -74,6 +74,48 @@ x_sha1_final(void *ctx, unsigned char result[20])
|
|||
return 1;
|
||||
}
|
||||
|
||||
#elif defined(HAVE_SHA1_IN_CRYPTOAPI) /* Use CryptoAPI for SHA1 */
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <X11/Xwindows.h>
|
||||
#include <wincrypt.h>
|
||||
|
||||
static HCRYPTPROV hProv;
|
||||
|
||||
void *
|
||||
x_sha1_init(void)
|
||||
{
|
||||
HCRYPTHASH *ctx = malloc(sizeof(*ctx));
|
||||
|
||||
if (!ctx)
|
||||
return NULL;
|
||||
CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
|
||||
CryptCreateHash(hProv, CALG_SHA1, 0, 0, ctx);
|
||||
return ctx;
|
||||
}
|
||||
|
||||
int
|
||||
x_sha1_update(void *ctx, void *data, int size)
|
||||
{
|
||||
HCRYPTHASH *hHash = ctx;
|
||||
|
||||
CryptHashData(*hHash, data, size, 0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
x_sha1_final(void *ctx, unsigned char result[20])
|
||||
{
|
||||
HCRYPTHASH *hHash = ctx;
|
||||
DWORD len = 20;
|
||||
|
||||
CryptGetHashParam(*hHash, HP_HASHVAL, result, &len, 0);
|
||||
CryptDestroyHash(*hHash);
|
||||
CryptReleaseContext(hProv, 0);
|
||||
free(ctx);
|
||||
return 1;
|
||||
}
|
||||
|
||||
#elif defined(HAVE_SHA1_IN_LIBGCRYPT) /* Use libgcrypt for SHA1 */
|
||||
|
||||
#include <gcrypt.h>
|
||||
|
|
|
|||
Loading…
Reference in a new issue