Hex Artifact Content

Artifact 3299bf8a7bf5d7073268ecb95dfea705b8f22515:


0000: 2f 2a 20 2a 2a 2a 2a 2a 20 42 45 47 49 4e 20 43  /* ***** BEGIN C
0010: 4f 50 59 52 49 47 48 54 20 42 4c 4f 43 4b 20 2a  OPYRIGHT BLOCK *
0020: 2a 2a 2a 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68  ****. * Copyrigh
0030: 74 20 28 43 29 20 32 30 30 35 20 52 65 64 20 48  t (C) 2005 Red H
0040: 61 74 2c 20 49 6e 63 2e 0a 20 2a 20 41 6c 6c 20  at, Inc.. * All 
0050: 72 69 67 68 74 73 20 72 65 73 65 72 76 65 64 2e  rights reserved.
0060: 0a 20 2a 0a 20 2a 20 54 68 69 73 20 6c 69 62 72  . *. * This libr
0070: 61 72 79 20 69 73 20 66 72 65 65 20 73 6f 66 74  ary is free soft
0080: 77 61 72 65 3b 20 79 6f 75 20 63 61 6e 20 72 65  ware; you can re
0090: 64 69 73 74 72 69 62 75 74 65 20 69 74 20 61 6e  distribute it an
00a0: 64 2f 6f 72 0a 20 2a 20 6d 6f 64 69 66 79 20 69  d/or. * modify i
00b0: 74 20 75 6e 64 65 72 20 74 68 65 20 74 65 72 6d  t under the term
00c0: 73 20 6f 66 20 74 68 65 20 47 4e 55 20 4c 65 73  s of the GNU Les
00d0: 73 65 72 20 47 65 6e 65 72 61 6c 20 50 75 62 6c  ser General Publ
00e0: 69 63 0a 20 2a 20 4c 69 63 65 6e 73 65 20 61 73  ic. * License as
00f0: 20 70 75 62 6c 69 73 68 65 64 20 62 79 20 74 68   published by th
0100: 65 20 46 72 65 65 20 53 6f 66 74 77 61 72 65 20  e Free Software 
0110: 46 6f 75 6e 64 61 74 69 6f 6e 20 76 65 72 73 69  Foundation versi
0120: 6f 6e 0a 20 2a 20 32 2e 31 20 6f 66 20 74 68 65  on. * 2.1 of the
0130: 20 4c 69 63 65 6e 73 65 2e 0a 20 2a 0a 20 2a 20   License.. *. * 
0140: 54 68 69 73 20 6c 69 62 72 61 72 79 20 69 73 20  This library is 
0150: 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20 74  distributed in t
0160: 68 65 20 68 6f 70 65 20 74 68 61 74 20 69 74 20  he hope that it 
0170: 77 69 6c 6c 20 62 65 20 75 73 65 66 75 6c 2c 0a  will be useful,.
0180: 20 2a 20 62 75 74 20 57 49 54 48 4f 55 54 20 41   * but WITHOUT A
0190: 4e 59 20 57 41 52 52 41 4e 54 59 3b 20 77 69 74  NY WARRANTY; wit
01a0: 68 6f 75 74 20 65 76 65 6e 20 74 68 65 20 69 6d  hout even the im
01b0: 70 6c 69 65 64 20 77 61 72 72 61 6e 74 79 20 6f  plied warranty o
01c0: 66 0a 20 2a 20 4d 45 52 43 48 41 4e 54 41 42 49  f. * MERCHANTABI
01d0: 4c 49 54 59 20 6f 72 20 46 49 54 4e 45 53 53 20  LITY or FITNESS 
01e0: 46 4f 52 20 41 20 50 41 52 54 49 43 55 4c 41 52  FOR A PARTICULAR
01f0: 20 50 55 52 50 4f 53 45 2e 20 20 53 65 65 20 74   PURPOSE.  See t
0200: 68 65 20 47 4e 55 0a 20 2a 20 4c 65 73 73 65 72  he GNU. * Lesser
0210: 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63 20   General Public 
0220: 4c 69 63 65 6e 73 65 20 66 6f 72 20 6d 6f 72 65  License for more
0230: 20 64 65 74 61 69 6c 73 2e 0a 20 2a 0a 20 2a 20   details.. *. * 
0240: 59 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65 20  You should have 
0250: 72 65 63 65 69 76 65 64 20 61 20 63 6f 70 79 20  received a copy 
0260: 6f 66 20 74 68 65 20 47 4e 55 20 4c 65 73 73 65  of the GNU Lesse
0270: 72 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69 63  r General Public
0280: 0a 20 2a 20 4c 69 63 65 6e 73 65 20 61 6c 6f 6e  . * License alon
0290: 67 20 77 69 74 68 20 74 68 69 73 20 6c 69 62 72  g with this libr
02a0: 61 72 79 3b 20 69 66 20 6e 6f 74 2c 20 77 72 69  ary; if not, wri
02b0: 74 65 20 74 6f 20 74 68 65 20 46 72 65 65 20 53  te to the Free S
02c0: 6f 66 74 77 61 72 65 0a 20 2a 20 46 6f 75 6e 64  oftware. * Found
02d0: 61 74 69 6f 6e 2c 20 49 6e 63 2e 2c 20 35 31 20  ation, Inc., 51 
02e0: 46 72 61 6e 6b 6c 69 6e 20 53 74 2c 20 46 69 66  Franklin St, Fif
02f0: 74 68 20 46 6c 6f 6f 72 2c 20 42 6f 73 74 6f 6e  th Floor, Boston
0300: 2c 20 4d 41 20 20 30 32 31 31 30 2d 31 33 30 31  , MA  02110-1301
0310: 20 20 55 53 41 0a 20 2a 20 2a 2a 2a 2a 2a 20 45    USA. * ***** E
0320: 4e 44 20 43 4f 50 59 52 49 47 48 54 20 42 4c 4f  ND COPYRIGHT BLO
0330: 43 4b 20 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 70 6b  CK *****/../* pk
0340: 63 73 31 31 2e 68 20 69 6e 63 6c 75 64 65 20 66  cs11.h include f
0350: 69 6c 65 20 66 6f 72 20 50 4b 43 53 20 23 31 31  ile for PKCS #11
0360: 2e 20 20 32 30 30 31 20 4a 75 6e 65 20 32 35 20  .  2001 June 25 
0370: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 5f 50 4b 43  */..#ifndef _PKC
0380: 53 31 31 5f 48 5f 0a 23 64 65 66 69 6e 65 20 5f  S11_H_.#define _
0390: 50 4b 43 53 31 31 5f 48 5f 20 31 0a 0a 23 69 66  PKCS11_H_ 1..#if
03a0: 64 65 66 20 5f 5f 63 70 6c 75 73 70 6c 75 73 0a  def __cplusplus.
03b0: 65 78 74 65 72 6e 20 22 43 22 20 7b 0a 23 65 6e  extern "C" {.#en
03c0: 64 69 66 0a 0a 2f 2a 20 42 65 66 6f 72 65 20 69  dif../* Before i
03d0: 6e 63 6c 75 64 69 6e 67 20 74 68 69 73 20 66 69  ncluding this fi
03e0: 6c 65 20 28 70 6b 63 73 31 31 2e 68 29 20 28 6f  le (pkcs11.h) (o
03f0: 72 20 70 6b 63 73 31 31 74 2e 68 20 62 79 0a 20  r pkcs11t.h by. 
0400: 2a 20 69 74 73 65 6c 66 29 2c 20 36 20 70 6c 61  * itself), 6 pla
0410: 74 66 6f 72 6d 2d 73 70 65 63 69 66 69 63 20 6d  tform-specific m
0420: 61 63 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65  acros must be de
0430: 66 69 6e 65 64 2e 20 20 54 68 65 73 65 0a 20 2a  fined.  These. *
0440: 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73 63   macros are desc
0450: 72 69 62 65 64 20 62 65 6c 6f 77 2c 20 61 6e 64  ribed below, and
0460: 20 74 79 70 69 63 61 6c 20 64 65 66 69 6e 69 74   typical definit
0470: 69 6f 6e 73 20 66 6f 72 20 74 68 65 6d 0a 20 2a  ions for them. *
0480: 20 61 72 65 20 61 6c 73 6f 20 67 69 76 65 6e 2e   are also given.
0490: 20 20 42 65 20 61 64 76 69 73 65 64 20 74 68 61    Be advised tha
04a0: 74 20 74 68 65 73 65 20 64 65 66 69 6e 69 74 69  t these definiti
04b0: 6f 6e 73 20 63 61 6e 20 64 65 70 65 6e 64 0a 20  ons can depend. 
04c0: 2a 20 6f 6e 20 62 6f 74 68 20 74 68 65 20 70 6c  * on both the pl
04d0: 61 74 66 6f 72 6d 20 61 6e 64 20 74 68 65 20 63  atform and the c
04e0: 6f 6d 70 69 6c 65 72 20 75 73 65 64 20 28 61 6e  ompiler used (an
04f0: 64 20 70 6f 73 73 69 62 6c 79 20 61 6c 73 6f 0a  d possibly also.
0500: 20 2a 20 6f 6e 20 77 68 65 74 68 65 72 20 61 20   * on whether a 
0510: 43 72 79 70 74 6f 6b 69 20 6c 69 62 72 61 72 79  Cryptoki library
0520: 20 69 73 20 6c 69 6e 6b 65 64 20 73 74 61 74 69   is linked stati
0530: 63 61 6c 6c 79 20 6f 72 0a 20 2a 20 64 79 6e 61  cally or. * dyna
0540: 6d 69 63 61 6c 6c 79 29 2e 0a 20 2a 0a 20 2a 20  mically).. *. * 
0550: 49 6e 20 61 64 64 69 74 69 6f 6e 20 74 6f 20 64  In addition to d
0560: 65 66 69 6e 69 6e 67 20 74 68 65 73 65 20 36 20  efining these 6 
0570: 6d 61 63 72 6f 73 2c 20 74 68 65 20 70 61 63 6b  macros, the pack
0580: 69 6e 67 20 63 6f 6e 76 65 6e 74 69 6f 6e 0a 20  ing convention. 
0590: 2a 20 66 6f 72 20 43 72 79 70 74 6f 6b 69 20 73  * for Cryptoki s
05a0: 74 72 75 63 74 75 72 65 73 20 73 68 6f 75 6c 64  tructures should
05b0: 20 62 65 20 73 65 74 2e 20 20 54 68 65 20 43 72   be set.  The Cr
05c0: 79 70 74 6f 6b 69 0a 20 2a 20 63 6f 6e 76 65 6e  yptoki. * conven
05d0: 74 69 6f 6e 20 6f 6e 20 70 61 63 6b 69 6e 67 20  tion on packing 
05e0: 69 73 20 74 68 61 74 20 73 74 72 75 63 74 75 72  is that structur
05f0: 65 73 20 73 68 6f 75 6c 64 20 62 65 20 31 2d 62  es should be 1-b
0600: 79 74 65 0a 20 2a 20 61 6c 69 67 6e 65 64 2e 0a  yte. * aligned..
0610: 20 2a 0a 20 2a 20 49 66 20 79 6f 75 27 72 65 20   *. * If you're 
0620: 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 20  using Microsoft 
0630: 44 65 76 65 6c 6f 70 65 72 20 53 74 75 64 69 6f  Developer Studio
0640: 20 35 2e 30 20 74 6f 20 70 72 6f 64 75 63 65 0a   5.0 to produce.
0650: 20 2a 20 57 69 6e 33 32 20 73 74 75 66 66 2c 20   * Win32 stuff, 
0660: 74 68 69 73 20 6d 69 67 68 74 20 62 65 20 64 6f  this might be do
0670: 6e 65 20 62 79 20 75 73 69 6e 67 20 74 68 65 20  ne by using the 
0680: 66 6f 6c 6c 6f 77 69 6e 67 0a 20 2a 20 70 72 65  following. * pre
0690: 70 72 6f 63 65 73 73 6f 72 20 64 69 72 65 63 74  processor direct
06a0: 69 76 65 20 62 65 66 6f 72 65 20 69 6e 63 6c 75  ive before inclu
06b0: 64 69 6e 67 20 70 6b 63 73 31 31 2e 68 20 6f 72  ding pkcs11.h or
06c0: 20 70 6b 63 73 31 31 74 2e 68 3a 0a 20 2a 0a 20   pkcs11t.h:. *. 
06d0: 2a 20 23 70 72 61 67 6d 61 20 70 61 63 6b 28 70  * #pragma pack(p
06e0: 75 73 68 2c 20 63 72 79 70 74 6f 6b 69 2c 20 31  ush, cryptoki, 1
06f0: 29 0a 20 2a 0a 20 2a 20 61 6e 64 20 75 73 69 6e  ). *. * and usin
0700: 67 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  g the following 
0710: 70 72 65 70 72 6f 63 65 73 73 6f 72 20 64 69 72  preprocessor dir
0720: 65 63 74 69 76 65 20 61 66 74 65 72 20 69 6e 63  ective after inc
0730: 6c 75 64 69 6e 67 0a 20 2a 20 70 6b 63 73 31 31  luding. * pkcs11
0740: 2e 68 20 6f 72 20 70 6b 63 73 31 31 74 2e 68 3a  .h or pkcs11t.h:
0750: 0a 20 2a 0a 20 2a 20 23 70 72 61 67 6d 61 20 70  . *. * #pragma p
0760: 61 63 6b 28 70 6f 70 2c 20 63 72 79 70 74 6f 6b  ack(pop, cryptok
0770: 69 29 0a 20 2a 0a 20 2a 20 49 66 20 79 6f 75 27  i). *. * If you'
0780: 72 65 20 75 73 69 6e 67 20 61 6e 20 65 61 72 6c  re using an earl
0790: 69 65 72 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d  ier version of M
07a0: 69 63 72 6f 73 6f 66 74 20 44 65 76 65 6c 6f 70  icrosoft Develop
07b0: 65 72 0a 20 2a 20 53 74 75 64 69 6f 20 74 6f 20  er. * Studio to 
07c0: 70 72 6f 64 75 63 65 20 57 69 6e 31 36 20 73 74  produce Win16 st
07d0: 75 66 66 2c 20 74 68 69 73 20 6d 69 67 68 74 20  uff, this might 
07e0: 62 65 20 64 6f 6e 65 20 62 79 20 75 73 69 6e 67  be done by using
07f0: 0a 20 2a 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  . * the followin
0800: 67 20 70 72 65 70 72 6f 63 65 73 73 6f 72 20 64  g preprocessor d
0810: 69 72 65 63 74 69 76 65 20 62 65 66 6f 72 65 20  irective before 
0820: 69 6e 63 6c 75 64 69 6e 67 0a 20 2a 20 70 6b 63  including. * pkc
0830: 73 31 31 2e 68 20 6f 72 20 70 6b 63 73 31 31 74  s11.h or pkcs11t
0840: 2e 68 3a 0a 20 2a 0a 20 2a 20 23 70 72 61 67 6d  .h:. *. * #pragm
0850: 61 20 70 61 63 6b 28 31 29 0a 20 2a 0a 20 2a 20  a pack(1). *. * 
0860: 49 6e 20 61 20 55 4e 49 58 20 65 6e 76 69 72 6f  In a UNIX enviro
0870: 6e 6d 65 6e 74 2c 20 79 6f 75 27 72 65 20 6f 6e  nment, you're on
0880: 20 79 6f 75 72 20 6f 77 6e 20 66 6f 72 20 74 68   your own for th
0890: 69 73 2e 20 20 59 6f 75 20 6d 69 67 68 74 0a 20  is.  You might. 
08a0: 2a 20 6e 6f 74 20 6e 65 65 64 20 74 6f 20 64 6f  * not need to do
08b0: 20 28 6f 72 20 62 65 20 61 62 6c 65 20 74 6f 20   (or be able to 
08c0: 64 6f 21 29 20 61 6e 79 74 68 69 6e 67 2e 0a 20  do!) anything.. 
08d0: 2a 0a 20 2a 0a 20 2a 20 4e 6f 77 20 66 6f 72 20  *. *. * Now for 
08e0: 74 68 65 20 6d 61 63 72 6f 73 3a 0a 20 2a 0a 20  the macros:. *. 
08f0: 2a 0a 20 2a 20 31 2e 20 43 4b 5f 50 54 52 3a 20  *. * 1. CK_PTR: 
0900: 54 68 65 20 69 6e 64 69 72 65 63 74 69 6f 6e 20  The indirection 
0910: 73 74 72 69 6e 67 20 66 6f 72 20 6d 61 6b 69 6e  string for makin
0920: 67 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  g a pointer to a
0930: 6e 0a 20 2a 20 6f 62 6a 65 63 74 2e 20 20 49 74  n. * object.  It
0940: 20 63 61 6e 20 62 65 20 75 73 65 64 20 6c 69 6b   can be used lik
0950: 65 20 74 68 69 73 3a 0a 20 2a 0a 20 2a 20 74 79  e this:. *. * ty
0960: 70 65 64 65 66 20 43 4b 5f 42 59 54 45 20 43 4b  pedef CK_BYTE CK
0970: 5f 50 54 52 20 43 4b 5f 42 59 54 45 5f 50 54 52  _PTR CK_BYTE_PTR
0980: 3b 0a 20 2a 0a 20 2a 20 49 66 20 79 6f 75 27 72  ;. *. * If you'r
0990: 65 20 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66  e using Microsof
09a0: 74 20 44 65 76 65 6c 6f 70 65 72 20 53 74 75 64  t Developer Stud
09b0: 69 6f 20 35 2e 30 20 74 6f 20 70 72 6f 64 75 63  io 5.0 to produc
09c0: 65 0a 20 2a 20 57 69 6e 33 32 20 73 74 75 66 66  e. * Win32 stuff
09d0: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65  , it might be de
09e0: 66 69 6e 65 64 20 62 79 3a 0a 20 2a 0a 20 2a 20  fined by:. *. * 
09f0: 23 64 65 66 69 6e 65 20 43 4b 5f 50 54 52 20 2a  #define CK_PTR *
0a00: 0a 20 2a 0a 20 2a 20 49 66 20 79 6f 75 27 72 65  . *. * If you're
0a10: 20 75 73 69 6e 67 20 61 6e 20 65 61 72 6c 69 65   using an earlie
0a20: 72 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 69 63  r version of Mic
0a30: 72 6f 73 6f 66 74 20 44 65 76 65 6c 6f 70 65 72  rosoft Developer
0a40: 0a 20 2a 20 53 74 75 64 69 6f 20 74 6f 20 70 72  . * Studio to pr
0a50: 6f 64 75 63 65 20 57 69 6e 31 36 20 73 74 75 66  oduce Win16 stuf
0a60: 66 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64  f, it might be d
0a70: 65 66 69 6e 65 64 20 62 79 3a 0a 20 2a 0a 20 2a  efined by:. *. *
0a80: 20 23 64 65 66 69 6e 65 20 43 4b 5f 50 54 52 20   #define CK_PTR 
0a90: 66 61 72 20 2a 0a 20 2a 0a 20 2a 20 49 6e 20 61  far *. *. * In a
0aa0: 20 74 79 70 69 63 61 6c 20 55 4e 49 58 20 65 6e   typical UNIX en
0ab0: 76 69 72 6f 6e 6d 65 6e 74 2c 20 69 74 20 6d 69  vironment, it mi
0ac0: 67 68 74 20 62 65 20 64 65 66 69 6e 65 64 20 62  ght be defined b
0ad0: 79 3a 0a 20 2a 0a 20 2a 20 23 64 65 66 69 6e 65  y:. *. * #define
0ae0: 20 43 4b 5f 50 54 52 20 2a 0a 20 2a 0a 20 2a 0a   CK_PTR *. *. *.
0af0: 20 2a 20 32 2e 20 43 4b 5f 44 45 46 49 4e 45 5f   * 2. CK_DEFINE_
0b00: 46 55 4e 43 54 49 4f 4e 28 72 65 74 75 72 6e 54  FUNCTION(returnT
0b10: 79 70 65 2c 20 6e 61 6d 65 29 3a 20 41 20 6d 61  ype, name): A ma
0b20: 63 72 6f 20 77 68 69 63 68 20 6d 61 6b 65 73 0a  cro which makes.
0b30: 20 2a 20 61 6e 20 65 78 70 6f 72 74 61 62 6c 65   * an exportable
0b40: 20 43 72 79 70 74 6f 6b 69 20 6c 69 62 72 61 72   Cryptoki librar
0b50: 79 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  y function defin
0b60: 69 74 69 6f 6e 20 6f 75 74 20 6f 66 20 61 0a 20  ition out of a. 
0b70: 2a 20 72 65 74 75 72 6e 20 74 79 70 65 20 61 6e  * return type an
0b80: 64 20 61 20 66 75 6e 63 74 69 6f 6e 20 6e 61 6d  d a function nam
0b90: 65 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 62 65  e.  It should be
0ba0: 20 75 73 65 64 20 69 6e 20 74 68 65 0a 20 2a 20   used in the. * 
0bb0: 66 6f 6c 6c 6f 77 69 6e 67 20 66 61 73 68 69 6f  following fashio
0bc0: 6e 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20  n to define the 
0bd0: 65 78 70 6f 73 65 64 20 43 72 79 70 74 6f 6b 69  exposed Cryptoki
0be0: 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 0a 20 2a   functions in. *
0bf0: 20 61 20 43 72 79 70 74 6f 6b 69 20 6c 69 62 72   a Cryptoki libr
0c00: 61 72 79 3a 0a 20 2a 0a 20 2a 20 43 4b 5f 44 45  ary:. *. * CK_DE
0c10: 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b  FINE_FUNCTION(CK
0c20: 5f 52 56 2c 20 43 5f 49 6e 69 74 69 61 6c 69 7a  _RV, C_Initializ
0c30: 65 29 28 0a 20 2a 20 20 20 43 4b 5f 56 4f 49 44  e)(. *   CK_VOID
0c40: 5f 50 54 52 20 70 52 65 73 65 72 76 65 64 0a 20  _PTR pReserved. 
0c50: 2a 20 29 0a 20 2a 20 7b 0a 20 2a 20 20 20 2e 2e  * ). * {. *   ..
0c60: 2e 0a 20 2a 20 7d 0a 20 2a 0a 20 2a 20 49 66 20  .. * }. *. * If 
0c70: 79 6f 75 27 72 65 20 75 73 69 6e 67 20 4d 69 63  you're using Mic
0c80: 72 6f 73 6f 66 74 20 44 65 76 65 6c 6f 70 65 72  rosoft Developer
0c90: 20 53 74 75 64 69 6f 20 35 2e 30 20 74 6f 20 64   Studio 5.0 to d
0ca0: 65 66 69 6e 65 20 61 0a 20 2a 20 66 75 6e 63 74  efine a. * funct
0cb0: 69 6f 6e 20 69 6e 20 61 20 57 69 6e 33 32 20 43  ion in a Win32 C
0cc0: 72 79 70 74 6f 6b 69 20 2e 64 6c 6c 2c 20 69 74  ryptoki .dll, it
0cd0: 20 6d 69 67 68 74 20 62 65 20 64 65 66 69 6e 65   might be define
0ce0: 64 20 62 79 3a 0a 20 2a 0a 20 2a 20 23 64 65 66  d by:. *. * #def
0cf0: 69 6e 65 20 43 4b 5f 44 45 46 49 4e 45 5f 46 55  ine CK_DEFINE_FU
0d00: 4e 43 54 49 4f 4e 28 72 65 74 75 72 6e 54 79 70  NCTION(returnTyp
0d10: 65 2c 20 6e 61 6d 65 29 20 5c 0a 20 2a 20 20 20  e, name) \. *   
0d20: 72 65 74 75 72 6e 54 79 70 65 20 5f 5f 64 65 63  returnType __dec
0d30: 6c 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29  lspec(dllexport)
0d40: 20 6e 61 6d 65 0a 20 2a 0a 20 2a 20 49 66 20 79   name. *. * If y
0d50: 6f 75 27 72 65 20 75 73 69 6e 67 20 61 6e 20 65  ou're using an e
0d60: 61 72 6c 69 65 72 20 76 65 72 73 69 6f 6e 20 6f  arlier version o
0d70: 66 20 4d 69 63 72 6f 73 6f 66 74 20 44 65 76 65  f Microsoft Deve
0d80: 6c 6f 70 65 72 0a 20 2a 20 53 74 75 64 69 6f 20  loper. * Studio 
0d90: 74 6f 20 64 65 66 69 6e 65 20 61 20 66 75 6e 63  to define a func
0da0: 74 69 6f 6e 20 69 6e 20 61 20 57 69 6e 31 36 20  tion in a Win16 
0db0: 43 72 79 70 74 6f 6b 69 20 2e 64 6c 6c 2c 20 69  Cryptoki .dll, i
0dc0: 74 0a 20 2a 20 6d 69 67 68 74 20 62 65 20 64 65  t. * might be de
0dd0: 66 69 6e 65 64 20 62 79 3a 0a 20 2a 0a 20 2a 20  fined by:. *. * 
0de0: 23 64 65 66 69 6e 65 20 43 4b 5f 44 45 46 49 4e  #define CK_DEFIN
0df0: 45 5f 46 55 4e 43 54 49 4f 4e 28 72 65 74 75 72  E_FUNCTION(retur
0e00: 6e 54 79 70 65 2c 20 6e 61 6d 65 29 20 5c 0a 20  nType, name) \. 
0e10: 2a 20 20 20 72 65 74 75 72 6e 54 79 70 65 20 5f  *   returnType _
0e20: 5f 65 78 70 6f 72 74 20 5f 66 61 72 20 5f 70 61  _export _far _pa
0e30: 73 63 61 6c 20 6e 61 6d 65 0a 20 2a 0a 20 2a 20  scal name. *. * 
0e40: 49 6e 20 61 20 55 4e 49 58 20 65 6e 76 69 72 6f  In a UNIX enviro
0e50: 6e 6d 65 6e 74 2c 20 69 74 20 6d 69 67 68 74 20  nment, it might 
0e60: 62 65 20 64 65 66 69 6e 65 64 20 62 79 3a 0a 20  be defined by:. 
0e70: 2a 0a 20 2a 20 23 64 65 66 69 6e 65 20 43 4b 5f  *. * #define CK_
0e80: 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28  DEFINE_FUNCTION(
0e90: 72 65 74 75 72 6e 54 79 70 65 2c 20 6e 61 6d 65  returnType, name
0ea0: 29 20 5c 0a 20 2a 20 20 20 72 65 74 75 72 6e 54  ) \. *   returnT
0eb0: 79 70 65 20 6e 61 6d 65 0a 20 2a 0a 20 2a 0a 20  ype name. *. *. 
0ec0: 2a 20 33 2e 20 43 4b 5f 44 45 43 4c 41 52 45 5f  * 3. CK_DECLARE_
0ed0: 46 55 4e 43 54 49 4f 4e 28 72 65 74 75 72 6e 54  FUNCTION(returnT
0ee0: 79 70 65 2c 20 6e 61 6d 65 29 3a 20 41 20 6d 61  ype, name): A ma
0ef0: 63 72 6f 20 77 68 69 63 68 20 6d 61 6b 65 73 0a  cro which makes.
0f00: 20 2a 20 61 6e 20 69 6d 70 6f 72 74 61 62 6c 65   * an importable
0f10: 20 43 72 79 70 74 6f 6b 69 20 6c 69 62 72 61 72   Cryptoki librar
0f20: 79 20 66 75 6e 63 74 69 6f 6e 20 64 65 63 6c 61  y function decla
0f30: 72 61 74 69 6f 6e 20 6f 75 74 20 6f 66 20 61 0a  ration out of a.
0f40: 20 2a 20 72 65 74 75 72 6e 20 74 79 70 65 20 61   * return type a
0f50: 6e 64 20 61 20 66 75 6e 63 74 69 6f 6e 20 6e 61  nd a function na
0f60: 6d 65 2e 20 20 49 74 20 73 68 6f 75 6c 64 20 62  me.  It should b
0f70: 65 20 75 73 65 64 20 69 6e 20 74 68 65 0a 20 2a  e used in the. *
0f80: 20 66 6f 6c 6c 6f 77 69 6e 67 20 66 61 73 68 69   following fashi
0f90: 6f 6e 3a 0a 20 2a 0a 20 2a 20 65 78 74 65 72 6e  on:. *. * extern
0fa0: 20 43 4b 5f 44 45 43 4c 41 52 45 5f 46 55 4e 43   CK_DECLARE_FUNC
0fb0: 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 49 6e  TION(CK_RV, C_In
0fc0: 69 74 69 61 6c 69 7a 65 29 28 0a 20 2a 20 20 20  itialize)(. *   
0fd0: 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 52 65 73  CK_VOID_PTR pRes
0fe0: 65 72 76 65 64 0a 20 2a 20 29 3b 0a 20 2a 0a 20  erved. * );. *. 
0ff0: 2a 20 49 66 20 79 6f 75 27 72 65 20 75 73 69 6e  * If you're usin
1000: 67 20 4d 69 63 72 6f 73 6f 66 74 20 44 65 76 65  g Microsoft Deve
1010: 6c 6f 70 65 72 20 53 74 75 64 69 6f 20 35 2e 30  loper Studio 5.0
1020: 20 74 6f 20 64 65 63 6c 61 72 65 20 61 0a 20 2a   to declare a. *
1030: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 61 20 57   function in a W
1040: 69 6e 33 32 20 43 72 79 70 74 6f 6b 69 20 2e 64  in32 Cryptoki .d
1050: 6c 6c 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ll, it might be 
1060: 64 65 66 69 6e 65 64 20 62 79 3a 0a 20 2a 0a 20  defined by:. *. 
1070: 2a 20 23 64 65 66 69 6e 65 20 43 4b 5f 44 45 43  * #define CK_DEC
1080: 4c 41 52 45 5f 46 55 4e 43 54 49 4f 4e 28 72 65  LARE_FUNCTION(re
1090: 74 75 72 6e 54 79 70 65 2c 20 6e 61 6d 65 29 20  turnType, name) 
10a0: 5c 0a 20 2a 20 20 20 72 65 74 75 72 6e 54 79 70  \. *   returnTyp
10b0: 65 20 5f 5f 64 65 63 6c 73 70 65 63 28 64 6c 6c  e __declspec(dll
10c0: 69 6d 70 6f 72 74 29 20 6e 61 6d 65 0a 20 2a 0a  import) name. *.
10d0: 20 2a 20 49 66 20 79 6f 75 27 72 65 20 75 73 69   * If you're usi
10e0: 6e 67 20 61 6e 20 65 61 72 6c 69 65 72 20 76 65  ng an earlier ve
10f0: 72 73 69 6f 6e 20 6f 66 20 4d 69 63 72 6f 73 6f  rsion of Microso
1100: 66 74 20 44 65 76 65 6c 6f 70 65 72 0a 20 2a 20  ft Developer. * 
1110: 53 74 75 64 69 6f 20 74 6f 20 64 65 63 6c 61 72  Studio to declar
1120: 65 20 61 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20  e a function in 
1130: 61 20 57 69 6e 31 36 20 43 72 79 70 74 6f 6b 69  a Win16 Cryptoki
1140: 20 2e 64 6c 6c 2c 20 69 74 0a 20 2a 20 6d 69 67   .dll, it. * mig
1150: 68 74 20 62 65 20 64 65 66 69 6e 65 64 20 62 79  ht be defined by
1160: 3a 0a 20 2a 0a 20 2a 20 23 64 65 66 69 6e 65 20  :. *. * #define 
1170: 43 4b 5f 44 45 43 4c 41 52 45 5f 46 55 4e 43 54  CK_DECLARE_FUNCT
1180: 49 4f 4e 28 72 65 74 75 72 6e 54 79 70 65 2c 20  ION(returnType, 
1190: 6e 61 6d 65 29 20 5c 0a 20 2a 20 20 20 72 65 74  name) \. *   ret
11a0: 75 72 6e 54 79 70 65 20 5f 5f 65 78 70 6f 72 74  urnType __export
11b0: 20 5f 66 61 72 20 5f 70 61 73 63 61 6c 20 6e 61   _far _pascal na
11c0: 6d 65 0a 20 2a 0a 20 2a 20 49 6e 20 61 20 55 4e  me. *. * In a UN
11d0: 49 58 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2c 20  IX environment, 
11e0: 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 66 69  it might be defi
11f0: 6e 65 64 20 62 79 3a 0a 20 2a 0a 20 2a 20 23 64  ned by:. *. * #d
1200: 65 66 69 6e 65 20 43 4b 5f 44 45 43 4c 41 52 45  efine CK_DECLARE
1210: 5f 46 55 4e 43 54 49 4f 4e 28 72 65 74 75 72 6e  _FUNCTION(return
1220: 54 79 70 65 2c 20 6e 61 6d 65 29 20 5c 0a 20 2a  Type, name) \. *
1230: 20 20 20 72 65 74 75 72 6e 54 79 70 65 20 6e 61     returnType na
1240: 6d 65 0a 20 2a 0a 20 2a 0a 20 2a 20 34 2e 20 43  me. *. *. * 4. C
1250: 4b 5f 44 45 43 4c 41 52 45 5f 46 55 4e 43 54 49  K_DECLARE_FUNCTI
1260: 4f 4e 5f 50 4f 49 4e 54 45 52 28 72 65 74 75 72  ON_POINTER(retur
1270: 6e 54 79 70 65 2c 20 6e 61 6d 65 29 3a 20 41 20  nType, name): A 
1280: 6d 61 63 72 6f 0a 20 2a 20 77 68 69 63 68 20 6d  macro. * which m
1290: 61 6b 65 73 20 61 20 43 72 79 70 74 6f 6b 69 20  akes a Cryptoki 
12a0: 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  API function poi
12b0: 6e 74 65 72 20 64 65 63 6c 61 72 61 74 69 6f 6e  nter declaration
12c0: 20 6f 72 0a 20 2a 20 66 75 6e 63 74 69 6f 6e 20   or. * function 
12d0: 70 6f 69 6e 74 65 72 20 74 79 70 65 20 64 65 63  pointer type dec
12e0: 6c 61 72 61 74 69 6f 6e 20 6f 75 74 20 6f 66 20  laration out of 
12f0: 61 20 72 65 74 75 72 6e 20 74 79 70 65 20 61 6e  a return type an
1300: 64 20 61 0a 20 2a 20 66 75 6e 63 74 69 6f 6e 20  d a. * function 
1310: 6e 61 6d 65 2e 20 20 49 74 20 73 68 6f 75 6c 64  name.  It should
1320: 20 62 65 20 75 73 65 64 20 69 6e 20 74 68 65 20   be used in the 
1330: 66 6f 6c 6c 6f 77 69 6e 67 20 66 61 73 68 69 6f  following fashio
1340: 6e 3a 0a 20 2a 0a 20 2a 20 2f 2f 20 44 65 66 69  n:. *. * // Defi
1350: 6e 65 20 66 75 6e 63 50 74 72 20 74 6f 20 62 65  ne funcPtr to be
1360: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1370: 43 72 79 70 74 6f 6b 69 20 41 50 49 20 66 75 6e  Cryptoki API fun
1380: 63 74 69 6f 6e 0a 20 2a 20 2f 2f 20 74 61 6b 69  ction. * // taki
1390: 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 61 72 67  ng arguments arg
13a0: 73 20 61 6e 64 20 72 65 74 75 72 6e 69 6e 67 20  s and returning 
13b0: 43 4b 5f 52 56 2e 0a 20 2a 20 43 4b 5f 44 45 43  CK_RV.. * CK_DEC
13c0: 4c 41 52 45 5f 46 55 4e 43 54 49 4f 4e 5f 50 4f  LARE_FUNCTION_PO
13d0: 49 4e 54 45 52 28 43 4b 5f 52 56 2c 20 66 75 6e  INTER(CK_RV, fun
13e0: 63 50 74 72 29 28 61 72 67 73 29 3b 0a 20 2a 0a  cPtr)(args);. *.
13f0: 20 2a 20 6f 72 0a 20 2a 0a 20 2a 20 2f 2f 20 44   * or. *. * // D
1400: 65 66 69 6e 65 20 66 75 6e 63 50 74 72 54 79 70  efine funcPtrTyp
1410: 65 20 74 6f 20 62 65 20 74 68 65 20 74 79 70 65  e to be the type
1420: 20 6f 66 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   of a pointer to
1430: 20 61 0a 20 2a 20 2f 2f 20 43 72 79 70 74 6f 6b   a. * // Cryptok
1440: 69 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 74  i API function t
1450: 61 6b 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20  aking arguments 
1460: 61 72 67 73 20 61 6e 64 20 72 65 74 75 72 6e 69  args and returni
1470: 6e 67 0a 20 2a 20 2f 2f 20 43 4b 5f 52 56 2c 20  ng. * // CK_RV, 
1480: 61 6e 64 20 74 68 65 6e 20 64 65 66 69 6e 65 20  and then define 
1490: 66 75 6e 63 50 74 72 20 74 6f 20 62 65 20 61 20  funcPtr to be a 
14a0: 76 61 72 69 61 62 6c 65 20 6f 66 20 74 79 70 65  variable of type
14b0: 0a 20 2a 20 2f 2f 20 66 75 6e 63 50 74 72 54 79  . * // funcPtrTy
14c0: 70 65 2e 0a 20 2a 20 74 79 70 65 64 65 66 20 43  pe.. * typedef C
14d0: 4b 5f 44 45 43 4c 41 52 45 5f 46 55 4e 43 54 49  K_DECLARE_FUNCTI
14e0: 4f 4e 5f 50 4f 49 4e 54 45 52 28 43 4b 5f 52 56  ON_POINTER(CK_RV
14f0: 2c 20 66 75 6e 63 50 74 72 54 79 70 65 29 28 61  , funcPtrType)(a
1500: 72 67 73 29 3b 0a 20 2a 20 66 75 6e 63 50 74 72  rgs);. * funcPtr
1510: 54 79 70 65 20 66 75 6e 63 50 74 72 3b 0a 20 2a  Type funcPtr;. *
1520: 0a 20 2a 20 49 66 20 79 6f 75 27 72 65 20 75 73  . * If you're us
1530: 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74 20 44 65  ing Microsoft De
1540: 76 65 6c 6f 70 65 72 20 53 74 75 64 69 6f 20 35  veloper Studio 5
1550: 2e 30 20 74 6f 20 61 63 63 65 73 73 0a 20 2a 20  .0 to access. * 
1560: 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 61 20 57  functions in a W
1570: 69 6e 33 32 20 43 72 79 70 74 6f 6b 69 20 2e 64  in32 Cryptoki .d
1580: 6c 6c 2c 20 69 6e 20 6d 69 67 68 74 20 62 65 20  ll, in might be 
1590: 64 65 66 69 6e 65 64 20 62 79 3a 0a 20 2a 0a 20  defined by:. *. 
15a0: 2a 20 23 64 65 66 69 6e 65 20 43 4b 5f 44 45 43  * #define CK_DEC
15b0: 4c 41 52 45 5f 46 55 4e 43 54 49 4f 4e 5f 50 4f  LARE_FUNCTION_PO
15c0: 49 4e 54 45 52 28 72 65 74 75 72 6e 54 79 70 65  INTER(returnType
15d0: 2c 20 6e 61 6d 65 29 20 5c 0a 20 2a 20 20 20 72  , name) \. *   r
15e0: 65 74 75 72 6e 54 79 70 65 20 5f 5f 64 65 63 6c  eturnType __decl
15f0: 73 70 65 63 28 64 6c 6c 69 6d 70 6f 72 74 29 20  spec(dllimport) 
1600: 28 2a 20 6e 61 6d 65 29 0a 20 2a 0a 20 2a 20 49  (* name). *. * I
1610: 66 20 79 6f 75 27 72 65 20 75 73 69 6e 67 20 61  f you're using a
1620: 6e 20 65 61 72 6c 69 65 72 20 76 65 72 73 69 6f  n earlier versio
1630: 6e 20 6f 66 20 4d 69 63 72 6f 73 6f 66 74 20 44  n of Microsoft D
1640: 65 76 65 6c 6f 70 65 72 0a 20 2a 20 53 74 75 64  eveloper. * Stud
1650: 69 6f 20 74 6f 20 61 63 63 65 73 73 20 66 75 6e  io to access fun
1660: 63 74 69 6f 6e 73 20 69 6e 20 61 20 57 69 6e 31  ctions in a Win1
1670: 36 20 43 72 79 70 74 6f 6b 69 20 2e 64 6c 6c 2c  6 Cryptoki .dll,
1680: 20 69 74 20 6d 69 67 68 74 0a 20 2a 20 62 65 20   it might. * be 
1690: 64 65 66 69 6e 65 64 20 62 79 3a 0a 20 2a 0a 20  defined by:. *. 
16a0: 2a 20 23 64 65 66 69 6e 65 20 43 4b 5f 44 45 43  * #define CK_DEC
16b0: 4c 41 52 45 5f 46 55 4e 43 54 49 4f 4e 5f 50 4f  LARE_FUNCTION_PO
16c0: 49 4e 54 45 52 28 72 65 74 75 72 6e 54 79 70 65  INTER(returnType
16d0: 2c 20 6e 61 6d 65 29 20 5c 0a 20 2a 20 20 20 72  , name) \. *   r
16e0: 65 74 75 72 6e 54 79 70 65 20 5f 5f 65 78 70 6f  eturnType __expo
16f0: 72 74 20 5f 66 61 72 20 5f 70 61 73 63 61 6c 20  rt _far _pascal 
1700: 28 2a 20 6e 61 6d 65 29 0a 20 2a 0a 20 2a 20 49  (* name). *. * I
1710: 6e 20 61 20 55 4e 49 58 20 65 6e 76 69 72 6f 6e  n a UNIX environ
1720: 6d 65 6e 74 2c 20 69 74 20 6d 69 67 68 74 20 62  ment, it might b
1730: 65 20 64 65 66 69 6e 65 64 20 62 79 3a 0a 20 2a  e defined by:. *
1740: 0a 20 2a 20 23 64 65 66 69 6e 65 20 43 4b 5f 44  . * #define CK_D
1750: 45 43 4c 41 52 45 5f 46 55 4e 43 54 49 4f 4e 5f  ECLARE_FUNCTION_
1760: 50 4f 49 4e 54 45 52 28 72 65 74 75 72 6e 54 79  POINTER(returnTy
1770: 70 65 2c 20 6e 61 6d 65 29 20 5c 0a 20 2a 20 20  pe, name) \. *  
1780: 20 72 65 74 75 72 6e 54 79 70 65 20 28 2a 20 6e   returnType (* n
1790: 61 6d 65 29 0a 20 2a 0a 20 2a 0a 20 2a 20 35 2e  ame). *. *. * 5.
17a0: 20 43 4b 5f 43 41 4c 4c 42 41 43 4b 5f 46 55 4e   CK_CALLBACK_FUN
17b0: 43 54 49 4f 4e 28 72 65 74 75 72 6e 54 79 70 65  CTION(returnType
17c0: 2c 20 6e 61 6d 65 29 3a 20 41 20 6d 61 63 72 6f  , name): A macro
17d0: 20 77 68 69 63 68 20 6d 61 6b 65 73 0a 20 2a 20   which makes. * 
17e0: 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  a function point
17f0: 65 72 20 74 79 70 65 20 66 6f 72 20 61 6e 20 61  er type for an a
1800: 70 70 6c 69 63 61 74 69 6f 6e 20 63 61 6c 6c 62  pplication callb
1810: 61 63 6b 20 6f 75 74 20 6f 66 0a 20 2a 20 61 20  ack out of. * a 
1820: 72 65 74 75 72 6e 20 74 79 70 65 20 66 6f 72 20  return type for 
1830: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 61 6e 64  the callback and
1840: 20 61 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20   a name for the 
1850: 63 61 6c 6c 62 61 63 6b 2e 0a 20 2a 20 49 74 20  callback.. * It 
1860: 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 69  should be used i
1870: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
1880: 66 61 73 68 69 6f 6e 3a 0a 20 2a 0a 20 2a 20 43  fashion:. *. * C
1890: 4b 5f 43 41 4c 4c 42 41 43 4b 5f 46 55 4e 43 54  K_CALLBACK_FUNCT
18a0: 49 4f 4e 28 43 4b 5f 52 56 2c 20 6d 79 43 61 6c  ION(CK_RV, myCal
18b0: 6c 62 61 63 6b 29 28 61 72 67 73 29 3b 0a 20 2a  lback)(args);. *
18c0: 0a 20 2a 20 74 6f 20 64 65 63 6c 61 72 65 20 61  . * to declare a
18d0: 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
18e0: 72 2c 20 6d 79 43 61 6c 6c 62 61 63 6b 2c 20 74  r, myCallback, t
18f0: 6f 20 61 20 63 61 6c 6c 62 61 63 6b 0a 20 2a 20  o a callback. * 
1900: 77 68 69 63 68 20 74 61 6b 65 73 20 61 72 67 75  which takes argu
1910: 6d 65 6e 74 73 20 61 72 67 73 20 61 6e 64 20 72  ments args and r
1920: 65 74 75 72 6e 73 20 61 20 43 4b 5f 52 56 2e 20  eturns a CK_RV. 
1930: 20 49 74 20 63 61 6e 20 61 6c 73 6f 0a 20 2a 20   It can also. * 
1940: 62 65 20 75 73 65 64 20 6c 69 6b 65 20 74 68 69  be used like thi
1950: 73 3a 0a 20 2a 0a 20 2a 20 74 79 70 65 64 65 66  s:. *. * typedef
1960: 20 43 4b 5f 43 41 4c 4c 42 41 43 4b 5f 46 55 4e   CK_CALLBACK_FUN
1970: 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 6d 79 43  CTION(CK_RV, myC
1980: 61 6c 6c 62 61 63 6b 54 79 70 65 29 28 61 72 67  allbackType)(arg
1990: 73 29 3b 0a 20 2a 20 6d 79 43 61 6c 6c 62 61 63  s);. * myCallbac
19a0: 6b 54 79 70 65 20 6d 79 43 61 6c 6c 62 61 63 6b  kType myCallback
19b0: 3b 0a 20 2a 0a 20 2a 20 49 66 20 79 6f 75 27 72  ;. *. * If you'r
19c0: 65 20 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66  e using Microsof
19d0: 74 20 44 65 76 65 6c 6f 70 65 72 20 53 74 75 64  t Developer Stud
19e0: 69 6f 20 35 2e 30 20 74 6f 20 64 6f 20 57 69 6e  io 5.0 to do Win
19f0: 33 32 0a 20 2a 20 43 72 79 70 74 6f 6b 69 20 64  32. * Cryptoki d
1a00: 65 76 65 6c 6f 70 6d 65 6e 74 2c 20 69 74 20 6d  evelopment, it m
1a10: 69 67 68 74 20 62 65 20 64 65 66 69 6e 65 64 20  ight be defined 
1a20: 62 79 3a 0a 20 2a 0a 20 2a 20 23 64 65 66 69 6e  by:. *. * #defin
1a30: 65 20 43 4b 5f 43 41 4c 4c 42 41 43 4b 5f 46 55  e CK_CALLBACK_FU
1a40: 4e 43 54 49 4f 4e 28 72 65 74 75 72 6e 54 79 70  NCTION(returnTyp
1a50: 65 2c 20 6e 61 6d 65 29 20 5c 0a 20 2a 20 20 20  e, name) \. *   
1a60: 72 65 74 75 72 6e 54 79 70 65 20 28 2a 20 6e 61  returnType (* na
1a70: 6d 65 29 0a 20 2a 0a 20 2a 20 49 66 20 79 6f 75  me). *. * If you
1a80: 27 72 65 20 75 73 69 6e 67 20 61 6e 20 65 61 72  're using an ear
1a90: 6c 69 65 72 20 76 65 72 73 69 6f 6e 20 6f 66 20  lier version of 
1aa0: 4d 69 63 72 6f 73 6f 66 74 20 44 65 76 65 6c 6f  Microsoft Develo
1ab0: 70 65 72 0a 20 2a 20 53 74 75 64 69 6f 20 74 6f  per. * Studio to
1ac0: 20 64 6f 20 57 69 6e 31 36 20 64 65 76 65 6c 6f   do Win16 develo
1ad0: 70 6d 65 6e 74 2c 20 69 74 20 6d 69 67 68 74 20  pment, it might 
1ae0: 62 65 20 64 65 66 69 6e 65 64 20 62 79 3a 0a 20  be defined by:. 
1af0: 2a 0a 20 2a 20 23 64 65 66 69 6e 65 20 43 4b 5f  *. * #define CK_
1b00: 43 41 4c 4c 42 41 43 4b 5f 46 55 4e 43 54 49 4f  CALLBACK_FUNCTIO
1b10: 4e 28 72 65 74 75 72 6e 54 79 70 65 2c 20 6e 61  N(returnType, na
1b20: 6d 65 29 20 5c 0a 20 2a 20 20 20 72 65 74 75 72  me) \. *   retur
1b30: 6e 54 79 70 65 20 5f 66 61 72 20 5f 70 61 73 63  nType _far _pasc
1b40: 61 6c 20 28 2a 20 6e 61 6d 65 29 0a 20 2a 0a 20  al (* name). *. 
1b50: 2a 20 49 6e 20 61 20 55 4e 49 58 20 65 6e 76 69  * In a UNIX envi
1b60: 72 6f 6e 6d 65 6e 74 2c 20 69 74 20 6d 69 67 68  ronment, it migh
1b70: 74 20 62 65 20 64 65 66 69 6e 65 64 20 62 79 3a  t be defined by:
1b80: 0a 20 2a 0a 20 2a 20 23 64 65 66 69 6e 65 20 43  . *. * #define C
1b90: 4b 5f 43 41 4c 4c 42 41 43 4b 5f 46 55 4e 43 54  K_CALLBACK_FUNCT
1ba0: 49 4f 4e 28 72 65 74 75 72 6e 54 79 70 65 2c 20  ION(returnType, 
1bb0: 6e 61 6d 65 29 20 5c 0a 20 2a 20 20 20 72 65 74  name) \. *   ret
1bc0: 75 72 6e 54 79 70 65 20 28 2a 20 6e 61 6d 65 29  urnType (* name)
1bd0: 0a 20 2a 0a 20 2a 0a 20 2a 20 36 2e 20 4e 55 4c  . *. *. * 6. NUL
1be0: 4c 5f 50 54 52 3a 20 54 68 69 73 20 6d 61 63 72  L_PTR: This macr
1bf0: 6f 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 6f  o is the value o
1c00: 66 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72  f a NULL pointer
1c10: 2e 0a 20 2a 0a 20 2a 20 49 6e 20 61 6e 79 20 41  .. *. * In any A
1c20: 4e 53 49 2f 49 53 4f 20 43 20 65 6e 76 69 72 6f  NSI/ISO C enviro
1c30: 6e 6d 65 6e 74 20 28 61 6e 64 20 69 6e 20 6d 61  nment (and in ma
1c40: 6e 79 20 6f 74 68 65 72 73 20 61 73 20 77 65 6c  ny others as wel
1c50: 6c 29 2c 0a 20 2a 20 74 68 69 73 20 73 68 6f 75  l),. * this shou
1c60: 6c 64 20 62 65 73 74 20 62 65 20 64 65 66 69 6e  ld best be defin
1c70: 65 64 20 62 79 0a 20 2a 0a 20 2a 20 23 69 66 6e  ed by. *. * #ifn
1c80: 64 65 66 20 4e 55 4c 4c 5f 50 54 52 0a 20 2a 20  def NULL_PTR. * 
1c90: 23 64 65 66 69 6e 65 20 4e 55 4c 4c 5f 50 54 52  #define NULL_PTR
1ca0: 20 30 0a 20 2a 20 23 65 6e 64 69 66 0a 20 2a 2f   0. * #endif. */
1cb0: 0a 0a 23 69 66 64 65 66 20 5f 57 49 4e 33 32 0a  ..#ifdef _WIN32.
1cc0: 23 70 72 61 67 6d 61 20 70 61 63 6b 28 70 75 73  #pragma pack(pus
1cd0: 68 2c 20 63 72 79 70 74 6f 6b 69 2c 20 31 29 0a  h, cryptoki, 1).
1ce0: 23 65 6e 64 69 66 0a 0a 2f 2a 20 41 6c 6c 20 74  #endif../* All t
1cf0: 68 65 20 76 61 72 69 6f 75 73 20 43 72 79 70 74  he various Crypt
1d00: 6f 6b 69 20 74 79 70 65 73 20 61 6e 64 20 23 64  oki types and #d
1d10: 65 66 69 6e 65 27 64 20 76 61 6c 75 65 73 20 61  efine'd values a
1d20: 72 65 20 69 6e 20 74 68 65 0a 20 2a 20 66 69 6c  re in the. * fil
1d30: 65 20 70 6b 63 73 31 31 74 2e 68 2e 20 2a 2f 0a  e pkcs11t.h. */.
1d40: 23 69 6e 63 6c 75 64 65 20 22 70 6b 63 73 31 31  #include "pkcs11
1d50: 74 2e 68 22 0a 0a 23 64 65 66 69 6e 65 20 5f 5f  t.h"..#define __
1d60: 50 41 53 54 45 28 78 2c 79 29 20 20 20 20 20 20  PASTE(x,y)      
1d70: 78 23 23 79 0a 0a 0a 2f 2a 20 3d 3d 3d 3d 3d 3d  x##y.../* ======
1d80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1d90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1da0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1db0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 20 2a 20 44 65 66 69  ========. * Defi
1dc0: 6e 65 20 74 68 65 20 22 65 78 74 65 72 6e 22 20  ne the "extern" 
1dd0: 66 6f 72 6d 20 6f 66 20 61 6c 6c 20 74 68 65 20  form of all the 
1de0: 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 20 2a  entry points.. *
1df0: 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d   ===============
1e00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1e10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1e20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a  ===============.
1e30: 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 43 4b 5f   */..#define CK_
1e40: 4e 45 45 44 5f 41 52 47 5f 4c 49 53 54 20 20 31  NEED_ARG_LIST  1
1e50: 0a 23 64 65 66 69 6e 65 20 43 4b 5f 50 4b 43 53  .#define CK_PKCS
1e60: 31 31 5f 46 55 4e 43 54 49 4f 4e 5f 49 4e 46 4f  11_FUNCTION_INFO
1e70: 28 6e 61 6d 65 29 20 5c 0a 20 20 43 4b 5f 44 45  (name) \.  CK_DE
1e80: 43 4c 41 52 45 5f 46 55 4e 43 54 49 4f 4e 28 43  CLARE_FUNCTION(C
1e90: 4b 5f 52 56 2c 20 6e 61 6d 65 29 0a 0a 2f 2a 20  K_RV, name)../* 
1ea0: 70 6b 63 73 31 31 66 2e 68 20 68 61 73 20 61 6c  pkcs11f.h has al
1eb0: 6c 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f  l the informatio
1ec0: 6e 20 61 62 6f 75 74 20 74 68 65 20 43 72 79 70  n about the Cryp
1ed0: 74 6f 6b 69 0a 20 2a 20 66 75 6e 63 74 69 6f 6e  toki. * function
1ee0: 20 70 72 6f 74 6f 74 79 70 65 73 2e 20 2a 2f 0a   prototypes. */.
1ef0: 23 69 6e 63 6c 75 64 65 20 22 70 6b 63 73 31 31  #include "pkcs11
1f00: 66 2e 68 22 0a 0a 23 75 6e 64 65 66 20 43 4b 5f  f.h"..#undef CK_
1f10: 4e 45 45 44 5f 41 52 47 5f 4c 49 53 54 0a 23 75  NEED_ARG_LIST.#u
1f20: 6e 64 65 66 20 43 4b 5f 50 4b 43 53 31 31 5f 46  ndef CK_PKCS11_F
1f30: 55 4e 43 54 49 4f 4e 5f 49 4e 46 4f 0a 0a 0a 2f  UNCTION_INFO.../
1f40: 2a 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  * ==============
1f50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1f60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1f70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1f80: 0a 20 2a 20 44 65 66 69 6e 65 20 74 68 65 20 74  . * Define the t
1f90: 79 70 65 64 65 66 20 66 6f 72 6d 20 6f 66 20 61  ypedef form of a
1fa0: 6c 6c 20 74 68 65 20 65 6e 74 72 79 20 70 6f 69  ll the entry poi
1fb0: 6e 74 73 2e 20 20 54 68 61 74 20 69 73 2c 20 66  nts.  That is, f
1fc0: 6f 72 0a 20 2a 20 65 61 63 68 20 43 72 79 70 74  or. * each Crypt
1fd0: 6f 6b 69 20 66 75 6e 63 74 69 6f 6e 20 43 5f 58  oki function C_X
1fe0: 58 58 2c 20 64 65 66 69 6e 65 20 61 20 74 79 70  XX, define a typ
1ff0: 65 20 43 4b 5f 43 5f 58 58 58 20 77 68 69 63 68  e CK_C_XXX which
2000: 20 69 73 0a 20 2a 20 61 20 70 6f 69 6e 74 65 72   is. * a pointer
2010: 20 74 6f 20 74 68 61 74 20 6b 69 6e 64 20 6f 66   to that kind of
2020: 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 2a 20 3d 3d   function.. * ==
2030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2060: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 20 2a 2f  ============. */
2070: 0a 0a 23 64 65 66 69 6e 65 20 43 4b 5f 4e 45 45  ..#define CK_NEE
2080: 44 5f 41 52 47 5f 4c 49 53 54 20 20 31 0a 23 64  D_ARG_LIST  1.#d
2090: 65 66 69 6e 65 20 43 4b 5f 50 4b 43 53 31 31 5f  efine CK_PKCS11_
20a0: 46 55 4e 43 54 49 4f 4e 5f 49 4e 46 4f 28 6e 61  FUNCTION_INFO(na
20b0: 6d 65 29 20 5c 0a 20 20 74 79 70 65 64 65 66 20  me) \.  typedef 
20c0: 43 4b 5f 44 45 43 4c 41 52 45 5f 46 55 4e 43 54  CK_DECLARE_FUNCT
20d0: 49 4f 4e 5f 50 4f 49 4e 54 45 52 28 43 4b 5f 52  ION_POINTER(CK_R
20e0: 56 2c 20 5f 5f 50 41 53 54 45 28 43 4b 5f 2c 6e  V, __PASTE(CK_,n
20f0: 61 6d 65 29 29 0a 0a 2f 2a 20 70 6b 63 73 31 31  ame))../* pkcs11
2100: 66 2e 68 20 68 61 73 20 61 6c 6c 20 74 68 65 20  f.h has all the 
2110: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
2120: 74 20 74 68 65 20 43 72 79 70 74 6f 6b 69 0a 20  t the Cryptoki. 
2130: 2a 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f  * function proto
2140: 74 79 70 65 73 2e 20 2a 2f 0a 23 69 6e 63 6c 75  types. */.#inclu
2150: 64 65 20 22 70 6b 63 73 31 31 66 2e 68 22 0a 0a  de "pkcs11f.h"..
2160: 23 75 6e 64 65 66 20 43 4b 5f 4e 45 45 44 5f 41  #undef CK_NEED_A
2170: 52 47 5f 4c 49 53 54 0a 23 75 6e 64 65 66 20 43  RG_LIST.#undef C
2180: 4b 5f 50 4b 43 53 31 31 5f 46 55 4e 43 54 49 4f  K_PKCS11_FUNCTIO
2190: 4e 5f 49 4e 46 4f 0a 0a 0a 2f 2a 20 3d 3d 3d 3d  N_INFO.../* ====
21a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
21b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
21c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
21d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 20 2a 20 44 65  ==========. * De
21e0: 66 69 6e 65 20 73 74 72 75 63 74 65 64 20 76 65  fine structed ve
21f0: 63 74 6f 72 20 6f 66 20 65 6e 74 72 79 20 70 6f  ctor of entry po
2200: 69 6e 74 73 2e 20 20 41 20 43 4b 5f 46 55 4e 43  ints.  A CK_FUNC
2210: 54 49 4f 4e 5f 4c 49 53 54 0a 20 2a 20 63 6f 6e  TION_LIST. * con
2220: 74 61 69 6e 73 20 61 20 43 4b 5f 56 45 52 53 49  tains a CK_VERSI
2230: 4f 4e 20 69 6e 64 69 63 61 74 69 6e 67 20 61 20  ON indicating a 
2240: 6c 69 62 72 61 72 79 27 73 20 43 72 79 70 74 6f  library's Crypto
2250: 6b 69 20 76 65 72 73 69 6f 6e 0a 20 2a 20 61 6e  ki version. * an
2260: 64 20 74 68 65 6e 20 61 20 77 68 6f 6c 65 20 73  d then a whole s
2270: 6c 65 77 20 6f 66 20 66 75 6e 63 74 69 6f 6e 20  lew of function 
2280: 70 6f 69 6e 74 65 72 73 20 74 6f 20 74 68 65 20  pointers to the 
2290: 72 6f 75 74 69 6e 65 73 20 69 6e 0a 20 2a 20 74  routines in. * t
22a0: 68 65 20 6c 69 62 72 61 72 79 2e 20 20 54 68 69  he library.  Thi
22b0: 73 20 74 79 70 65 20 77 61 73 20 64 65 63 6c 61  s type was decla
22c0: 72 65 64 2c 20 62 75 74 20 6e 6f 74 20 64 65 66  red, but not def
22d0: 69 6e 65 64 2c 20 69 6e 0a 20 2a 20 70 6b 63 73  ined, in. * pkcs
22e0: 31 31 74 2e 68 2e 0a 20 2a 20 3d 3d 3d 3d 3d 3d  11t.h.. * ======
22f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2300: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2310: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2320: 3d 3d 3d 3d 3d 3d 3d 3d 0a 20 2a 2f 0a 0a 23 64  ========. */..#d
2330: 65 66 69 6e 65 20 43 4b 5f 50 4b 43 53 31 31 5f  efine CK_PKCS11_
2340: 46 55 4e 43 54 49 4f 4e 5f 49 4e 46 4f 28 6e 61  FUNCTION_INFO(na
2350: 6d 65 29 20 5c 0a 20 20 5f 5f 50 41 53 54 45 28  me) \.  __PASTE(
2360: 43 4b 5f 2c 6e 61 6d 65 29 20 6e 61 6d 65 3b 0a  CK_,name) name;.
2370: 20 20 0a 73 74 72 75 63 74 20 43 4b 5f 46 55 4e    .struct CK_FUN
2380: 43 54 49 4f 4e 5f 4c 49 53 54 20 7b 0a 0a 20 20  CTION_LIST {..  
2390: 43 4b 5f 56 45 52 53 49 4f 4e 20 20 20 20 76 65  CK_VERSION    ve
23a0: 72 73 69 6f 6e 3b 20 20 2f 2a 20 43 72 79 70 74  rsion;  /* Crypt
23b0: 6f 6b 69 20 76 65 72 73 69 6f 6e 20 2a 2f 0a 0a  oki version */..
23c0: 2f 2a 20 50 69 6c 65 20 61 6c 6c 20 74 68 65 20  /* Pile all the 
23d0: 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
23e0: 73 20 69 6e 74 6f 20 74 68 65 20 43 4b 5f 46 55  s into the CK_FU
23f0: 4e 43 54 49 4f 4e 5f 4c 49 53 54 2e 20 2a 2f 0a  NCTION_LIST. */.
2400: 2f 2a 20 70 6b 63 73 31 31 66 2e 68 20 68 61 73  /* pkcs11f.h has
2410: 20 61 6c 6c 20 74 68 65 20 69 6e 66 6f 72 6d 61   all the informa
2420: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 43  tion about the C
2430: 72 79 70 74 6f 6b 69 0a 20 2a 20 66 75 6e 63 74  ryptoki. * funct
2440: 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 2e 20  ion prototypes. 
2450: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 70 6b 63  */.#include "pkc
2460: 73 31 31 66 2e 68 22 0a 0a 7d 3b 0a 0a 23 69 66  s11f.h"..};..#if
2470: 64 65 66 20 5f 57 49 4e 33 32 0a 23 70 72 61 67  def _WIN32.#prag
2480: 6d 61 20 70 61 63 6b 28 70 6f 70 2c 20 63 72 79  ma pack(pop, cry
2490: 70 74 6f 6b 69 29 0a 23 65 6e 64 69 66 0a 0a 23  ptoki).#endif..#
24a0: 75 6e 64 65 66 20 43 4b 5f 50 4b 43 53 31 31 5f  undef CK_PKCS11_
24b0: 46 55 4e 43 54 49 4f 4e 5f 49 4e 46 4f 0a 0a 0a  FUNCTION_INFO...
24c0: 23 75 6e 64 65 66 20 5f 5f 50 41 53 54 45 0a 0a  #undef __PASTE..
24d0: 23 69 66 64 65 66 20 5f 5f 63 70 6c 75 73 70 6c  #ifdef __cpluspl
24e0: 75 73 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 65 6e  us.}.#endif..#en
24f0: 64 69 66 0a                                      dif.