| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <cert.h> | 5 #include <cert.h> |
| 6 #include <pk11pub.h> | 6 #include <pk11pub.h> |
| 7 | 7 |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 | 9 |
| 10 #include "base/file_path.h" | 10 #include "base/file_path.h" |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 EXPECT_LT(0U, certs.size()); | 146 EXPECT_LT(0U, certs.size()); |
| 147 } | 147 } |
| 148 | 148 |
| 149 TEST_F(CertDatabaseNSSTest, ImportFromPKCS12WrongPassword) { | 149 TEST_F(CertDatabaseNSSTest, ImportFromPKCS12WrongPassword) { |
| 150 std::string pkcs12_data = ReadTestFile("client.p12"); | 150 std::string pkcs12_data = ReadTestFile("client.p12"); |
| 151 | 151 |
| 152 EXPECT_EQ(ERR_PKCS12_IMPORT_BAD_PASSWORD, | 152 EXPECT_EQ(ERR_PKCS12_IMPORT_BAD_PASSWORD, |
| 153 cert_db_.ImportFromPKCS12(slot_, | 153 cert_db_.ImportFromPKCS12(slot_, |
| 154 pkcs12_data, | 154 pkcs12_data, |
| 155 ASCIIToUTF16(""), | 155 ASCIIToUTF16(""), |
| 156 true)); // is_extractable | 156 true, // is_extractable |
| 157 NULL)); |
| 157 | 158 |
| 158 // Test db should still be empty. | 159 // Test db should still be empty. |
| 159 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); | 160 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); |
| 160 } | 161 } |
| 161 | 162 |
| 162 TEST_F(CertDatabaseNSSTest, ImportFromPKCS12AsExtractableAndExportAgain) { | 163 TEST_F(CertDatabaseNSSTest, ImportFromPKCS12AsExtractableAndExportAgain) { |
| 163 std::string pkcs12_data = ReadTestFile("client.p12"); | 164 std::string pkcs12_data = ReadTestFile("client.p12"); |
| 164 | 165 |
| 165 EXPECT_EQ(OK, cert_db_.ImportFromPKCS12(slot_, | 166 EXPECT_EQ(OK, cert_db_.ImportFromPKCS12(slot_, |
| 166 pkcs12_data, | 167 pkcs12_data, |
| 167 ASCIIToUTF16("12345"), | 168 ASCIIToUTF16("12345"), |
| 168 true)); // is_extractable | 169 true, // is_extractable |
| 170 NULL)); |
| 169 | 171 |
| 170 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 172 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
| 171 ASSERT_EQ(1U, cert_list.size()); | 173 ASSERT_EQ(1U, cert_list.size()); |
| 172 scoped_refptr<X509Certificate> cert(cert_list[0]); | 174 scoped_refptr<X509Certificate> cert(cert_list[0]); |
| 173 | 175 |
| 174 EXPECT_EQ("testusercert", | 176 EXPECT_EQ("testusercert", |
| 175 cert->subject().common_name); | 177 cert->subject().common_name); |
| 176 | 178 |
| 177 // TODO(mattm): move export test to separate test case? | 179 // TODO(mattm): move export test to separate test case? |
| 178 std::string exported_data; | 180 std::string exported_data; |
| 179 EXPECT_EQ(1, cert_db_.ExportToPKCS12(cert_list, ASCIIToUTF16("exportpw"), | 181 EXPECT_EQ(1, cert_db_.ExportToPKCS12(cert_list, ASCIIToUTF16("exportpw"), |
| 180 &exported_data)); | 182 &exported_data)); |
| 181 ASSERT_LT(0U, exported_data.size()); | 183 ASSERT_LT(0U, exported_data.size()); |
| 182 // TODO(mattm): further verification of exported data? | 184 // TODO(mattm): further verification of exported data? |
| 183 } | 185 } |
| 184 | 186 |
| 185 TEST_F(CertDatabaseNSSTest, ImportFromPKCS12Twice) { | 187 TEST_F(CertDatabaseNSSTest, ImportFromPKCS12Twice) { |
| 186 std::string pkcs12_data = ReadTestFile("client.p12"); | 188 std::string pkcs12_data = ReadTestFile("client.p12"); |
| 187 | 189 |
| 188 EXPECT_EQ(OK, cert_db_.ImportFromPKCS12(slot_, | 190 EXPECT_EQ(OK, cert_db_.ImportFromPKCS12(slot_, |
| 189 pkcs12_data, | 191 pkcs12_data, |
| 190 ASCIIToUTF16("12345"), | 192 ASCIIToUTF16("12345"), |
| 191 true)); // is_extractable | 193 true, // is_extractable |
| 194 NULL)); |
| 192 EXPECT_EQ(1U, ListCertsInSlot(slot_->os_module_handle()).size()); | 195 EXPECT_EQ(1U, ListCertsInSlot(slot_->os_module_handle()).size()); |
| 193 | 196 |
| 194 // NSS has a SEC_ERROR_PKCS12_DUPLICATE_DATA error, but it doesn't look like | 197 // NSS has a SEC_ERROR_PKCS12_DUPLICATE_DATA error, but it doesn't look like |
| 195 // it's ever used. This test verifies that. | 198 // it's ever used. This test verifies that. |
| 196 EXPECT_EQ(OK, cert_db_.ImportFromPKCS12(slot_, | 199 EXPECT_EQ(OK, cert_db_.ImportFromPKCS12(slot_, |
| 197 pkcs12_data, | 200 pkcs12_data, |
| 198 ASCIIToUTF16("12345"), | 201 ASCIIToUTF16("12345"), |
| 199 true)); // is_extractable | 202 true, // is_extractable |
| 203 NULL)); |
| 200 EXPECT_EQ(1U, ListCertsInSlot(slot_->os_module_handle()).size()); | 204 EXPECT_EQ(1U, ListCertsInSlot(slot_->os_module_handle()).size()); |
| 201 } | 205 } |
| 202 | 206 |
| 203 TEST_F(CertDatabaseNSSTest, ImportFromPKCS12AsUnextractableAndExportAgain) { | 207 TEST_F(CertDatabaseNSSTest, ImportFromPKCS12AsUnextractableAndExportAgain) { |
| 204 std::string pkcs12_data = ReadTestFile("client.p12"); | 208 std::string pkcs12_data = ReadTestFile("client.p12"); |
| 205 | 209 |
| 206 EXPECT_EQ(OK, cert_db_.ImportFromPKCS12(slot_, | 210 EXPECT_EQ(OK, cert_db_.ImportFromPKCS12(slot_, |
| 207 pkcs12_data, | 211 pkcs12_data, |
| 208 ASCIIToUTF16("12345"), | 212 ASCIIToUTF16("12345"), |
| 209 false)); // is_extractable | 213 false, // is_extractable |
| 214 NULL)); |
| 210 | 215 |
| 211 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 216 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
| 212 ASSERT_EQ(1U, cert_list.size()); | 217 ASSERT_EQ(1U, cert_list.size()); |
| 213 scoped_refptr<X509Certificate> cert(cert_list[0]); | 218 scoped_refptr<X509Certificate> cert(cert_list[0]); |
| 214 | 219 |
| 215 EXPECT_EQ("testusercert", | 220 EXPECT_EQ("testusercert", |
| 216 cert->subject().common_name); | 221 cert->subject().common_name); |
| 217 | 222 |
| 218 std::string exported_data; | 223 std::string exported_data; |
| 219 EXPECT_EQ(0, cert_db_.ExportToPKCS12(cert_list, ASCIIToUTF16("exportpw"), | 224 EXPECT_EQ(0, cert_db_.ExportToPKCS12(cert_list, ASCIIToUTF16("exportpw"), |
| 220 &exported_data)); | 225 &exported_data)); |
| 221 } | 226 } |
| 222 | 227 |
| 223 // Importing a PKCS#12 file with a certificate but no corresponding | 228 // Importing a PKCS#12 file with a certificate but no corresponding |
| 224 // private key should not mark an existing private key as unextractable. | 229 // private key should not mark an existing private key as unextractable. |
| 225 TEST_F(CertDatabaseNSSTest, ImportFromPKCS12OnlyMarkIncludedKey) { | 230 TEST_F(CertDatabaseNSSTest, ImportFromPKCS12OnlyMarkIncludedKey) { |
| 226 std::string pkcs12_data = ReadTestFile("client.p12"); | 231 std::string pkcs12_data = ReadTestFile("client.p12"); |
| 227 EXPECT_EQ(OK, cert_db_.ImportFromPKCS12(slot_, | 232 EXPECT_EQ(OK, cert_db_.ImportFromPKCS12(slot_, |
| 228 pkcs12_data, | 233 pkcs12_data, |
| 229 ASCIIToUTF16("12345"), | 234 ASCIIToUTF16("12345"), |
| 230 true)); // is_extractable | 235 true, // is_extractable |
| 236 NULL)); |
| 231 | 237 |
| 232 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); | 238 CertificateList cert_list = ListCertsInSlot(slot_->os_module_handle()); |
| 233 ASSERT_EQ(1U, cert_list.size()); | 239 ASSERT_EQ(1U, cert_list.size()); |
| 234 | 240 |
| 235 // Now import a PKCS#12 file with just a certificate but no private key. | 241 // Now import a PKCS#12 file with just a certificate but no private key. |
| 236 pkcs12_data = ReadTestFile("client-nokey.p12"); | 242 pkcs12_data = ReadTestFile("client-nokey.p12"); |
| 237 EXPECT_EQ(OK, cert_db_.ImportFromPKCS12(slot_, | 243 EXPECT_EQ(OK, cert_db_.ImportFromPKCS12(slot_, |
| 238 pkcs12_data, | 244 pkcs12_data, |
| 239 ASCIIToUTF16("12345"), | 245 ASCIIToUTF16("12345"), |
| 240 false)); // is_extractable | 246 false, // is_extractable |
| 247 NULL)); |
| 241 | 248 |
| 242 cert_list = ListCertsInSlot(slot_->os_module_handle()); | 249 cert_list = ListCertsInSlot(slot_->os_module_handle()); |
| 243 ASSERT_EQ(1U, cert_list.size()); | 250 ASSERT_EQ(1U, cert_list.size()); |
| 244 | 251 |
| 245 // Make sure the imported private key is still extractable. | 252 // Make sure the imported private key is still extractable. |
| 246 std::string exported_data; | 253 std::string exported_data; |
| 247 EXPECT_EQ(1, cert_db_.ExportToPKCS12(cert_list, ASCIIToUTF16("exportpw"), | 254 EXPECT_EQ(1, cert_db_.ExportToPKCS12(cert_list, ASCIIToUTF16("exportpw"), |
| 248 &exported_data)); | 255 &exported_data)); |
| 249 ASSERT_LT(0U, exported_data.size()); | 256 ASSERT_LT(0U, exported_data.size()); |
| 250 } | 257 } |
| 251 | 258 |
| 252 TEST_F(CertDatabaseNSSTest, ImportFromPKCS12InvalidFile) { | 259 TEST_F(CertDatabaseNSSTest, ImportFromPKCS12InvalidFile) { |
| 253 std::string pkcs12_data = "Foobarbaz"; | 260 std::string pkcs12_data = "Foobarbaz"; |
| 254 | 261 |
| 255 EXPECT_EQ(ERR_PKCS12_IMPORT_INVALID_FILE, | 262 EXPECT_EQ(ERR_PKCS12_IMPORT_INVALID_FILE, |
| 256 cert_db_.ImportFromPKCS12(slot_, | 263 cert_db_.ImportFromPKCS12(slot_, |
| 257 pkcs12_data, | 264 pkcs12_data, |
| 258 ASCIIToUTF16(""), | 265 ASCIIToUTF16(""), |
| 259 true)); // is_extractable | 266 true, // is_extractable |
| 267 NULL)); |
| 260 | 268 |
| 261 // Test db should still be empty. | 269 // Test db should still be empty. |
| 262 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); | 270 EXPECT_EQ(0U, ListCertsInSlot(slot_->os_module_handle()).size()); |
| 263 } | 271 } |
| 264 | 272 |
| 265 TEST_F(CertDatabaseNSSTest, ImportCACert_SSLTrust) { | 273 TEST_F(CertDatabaseNSSTest, ImportCACert_SSLTrust) { |
| 266 std::string cert_data = ReadTestFile("root_ca_cert.crt"); | 274 std::string cert_data = ReadTestFile("root_ca_cert.crt"); |
| 267 | 275 |
| 268 CertificateList certs = | 276 CertificateList certs = |
| 269 X509Certificate::CreateCertificateListFromBytes( | 277 X509Certificate::CreateCertificateListFromBytes( |
| (...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 576 puny_cert.get(), CA_CERT, | 584 puny_cert.get(), CA_CERT, |
| 577 CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL)); | 585 CertDatabase::TRUSTED_SSL | CertDatabase::TRUSTED_EMAIL)); |
| 578 | 586 |
| 579 verify_result.Reset(); | 587 verify_result.Reset(); |
| 580 error = puny_cert->Verify("xn--wgv71a119e.com", flags, NULL, &verify_result); | 588 error = puny_cert->Verify("xn--wgv71a119e.com", flags, NULL, &verify_result); |
| 581 EXPECT_EQ(OK, error); | 589 EXPECT_EQ(OK, error); |
| 582 EXPECT_EQ(0U, verify_result.cert_status); | 590 EXPECT_EQ(0U, verify_result.cert_status); |
| 583 } | 591 } |
| 584 | 592 |
| 585 } // namespace net | 593 } // namespace net |
| OLD | NEW |