crypt32/tests: Add more tests for CertComparePublicKeyInfo.

Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Dmitry Timoshkov 2018-10-26 13:17:21 +03:00 committed by Alexandre Julliard
parent 81b0a38c47
commit d34dc5fa3c
1 changed files with 60 additions and 3 deletions

View File

@ -3196,9 +3196,12 @@ static void testComparePublicKeyInfo(void)
static BYTE bits1[] = { 1, 0 }; static BYTE bits1[] = { 1, 0 };
static BYTE bits2[] = { 0 }; static BYTE bits2[] = { 0 };
static BYTE bits3[] = { 1 }; static BYTE bits3[] = { 1 };
static BYTE bits4[] = { 0x30,8, 2,1,0x81, 2,3,1,0,1 }; static BYTE bits4[] = { 0x30,8, 2,1,0x81, 2,3,1,0,1 }; /* ASN_SEQUENCE */
static BYTE bits5[] = { 0x30,9, 2,2,0,0x81, 2,3,1,0,1 }; static BYTE bits5[] = { 0x30,9, 2,2,0,0x81, 2,3,1,0,1 }; /* ASN_SEQUENCE */
static BYTE bits6[] = { 0x30,9, 2,2,0,0x82, 2,3,1,0,1 }; static BYTE bits6[] = { 0x30,9, 2,2,0,0x82, 2,3,1,0,1 }; /* ASN_SEQUENCE */
static BYTE bits7[] = { 0x04,8, 2,1,0x81, 2,3,1,0,1 }; /* ASN_OCTETSTRING */
static BYTE bits8[] = { 0x04,9, 2,2,0,0x81, 2,3,1,0,1 }; /* ASN_OCTETSTRING */
static BYTE bits9[] = { 0x04,9, 2,2,0,0x82, 2,3,1,0,1 }; /* ASN_OCTETSTRING */
/* crashes /* crashes
ret = CertComparePublicKeyInfo(0, NULL, NULL); ret = CertComparePublicKeyInfo(0, NULL, NULL);
@ -3206,14 +3209,26 @@ static void testComparePublicKeyInfo(void)
/* Empty public keys compare */ /* Empty public keys compare */
ret = CertComparePublicKeyInfo(0, &info1, &info2); ret = CertComparePublicKeyInfo(0, &info1, &info2);
ok(ret, "CertComparePublicKeyInfo failed: %08x\n", GetLastError()); ok(ret, "CertComparePublicKeyInfo failed: %08x\n", GetLastError());
ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info2);
todo_wine
ok(ret, "CertComparePublicKeyInfo failed: %08x\n", GetLastError());
/* Different OIDs appear to compare */ /* Different OIDs appear to compare */
info1.Algorithm.pszObjId = oid_rsa_rsa; info1.Algorithm.pszObjId = oid_rsa_rsa;
info2.Algorithm.pszObjId = oid_rsa_sha1rsa; info2.Algorithm.pszObjId = oid_rsa_sha1rsa;
ret = CertComparePublicKeyInfo(0, &info1, &info2); ret = CertComparePublicKeyInfo(0, &info1, &info2);
ok(ret, "CertComparePublicKeyInfo failed: %08x\n", GetLastError()); ok(ret, "CertComparePublicKeyInfo failed: %08x\n", GetLastError());
ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info2);
todo_wine
ok(ret, "CertComparePublicKeyInfo failed: %08x\n", GetLastError());
info2.Algorithm.pszObjId = oid_x957_dsa; info2.Algorithm.pszObjId = oid_x957_dsa;
ret = CertComparePublicKeyInfo(0, &info1, &info2); ret = CertComparePublicKeyInfo(0, &info1, &info2);
ok(ret, "CertComparePublicKeyInfo failed: %08x\n", GetLastError()); ok(ret, "CertComparePublicKeyInfo failed: %08x\n", GetLastError());
ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info2);
todo_wine
ok(ret, "CertComparePublicKeyInfo failed: %08x\n", GetLastError());
info1.PublicKey.cbData = sizeof(bits1); info1.PublicKey.cbData = sizeof(bits1);
info1.PublicKey.pbData = bits1; info1.PublicKey.pbData = bits1;
info1.PublicKey.cUnusedBits = 0; info1.PublicKey.cUnusedBits = 0;
@ -3222,6 +3237,10 @@ static void testComparePublicKeyInfo(void)
info2.PublicKey.cUnusedBits = 0; info2.PublicKey.cUnusedBits = 0;
ret = CertComparePublicKeyInfo(0, &info1, &info2); ret = CertComparePublicKeyInfo(0, &info1, &info2);
ok(ret, "CertComparePublicKeyInfo failed: %08x\n", GetLastError()); ok(ret, "CertComparePublicKeyInfo failed: %08x\n", GetLastError());
ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info2);
todo_wine
ok(ret, "CertComparePublicKeyInfo failed: %08x\n", GetLastError());
info2.Algorithm.pszObjId = oid_rsa_rsa; info2.Algorithm.pszObjId = oid_rsa_rsa;
info1.PublicKey.cbData = sizeof(bits4); info1.PublicKey.cbData = sizeof(bits4);
info1.PublicKey.pbData = bits4; info1.PublicKey.pbData = bits4;
@ -3233,6 +3252,7 @@ static void testComparePublicKeyInfo(void)
ok(!ret, "CertComparePublicKeyInfo: as raw binary: keys should be unequal\n"); ok(!ret, "CertComparePublicKeyInfo: as raw binary: keys should be unequal\n");
ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info2); ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info2);
ok(ret, "CertComparePublicKeyInfo: as ASN.1 encoded: keys should be equal\n"); ok(ret, "CertComparePublicKeyInfo: as ASN.1 encoded: keys should be equal\n");
info1.PublicKey.cUnusedBits = 1; info1.PublicKey.cUnusedBits = 1;
info2.PublicKey.cUnusedBits = 5; info2.PublicKey.cUnusedBits = 5;
ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info2); ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info2);
@ -3252,11 +3272,38 @@ static void testComparePublicKeyInfo(void)
ret = CertComparePublicKeyInfo(0, &info1, &info2); ret = CertComparePublicKeyInfo(0, &info1, &info2);
/* Simple (non-comparing) case */ /* Simple (non-comparing) case */
ok(!ret, "Expected keys not to compare\n"); ok(!ret, "Expected keys not to compare\n");
ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info2);
ok(!ret, "Expected keys not to compare\n");
info2.PublicKey.cbData = sizeof(bits1); info2.PublicKey.cbData = sizeof(bits1);
info2.PublicKey.pbData = bits1; info2.PublicKey.pbData = bits1;
info2.PublicKey.cUnusedBits = 0; info2.PublicKey.cUnusedBits = 0;
ret = CertComparePublicKeyInfo(0, &info1, &info2); ret = CertComparePublicKeyInfo(0, &info1, &info2);
ok(!ret, "Expected keys not to compare\n"); ok(!ret, "Expected keys not to compare\n");
ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info2);
ok(!ret, "Expected keys not to compare\n");
info1.PublicKey.cbData = sizeof(bits7);
info1.PublicKey.pbData = bits7;
info1.PublicKey.cUnusedBits = 0;
info2.PublicKey.cbData = sizeof(bits8);
info2.PublicKey.pbData = bits8;
info2.PublicKey.cUnusedBits = 0;
ret = CertComparePublicKeyInfo(0, &info1, &info2);
ok(!ret, "CertComparePublicKeyInfo: as raw binary: keys should be unequal\n");
ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info2);
ok(!ret, "CertComparePublicKeyInfo: as ASN.1 encoded: keys should be unequal\n");
ret = CertComparePublicKeyInfo(0, &info1, &info1);
ok(ret, "CertComparePublicKeyInfo: as raw binary: keys should be equal\n");
ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info1);
todo_wine
ok(ret, "CertComparePublicKeyInfo: as ASN.1 encoded: keys should be equal\n");
info1.PublicKey.cbData--; /* kill one byte, make ASN.1 encoded data invalid */
ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info1);
todo_wine
ok(ret, "CertComparePublicKeyInfo: as ASN.1 encoded: keys should be equal\n");
/* ASN.1 encoded non-comparing case */ /* ASN.1 encoded non-comparing case */
info1.PublicKey.cbData = sizeof(bits5); info1.PublicKey.cbData = sizeof(bits5);
info1.PublicKey.pbData = bits5; info1.PublicKey.pbData = bits5;
@ -3266,6 +3313,16 @@ static void testComparePublicKeyInfo(void)
info2.PublicKey.cUnusedBits = 0; info2.PublicKey.cUnusedBits = 0;
ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info2); ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info2);
ok(!ret, "CertComparePublicKeyInfo: different keys should be unequal\n"); ok(!ret, "CertComparePublicKeyInfo: different keys should be unequal\n");
/* ASN.1 encoded non-comparing case */
info1.PublicKey.cbData = sizeof(bits8);
info1.PublicKey.pbData = bits8;
info1.PublicKey.cUnusedBits = 0;
info2.PublicKey.cbData = sizeof(bits9);
info2.PublicKey.pbData = bits9;
info2.PublicKey.cUnusedBits = 0;
ret = CertComparePublicKeyInfo(X509_ASN_ENCODING, &info1, &info2);
ok(!ret, "CertComparePublicKeyInfo: different keys should be unequal\n");
} }
static void testHashPublicKeyInfo(void) static void testHashPublicKeyInfo(void)