bcrypt: Add support for BCRYPT_RSA_SIGN_ALGORITHM.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47371 Signed-off-by: Hans Leidekker <hans@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
c1746612b2
commit
4c649116a5
|
@ -193,6 +193,7 @@ NTSTATUS WINAPI BCryptOpenAlgorithmProvider( BCRYPT_ALG_HANDLE *handle, LPCWSTR
|
||||||
else if (!strcmpW( id, BCRYPT_MD5_ALGORITHM )) alg_id = ALG_ID_MD5;
|
else if (!strcmpW( id, BCRYPT_MD5_ALGORITHM )) alg_id = ALG_ID_MD5;
|
||||||
else if (!strcmpW( id, BCRYPT_RNG_ALGORITHM )) alg_id = ALG_ID_RNG;
|
else if (!strcmpW( id, BCRYPT_RNG_ALGORITHM )) alg_id = ALG_ID_RNG;
|
||||||
else if (!strcmpW( id, BCRYPT_RSA_ALGORITHM )) alg_id = ALG_ID_RSA;
|
else if (!strcmpW( id, BCRYPT_RSA_ALGORITHM )) alg_id = ALG_ID_RSA;
|
||||||
|
else if (!strcmpW( id, BCRYPT_RSA_SIGN_ALGORITHM )) alg_id = ALG_ID_RSA;
|
||||||
else if (!strcmpW( id, BCRYPT_SHA1_ALGORITHM )) alg_id = ALG_ID_SHA1;
|
else if (!strcmpW( id, BCRYPT_SHA1_ALGORITHM )) alg_id = ALG_ID_SHA1;
|
||||||
else if (!strcmpW( id, BCRYPT_SHA256_ALGORITHM )) alg_id = ALG_ID_SHA256;
|
else if (!strcmpW( id, BCRYPT_SHA256_ALGORITHM )) alg_id = ALG_ID_SHA256;
|
||||||
else if (!strcmpW( id, BCRYPT_SHA384_ALGORITHM )) alg_id = ALG_ID_SHA384;
|
else if (!strcmpW( id, BCRYPT_SHA384_ALGORITHM )) alg_id = ALG_ID_SHA384;
|
||||||
|
|
|
@ -1808,6 +1808,52 @@ static void test_RSA(void)
|
||||||
ok(!ret, "pBCryptCloseAlgorithmProvider failed: %08x\n", ret);
|
ok(!ret, "pBCryptCloseAlgorithmProvider failed: %08x\n", ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_RSA_SIGN(void)
|
||||||
|
{
|
||||||
|
BCRYPT_PKCS1_PADDING_INFO pad;
|
||||||
|
BCRYPT_ALG_HANDLE alg = NULL;
|
||||||
|
BCRYPT_KEY_HANDLE key = NULL;
|
||||||
|
NTSTATUS ret;
|
||||||
|
|
||||||
|
ret = pBCryptOpenAlgorithmProvider(&alg, BCRYPT_RSA_SIGN_ALGORITHM, NULL, 0);
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
win_skip("Failed to open RSA_SIGN provider: %08x, skipping test\n", ret);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = pBCryptImportKeyPair(alg, NULL, BCRYPT_RSAPUBLIC_BLOB, &key, rsaPublicBlob, sizeof(rsaPublicBlob), 0);
|
||||||
|
ok(!ret, "pBCryptImportKeyPair failed: %08x\n", ret);
|
||||||
|
|
||||||
|
pad.pszAlgId = BCRYPT_SHA1_ALGORITHM;
|
||||||
|
ret = pBCryptVerifySignature(key, &pad, rsaHash, sizeof(rsaHash), rsaSignature, sizeof(rsaSignature), BCRYPT_PAD_PKCS1);
|
||||||
|
ok(!ret, "pBCryptVerifySignature failed: %08x\n", ret);
|
||||||
|
|
||||||
|
ret = pBCryptVerifySignature(key, NULL, rsaHash, sizeof(rsaHash), rsaSignature, sizeof(rsaSignature), BCRYPT_PAD_PKCS1);
|
||||||
|
ok(ret == STATUS_INVALID_PARAMETER, "Expected STATUS_INVALID_PARAMETER, got %08x\n", ret);
|
||||||
|
|
||||||
|
pad.pszAlgId = BCRYPT_SHA1_ALGORITHM;
|
||||||
|
ret = pBCryptVerifySignature(key, &pad, rsaHash, sizeof(rsaHash), rsaSignature, sizeof(rsaSignature), 0);
|
||||||
|
ok(ret == STATUS_INVALID_PARAMETER, "Expected STATUS_INVALID_PARAMETER, got %08x\n", ret);
|
||||||
|
|
||||||
|
ret = pBCryptVerifySignature(key, NULL, rsaHash, sizeof(rsaHash), rsaSignature, sizeof(rsaSignature), 0);
|
||||||
|
ok(ret == STATUS_INVALID_PARAMETER, "Expected STATUS_INVALID_PARAMETER, got %08x\n", ret);
|
||||||
|
|
||||||
|
pad.pszAlgId = BCRYPT_AES_ALGORITHM;
|
||||||
|
ret = pBCryptVerifySignature(key, &pad, rsaHash, sizeof(rsaHash), rsaSignature, sizeof(rsaSignature), BCRYPT_PAD_PKCS1);
|
||||||
|
ok(ret == STATUS_NOT_SUPPORTED, "Expected STATUS_NOT_SUPPORTED, got %08x\n", ret);
|
||||||
|
|
||||||
|
pad.pszAlgId = NULL;
|
||||||
|
ret = pBCryptVerifySignature(key, &pad, rsaHash, sizeof(rsaHash), rsaSignature, sizeof(rsaSignature), BCRYPT_PAD_PKCS1);
|
||||||
|
ok(ret == STATUS_INVALID_SIGNATURE, "Expected STATUS_INVALID_SIGNATURE, got %08x\n", ret);
|
||||||
|
|
||||||
|
ret = pBCryptDestroyKey(key);
|
||||||
|
ok(!ret, "pBCryptDestroyKey failed: %08x\n", ret);
|
||||||
|
|
||||||
|
ret = pBCryptCloseAlgorithmProvider(alg, 0);
|
||||||
|
ok(!ret, "pBCryptCloseAlgorithmProvider failed: %08x\n", ret);
|
||||||
|
}
|
||||||
|
|
||||||
static BYTE eccprivkey[] =
|
static BYTE eccprivkey[] =
|
||||||
{
|
{
|
||||||
0x45, 0x43, 0x4b, 0x32, 0x20, 0x00, 0x00, 0x00, 0xfb, 0xbd, 0x3d, 0x20, 0x1b, 0x6d, 0x66, 0xb3,
|
0x45, 0x43, 0x4b, 0x32, 0x20, 0x00, 0x00, 0x00, 0xfb, 0xbd, 0x3d, 0x20, 0x1b, 0x6d, 0x66, 0xb3,
|
||||||
|
@ -1963,6 +2009,7 @@ START_TEST(bcrypt)
|
||||||
test_key_import_export();
|
test_key_import_export();
|
||||||
test_ECDSA();
|
test_ECDSA();
|
||||||
test_RSA();
|
test_RSA();
|
||||||
|
test_RSA_SIGN();
|
||||||
test_ECDH();
|
test_ECDH();
|
||||||
test_BCryptEnumContextFunctions();
|
test_BCryptEnumContextFunctions();
|
||||||
|
|
||||||
|
|
|
@ -76,6 +76,7 @@ typedef LONG NTSTATUS;
|
||||||
#define BCRYPT_MD5_ALGORITHM L"MD5"
|
#define BCRYPT_MD5_ALGORITHM L"MD5"
|
||||||
#define BCRYPT_RNG_ALGORITHM L"RNG"
|
#define BCRYPT_RNG_ALGORITHM L"RNG"
|
||||||
#define BCRYPT_RSA_ALGORITHM L"RSA"
|
#define BCRYPT_RSA_ALGORITHM L"RSA"
|
||||||
|
#define BCRYPT_RSA_SIGN_ALGORITHM L"RSA_SIGN"
|
||||||
#define BCRYPT_SHA1_ALGORITHM L"SHA1"
|
#define BCRYPT_SHA1_ALGORITHM L"SHA1"
|
||||||
#define BCRYPT_SHA256_ALGORITHM L"SHA256"
|
#define BCRYPT_SHA256_ALGORITHM L"SHA256"
|
||||||
#define BCRYPT_SHA384_ALGORITHM L"SHA384"
|
#define BCRYPT_SHA384_ALGORITHM L"SHA384"
|
||||||
|
@ -129,6 +130,7 @@ static const WCHAR BCRYPT_MD4_ALGORITHM[] = {'M','D','4',0};
|
||||||
static const WCHAR BCRYPT_MD5_ALGORITHM[] = {'M','D','5',0};
|
static const WCHAR BCRYPT_MD5_ALGORITHM[] = {'M','D','5',0};
|
||||||
static const WCHAR BCRYPT_RNG_ALGORITHM[] = {'R','N','G',0};
|
static const WCHAR BCRYPT_RNG_ALGORITHM[] = {'R','N','G',0};
|
||||||
static const WCHAR BCRYPT_RSA_ALGORITHM[] = {'R','S','A',0};
|
static const WCHAR BCRYPT_RSA_ALGORITHM[] = {'R','S','A',0};
|
||||||
|
static const WCHAR BCRYPT_RSA_SIGN_ALGORITHM[] = {'R','S','A','_','S','I','G','N',0};
|
||||||
static const WCHAR BCRYPT_SHA1_ALGORITHM[] = {'S','H','A','1',0};
|
static const WCHAR BCRYPT_SHA1_ALGORITHM[] = {'S','H','A','1',0};
|
||||||
static const WCHAR BCRYPT_SHA256_ALGORITHM[] = {'S','H','A','2','5','6',0};
|
static const WCHAR BCRYPT_SHA256_ALGORITHM[] = {'S','H','A','2','5','6',0};
|
||||||
static const WCHAR BCRYPT_SHA384_ALGORITHM[] = {'S','H','A','3','8','4',0};
|
static const WCHAR BCRYPT_SHA384_ALGORITHM[] = {'S','H','A','3','8','4',0};
|
||||||
|
|
Loading…
Reference in New Issue