dssenh/tests: Get rid of workarounds for old Windows versions.

Signed-off-by: Hans Leidekker <hans@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Hans Leidekker 2020-10-02 16:56:44 +02:00 committed by Alexandre Julliard
parent 82c64b9c95
commit 2e11036feb

View file

@ -126,11 +126,6 @@ static void test_acquire_context(void)
SetLastError(0xdeadbeef); SetLastError(0xdeadbeef);
result = CryptAcquireContextA( result = CryptAcquireContextA(
&hProv, NULL, MS_ENH_DSS_DH_PROV_A, PROV_DSS_DH, CRYPT_VERIFYCONTEXT); &hProv, NULL, MS_ENH_DSS_DH_PROV_A, PROV_DSS_DH, CRYPT_VERIFYCONTEXT);
if(!result && GetLastError() == NTE_KEYSET_NOT_DEF)
{
win_skip("DSSENH and Schannel provider is broken on WinNT4\n");
return;
}
ok(result, "Expected no errors.\n"); ok(result, "Expected no errors.\n");
result = CryptReleaseContext(hProv, 0); result = CryptReleaseContext(hProv, 0);
@ -189,38 +184,36 @@ struct keylength_test {
DWORD flags; DWORD flags;
BOOL expectedResult; BOOL expectedResult;
DWORD expectedError; DWORD expectedError;
BOOL brokenResult;
DWORD brokenError; DWORD brokenError;
DWORD altError;
}; };
static const struct keylength_test baseDSS_keylength[] = { static const struct keylength_test baseDSS_keylength[] = {
/* AT_KEYEXCHANGE is not supported by the base DSS provider */ /* AT_KEYEXCHANGE is not supported by the base DSS provider */
{AT_KEYEXCHANGE, 448 << 16, FALSE, NTE_BAD_ALGID, FALSE, NTE_BAD_FLAGS}, /* WinNT4 and Win2k */ {AT_KEYEXCHANGE, 448 << 16, FALSE, NTE_BAD_ALGID},
{AT_KEYEXCHANGE, 512 << 16, FALSE, NTE_BAD_ALGID, TRUE}, /* success on WinNT4 */ {AT_KEYEXCHANGE, 512 << 16, FALSE, NTE_BAD_ALGID},
{AT_KEYEXCHANGE, 1024 << 16, FALSE, NTE_BAD_ALGID, TRUE}, /* success on WinNT4 */ {AT_KEYEXCHANGE, 1024 << 16, FALSE, NTE_BAD_ALGID},
{AT_KEYEXCHANGE, 1088 << 16, FALSE, NTE_BAD_ALGID, FALSE, NTE_BAD_FLAGS},/* WinNT4 and Win2k */ {AT_KEYEXCHANGE, 1088 << 16, FALSE, NTE_BAD_ALGID},
/* min 512 max 1024 increment by 64 */ /* min 512 max 1024 increment by 64 */
{AT_SIGNATURE, 448 << 16, FALSE, NTE_BAD_FLAGS}, {AT_SIGNATURE, 448 << 16, FALSE, NTE_BAD_FLAGS},
{AT_SIGNATURE, 512 << 16, TRUE}, {AT_SIGNATURE, 512 << 16, TRUE},
{AT_SIGNATURE, 513 << 16, FALSE, NTE_FAIL, FALSE, NTE_BAD_FLAGS, STATUS_INVALID_PARAMETER}, /* WinNT4 and Win2k */ {AT_SIGNATURE, 513 << 16, FALSE, STATUS_INVALID_PARAMETER, NTE_FAIL},
{AT_SIGNATURE, 768 << 16, TRUE}, {AT_SIGNATURE, 768 << 16, TRUE},
{AT_SIGNATURE, 1024 << 16, TRUE}, {AT_SIGNATURE, 1024 << 16, TRUE},
{AT_SIGNATURE, 1088 << 16, FALSE, NTE_BAD_FLAGS}, {AT_SIGNATURE, 1088 << 16, FALSE, NTE_BAD_FLAGS},
/* CALG_DH_EPHEM is not supported by the base DSS provider */ /* CALG_DH_EPHEM is not supported by the base DSS provider */
{CALG_DH_EPHEM, 448 << 16, FALSE, NTE_BAD_ALGID, FALSE, NTE_BAD_FLAGS}, /* WinNT4 and Win2k */ {CALG_DH_EPHEM, 448 << 16, FALSE, NTE_BAD_ALGID},
{CALG_DH_EPHEM, 512 << 16, FALSE, NTE_BAD_ALGID, TRUE}, /* success on WinNT4 */ {CALG_DH_EPHEM, 512 << 16, FALSE, NTE_BAD_ALGID},
{CALG_DH_EPHEM, 1024 << 16, FALSE, NTE_BAD_ALGID, TRUE}, /* success on WinNT4 */ {CALG_DH_EPHEM, 1024 << 16, FALSE, NTE_BAD_ALGID},
{CALG_DH_EPHEM, 1088 << 16, FALSE, NTE_BAD_ALGID, FALSE, NTE_BAD_FLAGS}, /* WinNT4 and Win2k */ {CALG_DH_EPHEM, 1088 << 16, FALSE, NTE_BAD_ALGID},
/* CALG_DH_SF is not supported by the base DSS provider */ /* CALG_DH_SF is not supported by the base DSS provider */
{CALG_DH_SF, 448 << 16, FALSE, NTE_BAD_ALGID, FALSE, NTE_BAD_FLAGS}, /* WinNT4 and Win2k */ {CALG_DH_SF, 448 << 16, FALSE, NTE_BAD_ALGID},
{CALG_DH_SF, 512 << 16, FALSE, NTE_BAD_ALGID, TRUE}, /* success on WinNT4 */ {CALG_DH_SF, 512 << 16, FALSE, NTE_BAD_ALGID},
{CALG_DH_SF, 1024 << 16, FALSE, NTE_BAD_ALGID, TRUE}, /* success on WinNT4 */ {CALG_DH_SF, 1024 << 16, FALSE, NTE_BAD_ALGID},
{CALG_DH_SF, 1088 << 16, FALSE, NTE_BAD_ALGID, FALSE, NTE_BAD_FLAGS}, /* WinNT4 and Win2k */ {CALG_DH_SF, 1088 << 16, FALSE, NTE_BAD_ALGID},
/* min 512 max 1024, increment by 64 */ /* min 512 max 1024, increment by 64 */
{CALG_DSS_SIGN, 448 << 16, FALSE, NTE_BAD_FLAGS}, {CALG_DSS_SIGN, 448 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DSS_SIGN, 512 << 16, TRUE}, {CALG_DSS_SIGN, 512 << 16, TRUE},
{CALG_DSS_SIGN, 513 << 16, FALSE, NTE_FAIL, FALSE, NTE_BAD_FLAGS, STATUS_INVALID_PARAMETER}, /* WinNT4 and Win2k */ {CALG_DSS_SIGN, 513 << 16, FALSE, STATUS_INVALID_PARAMETER, NTE_FAIL},
{CALG_DSS_SIGN, 768 << 16, TRUE}, {CALG_DSS_SIGN, 768 << 16, TRUE},
{CALG_DSS_SIGN, 1024 << 16, TRUE}, {CALG_DSS_SIGN, 1024 << 16, TRUE},
{CALG_DSS_SIGN, 1088 << 16, FALSE, NTE_BAD_FLAGS} {CALG_DSS_SIGN, 1088 << 16, FALSE, NTE_BAD_FLAGS}
@ -230,31 +223,31 @@ static const struct keylength_test dssDH_keylength[] = {
/* min 512 max 1024, increment by 64 */ /* min 512 max 1024, increment by 64 */
{AT_KEYEXCHANGE, 448 << 16, FALSE, NTE_BAD_FLAGS}, {AT_KEYEXCHANGE, 448 << 16, FALSE, NTE_BAD_FLAGS},
{AT_KEYEXCHANGE, 512 << 16, TRUE}, {AT_KEYEXCHANGE, 512 << 16, TRUE},
{AT_KEYEXCHANGE, 513 << 16, FALSE, NTE_FAIL, FALSE, NTE_BAD_FLAGS}, /* WinNT4 and Win2k */ {AT_KEYEXCHANGE, 513 << 16, FALSE, NTE_BAD_FLAGS},
{AT_KEYEXCHANGE, 768 << 16, TRUE}, {AT_KEYEXCHANGE, 768 << 16, TRUE},
{AT_KEYEXCHANGE, 1024 << 16, TRUE}, {AT_KEYEXCHANGE, 1024 << 16, TRUE},
{AT_KEYEXCHANGE, 1088 << 16, FALSE, NTE_BAD_FLAGS}, {AT_KEYEXCHANGE, 1088 << 16, FALSE, NTE_BAD_FLAGS},
{AT_SIGNATURE, 448 << 16, FALSE, NTE_BAD_FLAGS}, {AT_SIGNATURE, 448 << 16, FALSE, NTE_BAD_FLAGS},
{AT_SIGNATURE, 512 << 16, TRUE}, {AT_SIGNATURE, 512 << 16, TRUE},
{AT_SIGNATURE, 513 << 16, FALSE, NTE_FAIL, FALSE, NTE_BAD_FLAGS, STATUS_INVALID_PARAMETER}, /* WinNT4 and Win2k */ {AT_SIGNATURE, 513 << 16, FALSE, STATUS_INVALID_PARAMETER, NTE_FAIL},
{AT_SIGNATURE, 768 << 16, TRUE}, {AT_SIGNATURE, 768 << 16, TRUE},
{AT_SIGNATURE, 1024 << 16, TRUE}, {AT_SIGNATURE, 1024 << 16, TRUE},
{AT_SIGNATURE, 1088 << 16, FALSE, NTE_BAD_FLAGS}, {AT_SIGNATURE, 1088 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DH_EPHEM, 448 << 16, FALSE, NTE_BAD_FLAGS}, {CALG_DH_EPHEM, 448 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DH_EPHEM, 512 << 16, TRUE}, {CALG_DH_EPHEM, 512 << 16, TRUE},
{CALG_DH_EPHEM, 513 << 16, FALSE, NTE_FAIL, FALSE, NTE_BAD_FLAGS}, /* WinNT4 and Win2k */ {CALG_DH_EPHEM, 513 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DH_EPHEM, 768 << 16, TRUE}, {CALG_DH_EPHEM, 768 << 16, TRUE},
{CALG_DH_EPHEM, 1024 << 16, TRUE}, {CALG_DH_EPHEM, 1024 << 16, TRUE},
{CALG_DH_EPHEM, 1088 << 16, FALSE, NTE_BAD_FLAGS}, {CALG_DH_EPHEM, 1088 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DH_SF, 448 << 16, FALSE, NTE_BAD_FLAGS}, {CALG_DH_SF, 448 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DH_SF, 512 << 16, TRUE}, {CALG_DH_SF, 512 << 16, TRUE},
{CALG_DH_SF, 513 << 16, FALSE, NTE_FAIL, FALSE, NTE_BAD_FLAGS}, /* WinNT4 and Win2k */ {CALG_DH_SF, 513 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DH_SF, 768 << 16, TRUE}, {CALG_DH_SF, 768 << 16, TRUE},
{CALG_DH_SF, 1024 << 16, TRUE}, {CALG_DH_SF, 1024 << 16, TRUE},
{CALG_DH_SF, 1088 << 16, FALSE, NTE_BAD_FLAGS}, {CALG_DH_SF, 1088 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DSS_SIGN, 448 << 16, FALSE, NTE_BAD_FLAGS}, {CALG_DSS_SIGN, 448 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DSS_SIGN, 512 << 16, TRUE}, {CALG_DSS_SIGN, 512 << 16, TRUE},
{CALG_DSS_SIGN, 513 << 16, FALSE, NTE_FAIL, FALSE, NTE_BAD_FLAGS, STATUS_INVALID_PARAMETER}, /* WinNT4 and Win2k */ {CALG_DSS_SIGN, 513 << 16, FALSE, STATUS_INVALID_PARAMETER, NTE_FAIL},
{CALG_DSS_SIGN, 768 << 16, TRUE}, {CALG_DSS_SIGN, 768 << 16, TRUE},
{CALG_DSS_SIGN, 1024 << 16, TRUE}, {CALG_DSS_SIGN, 1024 << 16, TRUE},
{CALG_DSS_SIGN, 1088 << 16, FALSE, NTE_BAD_FLAGS} {CALG_DSS_SIGN, 1088 << 16, FALSE, NTE_BAD_FLAGS}
@ -264,7 +257,7 @@ static const struct keylength_test dssENH_keylength[] = {
/* min 512 max 1024 (AT_KEYEXCHANGE, CALG_DH_EPHEM, CALG_DH_SF max 4096), increment by 64*/ /* min 512 max 1024 (AT_KEYEXCHANGE, CALG_DH_EPHEM, CALG_DH_SF max 4096), increment by 64*/
{AT_KEYEXCHANGE, 448 << 16, FALSE, NTE_BAD_FLAGS}, {AT_KEYEXCHANGE, 448 << 16, FALSE, NTE_BAD_FLAGS},
{AT_KEYEXCHANGE, 512 << 16, TRUE}, {AT_KEYEXCHANGE, 512 << 16, TRUE},
{AT_KEYEXCHANGE, 513 << 16, FALSE, NTE_FAIL, FALSE, NTE_BAD_FLAGS}, /* WinNT4 and Win2k */ {AT_KEYEXCHANGE, 513 << 16, FALSE, NTE_BAD_FLAGS},
{AT_KEYEXCHANGE, 768 << 16, TRUE}, {AT_KEYEXCHANGE, 768 << 16, TRUE},
{AT_KEYEXCHANGE, 1024 << 16, TRUE}, {AT_KEYEXCHANGE, 1024 << 16, TRUE},
{AT_KEYEXCHANGE, 1088 << 16, TRUE}, {AT_KEYEXCHANGE, 1088 << 16, TRUE},
@ -275,13 +268,13 @@ static const struct keylength_test dssENH_keylength[] = {
{AT_KEYEXCHANGE, 4160 << 16, FALSE, NTE_BAD_FLAGS}, {AT_KEYEXCHANGE, 4160 << 16, FALSE, NTE_BAD_FLAGS},
{AT_SIGNATURE, 448 << 16, FALSE, NTE_BAD_FLAGS}, {AT_SIGNATURE, 448 << 16, FALSE, NTE_BAD_FLAGS},
{AT_SIGNATURE, 512 << 16, TRUE}, {AT_SIGNATURE, 512 << 16, TRUE},
{AT_SIGNATURE, 513 << 16, FALSE, NTE_FAIL, FALSE, NTE_BAD_FLAGS, STATUS_INVALID_PARAMETER}, /* WinNT4 and Win2k */ {AT_SIGNATURE, 513 << 16, FALSE, STATUS_INVALID_PARAMETER, NTE_FAIL},
{AT_SIGNATURE, 768 << 16, TRUE}, {AT_SIGNATURE, 768 << 16, TRUE},
{AT_SIGNATURE, 1024 << 16, TRUE}, {AT_SIGNATURE, 1024 << 16, TRUE},
{AT_SIGNATURE, 1032 << 16, FALSE, NTE_BAD_FLAGS}, {AT_SIGNATURE, 1032 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DH_EPHEM, 448 << 16, FALSE, NTE_BAD_FLAGS}, {CALG_DH_EPHEM, 448 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DH_EPHEM, 512 << 16, TRUE}, {CALG_DH_EPHEM, 512 << 16, TRUE},
{CALG_DH_EPHEM, 513 << 16, FALSE, NTE_FAIL, FALSE, NTE_BAD_FLAGS}, /* WinNT4 and Win2k */ {CALG_DH_EPHEM, 513 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DH_EPHEM, 768 << 16, TRUE}, {CALG_DH_EPHEM, 768 << 16, TRUE},
{CALG_DH_EPHEM, 1024 << 16, TRUE}, {CALG_DH_EPHEM, 1024 << 16, TRUE},
{CALG_DH_EPHEM, 1040 << 16, FALSE, NTE_BAD_FLAGS}, {CALG_DH_EPHEM, 1040 << 16, FALSE, NTE_BAD_FLAGS},
@ -289,7 +282,7 @@ static const struct keylength_test dssENH_keylength[] = {
{CALG_DH_EPHEM, 4160 << 16, FALSE, NTE_BAD_FLAGS}, {CALG_DH_EPHEM, 4160 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DH_SF, 448 << 16, FALSE, NTE_BAD_FLAGS}, {CALG_DH_SF, 448 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DH_SF, 512 << 16, TRUE}, {CALG_DH_SF, 512 << 16, TRUE},
{CALG_DH_SF, 513 << 16, FALSE, NTE_FAIL, FALSE, NTE_BAD_FLAGS}, /* WinNT4 and Win2k */ {CALG_DH_SF, 513 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DH_SF, 768 << 16, TRUE}, {CALG_DH_SF, 768 << 16, TRUE},
{CALG_DH_SF, 1024 << 16, TRUE}, {CALG_DH_SF, 1024 << 16, TRUE},
{CALG_DH_SF, 1032 << 16, FALSE, NTE_BAD_FLAGS}, {CALG_DH_SF, 1032 << 16, FALSE, NTE_BAD_FLAGS},
@ -297,7 +290,7 @@ static const struct keylength_test dssENH_keylength[] = {
{CALG_DH_SF, 4160 << 16, FALSE, NTE_BAD_FLAGS}, {CALG_DH_SF, 4160 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DSS_SIGN, 448 << 16, FALSE, NTE_BAD_FLAGS}, {CALG_DSS_SIGN, 448 << 16, FALSE, NTE_BAD_FLAGS},
{CALG_DSS_SIGN, 512 << 16, TRUE}, {CALG_DSS_SIGN, 512 << 16, TRUE},
{CALG_DSS_SIGN, 513 << 16, FALSE, NTE_FAIL, FALSE, NTE_BAD_FLAGS, STATUS_INVALID_PARAMETER}, /* WinNT4 and Win2k */ {CALG_DSS_SIGN, 513 << 16, FALSE, STATUS_INVALID_PARAMETER, NTE_FAIL},
{CALG_DSS_SIGN, 768 << 16, TRUE}, {CALG_DSS_SIGN, 768 << 16, TRUE},
{CALG_DSS_SIGN, 1024 << 16, TRUE}, {CALG_DSS_SIGN, 1024 << 16, TRUE},
{CALG_DSS_SIGN, 1088 << 16, FALSE, NTE_BAD_FLAGS} {CALG_DSS_SIGN, 1088 << 16, FALSE, NTE_BAD_FLAGS}
@ -322,26 +315,9 @@ static void test_keylength_array(HCRYPTPROV hProv,const struct keylength_test *t
ok(result, "Expected no errors.\n"); ok(result, "Expected no errors.\n");
} }
else else
{ /* error but success on older system */ ok(!result && (GetLastError() == tests[i].expectedError ||
if(tests[i].brokenResult) broken(GetLastError() == tests[i].brokenError)),
ok((!result && GetLastError() == tests[i].expectedError) || "%d: got %x.\n", i, GetLastError());
broken(result), "%d: Didn't really expect a key, got %x, %d\n",
i, GetLastError(), result);
else
{
/* error */
if(!tests[i].brokenError)
ok(!result && GetLastError() == tests[i].expectedError,
"%d: Expected an error, got %x, %d.\n", i, GetLastError(), result);
/* error but different error on older system */
else
ok(!result && (GetLastError() == tests[i].expectedError ||
GetLastError() == tests[i].altError ||
broken(GetLastError() == tests[i].brokenError) ),
"%d: Expected an error, got %x, %d.\n", i, GetLastError(), result);
}
}
} }
} }
@ -381,11 +357,6 @@ static void test_keylength(void)
SetLastError(0xdeadbeef); SetLastError(0xdeadbeef);
result = CryptAcquireContextA( result = CryptAcquireContextA(
&hProv, NULL, MS_ENH_DSS_DH_PROV_A, PROV_DSS_DH, CRYPT_VERIFYCONTEXT); &hProv, NULL, MS_ENH_DSS_DH_PROV_A, PROV_DSS_DH, CRYPT_VERIFYCONTEXT);
if(!result && GetLastError() == NTE_KEYSET_NOT_DEF)
{
win_skip("DSSENH and Schannel provider is broken on WinNT4\n");
return;
}
ok(result, "Expected no errors.\n"); ok(result, "Expected no errors.\n");
/* perform keylength tests */ /* perform keylength tests */
@ -1001,12 +972,6 @@ static void test_verify_signature(void)
/* acquire enhanced dss provider */ /* acquire enhanced dss provider */
SetLastError(0xdeadbeef); SetLastError(0xdeadbeef);
result = CryptAcquireContextA(&hProv, NULL, MS_ENH_DSS_DH_PROV_A, PROV_DSS_DH, 0); result = CryptAcquireContextA(&hProv, NULL, MS_ENH_DSS_DH_PROV_A, PROV_DSS_DH, 0);
if(!result && GetLastError() == NTE_KEYSET_NOT_DEF)
{
win_skip("DSSENH and Schannel provider is broken on WinNT4, skipping signature "
"verification tests.\n");
return;
}
ok(result, "Failed to acquire CSP.\n"); ok(result, "Failed to acquire CSP.\n");
test_signhash_array(hProv, dssSign_data, ARRAY_SIZE(dssSign_data)); test_signhash_array(hProv, dssSign_data, ARRAY_SIZE(dssSign_data));
@ -1120,94 +1085,94 @@ static void test_keyExchange_baseDSS(HCRYPTPROV hProv, const struct keyExchange_
/* Generate key exchange keys for user1 and user2 */ /* Generate key exchange keys for user1 and user2 */
result = CryptGenKey(hProv, tests[i].algid, 512 << 16 | CRYPT_PREGEN, &privKey1); result = CryptGenKey(hProv, tests[i].algid, 512 << 16 | CRYPT_PREGEN, &privKey1);
ok((!result && GetLastError() == NTE_BAD_ALGID) || broken(result), /* WinNT4 */ ok(!result && GetLastError() == NTE_BAD_ALGID,
"Expected NTE_BAD_ALGID, got %x\n", GetLastError()); "Expected NTE_BAD_ALGID, got %x\n", GetLastError());
result = CryptGenKey(hProv, tests[i].algid, 512 << 16 | CRYPT_PREGEN, &privKey2); result = CryptGenKey(hProv, tests[i].algid, 512 << 16 | CRYPT_PREGEN, &privKey2);
ok((!result && GetLastError() == NTE_BAD_ALGID) || broken(result), /* WinNT4 */ ok(!result && GetLastError() == NTE_BAD_ALGID,
"Expected NTE_BAD_ALGID, got %x\n", GetLastError()); "Expected NTE_BAD_ALGID, got %x\n", GetLastError());
/* Set the prime and generator values, which are agreed upon */ /* Set the prime and generator values, which are agreed upon */
result = CryptSetKeyParam(privKey1, KP_P, (BYTE *)&Prime, 0); result = CryptSetKeyParam(privKey1, KP_P, (BYTE *)&Prime, 0);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
result = CryptSetKeyParam(privKey2, KP_P, (BYTE *)&Prime, 0); result = CryptSetKeyParam(privKey2, KP_P, (BYTE *)&Prime, 0);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
result = CryptSetKeyParam(privKey1, KP_G, (BYTE *)&Generator, 0); result = CryptSetKeyParam(privKey1, KP_G, (BYTE *)&Generator, 0);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
result = CryptSetKeyParam(privKey2, KP_G, (BYTE *)&Generator, 0); result = CryptSetKeyParam(privKey2, KP_G, (BYTE *)&Generator, 0);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
/* Generate the secret value for user1 and user2 */ /* Generate the secret value for user1 and user2 */
result = CryptSetKeyParam(privKey1, KP_X, NULL, 0); result = CryptSetKeyParam(privKey1, KP_X, NULL, 0);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
result = CryptSetKeyParam(privKey2, KP_X, NULL, 0); result = CryptSetKeyParam(privKey2, KP_X, NULL, 0);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
/* Acquire required size for the public keys */ /* Acquire required size for the public keys */
result = CryptExportKey(privKey1, 0, PUBLICKEYBLOB, 0, NULL, &pubKeyLen1); result = CryptExportKey(privKey1, 0, PUBLICKEYBLOB, 0, NULL, &pubKeyLen1);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
result = CryptExportKey(privKey2, 0, PUBLICKEYBLOB, 0, NULL, &pubKeyLen2); result = CryptExportKey(privKey2, 0, PUBLICKEYBLOB, 0, NULL, &pubKeyLen2);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
/* Export public key which will be calculated into the shared key */ /* Export public key which will be calculated into the shared key */
result = CryptExportKey(privKey1, 0, PUBLICKEYBLOB, 0, pubKeyBuffer1, &pubKeyLen1); result = CryptExportKey(privKey1, 0, PUBLICKEYBLOB, 0, pubKeyBuffer1, &pubKeyLen1);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
result = CryptExportKey(privKey2, 0, PUBLICKEYBLOB, 0, pubKeyBuffer2, &pubKeyLen2); result = CryptExportKey(privKey2, 0, PUBLICKEYBLOB, 0, pubKeyBuffer2, &pubKeyLen2);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
/* Import the public key and convert it into a shared key */ /* Import the public key and convert it into a shared key */
result = CryptImportKey(hProv, pubKeyBuffer2, pubKeyLen2, privKey1, 0, &sessionKey1); result = CryptImportKey(hProv, pubKeyBuffer2, pubKeyLen2, privKey1, 0, &sessionKey1);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) ||
broken(!result && GetLastError() == NTE_BAD_DATA) || /* Vista.64 */ broken(!result && GetLastError() == NTE_BAD_DATA) || /* Vista.64 */
broken(!result && GetLastError() == NTE_BAD_TYPE) || /* Win2K-W2K8, Win7.64 */ broken(!result && GetLastError() == NTE_BAD_TYPE) || /* Win2K-W2K8, Win7.64 */
broken(!result && GetLastError() == NTE_BAD_ALGID), /* W7SP164 (32 bit dssenh) */ broken(!result && GetLastError() == NTE_BAD_ALGID), /* W7SP164 (32 bit dssenh) */
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
result = CryptImportKey(hProv, pubKeyBuffer1, pubKeyLen1, privKey2, 0, &sessionKey2); result = CryptImportKey(hProv, pubKeyBuffer1, pubKeyLen1, privKey2, 0, &sessionKey2);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) ||
broken(!result && GetLastError() == NTE_BAD_DATA) || /* Win 7 */ broken(!result && GetLastError() == NTE_BAD_DATA) || /* Win 7 */
broken(!result && GetLastError() == NTE_BAD_TYPE) || /* Win2K-W2K8, Win7.64 */ broken(!result && GetLastError() == NTE_BAD_TYPE) || /* Win2K-W2K8, Win7.64 */
broken(!result && GetLastError() == NTE_BAD_ALGID), /* W7SP164 (32 bit dssenh) */ broken(!result && GetLastError() == NTE_BAD_ALGID), /* W7SP164 (32 bit dssenh) */
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
/* Set the shared key parameters to matching type */ /* Set the shared key parameters to matching type */
algid = CALG_RC4; algid = CALG_RC4;
result = CryptSetKeyParam(sessionKey1, KP_ALGID, (BYTE *)&algid, 0); result = CryptSetKeyParam(sessionKey1, KP_ALGID, (BYTE *)&algid, 0);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
algid = CALG_RC4; algid = CALG_RC4;
result = CryptSetKeyParam(sessionKey2, KP_ALGID, (BYTE *)&algid, 0); result = CryptSetKeyParam(sessionKey2, KP_ALGID, (BYTE *)&algid, 0);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
/* Encrypt some data and verify we are getting the same output */ /* Encrypt some data and verify we are getting the same output */
memcpy(pbData1, plainText, plainLen); memcpy(pbData1, plainText, plainLen);
dataLen = plainLen; dataLen = plainLen;
result = CryptEncrypt(sessionKey1, 0, TRUE, 0, pbData1, &dataLen, 36); result = CryptEncrypt(sessionKey1, 0, TRUE, 0, pbData1, &dataLen, 36);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
result = CryptDecrypt(sessionKey2, 0, TRUE, 0, pbData1, &dataLen); result = CryptDecrypt(sessionKey2, 0, TRUE, 0, pbData1, &dataLen);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
ok(!memcmp(pbData1, (BYTE *)plainText, sizeof(plainText)), "Incorrect decrypted data.\n"); ok(!memcmp(pbData1, (BYTE *)plainText, sizeof(plainText)), "Incorrect decrypted data.\n");
@ -1215,31 +1180,31 @@ static void test_keyExchange_baseDSS(HCRYPTPROV hProv, const struct keyExchange_
dataLen = plainLen; dataLen = plainLen;
result = CryptEncrypt(sessionKey2, 0, TRUE, 0, pbData2, &dataLen, 36); result = CryptEncrypt(sessionKey2, 0, TRUE, 0, pbData2, &dataLen, 36);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
result = CryptDecrypt(sessionKey1, 0, TRUE, 0, pbData2, &dataLen); result = CryptDecrypt(sessionKey1, 0, TRUE, 0, pbData2, &dataLen);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
ok(!memcmp(pbData1, pbData2, dataLen), "Decrypted data is not identical.\n"); ok(!memcmp(pbData1, pbData2, dataLen), "Decrypted data is not identical.\n");
/* Destroy all user keys */ /* Destroy all user keys */
result = CryptDestroyKey(sessionKey1); result = CryptDestroyKey(sessionKey1);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
result = CryptDestroyKey(sessionKey2); result = CryptDestroyKey(sessionKey2);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
result = CryptDestroyKey(privKey1); result = CryptDestroyKey(privKey1);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
result = CryptDestroyKey(privKey2); result = CryptDestroyKey(privKey2);
ok((!result && GetLastError() == ERROR_INVALID_PARAMETER) || broken(result), ok(!result && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError()); /* WinNT4 */ "Expected ERROR_INVALID_PARAMETER, got %x\n", GetLastError());
} }
} }
@ -1289,12 +1254,10 @@ static void test_keyExchange_dssDH(HCRYPTPROV hProv, const struct keyExchange_te
/* Generate the secret value for user1 and user2 */ /* Generate the secret value for user1 and user2 */
result = CryptSetKeyParam(privKey1, KP_X, NULL, 0); result = CryptSetKeyParam(privKey1, KP_X, NULL, 0);
ok(result || broken(!result && GetLastError() == ERROR_INVALID_PARAMETER), ok(result, "Failed to set secret value for user 1, got %x\n", GetLastError());
"Failed to set secret value for user 1, got %x\n", GetLastError());/* Win2k & WinXP */
result = CryptSetKeyParam(privKey2, KP_X, NULL, 0); result = CryptSetKeyParam(privKey2, KP_X, NULL, 0);
ok(result || broken(!result && GetLastError() == ERROR_INVALID_PARAMETER), ok(result, "Failed to set secret value for user 2, got %x\n", GetLastError());
"Failed to set secret value for user 2, got %x\n", GetLastError());/* Win2k & WinXP */
/* Acquire required size for the public keys */ /* Acquire required size for the public keys */
result = CryptExportKey(privKey1, 0, PUBLICKEYBLOB, 0, NULL, &pubKeyLen1); result = CryptExportKey(privKey1, 0, PUBLICKEYBLOB, 0, NULL, &pubKeyLen1);
@ -1396,11 +1359,6 @@ static void test_key_exchange(void)
/* acquire enhanced dss provider */ /* acquire enhanced dss provider */
result = CryptAcquireContextA(&hProv, NULL, MS_ENH_DSS_DH_PROV_A, PROV_DSS_DH, result = CryptAcquireContextA(&hProv, NULL, MS_ENH_DSS_DH_PROV_A, PROV_DSS_DH,
CRYPT_VERIFYCONTEXT); CRYPT_VERIFYCONTEXT);
if(!result && GetLastError() == NTE_KEYSET_NOT_DEF)
{
win_skip("DSSENH and Schannel provider is broken on WinNT4, skipping shared key tests.\n");
return;
}
ok(result, "Failed to acquire CSP.\n"); ok(result, "Failed to acquire CSP.\n");
test_keyExchange_dssDH(hProv, dssDHkey_data, ARRAY_SIZE(dssDHkey_data)); test_keyExchange_dssDH(hProv, dssDHkey_data, ARRAY_SIZE(dssDHkey_data));