SECStatus rv = SECSuccess;
CK_RV PK11_LowInitialize(CK_VOID_PTR pReserved){    SECStatus rv = SECSuccess;    CK_RV crv = CKR_OK;    CK_C_INITIALIZE_ARGS *init_args = (CK_C_INITIALIZE_ARGS *) pReserved;    /* NOTE:     * we should be getting out mutexes from this list, not statically binding     * them from NSPR. This should happen before we allow the internal to split     * off from the rest on NSS.     */    /* initialize the key and cert db's */    SECKEY_SetDefaultKeyDBAlg(SEC_OID_PKCS12_PBE_WITH_SHA1_AND_TRIPLE_DES_CBC);    if ((init_args && init_args->LibraryParameters)) {	pk11_parameters paramStrings;       	crv = secmod_parseParameters		((char *)init_args->LibraryParameters,&paramStrings);	if (crv != CKR_OK) {	    return crv;	}	    	crv = pk11_DBInit(paramStrings.configdir,paramStrings.certPrefix,	    paramStrings.keyPrefix,paramStrings.secmodName,				    paramStrings.readOnly,paramStrings.noCertDB,	    paramStrings.noModDB, paramStrings.forceOpen);	if (crv != CKR_OK) {	    secmod_freeParams(&paramStrings);	    return crv;	}	crv = pk11_configure(paramStrings.man, paramStrings.libdes, 		paramStrings.tokdes,paramStrings.ptokdes,paramStrings.slotdes,		paramStrings.pslotdes,paramStrings.fslotdes,		paramStrings.fpslotdes, paramStrings.minPW, 					paramStrings.pwRequired);	secmod_freeParams(&paramStrings);	if (crv != CKR_OK) {	    return crv;	}    } else {	return CKR_ARGUMENTS_BAD;    }    return CKR_OK;}