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 DEVT_H michael@0: #define DEVT_H michael@0: michael@0: /* michael@0: * devt.h michael@0: * michael@0: * This file contains definitions for the low-level cryptoki devices. michael@0: */ michael@0: michael@0: #ifndef NSSBASET_H michael@0: #include "nssbaset.h" michael@0: #endif /* NSSBASET_H */ michael@0: michael@0: #ifndef NSSPKIT_H michael@0: #include "nsspkit.h" michael@0: #endif /* NSSPKIT_H */ michael@0: michael@0: #ifndef NSSDEVT_H michael@0: #include "nssdevt.h" michael@0: #endif /* NSSDEVT_H */ michael@0: michael@0: #ifndef BASET_H michael@0: #include "baset.h" michael@0: #endif /* BASET_H */ michael@0: michael@0: #include "secmodt.h" michael@0: michael@0: PR_BEGIN_EXTERN_C michael@0: michael@0: typedef struct nssSessionStr nssSession; michael@0: michael@0: /* XXX until NSSTokenStr is moved */ michael@0: struct nssDeviceBaseStr michael@0: { michael@0: NSSArena *arena; michael@0: PZLock *lock; michael@0: PRInt32 refCount; michael@0: NSSUTF8 *name; michael@0: PRUint32 flags; michael@0: }; michael@0: michael@0: typedef struct nssTokenObjectCacheStr nssTokenObjectCache; michael@0: michael@0: /* XXX until devobject.c goes away */ michael@0: struct NSSTokenStr michael@0: { michael@0: struct nssDeviceBaseStr base; michael@0: NSSSlot *slot; /* Parent (or peer, if you will) */ michael@0: CK_FLAGS ckFlags; /* from CK_TOKEN_INFO.flags */ michael@0: PRUint32 flags; michael@0: void *epv; michael@0: nssSession *defaultSession; michael@0: NSSTrustDomain *trustDomain; michael@0: PRIntervalTime lastTime; michael@0: nssTokenObjectCache *cache; michael@0: PK11SlotInfo *pk11slot; michael@0: }; michael@0: michael@0: typedef enum { michael@0: nssSlotAskPasswordTimes_FirstTime = 0, michael@0: nssSlotAskPasswordTimes_EveryTime = 1, michael@0: nssSlotAskPasswordTimes_Timeout = 2 michael@0: } michael@0: nssSlotAskPasswordTimes; michael@0: michael@0: struct nssSlotAuthInfoStr michael@0: { michael@0: PRTime lastLogin; michael@0: nssSlotAskPasswordTimes askTimes; michael@0: PRIntervalTime askPasswordTimeout; michael@0: }; michael@0: michael@0: struct NSSSlotStr michael@0: { michael@0: struct nssDeviceBaseStr base; michael@0: NSSModule *module; /* Parent */ michael@0: NSSToken *token; /* Peer */ michael@0: CK_SLOT_ID slotID; michael@0: CK_FLAGS ckFlags; /* from CK_SLOT_INFO.flags */ michael@0: struct nssSlotAuthInfoStr authInfo; michael@0: PRIntervalTime lastTokenPing; michael@0: PZLock *lock; michael@0: void *epv; michael@0: PK11SlotInfo *pk11slot; michael@0: }; michael@0: michael@0: struct nssSessionStr michael@0: { michael@0: PZLock *lock; michael@0: CK_SESSION_HANDLE handle; michael@0: NSSSlot *slot; michael@0: PRBool isRW; michael@0: PRBool ownLock; michael@0: }; michael@0: michael@0: typedef enum { michael@0: NSSCertificateType_Unknown = 0, michael@0: NSSCertificateType_PKIX = 1 michael@0: } NSSCertificateType; michael@0: michael@0: typedef enum { michael@0: nssTrustLevel_Unknown = 0, michael@0: nssTrustLevel_NotTrusted = 1, michael@0: nssTrustLevel_Trusted = 2, michael@0: nssTrustLevel_TrustedDelegator = 3, michael@0: nssTrustLevel_MustVerify = 4, michael@0: nssTrustLevel_ValidDelegator = 5 michael@0: } nssTrustLevel; michael@0: michael@0: typedef struct nssCryptokiInstanceStr nssCryptokiInstance; michael@0: michael@0: struct nssCryptokiInstanceStr michael@0: { michael@0: CK_OBJECT_HANDLE handle; michael@0: NSSToken *token; michael@0: PRBool isTokenObject; michael@0: NSSUTF8 *label; michael@0: }; michael@0: michael@0: typedef struct nssCryptokiInstanceStr nssCryptokiObject; michael@0: michael@0: typedef struct nssTokenCertSearchStr nssTokenCertSearch; michael@0: michael@0: typedef enum { michael@0: nssTokenSearchType_AllObjects = 0, michael@0: nssTokenSearchType_SessionOnly = 1, michael@0: nssTokenSearchType_TokenOnly = 2, michael@0: nssTokenSearchType_TokenForced = 3 michael@0: } nssTokenSearchType; michael@0: michael@0: struct nssTokenCertSearchStr michael@0: { michael@0: nssTokenSearchType searchType; michael@0: PRStatus (* callback)(NSSCertificate *c, void *arg); michael@0: void *cbarg; michael@0: nssList *cached; michael@0: /* TODO: add a cache query callback if the list would be large michael@0: * (traversal) michael@0: */ michael@0: }; michael@0: michael@0: struct nssSlotListStr; michael@0: typedef struct nssSlotListStr nssSlotList; michael@0: michael@0: struct NSSAlgorithmAndParametersStr michael@0: { michael@0: CK_MECHANISM mechanism; michael@0: }; michael@0: michael@0: PR_END_EXTERN_C michael@0: michael@0: #endif /* DEVT_H */