mirror of
https://github.com/ManchildProductions/UXP-Fixed.git
synced 2026-06-12 16:28:53 +00:00
122 lines
5.1 KiB
JavaScript
122 lines
5.1 KiB
JavaScript
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
|
// Any copyright is dedicated to the Public Domain.
|
|
// http://creativecommons.org/publicdomain/zero/1.0/
|
|
"use strict";
|
|
|
|
// Tests the methods and attributes for interfacing with a PKCS #11 module and
|
|
// the module database.
|
|
|
|
// Ensure that the appropriate initialization has happened.
|
|
do_get_profile();
|
|
|
|
const gModuleDB = Cc["@mozilla.org/security/pkcs11moduledb;1"]
|
|
.getService(Ci.nsIPKCS11ModuleDB);
|
|
|
|
function checkTestModuleNotPresent() {
|
|
let modules = gModuleDB.listModules();
|
|
ok(modules.hasMoreElements(),
|
|
"One or more modules should be present with test module not present");
|
|
while (modules.hasMoreElements()) {
|
|
let module = modules.getNext().QueryInterface(Ci.nsIPKCS11Module);
|
|
notEqual(module.name, "PKCS11 Test Module",
|
|
"Non-test module name shouldn't equal 'PKCS11 Test Module'");
|
|
ok(!(module.libName && module.libName.includes("pkcs11testmodule")),
|
|
"Non-test module lib name should not include 'pkcs11testmodule'");
|
|
}
|
|
|
|
throws(() => gModuleDB.findModuleByName("PKCS11 Test Module"),
|
|
/NS_ERROR_FAILURE/, "Test module should not be findable by name");
|
|
}
|
|
|
|
/**
|
|
* Checks that the test module exists in the module list.
|
|
* Also checks various attributes of the test module for correctness.
|
|
*
|
|
* @returns {nsIPKCS11Module}
|
|
* The test module.
|
|
*/
|
|
function checkTestModuleExists() {
|
|
let modules = gModuleDB.listModules();
|
|
ok(modules.hasMoreElements(),
|
|
"One or more modules should be present with test module present");
|
|
let testModule = null;
|
|
while (modules.hasMoreElements()) {
|
|
let module = modules.getNext().QueryInterface(Ci.nsIPKCS11Module);
|
|
if (module.name == "PKCS11 Test Module") {
|
|
testModule = module;
|
|
break;
|
|
}
|
|
}
|
|
notEqual(testModule, null, "Test module should have been found");
|
|
notEqual(testModule.libName, null, "Test module lib name should not be null");
|
|
ok(testModule.libName.includes(ctypes.libraryName("pkcs11testmodule")),
|
|
"Test module lib name should include lib name of 'pkcs11testmodule'");
|
|
|
|
notEqual(gModuleDB.findModuleByName("PKCS11 Test Module"), null,
|
|
"Test module should be findable by name");
|
|
|
|
return testModule;
|
|
}
|
|
|
|
function run_test() {
|
|
// Check that if we have never added the test module, that we don't find it
|
|
// in the module list.
|
|
checkTestModuleNotPresent();
|
|
|
|
// Check that adding the test module makes it appear in the module list.
|
|
loadPKCS11TestModule(true);
|
|
let testModule = checkTestModuleExists();
|
|
|
|
// Check that listing the slots for the test module works.
|
|
let slots = testModule.listSlots();
|
|
let testModuleSlotNames = [];
|
|
while (slots.hasMoreElements()) {
|
|
let slot = slots.getNext().QueryInterface(Ci.nsIPKCS11Slot);
|
|
testModuleSlotNames.push(slot.name);
|
|
}
|
|
testModuleSlotNames.sort();
|
|
const expectedSlotNames = ["Test PKCS11 Slot", "Test PKCS11 Slot 二"];
|
|
deepEqual(testModuleSlotNames, expectedSlotNames,
|
|
"Actual and expected slot names should be equal");
|
|
|
|
// Check that finding the test slot by name is possible, and that trying to
|
|
// find a non-present slot fails.
|
|
notEqual(testModule.findSlotByName("Test PKCS11 Slot"), null,
|
|
"Test slot should be findable by name");
|
|
throws(() => testModule.findSlotByName("Not Present"), /NS_ERROR_FAILURE/,
|
|
"Non-present slot should not be findable by name");
|
|
|
|
// Check that the strangely named nsIPKCS11ModuleDB.findSlotByName() works.
|
|
// In particular, a comment in nsPKCS11Slot.cpp notes that the method
|
|
// "is essentially the same as nsIPK11Token::findTokenByName, except that it
|
|
// returns an nsIPKCS11Slot".
|
|
let strBundleSvc = Cc["@mozilla.org/intl/stringbundle;1"]
|
|
.getService(Ci.nsIStringBundleService);
|
|
let bundle =
|
|
strBundleSvc.createBundle("chrome://pipnss/locale/pipnss.properties");
|
|
let internalTokenName = bundle.GetStringFromName("PrivateTokenDescription");
|
|
let internalTokenAsSlot = gModuleDB.findSlotByName(internalTokenName);
|
|
notEqual(internalTokenAsSlot, null,
|
|
"Internal 'slot' should be findable by name via the module DB");
|
|
ok(internalTokenAsSlot instanceof Ci.nsIPKCS11Slot,
|
|
"Module DB findSlotByName() should return a token as an nsIPKCS11Slot");
|
|
equal(internalTokenAsSlot.name,
|
|
bundle.GetStringFromName("PrivateSlotDescription"),
|
|
"Spot check: actual and expected internal 'slot' names should be equal");
|
|
throws(() => gModuleDB.findSlotByName("Not Present"), /NS_ERROR_FAILURE/,
|
|
"Non-present 'slot' should not be findable by name via the module DB");
|
|
|
|
// Check that deleting the test module makes it disappear from the module list.
|
|
let pkcs11 = Cc["@mozilla.org/security/pkcs11;1"].getService(Ci.nsIPKCS11);
|
|
pkcs11.deleteModule("PKCS11 Test Module");
|
|
checkTestModuleNotPresent();
|
|
|
|
// Check miscellaneous module DB methods and attributes.
|
|
notEqual(gModuleDB.getInternal(), null,
|
|
"The internal module should be present");
|
|
notEqual(gModuleDB.getInternalFIPS(), null,
|
|
"The internal FIPS module should be present");
|
|
ok(gModuleDB.canToggleFIPS, "It should be possible to toggle FIPS");
|
|
ok(!gModuleDB.isFIPSEnabled, "FIPS should not be enabled");
|
|
}
|