michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #ifndef DEV_H michael@0: #define DEV_H michael@0: michael@0: /* michael@0: * dev.h michael@0: * michael@0: * Low-level methods for interaction with cryptoki devices michael@0: */ michael@0: michael@0: #ifndef NSSDEV_H michael@0: #include "nssdev.h" michael@0: #endif /* NSSDEV_H */ michael@0: michael@0: #ifndef DEVT_H michael@0: #include "devt.h" michael@0: #endif /* DEVT_H */ michael@0: michael@0: PR_BEGIN_EXTERN_C michael@0: michael@0: /* the global module list michael@0: * michael@0: * These functions are for managing the global set of modules. Trust Domains, michael@0: * etc., will draw from this set. These functions are completely internal michael@0: * and only invoked when there are changes to the global module state michael@0: * (load or unload). michael@0: * michael@0: * nss_InitializeGlobalModuleList michael@0: * nss_DestroyGlobalModuleList michael@0: * nss_GetLoadedModules michael@0: * michael@0: * nssGlobalModuleList_Add michael@0: * nssGlobalModuleList_Remove michael@0: * nssGlobalModuleList_FindModuleByName michael@0: * nssGlobalModuleList_FindSlotByName michael@0: * nssGlobalModuleList_FindTokenByName michael@0: */ michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nss_InitializeGlobalModuleList michael@0: ( michael@0: void michael@0: ); michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nss_DestroyGlobalModuleList michael@0: ( michael@0: void michael@0: ); michael@0: michael@0: NSS_EXTERN NSSModule ** michael@0: nss_GetLoadedModules michael@0: ( michael@0: void michael@0: ); michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssGlobalModuleList_Add michael@0: ( michael@0: NSSModule *module michael@0: ); michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssGlobalModuleList_Remove michael@0: ( michael@0: NSSModule *module michael@0: ); michael@0: michael@0: NSS_EXTERN NSSModule * michael@0: nssGlobalModuleList_FindModuleByName michael@0: ( michael@0: NSSUTF8 *moduleName michael@0: ); michael@0: michael@0: NSS_EXTERN NSSSlot * michael@0: nssGlobalModuleList_FindSlotByName michael@0: ( michael@0: NSSUTF8 *slotName michael@0: ); michael@0: michael@0: NSS_EXTERN NSSToken * michael@0: nssGlobalModuleList_FindTokenByName michael@0: ( michael@0: NSSUTF8 *tokenName michael@0: ); michael@0: michael@0: NSS_EXTERN NSSToken * michael@0: nss_GetDefaultCryptoToken michael@0: ( michael@0: void michael@0: ); michael@0: michael@0: NSS_EXTERN NSSToken * michael@0: nss_GetDefaultDatabaseToken michael@0: ( michael@0: void michael@0: ); michael@0: michael@0: /* michael@0: * |-----------|<---> NSSSlot <--> NSSToken michael@0: * | NSSModule |<---> NSSSlot <--> NSSToken michael@0: * |-----------|<---> NSSSlot <--> NSSToken michael@0: */ michael@0: michael@0: /* NSSModule michael@0: * michael@0: * nssModule_Create michael@0: * nssModule_CreateFromSpec michael@0: * nssModule_AddRef michael@0: * nssModule_GetName michael@0: * nssModule_GetSlots michael@0: * nssModule_FindSlotByName michael@0: * nssModule_FindTokenByName michael@0: * nssModule_GetCertOrder michael@0: */ michael@0: michael@0: NSS_EXTERN NSSModule * michael@0: nssModule_Create michael@0: ( michael@0: NSSUTF8 *moduleOpt, michael@0: NSSUTF8 *uriOpt, michael@0: NSSUTF8 *opaqueOpt, michael@0: void *reserved michael@0: ); michael@0: michael@0: /* This is to use the new loading mechanism. */ michael@0: NSS_EXTERN NSSModule * michael@0: nssModule_CreateFromSpec michael@0: ( michael@0: NSSUTF8 *moduleSpec, michael@0: NSSModule *parent, michael@0: PRBool loadSubModules michael@0: ); michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssModule_Destroy michael@0: ( michael@0: NSSModule *mod michael@0: ); michael@0: michael@0: NSS_EXTERN NSSModule * michael@0: nssModule_AddRef michael@0: ( michael@0: NSSModule *mod michael@0: ); michael@0: michael@0: NSS_EXTERN NSSUTF8 * michael@0: nssModule_GetName michael@0: ( michael@0: NSSModule *mod michael@0: ); michael@0: michael@0: NSS_EXTERN NSSSlot ** michael@0: nssModule_GetSlots michael@0: ( michael@0: NSSModule *mod michael@0: ); michael@0: michael@0: NSS_EXTERN NSSSlot * michael@0: nssModule_FindSlotByName michael@0: ( michael@0: NSSModule *mod, michael@0: NSSUTF8 *slotName michael@0: ); michael@0: michael@0: NSS_EXTERN NSSToken * michael@0: nssModule_FindTokenByName michael@0: ( michael@0: NSSModule *mod, michael@0: NSSUTF8 *tokenName michael@0: ); michael@0: michael@0: NSS_EXTERN PRInt32 michael@0: nssModule_GetCertOrder michael@0: ( michael@0: NSSModule *module michael@0: ); michael@0: michael@0: /* NSSSlot michael@0: * michael@0: * nssSlot_Destroy michael@0: * nssSlot_AddRef michael@0: * nssSlot_GetName michael@0: * nssSlot_GetTokenName michael@0: * nssSlot_IsTokenPresent michael@0: * nssSlot_IsPermanent michael@0: * nssSlot_IsFriendly michael@0: * nssSlot_IsHardware michael@0: * nssSlot_Refresh michael@0: * nssSlot_GetModule michael@0: * nssSlot_GetToken michael@0: * nssSlot_Login michael@0: * nssSlot_Logout michael@0: * nssSlot_SetPassword michael@0: * nssSlot_CreateSession michael@0: */ michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssSlot_Destroy michael@0: ( michael@0: NSSSlot *slot michael@0: ); michael@0: michael@0: NSS_EXTERN NSSSlot * michael@0: nssSlot_AddRef michael@0: ( michael@0: NSSSlot *slot michael@0: ); michael@0: michael@0: NSS_EXTERN void michael@0: nssSlot_ResetDelay michael@0: ( michael@0: NSSSlot *slot michael@0: ); michael@0: michael@0: NSS_EXTERN NSSUTF8 * michael@0: nssSlot_GetName michael@0: ( michael@0: NSSSlot *slot michael@0: ); michael@0: michael@0: NSS_EXTERN NSSUTF8 * michael@0: nssSlot_GetTokenName michael@0: ( michael@0: NSSSlot *slot michael@0: ); michael@0: michael@0: NSS_EXTERN NSSModule * michael@0: nssSlot_GetModule michael@0: ( michael@0: NSSSlot *slot michael@0: ); michael@0: michael@0: NSS_EXTERN NSSToken * michael@0: nssSlot_GetToken michael@0: ( michael@0: NSSSlot *slot michael@0: ); michael@0: michael@0: NSS_EXTERN PRBool michael@0: nssSlot_IsTokenPresent michael@0: ( michael@0: NSSSlot *slot michael@0: ); michael@0: michael@0: NSS_EXTERN PRBool michael@0: nssSlot_IsPermanent michael@0: ( michael@0: NSSSlot *slot michael@0: ); michael@0: michael@0: NSS_EXTERN PRBool michael@0: nssSlot_IsFriendly michael@0: ( michael@0: NSSSlot *slot michael@0: ); michael@0: michael@0: NSS_EXTERN PRBool michael@0: nssSlot_IsHardware michael@0: ( michael@0: NSSSlot *slot michael@0: ); michael@0: michael@0: NSS_EXTERN PRBool michael@0: nssSlot_IsLoggedIn michael@0: ( michael@0: NSSSlot *slot michael@0: ); michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssSlot_Refresh michael@0: ( michael@0: NSSSlot *slot michael@0: ); michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssSlot_Login michael@0: ( michael@0: NSSSlot *slot, michael@0: NSSCallback *pwcb michael@0: ); michael@0: extern const NSSError NSS_ERROR_INVALID_PASSWORD; michael@0: extern const NSSError NSS_ERROR_USER_CANCELED; michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssSlot_Logout michael@0: ( michael@0: NSSSlot *slot, michael@0: nssSession *sessionOpt michael@0: ); michael@0: michael@0: NSS_EXTERN void michael@0: nssSlot_EnterMonitor michael@0: ( michael@0: NSSSlot *slot michael@0: ); michael@0: michael@0: NSS_EXTERN void michael@0: nssSlot_ExitMonitor michael@0: ( michael@0: NSSSlot *slot michael@0: ); michael@0: michael@0: #define NSSSLOT_ASK_PASSWORD_FIRST_TIME -1 michael@0: #define NSSSLOT_ASK_PASSWORD_EVERY_TIME 0 michael@0: NSS_EXTERN void michael@0: nssSlot_SetPasswordDefaults michael@0: ( michael@0: NSSSlot *slot, michael@0: PRInt32 askPasswordTimeout michael@0: ); michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssSlot_SetPassword michael@0: ( michael@0: NSSSlot *slot, michael@0: NSSUTF8 *oldPasswordOpt, michael@0: NSSUTF8 *newPassword michael@0: ); michael@0: extern const NSSError NSS_ERROR_INVALID_PASSWORD; michael@0: extern const NSSError NSS_ERROR_USER_CANCELED; michael@0: michael@0: /* michael@0: * nssSlot_IsLoggedIn michael@0: */ michael@0: michael@0: NSS_EXTERN nssSession * michael@0: nssSlot_CreateSession michael@0: ( michael@0: NSSSlot *slot, michael@0: NSSArena *arenaOpt, michael@0: PRBool readWrite /* so far, this is the only flag used */ michael@0: ); michael@0: michael@0: /* NSSToken michael@0: * michael@0: * nssToken_Destroy michael@0: * nssToken_AddRef michael@0: * nssToken_GetName michael@0: * nssToken_GetModule michael@0: * nssToken_GetSlot michael@0: * nssToken_NeedsPINInitialization michael@0: * nssToken_ImportCertificate michael@0: * nssToken_ImportTrust michael@0: * nssToken_ImportCRL michael@0: * nssToken_GenerateKeyPair michael@0: * nssToken_GenerateSymmetricKey michael@0: * nssToken_DeleteStoredObject michael@0: * nssToken_FindObjects michael@0: * nssToken_FindCertificatesBySubject michael@0: * nssToken_FindCertificatesByNickname michael@0: * nssToken_FindCertificatesByEmail michael@0: * nssToken_FindCertificateByIssuerAndSerialNumber michael@0: * nssToken_FindCertificateByEncodedCertificate michael@0: * nssToken_FindTrustForCertificate michael@0: * nssToken_FindCRLsBySubject michael@0: * nssToken_FindPrivateKeys michael@0: * nssToken_FindPrivateKeyByID michael@0: * nssToken_Digest michael@0: * nssToken_BeginDigest michael@0: * nssToken_ContinueDigest michael@0: * nssToken_FinishDigest michael@0: */ michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssToken_Destroy michael@0: ( michael@0: NSSToken *tok michael@0: ); michael@0: michael@0: NSS_EXTERN NSSToken * michael@0: nssToken_AddRef michael@0: ( michael@0: NSSToken *tok michael@0: ); michael@0: michael@0: NSS_EXTERN NSSUTF8 * michael@0: nssToken_GetName michael@0: ( michael@0: NSSToken *tok michael@0: ); michael@0: michael@0: NSS_EXTERN NSSModule * michael@0: nssToken_GetModule michael@0: ( michael@0: NSSToken *token michael@0: ); michael@0: michael@0: NSS_EXTERN NSSSlot * michael@0: nssToken_GetSlot michael@0: ( michael@0: NSSToken *tok michael@0: ); michael@0: michael@0: NSS_EXTERN PRBool michael@0: nssToken_NeedsPINInitialization michael@0: ( michael@0: NSSToken *token michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject * michael@0: nssToken_ImportCertificate michael@0: ( michael@0: NSSToken *tok, michael@0: nssSession *sessionOpt, michael@0: NSSCertificateType certType, michael@0: NSSItem *id, michael@0: const NSSUTF8 *nickname, michael@0: NSSDER *encoding, michael@0: NSSDER *issuer, michael@0: NSSDER *subject, michael@0: NSSDER *serial, michael@0: NSSASCII7 *emailAddr, michael@0: PRBool asTokenObject michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject * michael@0: nssToken_ImportTrust michael@0: ( michael@0: NSSToken *tok, michael@0: nssSession *sessionOpt, michael@0: NSSDER *certEncoding, michael@0: NSSDER *certIssuer, michael@0: NSSDER *certSerial, michael@0: nssTrustLevel serverAuth, michael@0: nssTrustLevel clientAuth, michael@0: nssTrustLevel codeSigning, michael@0: nssTrustLevel emailProtection, michael@0: PRBool stepUpApproved, michael@0: PRBool asTokenObject michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject * michael@0: nssToken_ImportCRL michael@0: ( michael@0: NSSToken *token, michael@0: nssSession *sessionOpt, michael@0: NSSDER *subject, michael@0: NSSDER *encoding, michael@0: PRBool isKRL, michael@0: NSSUTF8 *url, michael@0: PRBool asTokenObject michael@0: ); michael@0: michael@0: /* Permanently remove an object from the token. */ michael@0: NSS_EXTERN PRStatus michael@0: nssToken_DeleteStoredObject michael@0: ( michael@0: nssCryptokiObject *instance michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject ** michael@0: nssToken_FindObjects michael@0: ( michael@0: NSSToken *token, michael@0: nssSession *sessionOpt, michael@0: CK_OBJECT_CLASS objclass, michael@0: nssTokenSearchType searchType, michael@0: PRUint32 maximumOpt, michael@0: PRStatus *statusOpt michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject ** michael@0: nssToken_FindCertificatesBySubject michael@0: ( michael@0: NSSToken *token, michael@0: nssSession *sessionOpt, michael@0: NSSDER *subject, michael@0: nssTokenSearchType searchType, michael@0: PRUint32 maximumOpt, michael@0: PRStatus *statusOpt michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject ** michael@0: nssToken_FindCertificatesByNickname michael@0: ( michael@0: NSSToken *token, michael@0: nssSession *sessionOpt, michael@0: const NSSUTF8 *name, michael@0: nssTokenSearchType searchType, michael@0: PRUint32 maximumOpt, michael@0: PRStatus *statusOpt michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject ** michael@0: nssToken_FindCertificatesByEmail michael@0: ( michael@0: NSSToken *token, michael@0: nssSession *sessionOpt, michael@0: NSSASCII7 *email, michael@0: nssTokenSearchType searchType, michael@0: PRUint32 maximumOpt, michael@0: PRStatus *statusOpt michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject ** michael@0: nssToken_FindCertificatesByID michael@0: ( michael@0: NSSToken *token, michael@0: nssSession *sessionOpt, michael@0: NSSItem *id, michael@0: nssTokenSearchType searchType, michael@0: PRUint32 maximumOpt, michael@0: PRStatus *statusOpt michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject * michael@0: nssToken_FindCertificateByIssuerAndSerialNumber michael@0: ( michael@0: NSSToken *token, michael@0: nssSession *sessionOpt, michael@0: NSSDER *issuer, michael@0: NSSDER *serial, michael@0: nssTokenSearchType searchType, michael@0: PRStatus *statusOpt michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject * michael@0: nssToken_FindCertificateByEncodedCertificate michael@0: ( michael@0: NSSToken *token, michael@0: nssSession *sessionOpt, michael@0: NSSBER *encodedCertificate, michael@0: nssTokenSearchType searchType, michael@0: PRStatus *statusOpt michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject * michael@0: nssToken_FindTrustForCertificate michael@0: ( michael@0: NSSToken *token, michael@0: nssSession *sessionOpt, michael@0: NSSDER *certEncoding, michael@0: NSSDER *certIssuer, michael@0: NSSDER *certSerial, michael@0: nssTokenSearchType searchType michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject ** michael@0: nssToken_FindCRLsBySubject michael@0: ( michael@0: NSSToken *token, michael@0: nssSession *sessionOpt, michael@0: NSSDER *subject, michael@0: nssTokenSearchType searchType, michael@0: PRUint32 maximumOpt, michael@0: PRStatus *statusOpt michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject ** michael@0: nssToken_FindPrivateKeys michael@0: ( michael@0: NSSToken *token, michael@0: nssSession *sessionOpt, michael@0: nssTokenSearchType searchType, michael@0: PRUint32 maximumOpt, michael@0: PRStatus *statusOpt michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject * michael@0: nssToken_FindPrivateKeyByID michael@0: ( michael@0: NSSToken *token, michael@0: nssSession *sessionOpt, michael@0: NSSItem *keyID michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject * michael@0: nssToken_FindPublicKeyByID michael@0: ( michael@0: NSSToken *token, michael@0: nssSession *sessionOpt, michael@0: NSSItem *keyID michael@0: ); michael@0: michael@0: NSS_EXTERN NSSItem * michael@0: nssToken_Digest michael@0: ( michael@0: NSSToken *tok, michael@0: nssSession *sessionOpt, michael@0: NSSAlgorithmAndParameters *ap, michael@0: NSSItem *data, michael@0: NSSItem *rvOpt, michael@0: NSSArena *arenaOpt michael@0: ); michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssToken_BeginDigest michael@0: ( michael@0: NSSToken *tok, michael@0: nssSession *sessionOpt, michael@0: NSSAlgorithmAndParameters *ap michael@0: ); michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssToken_ContinueDigest michael@0: ( michael@0: NSSToken *tok, michael@0: nssSession *sessionOpt, michael@0: NSSItem *item michael@0: ); michael@0: michael@0: NSS_EXTERN NSSItem * michael@0: nssToken_FinishDigest michael@0: ( michael@0: NSSToken *tok, michael@0: nssSession *sessionOpt, michael@0: NSSItem *rvOpt, michael@0: NSSArena *arenaOpt michael@0: ); michael@0: michael@0: /* nssSession michael@0: * michael@0: * nssSession_Destroy michael@0: * nssSession_EnterMonitor michael@0: * nssSession_ExitMonitor michael@0: * nssSession_IsReadWrite michael@0: */ michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssSession_Destroy michael@0: ( michael@0: nssSession *s michael@0: ); michael@0: michael@0: /* would like to inline */ michael@0: NSS_EXTERN PRStatus michael@0: nssSession_EnterMonitor michael@0: ( michael@0: nssSession *s michael@0: ); michael@0: michael@0: /* would like to inline */ michael@0: NSS_EXTERN PRStatus michael@0: nssSession_ExitMonitor michael@0: ( michael@0: nssSession *s michael@0: ); michael@0: michael@0: /* would like to inline */ michael@0: NSS_EXTERN PRBool michael@0: nssSession_IsReadWrite michael@0: ( michael@0: nssSession *s michael@0: ); michael@0: michael@0: /* nssCryptokiObject michael@0: * michael@0: * An object living on a cryptoki token. michael@0: * Not really proper to mix up the object types just because michael@0: * nssCryptokiObject itself is generic, but doing so anyway. michael@0: * michael@0: * nssCryptokiObject_Destroy michael@0: * nssCryptokiObject_Equal michael@0: * nssCryptokiObject_Clone michael@0: * nssCryptokiCertificate_GetAttributes michael@0: * nssCryptokiPrivateKey_GetAttributes michael@0: * nssCryptokiPublicKey_GetAttributes michael@0: * nssCryptokiTrust_GetAttributes michael@0: * nssCryptokiCRL_GetAttributes michael@0: */ michael@0: michael@0: NSS_EXTERN void michael@0: nssCryptokiObject_Destroy michael@0: ( michael@0: nssCryptokiObject *object michael@0: ); michael@0: michael@0: NSS_EXTERN PRBool michael@0: nssCryptokiObject_Equal michael@0: ( michael@0: nssCryptokiObject *object1, michael@0: nssCryptokiObject *object2 michael@0: ); michael@0: michael@0: NSS_EXTERN nssCryptokiObject * michael@0: nssCryptokiObject_Clone michael@0: ( michael@0: nssCryptokiObject *object michael@0: ); michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssCryptokiCertificate_GetAttributes michael@0: ( michael@0: nssCryptokiObject *object, michael@0: nssSession *sessionOpt, michael@0: NSSArena *arenaOpt, michael@0: NSSCertificateType *certTypeOpt, michael@0: NSSItem *idOpt, michael@0: NSSDER *encodingOpt, michael@0: NSSDER *issuerOpt, michael@0: NSSDER *serialOpt, michael@0: NSSDER *subjectOpt michael@0: ); michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssCryptokiTrust_GetAttributes michael@0: ( michael@0: nssCryptokiObject *trustObject, michael@0: nssSession *sessionOpt, michael@0: NSSItem *sha1_hash, michael@0: nssTrustLevel *serverAuth, michael@0: nssTrustLevel *clientAuth, michael@0: nssTrustLevel *codeSigning, michael@0: nssTrustLevel *emailProtection, michael@0: PRBool *stepUpApproved michael@0: ); michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssCryptokiCRL_GetAttributes michael@0: ( michael@0: nssCryptokiObject *crlObject, michael@0: nssSession *sessionOpt, michael@0: NSSArena *arenaOpt, michael@0: NSSItem *encodingOpt, michael@0: NSSItem * subjectOpt, michael@0: CK_ULONG * crl_class, michael@0: NSSUTF8 **urlOpt, michael@0: PRBool *isKRLOpt michael@0: ); michael@0: michael@0: /* I'm including this to handle import of certificates in NSS 3.5. This michael@0: * function will set the cert-related attributes of a key, in order to michael@0: * associate it with a cert. Does it stay like this for 4.0? michael@0: */ michael@0: NSS_EXTERN PRStatus michael@0: nssCryptokiPrivateKey_SetCertificate michael@0: ( michael@0: nssCryptokiObject *keyObject, michael@0: nssSession *sessionOpt, michael@0: const NSSUTF8 *nickname, michael@0: NSSItem *id, michael@0: NSSDER *subject michael@0: ); michael@0: michael@0: NSS_EXTERN void michael@0: nssModuleArray_Destroy michael@0: ( michael@0: NSSModule **modules michael@0: ); michael@0: michael@0: /* nssSlotArray michael@0: * michael@0: * nssSlotArray_Destroy michael@0: */ michael@0: michael@0: NSS_EXTERN void michael@0: nssSlotArray_Destroy michael@0: ( michael@0: NSSSlot **slots michael@0: ); michael@0: michael@0: /* nssTokenArray michael@0: * michael@0: * nssTokenArray_Destroy michael@0: */ michael@0: michael@0: NSS_EXTERN void michael@0: nssTokenArray_Destroy michael@0: ( michael@0: NSSToken **tokens michael@0: ); michael@0: michael@0: /* nssCryptokiObjectArray michael@0: * michael@0: * nssCryptokiObjectArray_Destroy michael@0: */ michael@0: NSS_EXTERN void michael@0: nssCryptokiObjectArray_Destroy michael@0: ( michael@0: nssCryptokiObject **object michael@0: ); michael@0: michael@0: /* nssSlotList michael@0: * michael@0: * An ordered list of slots. The order can be anything, it is set in the michael@0: * Add methods. Perhaps it should be CreateInCertOrder, ...? michael@0: * michael@0: * nssSlotList_Create michael@0: * nssSlotList_Destroy michael@0: * nssSlotList_Add michael@0: * nssSlotList_AddModuleSlots michael@0: * nssSlotList_GetSlots michael@0: * nssSlotList_FindSlotByName michael@0: * nssSlotList_FindTokenByName michael@0: * nssSlotList_GetBestSlot michael@0: * nssSlotList_GetBestSlotForAlgorithmAndParameters michael@0: * nssSlotList_GetBestSlotForAlgorithmsAndParameters michael@0: */ michael@0: michael@0: /* nssSlotList_Create michael@0: */ michael@0: NSS_EXTERN nssSlotList * michael@0: nssSlotList_Create michael@0: ( michael@0: NSSArena *arenaOpt michael@0: ); michael@0: michael@0: /* nssSlotList_Destroy michael@0: */ michael@0: NSS_EXTERN void michael@0: nssSlotList_Destroy michael@0: ( michael@0: nssSlotList *slotList michael@0: ); michael@0: michael@0: /* nssSlotList_Add michael@0: * michael@0: * Add the given slot in the given order. michael@0: */ michael@0: NSS_EXTERN PRStatus michael@0: nssSlotList_Add michael@0: ( michael@0: nssSlotList *slotList, michael@0: NSSSlot *slot, michael@0: PRUint32 order michael@0: ); michael@0: michael@0: /* nssSlotList_AddModuleSlots michael@0: * michael@0: * Add all slots in the module, in the given order (the slots will have michael@0: * equal weight). michael@0: */ michael@0: NSS_EXTERN PRStatus michael@0: nssSlotList_AddModuleSlots michael@0: ( michael@0: nssSlotList *slotList, michael@0: NSSModule *module, michael@0: PRUint32 order michael@0: ); michael@0: michael@0: /* nssSlotList_GetSlots michael@0: */ michael@0: NSS_EXTERN NSSSlot ** michael@0: nssSlotList_GetSlots michael@0: ( michael@0: nssSlotList *slotList michael@0: ); michael@0: michael@0: /* nssSlotList_FindSlotByName michael@0: */ michael@0: NSS_EXTERN NSSSlot * michael@0: nssSlotList_FindSlotByName michael@0: ( michael@0: nssSlotList *slotList, michael@0: NSSUTF8 *slotName michael@0: ); michael@0: michael@0: /* nssSlotList_FindTokenByName michael@0: */ michael@0: NSS_EXTERN NSSToken * michael@0: nssSlotList_FindTokenByName michael@0: ( michael@0: nssSlotList *slotList, michael@0: NSSUTF8 *tokenName michael@0: ); michael@0: michael@0: /* nssSlotList_GetBestSlot michael@0: * michael@0: * The best slot is the highest ranking in order, i.e., the first in the michael@0: * list. michael@0: */ michael@0: NSS_EXTERN NSSSlot * michael@0: nssSlotList_GetBestSlot michael@0: ( michael@0: nssSlotList *slotList michael@0: ); michael@0: michael@0: /* nssSlotList_GetBestSlotForAlgorithmAndParameters michael@0: * michael@0: * Highest-ranking slot than can handle algorithm/parameters. michael@0: */ michael@0: NSS_EXTERN NSSSlot * michael@0: nssSlotList_GetBestSlotForAlgorithmAndParameters michael@0: ( michael@0: nssSlotList *slotList, michael@0: NSSAlgorithmAndParameters *ap michael@0: ); michael@0: michael@0: /* nssSlotList_GetBestSlotForAlgorithmsAndParameters michael@0: * michael@0: * Highest-ranking slot than can handle all algorithms/parameters. michael@0: */ michael@0: NSS_EXTERN NSSSlot * michael@0: nssSlotList_GetBestSlotForAlgorithmsAndParameters michael@0: ( michael@0: nssSlotList *slotList, michael@0: NSSAlgorithmAndParameters **ap michael@0: ); michael@0: michael@0: NSS_EXTERN PRBool michael@0: nssToken_IsPresent michael@0: ( michael@0: NSSToken *token michael@0: ); michael@0: michael@0: NSS_EXTERN nssSession * michael@0: nssToken_GetDefaultSession michael@0: ( michael@0: NSSToken *token michael@0: ); michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssToken_GetTrustOrder michael@0: ( michael@0: NSSToken *tok michael@0: ); michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssToken_NotifyCertsNotVisible michael@0: ( michael@0: NSSToken *tok michael@0: ); michael@0: michael@0: NSS_EXTERN PRStatus michael@0: nssToken_TraverseCertificates michael@0: ( michael@0: NSSToken *token, michael@0: nssSession *sessionOpt, michael@0: nssTokenSearchType searchType, michael@0: PRStatus (* callback)(nssCryptokiObject *instance, void *arg), michael@0: void *arg michael@0: ); michael@0: michael@0: NSS_EXTERN PRBool michael@0: nssToken_IsPrivateKeyAvailable michael@0: ( michael@0: NSSToken *token, michael@0: NSSCertificate *c, michael@0: nssCryptokiObject *instance michael@0: ); michael@0: michael@0: PR_END_EXTERN_C michael@0: michael@0: #endif /* DEV_H */