/*************************************************************************** * * P k 1 1 I n s t a l l _ A d d N e w M o d u l e */ int Pk11Install_AddNewModule(char* moduleName, char* dllPath, unsigned long defaultMechanismFlags, unsigned long cipherEnableFlags) { return (SECMOD_AddNewModule(moduleName, dllPath, SECMOD_PubMechFlagstoInternal(defaultMechanismFlags), SECMOD_PubCipherFlagstoInternal(cipherEnableFlags)) == SECSuccess) ? 0 : -1; }
/********************************************************************** * * A d d M o d u l e * * Add the named module, with the given library file, ciphers, and * default mechanism flags */ Error AddModule(char *moduleName, char *libFile, char *cipherString, char *mechanismString, char *modparms) { unsigned long ciphers; unsigned long mechanisms; SECStatus status; mechanisms = getFlagsFromString(mechanismString, mechanismStrings, numMechanismStrings); ciphers = getFlagsFromString(cipherString, cipherStrings, numCipherStrings); status = SECMOD_AddNewModuleEx(moduleName, libFile, SECMOD_PubMechFlagstoInternal(mechanisms), SECMOD_PubCipherFlagstoInternal(ciphers), modparms, NULL); if (status != SECSuccess) { char *errtxt = NULL; PRInt32 copied = 0; if (PR_GetErrorTextLength()) { errtxt = PR_Malloc(PR_GetErrorTextLength() + 1); copied = PR_GetErrorText(errtxt); } if (copied && errtxt) { PR_fprintf(PR_STDERR, errStrings[ADD_MODULE_FAILED_ERR], moduleName, errtxt); PR_Free(errtxt); } else { PR_fprintf(PR_STDERR, errStrings[ADD_MODULE_FAILED_ERR], moduleName, SECU_Strerror(PORT_GetError())); } return ADD_MODULE_FAILED_ERR; } else { PR_fprintf(PR_STDOUT, msgStrings[ADD_MODULE_SUCCESS_MSG], moduleName); return SUCCESS; } }
// Add a new PKCS11 module to the user's profile. NS_IMETHODIMP nsPkcs11::AddModule(const nsAString& aModuleName, const nsAString& aLibraryFullPath, int32_t aCryptoMechanismFlags, int32_t aCipherFlags) { nsNSSShutDownPreventionLock locker; if (isAlreadyShutDown()) { return NS_ERROR_NOT_AVAILABLE; } if (aModuleName.IsEmpty()) { return NS_ERROR_INVALID_ARG; } NS_ConvertUTF16toUTF8 moduleName(aModuleName); nsCString fullPath; // NSS doesn't support Unicode path. Use native charset NS_CopyUnicodeToNative(aLibraryFullPath, fullPath); uint32_t mechFlags = SECMOD_PubMechFlagstoInternal(aCryptoMechanismFlags); uint32_t cipherFlags = SECMOD_PubCipherFlagstoInternal(aCipherFlags); SECStatus srv = SECMOD_AddNewModule(moduleName.get(), fullPath.get(), mechFlags, cipherFlags); if (srv != SECSuccess) { return NS_ERROR_FAILURE; } #ifndef MOZ_NO_SMART_CARDS mozilla::UniqueSECMODModule module(SECMOD_FindModule(moduleName.get())); if (!module) { return NS_ERROR_FAILURE; } nsCOMPtr<nsINSSComponent> nssComponent( do_GetService(PSM_COMPONENT_CONTRACTID)); nssComponent->LaunchSmartCardThread(module.get()); #endif return NS_OK; }
/* Funtion reports true if module of modType is installed/configured */ PRBool SECMOD_IsModulePresent( unsigned long int pubCipherEnableFlags ) { PRBool result = PR_FALSE; SECMODModuleList *mods; if (!moduleLock) { PORT_SetError(SEC_ERROR_NOT_INITIALIZED); return result; } SECMOD_GetReadLock(moduleLock); mods = SECMOD_GetDefaultModuleList(); for ( ; mods != NULL; mods = mods->next) { if (mods->module->ssl[0] & SECMOD_PubCipherFlagstoInternal(pubCipherEnableFlags)) { result = PR_TRUE; } } SECMOD_ReleaseReadLock(moduleLock); return result; }