⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pkcs11t.h

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 H
📖 第 1 页 / 共 3 页
字号:
#ifndef _PKCS11T_H_
#define _PKCS11T_H_ 1

/* an unsigned 8-bit value */
typedef unsigned char     CK_BYTE;

/* an unsigned 8-bit character */
typedef CK_BYTE           CK_CHAR;

/* a BYTE-sized Boolean flag */
typedef CK_BYTE           CK_BBOOL;

/* an unsigned value, at least 32 bits long */
typedef unsigned long int CK_ULONG;

/* a signed value, the same size as a CK_ULONG */
/* CK_LONG is new for v2.0 */
typedef long int          CK_LONG;

/* at least 32 bits, each bit is a Boolean flag */
typedef CK_ULONG          CK_FLAGS;


/* these data types are platform/implementation-dependent. */
#if defined(WINDOWS) 
#if defined(_WIN32) /* win32 */
#define CK_ENTRY          __declspec( dllexport )
#define CK_PTR            *
#ifndef NULL_PTR
#define NULL_PTR          0
#endif
#pragma pack(push, cryptoki, 1)

#else /* win16 */
#define CK_ENTRY          _export _far _pascal
#define CK_PTR            far *
#ifndef NULL_PTR
#define NULL_PTR          0
#endif
#pragma pack(push, cryptoki, 1)
#endif

#else /* not windows */
#define CK_ENTRY
#define CK_PTR            *
#ifndef NULL_PTR
#define NULL_PTR          0
#endif
#endif


typedef CK_BYTE  CK_PTR   CK_BYTE_PTR;   /* Pointer to a CK_BYTE */
typedef CK_CHAR  CK_PTR   CK_CHAR_PTR;   /* Pointer to a CK_CHAR */
typedef CK_ULONG CK_PTR   CK_ULONG_PTR;  /* Pointer to a CK_ULONG */
typedef void     CK_PTR   CK_VOID_PTR;   /* Pointer to a void */


typedef struct CK_VERSION {
  CK_BYTE       major;  /* integer    portion of the version number */
  CK_BYTE       minor;  /* hundredths portion of the version number */
} CK_VERSION;

typedef CK_VERSION CK_PTR CK_VERSION_PTR; /* points to a CK_VERSION */


typedef struct CK_INFO {
  CK_VERSION    cryptokiVersion;     /* Cryptoki interface version number */
  CK_CHAR       manufacturerID[32];  /* blank padded */
  CK_FLAGS      flags;               /* must be zero */

  /* libraryDescription and libraryVersion are new for v2.0 */
  CK_CHAR       libraryDescription[32];  /* blank padded */
  CK_VERSION    libraryVersion;          /* version of library */
} CK_INFO;

typedef CK_INFO CK_PTR    CK_INFO_PTR;  /* points to a CK_INFO structure */


/* CK_NOTIFICATION enumerates the types of notifications 
 * that Cryptoki provides to an application.  */
/* CK_NOTIFICATION has been changed from an enum to a CK_ULONG for v2.0 */
typedef CK_ULONG CK_NOTIFICATION;
#define CKN_SURRENDER       0
#define CKN_COMPLETE        1
#define CKN_DEVICE_REMOVED  2

/* CKN_TOKEN_INSERTION is new to v2.0 */
#define CKN_TOKEN_INSERTION 3


typedef CK_ULONG          CK_SLOT_ID;

/* CK_SLOT_ID_PTR points to a CK_SLOT_ID.  */
typedef CK_SLOT_ID CK_PTR CK_SLOT_ID_PTR;


/* CK_SLOT_INFO provides information about a slot. */
typedef struct CK_SLOT_INFO {
  CK_CHAR       slotDescription[64];  /* blank padded */
  CK_CHAR       manufacturerID[32];   /* blank padded */
  CK_FLAGS      flags;

  /* hardwareVersion and firmwareVersion are new for v2.0 */
  CK_VERSION    hardwareVersion;  /* version of hardware */
  CK_VERSION    firmwareVersion;  /* version of firmware */
} CK_SLOT_INFO;

/* flags: bit flags that provide capabilities of the slot.
 *      Bit Flag              Mask        Meaning
 */
#define CKF_TOKEN_PRESENT     0x00000001  /* a token is present in the slot */
#define CKF_REMOVABLE_DEVICE  0x00000002  /* slot supports removable devices*/
#define CKF_HW_SLOT           0x00000004  /* a hardware slot, not software */

/* CK_SLOT_INFO_PTR points to a CK_SLOT_INFO. */
typedef CK_SLOT_INFO CK_PTR CK_SLOT_INFO_PTR;


