1 // -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
2 // Any copyright is dedicated to the Public Domain.
3 // http://creativecommons.org/publicdomain/zero/1.0/
6 // Tests exporting a certificate and key as a PKCS#12 blob and importing it
7 // again with a new password set.
11 const gCertDB = Cc["@mozilla.org/security/x509certdb;1"].getService(
15 const PKCS12_FILE = "test_certDB_import/cert_from_windows.pfx";
16 const CERT_COMMON_NAME = "test_cert_from_windows";
17 const TEST_CERT_PASSWORD = "黒い";
19 function findCertByCommonName(commonName) {
20 for (let cert of gCertDB.getCerts()) {
21 if (cert.commonName == commonName) {
29 // Import the certificate and key so we have something to export.
30 let cert = findCertByCommonName(CERT_COMMON_NAME);
31 equal(cert, null, "cert should not be found before import");
32 let certFile = do_get_file(PKCS12_FILE);
33 ok(certFile, `${PKCS12_FILE} should exist`);
34 let errorCode = gCertDB.importPKCS12File(certFile, TEST_CERT_PASSWORD);
35 equal(errorCode, Ci.nsIX509CertDB.Success, "cert should be imported");
36 cert = findCertByCommonName(CERT_COMMON_NAME);
37 notEqual(cert, null, "cert should be found now");
39 // Export the certificate and key.
40 let output = do_get_tempdir();
41 output.append("output.p12");
42 ok(!output.exists(), "output shouldn't exist before exporting PKCS12 file");
43 errorCode = gCertDB.exportPKCS12File(output, [cert], TEST_CERT_PASSWORD);
44 equal(errorCode, Ci.nsIX509CertDB.Success, "cert should be exported");
45 ok(output.exists(), "output should exist after exporting PKCS12 file");
47 // We should be able to import the exported blob again using the new password.
48 errorCode = gCertDB.importPKCS12File(output, TEST_CERT_PASSWORD);
49 equal(errorCode, Ci.nsIX509CertDB.Success, "cert should be imported");
50 output.remove(false /* not a directory; recursive doesn't apply */);
52 // Ideally there would be some way to confirm that this actually did anything.
53 // Unfortunately, since deleting a certificate currently doesn't actually do
54 // anything until the platform is restarted, we can't confirm that we
55 // successfully re-imported the certificate.