tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

devt.h (3944B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 #ifndef DEVT_H
      6 #define DEVT_H
      7 
      8 /*
      9 * devt.h
     10 *
     11 * This file contains definitions for the low-level cryptoki devices.
     12 */
     13 
     14 #ifndef NSSBASET_H
     15 #include "nssbaset.h"
     16 #endif /* NSSBASET_H */
     17 
     18 #ifndef NSSPKIT_H
     19 #include "nsspkit.h"
     20 #endif /* NSSPKIT_H */
     21 
     22 #ifndef NSSDEVT_H
     23 #include "nssdevt.h"
     24 #endif /* NSSDEVT_H */
     25 
     26 #ifndef BASET_H
     27 #include "baset.h"
     28 #endif /* BASET_H */
     29 
     30 #include "secmodt.h"
     31 
     32 PR_BEGIN_EXTERN_C
     33 
     34 typedef struct nssSessionStr nssSession;
     35 
     36 /* XXX until NSSTokenStr is moved */
     37 struct nssDeviceBaseStr {
     38    NSSArena *arena;
     39    PZLock *lock;
     40    PRInt32 refCount;
     41    NSSUTF8 *name;
     42    PRUint32 flags;
     43 };
     44 
     45 typedef struct nssTokenObjectCacheStr nssTokenObjectCache;
     46 
     47 /* XXX until devobject.c goes away */
     48 struct NSSTokenStr {
     49    struct nssDeviceBaseStr base;
     50    NSSSlot *slot;    /* Parent (or peer, if you will) */
     51    CK_FLAGS ckFlags; /* from CK_TOKEN_INFO.flags */
     52    PRUint32 flags;
     53    void *epv;
     54    nssSession *defaultSession;
     55    NSSTrustDomain *trustDomain;
     56    PRIntervalTime lastTime;
     57    nssTokenObjectCache *cache;
     58    PK11SlotInfo *pk11slot;
     59 };
     60 
     61 typedef enum {
     62    nssSlotAskPasswordTimes_FirstTime = 0,
     63    nssSlotAskPasswordTimes_EveryTime = 1,
     64    nssSlotAskPasswordTimes_Timeout = 2
     65 } nssSlotAskPasswordTimes;
     66 
     67 struct nssSlotAuthInfoStr {
     68    PRTime lastLogin;
     69    nssSlotAskPasswordTimes askTimes;
     70    PRIntervalTime askPasswordTimeout;
     71 };
     72 
     73 /* values for lastTokenPingState */
     74 typedef enum {
     75    nssSlotLastPingState_Reset = 0,  /* the state has just been reset, discard
     76                                      * our cache */
     77    nssSlotLastPingState_Update = 1, /* we are updating the lastTokenPingTime */
     78    nssSlotLastPingState_Valid = 2,  /* lastTokenPingTime is valid */
     79 } nssSlotLastPingState;
     80 
     81 struct NSSSlotStr {
     82    struct nssDeviceBaseStr base;
     83    NSSModule *module; /* Parent */
     84    CK_SLOT_ID slotID;
     85    CK_FLAGS ckFlags; /* from CK_SLOT_INFO.flags */
     86    struct nssSlotAuthInfoStr authInfo;
     87    PRIntervalTime lastTokenPingTime;
     88    nssSlotLastPingState lastTokenPingState;
     89    PZLock *lock;
     90    void *epv;
     91    PK11SlotInfo *pk11slot;
     92    PZLock *isPresentLock;
     93    PRCondVar *isPresentCondition;
     94    PRThread *isPresentThread;
     95 };
     96 
     97 struct nssSessionStr {
     98    /* Must not hold slot->lock when taking lock.
     99     * See ordering in nssSlot_IsTokenPresent.
    100     */
    101    PZLock *lock;
    102    CK_SESSION_HANDLE handle;
    103    NSSSlot *slot;
    104    PRBool isRW;
    105    PRBool ownLock;
    106 };
    107 
    108 typedef enum {
    109    NSSCertificateType_Unknown = 0,
    110    NSSCertificateType_PKIX = 1
    111 } NSSCertificateType;
    112 
    113 typedef enum {
    114    nssTrustLevel_Unknown = 0,
    115    nssTrustLevel_NotTrusted = 1,
    116    nssTrustLevel_Trusted = 2,
    117    nssTrustLevel_TrustedDelegator = 3,
    118    nssTrustLevel_MustVerify = 4,
    119    nssTrustLevel_ValidDelegator = 5
    120 } nssTrustLevel;
    121 
    122 typedef struct nssCryptokiInstanceStr nssCryptokiInstance;
    123 
    124 struct nssCryptokiInstanceStr {
    125    CK_OBJECT_HANDLE handle;
    126    NSSToken *token;
    127    PRBool isTokenObject;
    128    NSSUTF8 *label;
    129    CK_MECHANISM_TYPE trustType;
    130 };
    131 
    132 typedef struct nssCryptokiInstanceStr nssCryptokiObject;
    133 
    134 typedef struct nssTokenCertSearchStr nssTokenCertSearch;
    135 
    136 typedef enum {
    137    nssTokenSearchType_AllObjects = 0,
    138    nssTokenSearchType_SessionOnly = 1,
    139    nssTokenSearchType_TokenOnly = 2,
    140    nssTokenSearchType_TokenForced = 3
    141 } nssTokenSearchType;
    142 
    143 struct nssTokenCertSearchStr {
    144    nssTokenSearchType searchType;
    145    PRStatus (*callback)(NSSCertificate *c, void *arg);
    146    void *cbarg;
    147    nssList *cached;
    148    /* TODO: add a cache query callback if the list would be large
    149     *       (traversal)
    150     */
    151 };
    152 
    153 struct nssSlotListStr;
    154 typedef struct nssSlotListStr nssSlotList;
    155 
    156 struct NSSAlgorithmAndParametersStr {
    157    CK_MECHANISM mechanism;
    158 };
    159 
    160 PR_END_EXTERN_C
    161 
    162 #endif /* DEVT_H */