/* CK_TOKEN_INFO provides information about a token. */
typedef struct CK_TOKEN_INFO {
  CK_CHAR       label[32];           /* blank padded */
  CK_CHAR       manufacturerID[32];  /* blank padded */
  CK_CHAR       model[16];           /* blank padded */
  CK_CHAR       serialNumber[16];    /* blank padded */
  CK_FLAGS      flags;               /* see below */

  /* ulMaxSessionCount, ulSessionCount, ulMaxRwSessionCount,
   * ulRwSessionCount, ulMaxPinLen, and ulMinPinLen have all been
   * changed from CK_USHORT to CK_ULONG for v2.0 */
  CK_ULONG      ulMaxSessionCount;     /* max open sessions */
  CK_ULONG      ulSessionCount;        /* sessions currently open */
  CK_ULONG      ulMaxRwSessionCount;   /* max R/W sessions */
  CK_ULONG      ulRwSessionCount;      /* R/W sessions currently open */
  CK_ULONG      ulMaxPinLen;           /* in bytes */
  CK_ULONG      ulMinPinLen;           /* in bytes */
  CK_ULONG      ulTotalPublicMemory;   /* in bytes */
  CK_ULONG      ulFreePublicMemory;    /* in bytes */
  CK_ULONG      ulTotalPrivateMemory;  /* in bytes */
  CK_ULONG      ulFreePrivateMemory;   /* in bytes */

  /* hardwareVersion, firmwareVersion, and time are new for v2.0 */
  CK_VERSION    hardwareVersion;       /* version of hardware */
  CK_VERSION    firmwareVersion;       /* version of firmware */
  CK_CHAR       utcTime[16];           /* time */
} CK_TOKEN_INFO;

/* The flags parameter is defined as follows:
 *      Bit Flag                    Mask        Meaning 
 */
#define CKF_RNG                     0x00000001  /* has random # generator */
#define CKF_WRITE_PROTECTED         0x00000002  /* token write-protected */
#define CKF_LOGIN_REQUIRED          0x00000004  /* a user must log in */
#define CKF_USER_PIN_INITIALIZED    0x00000008  /* normal user's PIN set */
#define CKF_EXCLUSIVE_EXISTS        0x00000010  /* exclusive session exists */

/* CKF_RESTORE_KEY_NOT_NEEDED is new for v2.0.  If it is set, then that
 * means that *every* time the state of cryptographic operations of a
 * session is successfully saved, all keys needed to continue those
 * operations are stored in the state. */
#define CKF_RESTORE_KEY_NOT_NEEDED  0x00000020  /* key always in saved state */

/* CKF_CLOCK_ON_TOKEN is new for v2.0.  If it is set, then that means that */
/* the token has some sort of clock.  The time on that clock is returned in */
/* the token info structure. */
#define CKF_CLOCK_ON_TOKEN          0x00000040  /* token has a clock */

/* CKF_SUPPORTS_PARALLEL is new for v2.0 */
#define CKF_SUPPORTS_PARALLEL       0x00000080  /* has parallel sessions */

/* CKF_PROTECTED_AUTHENTICATION_PATH is new for v2.0.  If it is true,
 * that means that there is some way for the user to login without
 * sending a PIN through the Cryptoki library itself. */
#define CKF_PROTECTED_AUTHENTICATION_PATH 0x00000100  /* protected path */

/* CKF_DUAL_CRYPTO_OPERATIONS is new for v2.0.  If it is true, that
 * means that a single session with the token can perform dual
 * simultaneous cryptographic operations (digest and encrypt;
 * decrypt and digest; sign and encrypt; and decrypt and sign) */
#define CKF_DUAL_CRYPTO_OPERATIONS  0x00000200  /* dual crypto operations */

/* CK_TOKEN_INFO_PTR points to a CK_TOKEN_INFO. */
typedef CK_TOKEN_INFO CK_PTR CK_TOKEN_INFO_PTR;


/* CK_SESSION_HANDLE is a Cryptoki-assigned value that identifies a session. */
typedef CK_ULONG          CK_SESSION_HANDLE;

/* CK_SESSION_HANDLE_PTR points to a CK_SESSION_HANDLE. */
typedef CK_SESSION_HANDLE CK_PTR CK_SESSION_HANDLE_PTR; 


/* CK_USER_TYPE enumerates the types of Cryptoki users */
/* CK_USER_TYPE has been changed from an enum to a CK_ULONG for v2.0 */
typedef CK_ULONG          CK_USER_TYPE;
/* Security Officer */
#define CKU_SO    0
/* Normal user */
#define CKU_USER  1


/* CK_STATE enumerates the session states */
/* CK_STATE has been changed from an enum to a CK_ULONG for v2.0 */
typedef CK_ULONG          CK_STATE;
#define CKS_RO_PUBLIC_SESSION  0
#define CKS_RO_USER_FUNCTIONS  1
#define CKS_RW_PUBLIC_SESSION  2
#define CKS_RW_USER_FUNCTIONS  3
#define CKS_RW_SO_FUNCTIONS    4


/* CK_SESSION_INFO provides information about a session. */
typedef struct CK_SESSION_INFO {
  CK_SLOT_ID    slotID;
  CK_STATE      state;
  CK_FLAGS      flags;          /* see below */

  /* ulDeviceError was changed from CK_USHORT to CK_ULONG for v2.0 */
  CK_ULONG      ulDeviceError;  /* device-dependent error code */
} CK_SESSION_INFO;

