secmodti.h
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:8k
源码类别:

CA认证

开发平台:

WINDOWS

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is the Netscape security libraries.
  13.  * 
  14.  * The Initial Developer of the Original Code is Netscape
  15.  * Communications Corporation.  Portions created by Netscape are 
  16.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  17.  * Rights Reserved.
  18.  * 
  19.  * Contributor(s):
  20.  * 
  21.  * Alternatively, the contents of this file may be used under the
  22.  * terms of the GNU General Public License Version 2 or later (the
  23.  * "GPL"), in which case the provisions of the GPL are applicable 
  24.  * instead of those above.  If you wish to allow use of your 
  25.  * version of this file only under the terms of the GPL and not to
  26.  * allow others to use your version of this file under the MPL,
  27.  * indicate your decision by deleting the provisions above and
  28.  * replace them with the notice and other provisions required by
  29.  * the GPL.  If you do not delete the provisions above, a recipient
  30.  * may use your version of this file under either the MPL or the
  31.  * GPL.
  32.  */
  33. /*
  34.  * Internal header file included only by files in pkcs11 dir, or in
  35.  * pkcs11 specific client and server files.
  36.  */
  37. #include "prmon.h"
  38. #include "prtypes.h"
  39. /* internal data structures */
  40. /* structure to allow us to implement the read/write locks for our
  41.  * module lists  */
  42. struct SECMODListLockStr {
  43.     PRLock *mutex;     /*general mutex to protect this data structure*/
  44.     PRMonitor *monitor;   /* monitor to allow us to signal */
  45.     int state;     /* read/write/waiting state */
  46.     int count;     /* how many waiters on this lock */
  47. };
  48. /* represent a pkcs#11 slot reference counted. */
  49. struct PK11SlotInfoStr {
  50.     /* the PKCS11 function list for this slot */
  51.     void *functionList;
  52.     SECMODModule *module; /* our parent module */
  53.     /* Boolean to indicate the current state of this slot */
  54.     PRBool needTest; /* Has this slot been tested for Export complience */
  55.     PRBool isPerm; /* is this slot a permanment device */
  56.     PRBool isHW; /* is this slot a hardware device */
  57.     PRBool isInternal;  /* is this slot one of our internal PKCS #11 devices */
  58.     PRBool disabled; /* is this slot disabled... */
  59.     PK11DisableReasons reason;  /* Why this slot is disabled */
  60.     PRBool readOnly; /* is the token in this slot read-only */
  61.     PRBool needLogin; /* does the token of the type that needs 
  62.  * authentication (still true even if token is logged 
  63.  * in) */
  64.     PRBool hasRandom;   /* can this token generated random numbers */
  65.     PRBool defRWSession; /* is the default session RW (we open our default 
  66.   * session rw if the token can only handle one session
  67.   * at a time. */
  68.     PRBool isThreadSafe; /* copied from the module */
  69.     /* The actual flags (many of which are distilled into the above PRBools) */
  70.     CK_FLAGS flags;      /* flags from PKCS #11 token Info */
  71.     /* a default session handle to do quick and dirty functions */
  72.     CK_SESSION_HANDLE session; 
  73.     PRLock *sessionLock; /* lock for this session */
  74.     /* our ID */
  75.     CK_SLOT_ID slotID;
  76.     /* persistant flags saved from startup to startup */
  77.     unsigned long defaultFlags;
  78.     /* keep track of who is using us so we don't accidently get freed while
  79.      * still in use */
  80.     int refCount;
  81.     PRLock *refLock;
  82.     PRLock *freeListLock;
  83.     PK11SymKey *freeSymKeysHead;
  84.     int keyCount;
  85.     int maxKeyCount;
  86.     /* Password control functions for this slot. many of these are only
  87.      * active if the appropriate flag is on in defaultFlags */
  88.     int askpw; /* what our password options are */
  89.     int timeout; /* If we're ask_timeout, what is our timeout time is 
  90.  * seconds */
  91.     int authTransact;   /* allow multiple authentications off one password if
  92.          * they are all part of the same transaction */
  93.     int64 authTime;     /* when were we last authenticated */
  94.     int minPassword; /* smallest legal password */
  95.     int maxPassword; /* largest legal password */
  96.     uint16 series; /* break up the slot info into various groups of 
  97.  * inserted tokens so that keys and certs can be
  98.  * invalidated */
  99.     uint16 wrapKey; /* current wrapping key for SSL master secrets */
  100.     CK_MECHANISM_TYPE wrapMechanism;
  101. /* current wrapping mechanism for current wrapKey */
  102.     CK_OBJECT_HANDLE refKeys[1]; /* array of existing wrapping keys for */
  103.     CK_MECHANISM_TYPE *mechanismList; /* list of mechanism supported by this
  104.        * token */
  105.     int mechanismCount;
  106.     /* cache the certificates stored on the token of this slot */
  107.     CERTCertificate **cert_array;
  108.     int array_size;
  109.     int cert_count;
  110.     char serial[16];
  111.     /* since these are odd sizes, keep them last. They are odd sizes to 
  112.      * allow them to become null terminated strings */
  113.     char slot_name[65];
  114.     char token_name[33];
  115.     PRBool hasRootCerts;
  116.     PRBool hasRSAInfo;
  117.     CK_FLAGS RSAInfoFlags;
  118. };
  119. /* hold slot default flags until we initialize a slot. This structure is only
  120.  * useful between the time we define a module (either by hand or from the
  121.  * database) and the time the module is loaded. Not reference counted  */
  122. struct PK11PreSlotInfoStr {
  123.     CK_SLOT_ID slotID;   /* slot these flags are for */
  124.     unsigned long defaultFlags; /* bit mask of default implementation this slot
  125.  * provides */
  126.     int askpw; /* slot specific password bits */
  127.     long timeout; /* slot specific timeout value */
  128.     char hasRootCerts; /* is this the root cert PKCS #11 module? */
  129. };
  130. /* Symetric Key structure. Reference Counted */
  131. struct PK11SymKeyStr {
  132.     CK_MECHANISM_TYPE type; /* type of operation this key was created for*/
  133.     CK_OBJECT_HANDLE  objectID; /* object id of this key in the slot */
  134.     PK11SlotInfo      *slot;    /* Slot this key is loaded into */
  135.     void       *cx; /* window context in case we need to loggin */
  136.     PK11SymKey *next;
  137.     PRBool owner;
  138.     SECItem data; /* raw key data if available */
  139.     CK_SESSION_HANDLE session;
  140.     PRBool sessionOwner;
  141.     int refCount; /* number of references to this key */
  142.     PRLock *refLock;
  143.     int size; /* key size in bytes */
  144.     PK11Origin origin; /* where this key came from 
  145. (see def in secmodt.h) */
  146.     uint16 series; /* break up the slot info into various groups of 
  147.  * inserted tokens so that keys and certs can be
  148.  * invalidated */
  149. };
  150. /*
  151.  * hold a hash, encryption or signing context for multi-part operations.
  152.  * hold enough information so that multiple contexts can be interleaved
  153.  * if necessary. ... Not RefCounted.
  154.  */
  155. struct PK11ContextStr {
  156.     CK_ATTRIBUTE_TYPE operation; /* type of operation this context is doing
  157.     * (CKA_ENCRYPT, CKA_SIGN, CKA_HASH, etc. */
  158.     PK11SymKey   *key;    /* symetric key used in this context */
  159.     PK11SlotInfo *slot;    /* slot this context is operationing on */
  160.     CK_SESSION_HANDLE session;   /* session this context is using */
  161.     PRLock *sessionLock; /* lock before accessing a PKCS #11 
  162.        * session */
  163.     PRBool ownSession;/* do we own the session? */
  164.     void  *cx;    /* window context in case we need to loggin*/
  165.     void *savedData;/* save data when we are multiplexing on a
  166.     * single context */
  167.     unsigned long savedLength; /* length of the saved context */
  168.     SECItem *param;     /* mechanism parameters used to build this
  169. context */
  170.     PRBool init;     /* has this contexted been initialized */
  171.     CK_MECHANISM_TYPE type;     /* what is the PKCS #11 this context is
  172.      * representing (usually what algorithm is
  173.      * being used (CKM_RSA_PKCS, CKM_DES,
  174.      * CKM_SHA, etc.*/
  175.     PRBool fortezzaHack; /*Fortezza SSL has some special
  176.        * non-standard semantics*/
  177. };