Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/security/manager/ssl/   (Firefox Browser Version 153.0.1©)  Datei vom 27.6.2026 mit Größe 3 kB image not shown  

Quelle  PKCS11Module.cpp

  Sprache: C
 

/* 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 "PKCS11Module.h"

#include "PKCS11ModuleDB.h"
#include "PKCS11Slot.h"
#include "nsComponentManagerUtils.h"
#include "nsNSSCertHelper.h"
#include "nsNSSComponent.h"

using namespace mozilla::psm;

NS_IMPL_ISUPPORTS(PKCS11Module, nsIPKCS11Module)

PKCS11Module::PKCS11Module(SECMODModule* module) {
  MOZ_ASSERT(module);
  mModule.reset(SECMOD_ReferenceModule(module));
}

// Convert the UTF8 internal name of the module to how it should appear to the
// user. In most cases this involves simply passing back the module's name.
// However, the builtin roots module has a non-localized name internally that we
// must map to the localized version when we display it to the user.
static nsresult NormalizeModuleNameOut(const char* moduleNameIn,
                                       nsACString& moduleNameOut) {
  // Easy case: this isn't the builtin roots module.
  if (nsDependentCString(moduleNameIn) != kRootModuleName) {
    moduleNameOut.Assign(moduleNameIn);
    return NS_OK;
  }

  nsAutoString localizedRootModuleName;
  nsresult rv =
      GetPIPNSSBundleString("RootCertModuleName", localizedRootModuleName);
  if (NS_FAILED(rv)) {
    return rv;
  }
  moduleNameOut.Assign(NS_ConvertUTF16toUTF8(localizedRootModuleName));
  return NS_OK;
}

NS_IMETHODIMP
PKCS11Module::GetName(/*out*/ nsACString& name) {
  return NormalizeModuleNameOut(mModule->commonName, name);
}

NS_IMETHODIMP
PKCS11Module::GetLibName(/*out*/ nsACString& libName) {
  if (mModule->dllName) {
    libName = mModule->dllName;
  } else {
    libName.SetIsVoid(true);
  }
  return NS_OK;
}

NS_IMETHODIMP
PKCS11Module::GetSlots(nsTArray<RefPtr<nsIPKCS11Slot>>& slots) {
  nsresult rv = CheckForSmartCardChanges();
  if (NS_FAILED(rv)) {
    return rv;
  }

  slots.Clear();

  // Access to mModule->slots must be protected by acquiring the secmod list
  // read lock.
  mozilla::AutoSECMODListReadLock lock;
  for (int i = 0; i < mModule->slotCount; i++) {
    if (mModule->slots[i]) {
      slots.AppendElement(new PKCS11Slot(mModule->slots[i]));
    }
  }

  return NS_OK;
}

#if defined(NIGHTLY_BUILD) && !defined(MOZ_NO_SMART_CARDS)
nsresult PKCS11Module::GetModuleInfo(ModuleInfo& moduleInfo) {
  nsresult rv = CheckForSmartCardChanges();
  if (NS_FAILED(rv)) {
    return rv;
  }

  rv = GetName(moduleInfo.name());
  if (NS_FAILED(rv)) {
    return rv;
  }
  rv = GetLibName(moduleInfo.libName());
  if (NS_FAILED(rv)) {
    return rv;
  }

  moduleInfo.slots().Clear();
  // Access to mModule->slots must be protected by acquiring the secmod list
  // read lock.
  mozilla::AutoSECMODListReadLock lock;
  for (int i = 0; i < mModule->slotCount; i++) {
    if (mModule->slots[i]) {
      RefPtr slot = mozilla::MakeRefPtr<PKCS11Slot>(mModule->slots[i]);
      SlotInfo slotInfo;
      rv = slot->GetSlotInfo(slotInfo);
      if (NS_FAILED(rv)) {
        return rv;
      }
      moduleInfo.slots().AppendElement(std::move(slotInfo));
    }
  }

  return NS_OK;
}

NS_IMPL_ISUPPORTS(RemotePKCS11Module, nsIPKCS11Module)

RemotePKCS11Module::RemotePKCS11Module(const ModuleInfo& moduleInfo)
    : mModuleInfo(moduleInfo) {}

NS_IMETHODIMP
RemotePKCS11Module::GetName(/*out*/ nsACString& name) {
  name.Assign(mModuleInfo.name());
  return NS_OK;
}

NS_IMETHODIMP
RemotePKCS11Module::GetLibName(/*out*/ nsACString& libName) {
  libName.Assign(mModuleInfo.libName());
  return NS_OK;
}

NS_IMETHODIMP
RemotePKCS11Module::GetSlots(nsTArray<RefPtr<nsIPKCS11Slot>>& slots) {
  slots.Clear();
  for (auto& slot : mModuleInfo.slots()) {
    slots.AppendElement(new RemotePKCS11Slot(slot));
  }
  return NS_OK;
}
#endif  // NIGHTLY_BUILD && !MOZ_NO_SMART_CARDS

Messung V0.5 in Prozent
C=93 H=95 G=93

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.