| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/common/net/x509_certificate_model.h" | 5 #include "chrome/common/net/x509_certificate_model.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
| 10 #include "net/base/test_data_directory.h" | 10 #include "net/base/test_data_directory.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 "punycodetest.pem")); | 30 "punycodetest.pem")); |
| 31 ASSERT_TRUE(punycode_cert.get()); | 31 ASSERT_TRUE(punycode_cert.get()); |
| 32 EXPECT_EQ("xn--wgv71a119e.com (日本語.com)", | 32 EXPECT_EQ("xn--wgv71a119e.com (日本語.com)", |
| 33 x509_certificate_model::GetCertNameOrNickname( | 33 x509_certificate_model::GetCertNameOrNickname( |
| 34 punycode_cert->os_cert_handle())); | 34 punycode_cert->os_cert_handle())); |
| 35 | 35 |
| 36 scoped_refptr<net::X509Certificate> no_cn_cert( | 36 scoped_refptr<net::X509Certificate> no_cn_cert( |
| 37 net::ImportCertFromFile(net::GetTestCertsDirectory(), | 37 net::ImportCertFromFile(net::GetTestCertsDirectory(), |
| 38 "no_subject_common_name_cert.pem")); | 38 "no_subject_common_name_cert.pem")); |
| 39 ASSERT_TRUE(no_cn_cert.get()); | 39 ASSERT_TRUE(no_cn_cert.get()); |
| 40 #if defined(USE_OPENSSL_CERTS) | |
| 41 EXPECT_EQ("emailAddress=wtc@google.com", | |
| 42 x509_certificate_model::GetCertNameOrNickname( | |
| 43 no_cn_cert->os_cert_handle())); | |
| 44 #else | |
| 45 // Temp cert has no nickname. | 40 // Temp cert has no nickname. |
| 46 EXPECT_EQ("", | 41 EXPECT_EQ("", |
| 47 x509_certificate_model::GetCertNameOrNickname( | 42 x509_certificate_model::GetCertNameOrNickname( |
| 48 no_cn_cert->os_cert_handle())); | 43 no_cn_cert->os_cert_handle())); |
| 49 #endif | |
| 50 | 44 |
| 51 EXPECT_EQ("xn--wgv71a119e.com", | 45 EXPECT_EQ("xn--wgv71a119e.com", |
| 52 x509_certificate_model::GetTitle( | 46 x509_certificate_model::GetTitle( |
| 53 punycode_cert->os_cert_handle())); | 47 punycode_cert->os_cert_handle())); |
| 54 | 48 |
| 55 #if defined(USE_OPENSSL_CERTS) | |
| 56 EXPECT_EQ("emailAddress=wtc@google.com", | |
| 57 x509_certificate_model::GetTitle( | |
| 58 no_cn_cert->os_cert_handle())); | |
| 59 #else | |
| 60 EXPECT_EQ("E=wtc@google.com", | 49 EXPECT_EQ("E=wtc@google.com", |
| 61 x509_certificate_model::GetTitle( | 50 x509_certificate_model::GetTitle( |
| 62 no_cn_cert->os_cert_handle())); | 51 no_cn_cert->os_cert_handle())); |
| 63 #endif | |
| 64 | 52 |
| 65 scoped_refptr<net::X509Certificate> no_cn_cert2(net::ImportCertFromFile( | 53 scoped_refptr<net::X509Certificate> no_cn_cert2(net::ImportCertFromFile( |
| 66 net::GetTestCertsDirectory(), "ct-test-embedded-cert.pem")); | 54 net::GetTestCertsDirectory(), "ct-test-embedded-cert.pem")); |
| 67 ASSERT_TRUE(no_cn_cert2.get()); | 55 ASSERT_TRUE(no_cn_cert2.get()); |
| 68 EXPECT_EQ("L=Erw Wen,ST=Wales,O=Certificate Transparency,C=GB", | 56 EXPECT_EQ("L=Erw Wen,ST=Wales,O=Certificate Transparency,C=GB", |
| 69 x509_certificate_model::GetTitle(no_cn_cert2->os_cert_handle())); | 57 x509_certificate_model::GetTitle(no_cn_cert2->os_cert_handle())); |
| 70 } | 58 } |
| 71 | 59 |
| 72 TEST(X509CertificateModelTest, GetExtensions) { | 60 TEST(X509CertificateModelTest, GetExtensions) { |
| 73 { | 61 { |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 extensions[3].value); | 206 extensions[3].value); |
| 219 } | 207 } |
| 220 } | 208 } |
| 221 | 209 |
| 222 TEST(X509CertificateModelTest, GetTypeCA) { | 210 TEST(X509CertificateModelTest, GetTypeCA) { |
| 223 scoped_refptr<net::X509Certificate> cert( | 211 scoped_refptr<net::X509Certificate> cert( |
| 224 net::ImportCertFromFile(net::GetTestCertsDirectory(), | 212 net::ImportCertFromFile(net::GetTestCertsDirectory(), |
| 225 "root_ca_cert.pem")); | 213 "root_ca_cert.pem")); |
| 226 ASSERT_TRUE(cert.get()); | 214 ASSERT_TRUE(cert.get()); |
| 227 | 215 |
| 228 #if defined(USE_OPENSSL_CERTS) | |
| 229 // Remove this when OpenSSL build implements the necessary functions. | |
| 230 EXPECT_EQ(net::OTHER_CERT, | |
| 231 x509_certificate_model::GetType(cert->os_cert_handle())); | |
| 232 #else | |
| 233 EXPECT_EQ(net::CA_CERT, | 216 EXPECT_EQ(net::CA_CERT, |
| 234 x509_certificate_model::GetType(cert->os_cert_handle())); | 217 x509_certificate_model::GetType(cert->os_cert_handle())); |
| 235 | 218 |
| 236 crypto::ScopedTestNSSDB test_nssdb; | 219 crypto::ScopedTestNSSDB test_nssdb; |
| 237 net::NSSCertDatabase db(crypto::ScopedPK11Slot(PK11_ReferenceSlot( | 220 net::NSSCertDatabase db(crypto::ScopedPK11Slot(PK11_ReferenceSlot( |
| 238 test_nssdb.slot())) /* public slot */, | 221 test_nssdb.slot())) /* public slot */, |
| 239 crypto::ScopedPK11Slot(PK11_ReferenceSlot( | 222 crypto::ScopedPK11Slot(PK11_ReferenceSlot( |
| 240 test_nssdb.slot())) /* private slot */); | 223 test_nssdb.slot())) /* private slot */); |
| 241 | 224 |
| 242 // Test that explicitly distrusted CA certs are still returned as CA_CERT | 225 // Test that explicitly distrusted CA certs are still returned as CA_CERT |
| 243 // type. See http://crbug.com/96654. | 226 // type. See http://crbug.com/96654. |
| 244 EXPECT_TRUE(db.SetCertTrust( | 227 EXPECT_TRUE(db.SetCertTrust( |
| 245 cert.get(), net::CA_CERT, net::NSSCertDatabase::DISTRUSTED_SSL)); | 228 cert.get(), net::CA_CERT, net::NSSCertDatabase::DISTRUSTED_SSL)); |
| 246 | 229 |
| 247 EXPECT_EQ(net::CA_CERT, | 230 EXPECT_EQ(net::CA_CERT, |
| 248 x509_certificate_model::GetType(cert->os_cert_handle())); | 231 x509_certificate_model::GetType(cert->os_cert_handle())); |
| 249 #endif | |
| 250 } | 232 } |
| 251 | 233 |
| 252 TEST(X509CertificateModelTest, GetTypeServer) { | 234 TEST(X509CertificateModelTest, GetTypeServer) { |
| 253 scoped_refptr<net::X509Certificate> cert( | 235 scoped_refptr<net::X509Certificate> cert( |
| 254 net::ImportCertFromFile(net::GetTestCertsDirectory(), | 236 net::ImportCertFromFile(net::GetTestCertsDirectory(), |
| 255 "google.single.der")); | 237 "google.single.der")); |
| 256 ASSERT_TRUE(cert.get()); | 238 ASSERT_TRUE(cert.get()); |
| 257 | 239 |
| 258 #if defined(USE_OPENSSL_CERTS) | |
| 259 // Remove this when OpenSSL build implements the necessary functions. | |
| 260 EXPECT_EQ(net::OTHER_CERT, | |
| 261 x509_certificate_model::GetType(cert->os_cert_handle())); | |
| 262 #else | |
| 263 // Test mozilla_security_manager::GetCertType with server certs and default | 240 // Test mozilla_security_manager::GetCertType with server certs and default |
| 264 // trust. Currently this doesn't work. | 241 // trust. Currently this doesn't work. |
| 265 // TODO(mattm): make mozilla_security_manager::GetCertType smarter so we can | 242 // TODO(mattm): make mozilla_security_manager::GetCertType smarter so we can |
| 266 // tell server certs even if they have no trust bits set. | 243 // tell server certs even if they have no trust bits set. |
| 267 EXPECT_EQ(net::OTHER_CERT, | 244 EXPECT_EQ(net::OTHER_CERT, |
| 268 x509_certificate_model::GetType(cert->os_cert_handle())); | 245 x509_certificate_model::GetType(cert->os_cert_handle())); |
| 269 | 246 |
| 270 crypto::ScopedTestNSSDB test_nssdb; | 247 crypto::ScopedTestNSSDB test_nssdb; |
| 271 net::NSSCertDatabase db(crypto::ScopedPK11Slot(PK11_ReferenceSlot( | 248 net::NSSCertDatabase db(crypto::ScopedPK11Slot(PK11_ReferenceSlot( |
| 272 test_nssdb.slot())) /* public slot */, | 249 test_nssdb.slot())) /* public slot */, |
| 273 crypto::ScopedPK11Slot(PK11_ReferenceSlot( | 250 crypto::ScopedPK11Slot(PK11_ReferenceSlot( |
| 274 test_nssdb.slot())) /* private slot */); | 251 test_nssdb.slot())) /* private slot */); |
| 275 | 252 |
| 276 // Test GetCertType with server certs and explicit trust. | 253 // Test GetCertType with server certs and explicit trust. |
| 277 EXPECT_TRUE(db.SetCertTrust( | 254 EXPECT_TRUE(db.SetCertTrust( |
| 278 cert.get(), net::SERVER_CERT, net::NSSCertDatabase::TRUSTED_SSL)); | 255 cert.get(), net::SERVER_CERT, net::NSSCertDatabase::TRUSTED_SSL)); |
| 279 | 256 |
| 280 EXPECT_EQ(net::SERVER_CERT, | 257 EXPECT_EQ(net::SERVER_CERT, |
| 281 x509_certificate_model::GetType(cert->os_cert_handle())); | 258 x509_certificate_model::GetType(cert->os_cert_handle())); |
| 282 | 259 |
| 283 // Test GetCertType with server certs and explicit distrust. | 260 // Test GetCertType with server certs and explicit distrust. |
| 284 EXPECT_TRUE(db.SetCertTrust( | 261 EXPECT_TRUE(db.SetCertTrust( |
| 285 cert.get(), net::SERVER_CERT, net::NSSCertDatabase::DISTRUSTED_SSL)); | 262 cert.get(), net::SERVER_CERT, net::NSSCertDatabase::DISTRUSTED_SSL)); |
| 286 | 263 |
| 287 EXPECT_EQ(net::SERVER_CERT, | 264 EXPECT_EQ(net::SERVER_CERT, |
| 288 x509_certificate_model::GetType(cert->os_cert_handle())); | 265 x509_certificate_model::GetType(cert->os_cert_handle())); |
| 289 #endif | |
| 290 } | 266 } |
| 291 | 267 |
| 292 // An X.509 v1 certificate with the version field omitted should get | 268 // An X.509 v1 certificate with the version field omitted should get |
| 293 // the default value v1. | 269 // the default value v1. |
| 294 TEST(X509CertificateModelTest, GetVersionOmitted) { | 270 TEST(X509CertificateModelTest, GetVersionOmitted) { |
| 295 scoped_refptr<net::X509Certificate> cert( | 271 scoped_refptr<net::X509Certificate> cert( |
| 296 net::ImportCertFromFile(net::GetTestCertsDirectory(), | 272 net::ImportCertFromFile(net::GetTestCertsDirectory(), |
| 297 "ndn.ca.crt")); | 273 "ndn.ca.crt")); |
| 298 ASSERT_TRUE(cert.get()); | 274 ASSERT_TRUE(cert.get()); |
| 299 | 275 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 318 | 294 |
| 319 ASSERT_FALSE(pkcs7_string.empty()); | 295 ASSERT_FALSE(pkcs7_string.empty()); |
| 320 | 296 |
| 321 net::CertificateList decoded_certs = | 297 net::CertificateList decoded_certs = |
| 322 net::X509Certificate::CreateCertificateListFromBytes( | 298 net::X509Certificate::CreateCertificateListFromBytes( |
| 323 pkcs7_string.data(), | 299 pkcs7_string.data(), |
| 324 pkcs7_string.size(), | 300 pkcs7_string.size(), |
| 325 net::X509Certificate::FORMAT_PKCS7); | 301 net::X509Certificate::FORMAT_PKCS7); |
| 326 | 302 |
| 327 ASSERT_EQ(certs.size(), decoded_certs.size()); | 303 ASSERT_EQ(certs.size(), decoded_certs.size()); |
| 328 #if defined(USE_OPENSSL_CERTS) | 304 |
| 329 for (size_t i = 0; i < certs.size(); ++i) | |
| 330 EXPECT_TRUE(certs[i]->Equals(decoded_certs[i].get())); | |
| 331 #else | |
| 332 // NSS sorts the certs before writing the file. | 305 // NSS sorts the certs before writing the file. |
| 333 EXPECT_TRUE(certs[0]->Equals(decoded_certs.back().get())); | 306 EXPECT_TRUE(certs[0]->Equals(decoded_certs.back().get())); |
| 334 for (size_t i = 1; i < certs.size(); ++i) | 307 for (size_t i = 1; i < certs.size(); ++i) |
| 335 EXPECT_TRUE(certs[i]->Equals(decoded_certs[i - 1].get())); | 308 EXPECT_TRUE(certs[i]->Equals(decoded_certs[i - 1].get())); |
| 336 #endif | |
| 337 } | 309 } |
| 338 | 310 |
| 339 { | 311 { |
| 340 // Write only the first cert. | 312 // Write only the first cert. |
| 341 std::string pkcs7_string = | 313 std::string pkcs7_string = |
| 342 x509_certificate_model::GetCMSString(cert_handles, 0, 1); | 314 x509_certificate_model::GetCMSString(cert_handles, 0, 1); |
| 343 | 315 |
| 344 net::CertificateList decoded_certs = | 316 net::CertificateList decoded_certs = |
| 345 net::X509Certificate::CreateCertificateListFromBytes( | 317 net::X509Certificate::CreateCertificateListFromBytes( |
| 346 pkcs7_string.data(), | 318 pkcs7_string.data(), |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 "35 61 5D C9 76 6D B0 F2 1E BF 30 86 D8 77 52 36\n" | 375 "35 61 5D C9 76 6D B0 F2 1E BF 30 86 D8 77 52 36\n" |
| 404 "95 97 0E D1 46 C5 ED 81 3D 1B B0 F2 61 95 3C C1\n" | 376 "95 97 0E D1 46 C5 ED 81 3D 1B B0 F2 61 95 3C C1\n" |
| 405 "40 38 EF 5F 5D BA 61 9F EF 2B 9C 9F 85 89 74 70\n" | 377 "40 38 EF 5F 5D BA 61 9F EF 2B 9C 9F 85 89 74 70\n" |
| 406 "63 D5 76 E8 35 7E CE 01 E1 F3 11 11 90 1C 0D F5\n" | 378 "63 D5 76 E8 35 7E CE 01 E1 F3 11 11 90 1C 0D F5\n" |
| 407 "FD 8D CE 10 6C AD 7C 55 1A 21 6F D7 2D F4 78 15\n" | 379 "FD 8D CE 10 6C AD 7C 55 1A 21 6F D7 2D F4 78 15\n" |
| 408 "EA 2F 38 BD 91 9E 3C 1D 07 46 F5 43 C1 82 8B AF\n" | 380 "EA 2F 38 BD 91 9E 3C 1D 07 46 F5 43 C1 82 8B AF\n" |
| 409 "12 53 65 19 8A 69 69 66 06 B2 DA 0B FA 2A 00 A1\n" | 381 "12 53 65 19 8A 69 69 66 06 B2 DA 0B FA 2A 00 A1\n" |
| 410 "2A 15 84 49 F1 01 BF 9B 30 06 D0 15 A0 1F 9D 51\n" | 382 "2A 15 84 49 F1 01 BF 9B 30 06 D0 15 A0 1F 9D 51\n" |
| 411 "91 47 E1 53 5F EF 5E EC C2 61 79 C2 14 9F C4 E3\n" | 383 "91 47 E1 53 5F EF 5E EC C2 61 79 C2 14 9F C4 E3\n" |
| 412 "\n" | 384 "\n" |
| 413 #if defined(USE_OPENSSL_CERTS) | |
| 414 " Public Exponent (17 bits):\n" | |
| 415 #else | |
| 416 " Public Exponent (24 bits):\n" | 385 " Public Exponent (24 bits):\n" |
| 417 #endif | |
| 418 " 01 00 01", | 386 " 01 00 01", |
| 419 x509_certificate_model::ProcessSubjectPublicKeyInfo( | 387 x509_certificate_model::ProcessSubjectPublicKeyInfo( |
| 420 cert->os_cert_handle())); | 388 cert->os_cert_handle())); |
| 421 } | 389 } |
| 422 { | 390 { |
| 423 scoped_refptr<net::X509Certificate> cert(net::ImportCertFromFile( | 391 scoped_refptr<net::X509Certificate> cert(net::ImportCertFromFile( |
| 424 net::GetTestCertsDirectory(), "prime256v1-ecdsa-intermediate.pem")); | 392 net::GetTestCertsDirectory(), "prime256v1-ecdsa-intermediate.pem")); |
| 425 ASSERT_TRUE(cert.get()); | 393 ASSERT_TRUE(cert.get()); |
| 426 | 394 |
| 427 EXPECT_EQ( | 395 EXPECT_EQ( |
| (...skipping 25 matching lines...) Expand all Loading... |
| 453 "10 21 14 7F 1B 70 3D 89 1A 40 8A 06 2C 5D 50 19\n" | 421 "10 21 14 7F 1B 70 3D 89 1A 40 8A 06 2C 5D 50 19\n" |
| 454 "62 F9 C7 45 89 F2 3D 66 05 3D 7D 75 5B 55 1E 80\n" | 422 "62 F9 C7 45 89 F2 3D 66 05 3D 7D 75 5B 55 1E 80\n" |
| 455 "42 72 A1 9A 7C 6D 0A 74 F6 EE A6 21 6C 3A 98 FB\n" | 423 "42 72 A1 9A 7C 6D 0A 74 F6 EE A6 21 6C 3A 98 FB\n" |
| 456 "77 82 5F F2 6B 56 E6 DD 9B 8E 50 F0 C6 AE FD EA\n" | 424 "77 82 5F F2 6B 56 E6 DD 9B 8E 50 F0 C6 AE FD EA\n" |
| 457 "A6 05 07 A9 26 06 56 B3 B2 D9 B2 37 A0 21 3E 79\n" | 425 "A6 05 07 A9 26 06 56 B3 B2 D9 B2 37 A0 21 3E 79\n" |
| 458 "06 1F B9 51 BE F4 B1 49 4D 90 B5 33 E5 0E C7 5E\n" | 426 "06 1F B9 51 BE F4 B1 49 4D 90 B5 33 E5 0E C7 5E\n" |
| 459 "5B 40 C5 6A 04 D1 43 7A 94 6A A4 4F 61 FC 82 E0", | 427 "5B 40 C5 6A 04 D1 43 7A 94 6A A4 4F 61 FC 82 E0", |
| 460 x509_certificate_model::ProcessRawBitsSignatureWrap( | 428 x509_certificate_model::ProcessRawBitsSignatureWrap( |
| 461 cert->os_cert_handle())); | 429 cert->os_cert_handle())); |
| 462 } | 430 } |
| OLD | NEW |