/* The flags are defined in the following table:
 *      Bit Flag                Mask        Meaning
 */
#define CKF_EXCLUSIVE_SESSION   0x00000001  /* session is exclusive */
#define CKF_RW_SESSION          0x00000002  /* session is read/write */
#define CKF_SERIAL_SESSION      0x00000004  /* doesn't support parallel */

/* CKF_INSERTION_CALLBACK is new for v2.0.  If it is set in the
 * flags supplied to a C_OpenSession call, then instead of actually
 * opening a session, the call is a request to get a callback when
 * the token is inserted. */
#define CKF_INSERTION_CALLBACK  0x00000008  /* app. gets insertion notice */

/* CK_SESSION_INFO_PTR points to a CK_SESSION_INFO. */
typedef CK_SESSION_INFO CK_PTR CK_SESSION_INFO_PTR;


/* CK_OBJECT_HANDLE is a token-specific identifier for an object.  */
typedef CK_ULONG          CK_OBJECT_HANDLE;

/* CK_OBJECT_HANDLE_PTR points to a CK_OBJECT_HANDLE. */
typedef CK_OBJECT_HANDLE CK_PTR CK_OBJECT_HANDLE_PTR;


/* CK_OBJECT_CLASS is a value that identifies the classes (or types) 
 * of objects that Cryptoki recognizes.  It is defined as follows: */
/* CK_OBJECT_CLASS was changed from CK_USHORT to CK_ULONG for v2.0 */
typedef CK_ULONG          CK_OBJECT_CLASS;

/* The following classes of objects are defined: */
#define CKO_DATA            0x00000000
#define CKO_CERTIFICATE     0x00000001
#define CKO_PUBLIC_KEY      0x00000002
#define CKO_PRIVATE_KEY     0x00000003
#define CKO_SECRET_KEY      0x00000004
#define CKO_VENDOR_DEFINED  0x80000000

/* CK_OBJECT_CLASS_PTR points to a CK_OBJECT_CLASS structure. */
typedef CK_OBJECT_CLASS CK_PTR CK_OBJECT_CLASS_PTR;


/* CK_KEY_TYPE is a value that identifies a key type. */
/* CK_KEY_TYPE was changed from CK_USHORT to CK_ULONG for v2.0 */
typedef CK_ULONG          CK_KEY_TYPE;

/* the following key types are defined: */
#define CKK_RSA             0x00000000
#define CKK_DSA             0x00000001
#define CKK_DH              0x00000002

/* CKK_ECDSA, CKK_MAYFLY, and CKK_KEA are new for v2.0 */
#define CKK_ECDSA           0x00000003
#define CKK_MAYFLY          0x00000004
#define CKK_KEA             0x00000005

#define CKK_GENERIC_SECRET  0x00000010
#define CKK_RC2             0x00000011
#define CKK_RC4             0x00000012
#define CKK_DES             0x00000013
#define CKK_DES2            0x00000014
#define CKK_DES3            0x00000015

/* all these key types are new for v2.0 */
#define CKK_CAST            0x00000016
#define CKK_CAST3           0x00000017
#define CKK_CAST5           0x00000018
#define CKK_RC5             0x00000019
#define CKK_IDEA            0x0000001A
#define CKK_SKIPJACK        0x0000001B
#define CKK_BATON           0x0000001C
#define CKK_JUNIPER         0x0000001D
#define CKK_CDMF            0x0000001E

#define CKK_VENDOR_DEFINED  0x80000000


/* CK_CERTIFICATE_TYPE is a value that identifies a certificate type. */
/* CK_CERTIFICATE_TYPE was changed from CK_USHORT to CK_ULONG for v2.0 */
typedef CK_ULONG          CK_CERTIFICATE_TYPE;

/* The following certificate types are defined: */
#define CKC_X_509           0x00000000
#define CKC_VENDOR_DEFINED  0x80000000


/* CK_ATTRIBUTE_TYPE is a value that identifies an attribute type. */
/* CK_ATTRIBUTE_TYPE was changed from CK_USHORT to CK_ULONG for v2.0 */
typedef CK_ULONG          CK_ATTRIBUTE_TYPE;

/* The following attribute types are defined: */
#define CKA_CLASS              0x00000000
#define CKA_TOKEN              0x00000001
#define CKA_PRIVATE            0x00000002
#define CKA_LABEL              0x00000003
#define CKA_APPLICATION        0x00000010
#define CKA_VALUE              0x00000011
#define CKA_CERTIFICATE_TYPE   0x00000080
#define CKA_ISSUER             0x00000081
#define CKA_SERIAL_NUMBER      0x00000082
#define CKA_KEY_TYPE           0x00000100
#define CKA_SUBJECT            0x00000101
#define CKA_ID                 0x00000102
#define CKA_SENSITIVE          0x00000103
#define CKA_ENCRYPT            0x00000104
#define CKA_DECRYPT            0x00000105
#define CKA_WRAP               0x00000106
#define CKA_UNWRAP             0x00000107

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -