/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"

interface nsIPKCS11Module;
interface nsIPKCS11Slot;
interface nsISimpleEnumerator;

%{C++
#define NS_PKCS11MODULEDB_CONTRACTID "@mozilla.org/security/pkcs11moduledb;1"
%}

[scriptable, uuid(ff9fbcd7-9517-4334-b97a-ceed78909974)]
interface nsIPKCS11ModuleDB : nsISupports
{
  [must_use]
  void deleteModule(in AString moduleName);

  [must_use]
  void addModule(in AString moduleName,
                 in AString libraryFullPath,
                 in long cryptoMechanismFlags,
                 in long cipherFlags);

  [must_use]
  nsIPKCS11Module findModuleByName(in AUTF8String name);

  [must_use]
  nsISimpleEnumerator listModules();

  [must_use]
  readonly attribute boolean canToggleFIPS;

  [must_use]
  void toggleFIPSMode();

  [must_use]
  readonly attribute boolean isFIPSEnabled;
};
