Hex Artifact Content

Artifact efb7accc6b91843aef970dc3aadd3ff77762918e:


0000: 23 69 66 64 65 66 20 48 41 56 45 5f 43 4f 4e 46  #ifdef HAVE_CONF
0010: 49 47 5f 48 0a 23 69 6e 63 6c 75 64 65 20 22 63  IG_H.#include "c
0020: 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a  onfig.h".#endif.
0030: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 50 43 53  .#ifdef HAVE_PCS
0040: 43 4c 49 54 45 5f 48 0a 23 20 20 69 6e 63 6c 75  CLITE_H.#  inclu
0050: 64 65 20 3c 70 63 73 63 6c 69 74 65 2e 68 3e 0a  de <pcsclite.h>.
0060: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41  #endif.#ifdef HA
0070: 56 45 5f 57 49 4e 53 43 41 52 44 5f 48 0a 23 20  VE_WINSCARD_H.# 
0080: 20 69 6e 63 6c 75 64 65 20 3c 77 69 6e 73 63 61   include <winsca
0090: 72 64 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66  rd.h>.#endif.#if
00a0: 64 65 66 20 48 41 56 45 5f 53 54 44 49 4e 54 5f  def HAVE_STDINT_
00b0: 48 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c 73 74  H.#  include <st
00c0: 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66 0a 23  dint.h>.#endif.#
00d0: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 54 59  ifdef HAVE_INTTY
00e0: 50 45 53 5f 48 0a 23 20 20 69 6e 63 6c 75 64 65  PES_H.#  include
00f0: 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65   <inttypes.h>.#e
0100: 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41 56 45  ndif.#ifdef HAVE
0110: 5f 53 54 44 4c 49 42 5f 48 0a 23 20 20 69 6e 63  _STDLIB_H.#  inc
0120: 6c 75 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a  lude <stdlib.h>.
0130: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41  #endif.#ifdef HA
0140: 56 45 5f 55 4e 49 53 54 44 5f 48 0a 23 20 20 69  VE_UNISTD_H.#  i
0150: 6e 63 6c 75 64 65 20 3c 75 6e 69 73 74 64 2e 68  nclude <unistd.h
0160: 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  >.#endif.#ifdef 
0170: 48 41 56 45 5f 53 54 52 49 4e 47 5f 48 0a 23 20  HAVE_STRING_H.# 
0180: 20 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67   include <string
0190: 2e 68 3e 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  .h>.#endif.#ifde
01a0: 66 20 48 41 56 45 5f 50 54 48 52 45 41 44 5f 48  f HAVE_PTHREAD_H
01b0: 0a 23 20 20 69 6e 63 6c 75 64 65 20 3c 70 74 68  .#  include <pth
01c0: 72 65 61 64 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  read.h>.#endif..
01d0: 23 64 65 66 69 6e 65 20 43 4b 5f 50 54 52 20 2a  #define CK_PTR *
01e0: 0a 23 64 65 66 69 6e 65 20 43 4b 5f 44 45 46 49  .#define CK_DEFI
01f0: 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 72 65 74 75  NE_FUNCTION(retu
0200: 72 6e 54 79 70 65 2c 20 6e 61 6d 65 29 20 72 65  rnType, name) re
0210: 74 75 72 6e 54 79 70 65 20 6e 61 6d 65 0a 23 64  turnType name.#d
0220: 65 66 69 6e 65 20 43 4b 5f 44 45 43 4c 41 52 45  efine CK_DECLARE
0230: 5f 46 55 4e 43 54 49 4f 4e 28 72 65 74 75 72 6e  _FUNCTION(return
0240: 54 79 70 65 2c 20 6e 61 6d 65 29 20 72 65 74 75  Type, name) retu
0250: 72 6e 54 79 70 65 20 6e 61 6d 65 0a 23 64 65 66  rnType name.#def
0260: 69 6e 65 20 43 4b 5f 44 45 43 4c 41 52 45 5f 46  ine CK_DECLARE_F
0270: 55 4e 43 54 49 4f 4e 5f 50 4f 49 4e 54 45 52 28  UNCTION_POINTER(
0280: 72 65 74 75 72 6e 54 79 70 65 2c 20 6e 61 6d 65  returnType, name
0290: 29 20 72 65 74 75 72 6e 54 79 70 65 20 28 2a 20  ) returnType (* 
02a0: 6e 61 6d 65 29 0a 23 64 65 66 69 6e 65 20 43 4b  name).#define CK
02b0: 5f 43 41 4c 4c 42 41 43 4b 5f 46 55 4e 43 54 49  _CALLBACK_FUNCTI
02c0: 4f 4e 28 72 65 74 75 72 6e 54 79 70 65 2c 20 6e  ON(returnType, n
02d0: 61 6d 65 29 20 72 65 74 75 72 6e 54 79 70 65 20  ame) returnType 
02e0: 28 2a 20 6e 61 6d 65 29 0a 23 69 66 6e 64 65 66  (* name).#ifndef
02f0: 20 4e 55 4c 4c 5f 50 54 52 0a 23 20 20 64 65 66   NULL_PTR.#  def
0300: 69 6e 65 20 4e 55 4c 4c 5f 50 54 52 20 30 0a 23  ine NULL_PTR 0.#
0310: 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65 20  endif..#include 
0320: 22 70 6b 63 73 31 31 2e 68 22 0a 0a 23 69 66 6e  "pkcs11.h"..#ifn
0330: 64 65 66 20 43 41 43 4b 45 59 5f 43 52 59 50 54  def CACKEY_CRYPT
0340: 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45  OKI_VERSION_CODE
0350: 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45  .#  define CACKE
0360: 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 52 53 49  Y_CRYPTOKI_VERSI
0370: 4f 4e 5f 43 4f 44 45 20 30 78 30 32 31 65 30 30  ON_CODE 0x021e00
0380: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
0390: 43 41 43 4b 45 59 5f 44 45 42 55 47 0a 23 20 20  CACKEY_DEBUG.#  
03a0: 69 66 64 65 66 20 48 41 56 45 5f 53 54 44 49 4f  ifdef HAVE_STDIO
03b0: 5f 48 0a 23 20 20 20 20 69 6e 63 6c 75 64 65 20  _H.#    include 
03c0: 3c 73 74 64 69 6f 2e 68 3e 0a 23 20 20 65 6e 64  <stdio.h>.#  end
03d0: 69 66 0a 0a 23 20 20 64 65 66 69 6e 65 20 43 41  if..#  define CA
03e0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
03f0: 46 28 78 2e 2e 2e 29 20 7b 20 66 70 72 69 6e 74  F(x...) { fprint
0400: 66 28 73 74 64 65 72 72 2c 20 22 25 73 28 29 3a  f(stderr, "%s():
0410: 20 22 2c 20 5f 5f 66 75 6e 63 5f 5f 29 3b 20 66   ", __func__); f
0420: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 78  printf(stderr, x
0430: 29 3b 20 66 70 72 69 6e 74 66 28 73 74 64 65 72  ); fprintf(stder
0440: 72 2c 20 22 5c 6e 22 29 3b 20 7d 0a 23 20 20 64  r, "\n"); }.#  d
0450: 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42  efine CACKEY_DEB
0460: 55 47 5f 50 52 49 4e 54 42 55 46 28 66 2c 20 78  UG_PRINTBUF(f, x
0470: 2c 20 79 29 20 7b 20 75 6e 73 69 67 6e 65 64 20  , y) { unsigned 
0480: 63 68 61 72 20 2a 62 75 66 3b 20 75 6e 73 69 67  char *buf; unsig
0490: 6e 65 64 20 6c 6f 6e 67 20 69 64 78 3b 20 62 75  ned long idx; bu
04a0: 66 20 3d 20 28 75 6e 73 69 67 6e 65 64 20 63 68  f = (unsigned ch
04b0: 61 72 20 2a 29 20 28 78 29 3b 20 66 70 72 69 6e  ar *) (x); fprin
04c0: 74 66 28 73 74 64 65 72 72 2c 20 22 25 73 28 29  tf(stderr, "%s()
04d0: 3a 20 25 73 20 20 28 25 73 2f 25 6c 75 20 3d 20  : %s  (%s/%lu = 
04e0: 7b 25 30 32 78 22 2c 20 5f 5f 66 75 6e 63 5f 5f  {%02x", __func__
04f0: 2c 20 66 2c 20 23 78 2c 20 28 75 6e 73 69 67 6e  , f, #x, (unsign
0500: 65 64 20 6c 6f 6e 67 29 20 28 79 29 2c 20 62 75  ed long) (y), bu
0510: 66 5b 30 5d 29 3b 20 66 6f 72 20 28 69 64 78 20  f[0]); for (idx 
0520: 3d 20 31 3b 20 69 64 78 20 3c 20 28 79 29 3b 20  = 1; idx < (y); 
0530: 69 64 78 2b 2b 29 20 7b 20 66 70 72 69 6e 74 66  idx++) { fprintf
0540: 28 73 74 64 65 72 72 2c 20 22 2c 20 25 30 32 78  (stderr, ", %02x
0550: 22 2c 20 62 75 66 5b 69 64 78 5d 29 3b 20 7d 3b  ", buf[idx]); };
0560: 20 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c   fprintf(stderr,
0570: 20 22 7d 29 5c 6e 22 29 3b 20 7d 0a 23 20 20 64   "})\n"); }.#  d
0580: 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42  efine CACKEY_DEB
0590: 55 47 5f 50 45 52 52 4f 52 28 78 29 20 7b 20 66  UG_PERROR(x) { f
05a0: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
05b0: 25 73 28 29 3a 20 22 2c 20 5f 5f 66 75 6e 63 5f  %s(): ", __func_
05c0: 5f 29 3b 20 70 65 72 72 6f 72 28 78 29 3b 20 7d  _); perror(x); }
05d0: 0a 23 20 20 64 65 66 69 6e 65 20 66 72 65 65 28  .#  define free(
05e0: 78 29 20 7b 20 43 41 43 4b 45 59 5f 44 45 42 55  x) { CACKEY_DEBU
05f0: 47 5f 50 52 49 4e 54 46 28 22 46 52 45 45 28 25  G_PRINTF("FREE(%
0600: 70 29 20 28 25 73 29 22 2c 20 78 2c 20 23 78 29  p) (%s)", x, #x)
0610: 3b 20 66 72 65 65 28 78 29 3b 20 7d 0a 0a 73 74  ; free(x); }..st
0620: 61 74 69 63 20 76 6f 69 64 20 2a 43 41 43 4b 45  atic void *CACKE
0630: 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 4d 41 4c  Y_DEBUG_FUNC_MAL
0640: 4c 4f 43 28 73 69 7a 65 5f 74 20 73 69 7a 65 2c  LOC(size_t size,
0650: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 66 75 6e   const char *fun
0660: 63 29 20 7b 0a 09 76 6f 69 64 20 2a 72 65 74 76  c) {..void *retv
0670: 61 6c 3b 0a 0a 09 72 65 74 76 61 6c 20 3d 20 6d  al;...retval = m
0680: 61 6c 6c 6f 63 28 73 69 7a 65 29 3b 0a 0a 09 66  alloc(size);...f
0690: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
06a0: 25 73 28 29 3a 20 22 2c 20 66 75 6e 63 29 3b 0a  %s(): ", func);.
06b0: 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  .fprintf(stderr,
06c0: 20 22 4d 41 4c 4c 4f 43 28 29 20 3d 20 25 70 22   "MALLOC() = %p"
06d0: 2c 20 72 65 74 76 61 6c 29 3b 0a 09 66 70 72 69  , retval);..fpri
06e0: 6e 74 66 28 73 74 64 65 72 72 2c 20 22 5c 6e 22  ntf(stderr, "\n"
06f0: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76  );...return(retv
0700: 61 6c 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76  al);.}..static v
0710: 6f 69 64 20 2a 43 41 43 4b 45 59 5f 44 45 42 55  oid *CACKEY_DEBU
0720: 47 5f 46 55 4e 43 5f 52 45 41 4c 4c 4f 43 28 76  G_FUNC_REALLOC(v
0730: 6f 69 64 20 2a 70 74 72 2c 20 73 69 7a 65 5f 74  oid *ptr, size_t
0740: 20 73 69 7a 65 2c 20 63 6f 6e 73 74 20 63 68 61   size, const cha
0750: 72 20 2a 66 75 6e 63 29 20 7b 0a 09 76 6f 69 64  r *func) {..void
0760: 20 2a 72 65 74 76 61 6c 3b 0a 0a 09 72 65 74 76   *retval;...retv
0770: 61 6c 20 3d 20 72 65 61 6c 6c 6f 63 28 70 74 72  al = realloc(ptr
0780: 2c 20 73 69 7a 65 29 3b 0a 0a 09 69 66 20 28 72  , size);...if (r
0790: 65 74 76 61 6c 20 21 3d 20 70 74 72 29 20 7b 0a  etval != ptr) {.
07a0: 09 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72  ..fprintf(stderr
07b0: 2c 20 22 25 73 28 29 3a 20 22 2c 20 66 75 6e 63  , "%s(): ", func
07c0: 29 3b 0a 09 09 66 70 72 69 6e 74 66 28 73 74 64  );...fprintf(std
07d0: 65 72 72 2c 20 22 52 45 41 4c 4c 4f 43 28 25 70  err, "REALLOC(%p
07e0: 29 20 3d 20 25 70 22 2c 20 70 74 72 2c 20 72 65  ) = %p", ptr, re
07f0: 74 76 61 6c 29 3b 0a 09 09 66 70 72 69 6e 74 66  tval);...fprintf
0800: 28 73 74 64 65 72 72 2c 20 22 5c 6e 22 29 3b 0a  (stderr, "\n");.
0810: 09 7d 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76  .}...return(retv
0820: 61 6c 29 3b 0a 7d 0a 0a 23 20 20 64 65 66 69 6e  al);.}..#  defin
0830: 65 20 6d 61 6c 6c 6f 63 28 78 29 20 43 41 43 4b  e malloc(x) CACK
0840: 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 4d 41  EY_DEBUG_FUNC_MA
0850: 4c 4c 4f 43 28 78 2c 20 5f 5f 66 75 6e 63 5f 5f  LLOC(x, __func__
0860: 29 0a 23 20 20 64 65 66 69 6e 65 20 72 65 61 6c  ).#  define real
0870: 6c 6f 63 28 78 2c 20 79 29 20 43 41 43 4b 45 59  loc(x, y) CACKEY
0880: 5f 44 45 42 55 47 5f 46 55 4e 43 5f 52 45 41 4c  _DEBUG_FUNC_REAL
0890: 4c 4f 43 28 78 2c 20 79 2c 20 5f 5f 66 75 6e 63  LOC(x, y, __func
08a0: 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  __).#else.#  def
08b0: 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47  ine CACKEY_DEBUG
08c0: 5f 50 52 49 4e 54 46 28 78 2e 2e 2e 29 20 2f 2a  _PRINTF(x...) /*
08d0: 2a 2f 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43  */.#  define CAC
08e0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42  KEY_DEBUG_PRINTB
08f0: 55 46 28 66 2c 20 78 2c 20 79 29 20 2f 2a 2a 2f  UF(f, x, y) /**/
0900: 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45  .#  define CACKE
0910: 59 5f 44 45 42 55 47 5f 50 45 52 52 4f 52 28 78  Y_DEBUG_PERROR(x
0920: 29 20 2f 2a 2a 2f 0a 23 65 6e 64 69 66 0a 0a 23  ) /**/.#endif..#
0930: 69 66 6e 64 65 66 20 43 4b 41 5f 54 52 55 53 54  ifndef CKA_TRUST
0940: 5f 53 45 52 56 45 52 5f 41 55 54 48 0a 23 20 20  _SERVER_AUTH.#  
0950: 64 65 66 69 6e 65 20 43 4b 41 5f 54 52 55 53 54  define CKA_TRUST
0960: 5f 53 45 52 56 45 52 5f 41 55 54 48 20 30 78 63  _SERVER_AUTH 0xc
0970: 65 35 33 36 33 35 38 0a 23 65 6e 64 69 66 0a 23  e536358.#endif.#
0980: 69 66 6e 64 65 66 20 43 4b 41 5f 54 52 55 53 54  ifndef CKA_TRUST
0990: 5f 43 4c 49 45 4e 54 5f 41 55 54 48 0a 23 20 20  _CLIENT_AUTH.#  
09a0: 64 65 66 69 6e 65 20 43 4b 41 5f 54 52 55 53 54  define CKA_TRUST
09b0: 5f 43 4c 49 45 4e 54 5f 41 55 54 48 20 30 78 63  _CLIENT_AUTH 0xc
09c0: 65 35 33 36 33 35 39 0a 23 65 6e 64 69 66 0a 23  e536359.#endif.#
09d0: 69 66 6e 64 65 66 20 43 4b 41 5f 54 52 55 53 54  ifndef CKA_TRUST
09e0: 5f 43 4f 44 45 5f 53 49 47 4e 49 4e 47 0a 23 20  _CODE_SIGNING.# 
09f0: 20 64 65 66 69 6e 65 20 43 4b 41 5f 54 52 55 53   define CKA_TRUS
0a00: 54 5f 43 4f 44 45 5f 53 49 47 4e 49 4e 47 20 30  T_CODE_SIGNING 0
0a10: 78 63 65 35 33 36 33 35 61 0a 23 65 6e 64 69 66  xce53635a.#endif
0a20: 0a 23 69 66 6e 64 65 66 20 43 4b 41 5f 54 52 55  .#ifndef CKA_TRU
0a30: 53 54 5f 45 4d 41 49 4c 5f 50 52 4f 54 45 43 54  ST_EMAIL_PROTECT
0a40: 49 4f 4e 0a 23 20 20 64 65 66 69 6e 65 20 43 4b  ION.#  define CK
0a50: 41 5f 54 52 55 53 54 5f 45 4d 41 49 4c 5f 50 52  A_TRUST_EMAIL_PR
0a60: 4f 54 45 43 54 49 4f 4e 20 30 78 63 65 35 33 36  OTECTION 0xce536
0a70: 33 35 62 0a 23 65 6e 64 69 66 0a 0a 73 74 72 75  35b.#endif..stru
0a80: 63 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69  ct cackey_identi
0a90: 74 79 20 7b 0a 09 43 4b 5f 41 54 54 52 49 42 55  ty {..CK_ATTRIBU
0aa0: 54 45 20 2a 61 74 74 72 69 62 75 74 65 73 3b 0a  TE *attributes;.
0ab0: 09 43 4b 5f 55 4c 4f 4e 47 20 61 74 74 72 69 62  .CK_ULONG attrib
0ac0: 75 74 65 73 5f 63 6f 75 6e 74 3b 0a 7d 3b 0a 0a  utes_count;.};..
0ad0: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 65  struct cackey_se
0ae0: 73 73 69 6f 6e 20 7b 0a 09 69 6e 74 20 61 63 74  ssion {..int act
0af0: 69 76 65 3b 0a 0a 09 43 4b 5f 53 4c 4f 54 5f 49  ive;...CK_SLOT_I
0b00: 44 20 73 6c 6f 74 49 44 3b 0a 09 43 4b 5f 53 54  D slotID;..CK_ST
0b10: 41 54 45 20 73 74 61 74 65 3b 0a 09 43 4b 5f 46  ATE state;..CK_F
0b20: 4c 41 47 53 20 66 6c 61 67 73 3b 0a 09 43 4b 5f  LAGS flags;..CK_
0b30: 55 4c 4f 4e 47 20 75 6c 44 65 76 69 63 65 45 72  ULONG ulDeviceEr
0b40: 72 6f 72 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50 54  ror;..CK_VOID_PT
0b50: 52 20 70 41 70 70 6c 69 63 61 74 69 6f 6e 3b 0a  R pApplication;.
0b60: 09 43 4b 5f 4e 4f 54 49 46 59 20 4e 6f 74 69 66  .CK_NOTIFY Notif
0b70: 79 3b 0a 0a 09 73 74 72 75 63 74 20 63 61 63 6b  y;...struct cack
0b80: 65 79 5f 69 64 65 6e 74 69 74 79 20 2a 69 64 65  ey_identity *ide
0b90: 6e 74 69 74 69 65 73 3b 0a 09 75 6e 73 69 67 6e  ntities;..unsign
0ba0: 65 64 20 6c 6f 6e 67 20 69 64 65 6e 74 69 74 69  ed long identiti
0bb0: 65 73 5f 63 6f 75 6e 74 3b 0a 0a 09 69 6e 74 20  es_count;...int 
0bc0: 73 65 61 72 63 68 5f 61 63 74 69 76 65 3b 0a 09  search_active;..
0bd0: 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52  CK_ATTRIBUTE_PTR
0be0: 20 73 65 61 72 63 68 5f 71 75 65 72 79 3b 0a 09   search_query;..
0bf0: 43 4b 5f 55 4c 4f 4e 47 20 73 65 61 72 63 68 5f  CK_ULONG search_
0c00: 71 75 65 72 79 5f 63 6f 75 6e 74 3b 0a 09 75 6e  query_count;..un
0c10: 73 69 67 6e 65 64 20 6c 6f 6e 67 20 73 65 61 72  signed long sear
0c20: 63 68 5f 63 75 72 72 5f 69 64 3b 0a 0a 09 69 6e  ch_curr_id;...in
0c30: 74 20 73 69 67 6e 5f 61 63 74 69 76 65 3b 0a 09  t sign_active;..
0c40: 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 59 50  CK_MECHANISM_TYP
0c50: 45 20 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 6d  E sign_mechanism
0c60: 3b 0a 09 43 4b 5f 42 59 54 45 5f 50 54 52 20 73  ;..CK_BYTE_PTR s
0c70: 69 67 6e 5f 62 75 66 3b 0a 09 75 6e 73 69 67 6e  ign_buf;..unsign
0c80: 65 64 20 6c 6f 6e 67 20 73 69 67 6e 5f 62 75 66  ed long sign_buf
0c90: 6c 65 6e 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c  len;..unsigned l
0ca0: 6f 6e 67 20 73 69 67 6e 5f 62 75 66 75 73 65 64  ong sign_bufused
0cb0: 3b 0a 0a 09 69 6e 74 20 64 65 63 72 79 70 74 5f  ;...int decrypt_
0cc0: 61 63 74 69 76 65 3b 0a 09 43 4b 5f 4d 45 43 48  active;..CK_MECH
0cd0: 41 4e 49 53 4d 5f 54 59 50 45 20 64 65 63 72 79  ANISM_TYPE decry
0ce0: 70 74 5f 6d 65 63 68 61 6e 69 73 6d 3b 0a 09 43  pt_mechanism;..C
0cf0: 4b 5f 56 4f 49 44 5f 50 54 52 20 64 65 63 72 79  K_VOID_PTR decry
0d00: 70 74 5f 6d 65 63 68 5f 70 61 72 6d 3b 0a 09 43  pt_mech_parm;..C
0d10: 4b 5f 55 4c 4f 4e 47 20 64 65 63 72 79 70 74 5f  K_ULONG decrypt_
0d20: 6d 65 63 68 5f 70 61 72 6d 6c 65 6e 3b 0a 7d 3b  mech_parmlen;.};
0d30: 0a 0a 2f 2a 20 43 41 43 4b 45 59 20 47 6c 6f 62  ../* CACKEY Glob
0d40: 61 6c 20 48 61 6e 64 6c 65 73 20 2a 2f 0a 73 74  al Handles */.st
0d50: 61 74 69 63 20 76 6f 69 64 20 2a 63 61 63 6b 65  atic void *cacke
0d60: 79 5f 62 69 67 6c 6f 63 6b 20 3d 20 4e 55 4c 4c  y_biglock = NULL
0d70: 3b 0a 73 74 61 74 69 63 20 73 74 72 75 63 74 20  ;.static struct 
0d80: 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 20 63  cackey_session c
0d90: 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 31  ackey_sessions[1
0da0: 32 38 5d 3b 0a 73 74 61 74 69 63 20 69 6e 74 20  28];.static int 
0db0: 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a  cackey_initializ
0dc0: 65 64 20 3d 20 30 3b 0a 73 74 61 74 69 63 20 69  ed = 0;.static i
0dd0: 6e 74 20 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63  nt cackey_bigloc
0de0: 6b 5f 69 6e 69 74 20 3d 20 30 3b 0a 43 4b 5f 43  k_init = 0;.CK_C
0df0: 5f 49 4e 49 54 49 41 4c 49 5a 45 5f 41 52 47 53  _INITIALIZE_ARGS
0e00: 20 63 61 63 6b 65 79 5f 61 72 67 73 3b 0a 0a 2f   cackey_args;../
0e10: 2a 20 50 43 53 43 20 47 6c 6f 62 61 6c 20 48 61  * PCSC Global Ha
0e20: 6e 64 6c 65 73 20 2a 2f 0a 73 74 61 74 69 63 20  ndles */.static 
0e30: 4c 50 53 43 41 52 44 43 4f 4e 54 45 58 54 20 63  LPSCARDCONTEXT c
0e40: 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c  ackey_pcsc_handl
0e50: 65 20 3d 20 4e 55 4c 4c 3b 0a 0a 73 74 61 74 69  e = NULL;..stati
0e60: 63 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20  c unsigned long 
0e70: 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 6f  cackey_getversio
0e80: 6e 28 76 6f 69 64 29 20 7b 0a 09 73 74 61 74 69  n(void) {..stati
0e90: 63 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20  c unsigned long 
0ea0: 72 65 74 76 61 6c 20 3d 20 32 35 35 3b 0a 09 75  retval = 255;..u
0eb0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 6d 61 6a  nsigned long maj
0ec0: 6f 72 20 3d 20 30 3b 0a 09 75 6e 73 69 67 6e 65  or = 0;..unsigne
0ed0: 64 20 6c 6f 6e 67 20 6d 69 6e 6f 72 20 3d 20 30  d long minor = 0
0ee0: 3b 0a 09 63 68 61 72 20 2a 6d 61 6a 6f 72 5f 73  ;..char *major_s
0ef0: 74 72 20 3d 20 4e 55 4c 4c 3b 0a 09 63 68 61 72  tr = NULL;..char
0f00: 20 2a 6d 69 6e 6f 72 5f 73 74 72 20 3d 20 4e 55   *minor_str = NU
0f10: 4c 4c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  LL;...CACKEY_DEB
0f20: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65  UG_PRINTF("Calle
0f30: 64 2e 22 29 3b 0a 0a 09 69 66 20 28 72 65 74 76  d.");...if (retv
0f40: 61 6c 20 21 3d 20 32 35 35 29 20 7b 0a 09 09 43  al != 255) {...C
0f50: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
0f60: 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 30 78  TF("Returning 0x
0f70: 25 6c 78 20 28 63 61 63 68 65 64 29 2e 22 2c 20  %lx (cached).", 
0f80: 72 65 74 76 61 6c 29 3b 0a 0a 09 09 72 65 74 75  retval);....retu
0f90: 72 6e 28 72 65 74 76 61 6c 29 3b 0a 09 7d 0a 0a  rn(retval);..}..
0fa0: 09 72 65 74 76 61 6c 20 3d 20 30 3b 0a 0a 23 69  .retval = 0;..#i
0fb0: 66 64 65 66 20 50 41 43 4b 41 47 45 5f 56 45 52  fdef PACKAGE_VER
0fc0: 53 49 4f 4e 0a 20 20 20 20 20 20 20 20 6d 61 6a  SION.        maj
0fd0: 6f 72 5f 73 74 72 20 3d 20 50 41 43 4b 41 47 45  or_str = PACKAGE
0fe0: 5f 56 45 52 53 49 4f 4e 3b 0a 09 69 66 20 28 6d  _VERSION;..if (m
0ff0: 61 6a 6f 72 5f 73 74 72 29 20 7b 0a 09 20 20 20  ajor_str) {..   
1000: 20 20 20 20 20 6d 61 6a 6f 72 20 3d 20 73 74 72       major = str
1010: 74 6f 75 6c 28 6d 61 6a 6f 72 5f 73 74 72 2c 20  toul(major_str, 
1020: 26 6d 69 6e 6f 72 5f 73 74 72 2c 20 31 30 29 3b  &minor_str, 10);
1030: 0a 0a 09 09 69 66 20 28 6d 69 6e 6f 72 5f 73 74  ....if (minor_st
1040: 72 29 20 7b 0a 09 09 09 6d 69 6e 6f 72 20 3d 20  r) {....minor = 
1050: 73 74 72 74 6f 75 6c 28 6d 69 6e 6f 72 5f 73 74  strtoul(minor_st
1060: 72 20 2b 20 31 2c 20 4e 55 4c 4c 2c 20 31 30 29  r + 1, NULL, 10)
1070: 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 72 65 74 76 61  ;...}..}...retva
1080: 6c 20 3d 20 28 6d 61 6a 6f 72 20 3c 3c 20 31 36  l = (major << 16
1090: 29 20 7c 20 28 6d 69 6e 6f 72 20 3c 3c 20 38 29  ) | (minor << 8)
10a0: 3b 0a 23 65 6e 64 69 66 0a 0a 09 43 41 43 4b 45  ;.#endif...CACKE
10b0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
10c0: 52 65 74 75 72 6e 69 6e 67 20 30 78 25 6c 78 22  Returning 0x%lx"
10d0: 2c 20 72 65 74 76 61 6c 29 3b 0a 0a 09 72 65 74  , retval);...ret
10e0: 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a  urn(retval);.}..
10f0: 2f 2a 20 41 50 44 55 20 52 65 6c 61 74 65 64 20  /* APDU Related 
1100: 46 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 73 74 61  Functions */.sta
1110: 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 73  tic int cackey_s
1120: 65 6e 64 5f 61 70 64 75 28 75 6e 73 69 67 6e 65  end_apdu(unsigne
1130: 64 20 63 68 61 72 20 63 6c 61 73 73 2c 20 75 6e  d char class, un
1140: 73 69 67 6e 65 64 20 63 68 61 72 20 69 6e 73 74  signed char inst
1150: 72 75 63 74 69 6f 6e 2c 20 75 6e 73 69 67 6e 65  ruction, unsigne
1160: 64 20 63 68 61 72 20 70 31 2c 20 75 6e 73 69 67  d char p1, unsig
1170: 6e 65 64 20 63 68 61 72 20 70 32 2c 20 75 6e 73  ned char p2, uns
1180: 69 67 6e 65 64 20 63 68 61 72 20 6c 63 2c 20 75  igned char lc, u
1190: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 64 61  nsigned char *da
11a0: 74 61 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61  ta, unsigned cha
11b0: 72 20 2a 72 65 73 70 2c 20 75 6e 73 69 67 6e 65  r *resp, unsigne
11c0: 64 20 63 68 61 72 20 72 65 73 70 6c 65 6e 29 20  d char resplen) 
11d0: 7b 0a 09 4c 4f 4e 47 20 73 63 61 72 64 5f 65 73  {..LONG scard_es
11e0: 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 3b 0a 23  t_context_ret;.#
11f0: 69 66 64 65 66 20 48 41 56 45 5f 53 43 41 52 44  ifdef HAVE_SCARD
1200: 49 53 56 41 4c 49 44 43 4f 4e 54 45 58 54 0a 09  ISVALIDCONTEXT..
1210: 4c 4f 4e 47 20 73 63 61 72 64 5f 69 73 76 61 6c  LONG scard_isval
1220: 69 64 5f 72 65 74 3b 0a 23 65 6e 64 69 66 0a 0a  id_ret;.#endif..
1230: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
1240: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b  INTF("Called.");
1250: 0a 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 70 63  ...if (cackey_pc
1260: 73 63 5f 68 61 6e 64 6c 65 20 3d 3d 20 4e 55 4c  sc_handle == NUL
1270: 4c 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 70 63  L) {...cackey_pc
1280: 73 63 5f 68 61 6e 64 6c 65 20 3d 20 6d 61 6c 6c  sc_handle = mall
1290: 6f 63 28 73 69 7a 65 6f 66 28 2a 63 61 63 6b 65  oc(sizeof(*cacke
12a0: 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 29 3b  y_pcsc_handle));
12b0: 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 70 63  ...if (cackey_pc
12c0: 73 63 5f 68 61 6e 64 6c 65 20 3d 3d 20 4e 55 4c  sc_handle == NUL
12d0: 4c 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44  L) {....CACKEY_D
12e0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c  EBUG_PRINTF("Cal
12f0: 6c 20 74 6f 20 6d 61 6c 6c 6f 63 28 29 20 66 61  l to malloc() fa
1300: 69 6c 65 64 2c 20 72 65 74 75 72 6e 69 6e 67 20  iled, returning 
1310: 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09  in failure");...
1320: 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09  ..return(-1);...
1330: 7d 0a 0a 09 09 73 63 61 72 64 5f 65 73 74 5f 63  }....scard_est_c
1340: 6f 6e 74 65 78 74 5f 72 65 74 20 3d 20 53 43 61  ontext_ret = SCa
1350: 72 64 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 65  rdEstablishConte
1360: 78 74 28 53 43 41 52 44 5f 53 43 4f 50 45 5f 53  xt(SCARD_SCOPE_S
1370: 59 53 54 45 4d 2c 20 4e 55 4c 4c 2c 20 4e 55 4c  YSTEM, NULL, NUL
1380: 4c 2c 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 68  L, cackey_pcsc_h
1390: 61 6e 64 6c 65 29 3b 0a 09 09 69 66 20 28 73 63  andle);...if (sc
13a0: 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f  ard_est_context_
13b0: 72 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53  ret != SCARD_S_S
13c0: 55 43 43 45 53 53 29 20 7b 0a 09 09 09 43 41 43  UCCESS) {....CAC
13d0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
13e0: 28 22 43 61 6c 6c 20 74 6f 20 53 43 61 72 64 45  ("Call to SCardE
13f0: 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 20  stablishContext 
1400: 66 61 69 6c 65 64 20 28 72 65 74 75 72 6e 65 64  failed (returned
1410: 20 25 6c 69 29 2c 20 72 65 74 75 72 6e 69 6e 67   %li), returning
1420: 20 69 6e 20 66 61 69 6c 75 72 65 22 2c 20 28 6c   in failure", (l
1430: 6f 6e 67 29 20 73 63 61 72 64 5f 65 73 74 5f 63  ong) scard_est_c
1440: 6f 6e 74 65 78 74 5f 72 65 74 29 3b 0a 0a 09 09  ontext_ret);....
1450: 09 66 72 65 65 28 63 61 63 6b 65 79 5f 70 63 73  .free(cackey_pcs
1460: 63 5f 68 61 6e 64 6c 65 29 3b 0a 0a 09 09 09 72  c_handle);.....r
1470: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 09  eturn(-1);...}..
1480: 7d 0a 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53  }..#ifdef HAVE_S
1490: 43 41 52 44 49 53 56 41 4c 49 44 43 4f 4e 54 45  CARDISVALIDCONTE
14a0: 58 54 0a 09 73 63 61 72 64 5f 69 73 76 61 6c 69  XT..scard_isvali
14b0: 64 5f 72 65 74 20 3d 20 53 43 61 72 64 49 73 56  d_ret = SCardIsV
14c0: 61 6c 69 64 43 6f 6e 74 65 78 74 28 2a 63 61 63  alidContext(*cac
14d0: 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29  key_pcsc_handle)
14e0: 3b 0a 09 69 66 20 28 73 63 61 72 64 5f 69 73 76  ;..if (scard_isv
14f0: 61 6c 69 64 5f 72 65 74 20 21 3d 20 53 43 41 52  alid_ret != SCAR
1500: 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a 09  D_S_SUCCESS) {..
1510: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
1520: 49 4e 54 46 28 22 48 61 6e 64 6c 65 20 68 61 73  INTF("Handle has
1530: 20 62 65 63 6f 6d 65 20 69 6e 76 61 6c 69 64 2c   become invalid,
1540: 20 74 72 79 69 6e 67 20 74 6f 20 72 65 2d 65 73   trying to re-es
1550: 74 61 62 6c 69 73 68 2e 2e 2e 22 29 3b 0a 0a 09  tablish...");...
1560: 09 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65  .scard_est_conte
1570: 78 74 5f 72 65 74 20 3d 20 53 43 61 72 64 45 73  xt_ret = SCardEs
1580: 74 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 28 53  tablishContext(S
1590: 43 41 52 44 5f 53 43 4f 50 45 5f 53 59 53 54 45  CARD_SCOPE_SYSTE
15a0: 4d 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 63  M, NULL, NULL, c
15b0: 61 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c  ackey_pcsc_handl
15c0: 65 29 3b 0a 09 09 69 66 20 28 73 63 61 72 64 5f  e);...if (scard_
15d0: 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74 20  est_context_ret 
15e0: 21 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45  != SCARD_S_SUCCE
15f0: 53 53 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f  SS) {....CACKEY_
1600: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61  DEBUG_PRINTF("Ca
1610: 6c 6c 20 74 6f 20 53 43 61 72 64 45 73 74 61 62  ll to SCardEstab
1620: 6c 69 73 68 43 6f 6e 74 65 78 74 20 66 61 69 6c  lishContext fail
1630: 65 64 20 28 72 65 74 75 72 6e 65 64 20 25 6c 69  ed (returned %li
1640: 29 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20  ), returning in 
1650: 66 61 69 6c 75 72 65 22 2c 20 28 6c 6f 6e 67 29  failure", (long)
1660: 20 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65   scard_est_conte
1670: 78 74 5f 72 65 74 29 3b 0a 0a 09 09 09 66 72 65  xt_ret);.....fre
1680: 65 28 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61  e(cackey_pcsc_ha
1690: 6e 64 6c 65 29 3b 0a 0a 09 09 09 72 65 74 75 72  ndle);.....retur
16a0: 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 43 41  n(-1);...}....CA
16b0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
16c0: 46 28 22 48 61 6e 64 6c 65 20 68 61 73 20 62 65  F("Handle has be
16d0: 65 6e 20 72 65 2d 65 73 74 61 62 6c 69 73 68 65  en re-establishe
16e0: 64 22 29 3b 0a 09 7d 0a 23 65 6e 64 69 66 0a 0a  d");..}.#endif..
16f0: 09 2f 2a 20 43 6f 6e 6e 65 63 74 20 74 6f 20 61  ./* Connect to a
1700: 20 72 65 61 64 65 72 2c 20 69 66 20 6e 65 65 64   reader, if need
1710: 65 64 20 2a 2f 0a 0a 09 2f 2a 20 54 72 61 6e 73  ed */.../* Trans
1720: 6d 69 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 52 65 74  mit */.}../* Ret
1730: 75 72 6e 73 20 30 20 6f 6e 20 73 75 63 63 65 73  urns 0 on succes
1740: 73 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  s */.static int 
1750: 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 63 72 65  cackey_mutex_cre
1760: 61 74 65 28 76 6f 69 64 20 2a 2a 6d 75 74 65 78  ate(void **mutex
1770: 29 20 7b 0a 09 70 74 68 72 65 61 64 5f 6d 75 74  ) {..pthread_mut
1780: 65 78 5f 74 20 2a 70 74 68 72 65 61 64 5f 6d 75  ex_t *pthread_mu
1790: 74 65 78 3b 0a 09 69 6e 74 20 70 74 68 72 65 61  tex;..int pthrea
17a0: 64 5f 72 65 74 76 61 6c 3b 0a 09 43 4b 5f 52 56  d_retval;..CK_RV
17b0: 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 3b 0a   custom_retval;.
17c0: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
17d0: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29  RINTF("Called.")
17e0: 3b 0a 0a 09 69 66 20 28 28 63 61 63 6b 65 79 5f  ;...if ((cackey_
17f0: 61 72 67 73 2e 66 6c 61 67 73 20 26 20 43 4b 46  args.flags & CKF
1800: 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20  _OS_LOCKING_OK) 
1810: 3d 3d 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e  == CKF_OS_LOCKIN
1820: 47 5f 4f 4b 29 20 7b 0a 09 09 70 74 68 72 65 61  G_OK) {...pthrea
1830: 64 5f 6d 75 74 65 78 20 3d 20 6d 61 6c 6c 6f 63  d_mutex = malloc
1840: 28 73 69 7a 65 6f 66 28 2a 70 74 68 72 65 61 64  (sizeof(*pthread
1850: 5f 6d 75 74 65 78 29 29 3b 0a 09 09 69 66 20 28  _mutex));...if (
1860: 21 70 74 68 72 65 61 64 5f 6d 75 74 65 78 29 20  !pthread_mutex) 
1870: 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55  {....CACKEY_DEBU
1880: 47 5f 50 52 49 4e 54 46 28 22 46 61 69 6c 65 64  G_PRINTF("Failed
1890: 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 6d 65 6d   to allocate mem
18a0: 6f 72 79 2e 22 29 3b 0a 0a 09 09 09 72 65 74 75  ory.");.....retu
18b0: 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 70  rn(-1);...}....p
18c0: 74 68 72 65 61 64 5f 72 65 74 76 61 6c 20 3d 20  thread_retval = 
18d0: 70 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 69 6e  pthread_mutex_in
18e0: 69 74 28 70 74 68 72 65 61 64 5f 6d 75 74 65 78  it(pthread_mutex
18f0: 2c 20 4e 55 4c 4c 29 3b 0a 09 09 69 66 20 28 70  , NULL);...if (p
1900: 74 68 72 65 61 64 5f 72 65 74 76 61 6c 20 21 3d  thread_retval !=
1910: 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f   0) {....CACKEY_
1920: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 70 74  DEBUG_PRINTF("pt
1930: 68 72 65 61 64 5f 6d 75 74 65 78 5f 69 6e 69 74  hread_mutex_init
1940: 28 29 20 72 65 74 75 72 6e 65 64 20 65 72 72 6f  () returned erro
1950: 72 20 28 25 69 29 2e 22 2c 20 70 74 68 72 65 61  r (%i).", pthrea
1960: 64 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09 72  d_retval);.....r
1970: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a  eturn(-1);...}..
1980: 09 09 2a 6d 75 74 65 78 20 3d 20 70 74 68 72 65  ..*mutex = pthre
1990: 61 64 5f 6d 75 74 65 78 3b 0a 09 7d 20 65 6c 73  ad_mutex;..} els
19a0: 65 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79  e {...if (cackey
19b0: 5f 61 72 67 73 2e 43 72 65 61 74 65 4d 75 74 65  _args.CreateMute
19c0: 78 29 20 7b 0a 09 09 09 63 75 73 74 6f 6d 5f 72  x) {....custom_r
19d0: 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 61  etval = cackey_a
19e0: 72 67 73 2e 43 72 65 61 74 65 4d 75 74 65 78 28  rgs.CreateMutex(
19f0: 6d 75 74 65 78 29 3b 0a 0a 09 09 09 69 66 20 28  mutex);.....if (
1a00: 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 21 3d  custom_retval !=
1a10: 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09 43   CKR_OK) {.....C
1a20: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
1a30: 54 46 28 22 63 61 63 6b 65 79 5f 61 72 67 73 2e  TF("cackey_args.
1a40: 43 72 65 61 74 65 4d 75 74 65 78 28 29 20 72 65  CreateMutex() re
1a50: 74 75 72 6e 65 64 20 65 72 72 6f 72 20 28 25 6c  turned error (%l
1a60: 69 29 2e 22 2c 20 28 6c 6f 6e 67 29 20 63 75 73  i).", (long) cus
1a70: 74 6f 6d 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09  tom_retval);....
1a80: 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09  ..return(-1);...
1a90: 09 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 43 41 43 4b  .}...}..}...CACK
1aa0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
1ab0: 22 52 65 74 75 72 6e 69 6e 67 20 73 75 63 65 73  "Returning suces
1ac0: 73 66 75 6c 6c 79 20 28 30 29 22 29 3b 0a 0a 09  sfully (0)");...
1ad0: 72 65 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 2f 2a  return(0);.}../*
1ae0: 20 52 65 74 75 72 6e 73 20 30 20 6f 6e 20 73 75   Returns 0 on su
1af0: 63 63 65 73 73 20 2a 2f 0a 73 74 61 74 69 63 20  ccess */.static 
1b00: 69 6e 74 20 63 61 63 6b 65 79 5f 6d 75 74 65 78  int cackey_mutex
1b10: 5f 6c 6f 63 6b 28 76 6f 69 64 20 2a 6d 75 74 65  _lock(void *mute
1b20: 78 29 20 7b 0a 09 70 74 68 72 65 61 64 5f 6d 75  x) {..pthread_mu
1b30: 74 65 78 5f 74 20 2a 70 74 68 72 65 61 64 5f 6d  tex_t *pthread_m
1b40: 75 74 65 78 3b 0a 09 69 6e 74 20 70 74 68 72 65  utex;..int pthre
1b50: 61 64 5f 72 65 74 76 61 6c 3b 0a 09 43 4b 5f 52  ad_retval;..CK_R
1b60: 56 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 3b  V custom_retval;
1b70: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
1b80: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22  PRINTF("Called."
1b90: 29 3b 0a 0a 09 69 66 20 28 28 63 61 63 6b 65 79  );...if ((cackey
1ba0: 5f 61 72 67 73 2e 66 6c 61 67 73 20 26 20 43 4b  _args.flags & CK
1bb0: 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29  F_OS_LOCKING_OK)
1bc0: 20 3d 3d 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b 49   == CKF_OS_LOCKI
1bd0: 4e 47 5f 4f 4b 29 20 7b 0a 09 09 70 74 68 72 65  NG_OK) {...pthre
1be0: 61 64 5f 6d 75 74 65 78 20 3d 20 6d 75 74 65 78  ad_mutex = mutex
1bf0: 3b 0a 0a 09 09 70 74 68 72 65 61 64 5f 72 65 74  ;....pthread_ret
1c00: 76 61 6c 20 3d 20 70 74 68 72 65 61 64 5f 6d 75  val = pthread_mu
1c10: 74 65 78 5f 6c 6f 63 6b 28 70 74 68 72 65 61 64  tex_lock(pthread
1c20: 5f 6d 75 74 65 78 29 3b 0a 09 09 69 66 20 28 70  _mutex);...if (p
1c30: 74 68 72 65 61 64 5f 72 65 74 76 61 6c 20 21 3d  thread_retval !=
1c40: 20 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f   0) {....CACKEY_
1c50: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 70 74  DEBUG_PRINTF("pt
1c60: 68 72 65 61 64 5f 6d 75 74 65 78 5f 6c 6f 63 6b  hread_mutex_lock
1c70: 28 29 20 72 65 74 75 72 6e 65 64 20 65 72 72 6f  () returned erro
1c80: 72 20 28 25 69 29 2e 22 2c 20 70 74 68 72 65 61  r (%i).", pthrea
1c90: 64 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09 72  d_retval);.....r
1ca0: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 09  eturn(-1);...}..
1cb0: 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66 20 28 63  } else {...if (c
1cc0: 61 63 6b 65 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d  ackey_args.LockM
1cd0: 75 74 65 78 29 20 7b 0a 09 09 09 63 75 73 74 6f  utex) {....custo
1ce0: 6d 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65  m_retval = cacke
1cf0: 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 78  y_args.LockMutex
1d00: 28 6d 75 74 65 78 29 3b 0a 0a 09 09 09 69 66 20  (mutex);.....if 
1d10: 28 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 21  (custom_retval !
1d20: 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09 09  = CKR_OK) {.....
1d30: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
1d40: 4e 54 46 28 22 63 61 63 6b 65 79 5f 61 72 67 73  NTF("cackey_args
1d50: 2e 4c 6f 63 6b 4d 75 74 65 78 28 29 20 72 65 74  .LockMutex() ret
1d60: 75 72 6e 65 64 20 65 72 72 6f 72 20 28 25 6c 69  urned error (%li
1d70: 29 2e 22 2c 20 28 6c 6f 6e 67 29 20 63 75 73 74  ).", (long) cust
1d80: 6f 6d 5f 72 65 74 76 61 6c 29 3b 0a 0a 09 09 09  om_retval);.....
1d90: 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a 09 09 09  .return(-1);....
1da0: 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 43 41 43 4b 45  }...}..}...CACKE
1db0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
1dc0: 52 65 74 75 72 6e 69 6e 67 20 73 75 63 65 73 73  Returning sucess
1dd0: 66 75 6c 6c 79 20 28 30 29 22 29 3b 0a 0a 09 72  fully (0)");...r
1de0: 65 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 2f 2a 20  eturn(0);.}../* 
1df0: 52 65 74 75 72 6e 73 20 30 20 6f 6e 20 73 75 63  Returns 0 on suc
1e00: 63 65 73 73 20 2a 2f 0a 73 74 61 74 69 63 20 69  cess */.static i
1e10: 6e 74 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f  nt cackey_mutex_
1e20: 75 6e 6c 6f 63 6b 28 76 6f 69 64 20 2a 6d 75 74  unlock(void *mut
1e30: 65 78 29 20 7b 0a 09 70 74 68 72 65 61 64 5f 6d  ex) {..pthread_m
1e40: 75 74 65 78 5f 74 20 2a 70 74 68 72 65 61 64 5f  utex_t *pthread_
1e50: 6d 75 74 65 78 3b 0a 09 69 6e 74 20 70 74 68 72  mutex;..int pthr
1e60: 65 61 64 5f 72 65 74 76 61 6c 3b 0a 09 43 4b 5f  ead_retval;..CK_
1e70: 52 56 20 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c  RV custom_retval
1e80: 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ;...CACKEY_DEBUG
1e90: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e  _PRINTF("Called.
1ea0: 22 29 3b 0a 0a 09 69 66 20 28 28 63 61 63 6b 65  ");...if ((cacke
1eb0: 79 5f 61 72 67 73 2e 66 6c 61 67 73 20 26 20 43  y_args.flags & C
1ec0: 4b 46 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b  KF_OS_LOCKING_OK
1ed0: 29 20 3d 3d 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b  ) == CKF_OS_LOCK
1ee0: 49 4e 47 5f 4f 4b 29 20 7b 0a 09 09 70 74 68 72  ING_OK) {...pthr
1ef0: 65 61 64 5f 6d 75 74 65 78 20 3d 20 6d 75 74 65  ead_mutex = mute
1f00: 78 3b 0a 0a 09 09 70 74 68 72 65 61 64 5f 72 65  x;....pthread_re
1f10: 74 76 61 6c 20 3d 20 70 74 68 72 65 61 64 5f 6d  tval = pthread_m
1f20: 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 70 74 68 72  utex_unlock(pthr
1f30: 65 61 64 5f 6d 75 74 65 78 29 3b 0a 09 09 69 66  ead_mutex);...if
1f40: 20 28 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c   (pthread_retval
1f50: 20 21 3d 20 30 29 20 7b 0a 09 09 09 43 41 43 4b   != 0) {....CACK
1f60: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
1f70: 22 70 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 75  "pthread_mutex_u
1f80: 6e 6c 6f 63 6b 28 29 20 72 65 74 75 72 6e 65 64  nlock() returned
1f90: 20 65 72 72 6f 72 20 28 25 69 29 2e 22 2c 20 70   error (%i).", p
1fa0: 74 68 72 65 61 64 5f 72 65 74 76 61 6c 29 3b 0a  thread_retval);.
1fb0: 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a  ....return(-1);.
1fc0: 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09  ..}..} else {...
1fd0: 69 66 20 28 63 61 63 6b 65 79 5f 61 72 67 73 2e  if (cackey_args.
1fe0: 55 6e 6c 6f 63 6b 4d 75 74 65 78 29 20 7b 0a 09  UnlockMutex) {..
1ff0: 09 09 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20  ..custom_retval 
2000: 3d 20 63 61 63 6b 65 79 5f 61 72 67 73 2e 55 6e  = cackey_args.Un
2010: 6c 6f 63 6b 4d 75 74 65 78 28 6d 75 74 65 78 29  lockMutex(mutex)
2020: 3b 0a 0a 09 09 09 69 66 20 28 63 75 73 74 6f 6d  ;.....if (custom
2030: 5f 72 65 74 76 61 6c 20 21 3d 20 43 4b 52 5f 4f  _retval != CKR_O
2040: 4b 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f  K) {.....CACKEY_
2050: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 63 61  DEBUG_PRINTF("ca
2060: 63 6b 65 79 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b  ckey_args.Unlock
2070: 4d 75 74 65 78 28 29 20 72 65 74 75 72 6e 65 64  Mutex() returned
2080: 20 65 72 72 6f 72 20 28 25 6c 69 29 2e 22 2c 20   error (%li).", 
2090: 28 6c 6f 6e 67 29 20 63 75 73 74 6f 6d 5f 72 65  (long) custom_re
20a0: 74 76 61 6c 29 3b 0a 0a 09 09 09 09 72 65 74 75  tval);......retu
20b0: 72 6e 28 2d 31 29 3b 0a 09 09 09 7d 0a 09 09 7d  rn(-1);....}...}
20c0: 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  ..}...CACKEY_DEB
20d0: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72  UG_PRINTF("Retur
20e0: 6e 69 6e 67 20 73 75 63 65 73 73 66 75 6c 6c 79  ning sucessfully
20f0: 20 28 30 29 22 29 3b 0a 0a 09 72 65 74 75 72 6e   (0)");...return
2100: 28 30 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 43  (0);.}..static C
2110: 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20  K_ATTRIBUTE_PTR 
2120: 63 61 63 6b 65 79 5f 67 65 74 5f 61 74 74 72 69  cackey_get_attri
2130: 62 75 74 65 73 28 43 4b 5f 4f 42 4a 45 43 54 5f  butes(CK_OBJECT_
2140: 43 4c 41 53 53 20 6f 62 6a 65 63 74 63 6c 61 73  CLASS objectclas
2150: 73 2c 20 76 6f 69 64 20 2a 69 64 65 6e 74 69 74  s, void *identit
2160: 79 2c 20 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67  y, unsigned long
2170: 20 69 64 65 6e 74 69 74 79 5f 6e 75 6d 2c 20 43   identity_num, C
2180: 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 43  K_ULONG_PTR pulC
2190: 6f 75 6e 74 29 20 7b 0a 09 73 74 61 74 69 63 20  ount) {..static 
21a0: 43 4b 5f 42 42 4f 4f 4c 20 63 6b 5f 74 72 75 65  CK_BBOOL ck_true
21b0: 20 3d 20 31 3b 0a 09 73 74 61 74 69 63 20 43 4b   = 1;..static CK
21c0: 5f 42 42 4f 4f 4c 20 63 6b 5f 66 61 6c 73 65 20  _BBOOL ck_false 
21d0: 3d 20 30 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 6e  = 0;..CK_ULONG n
21e0: 75 6d 61 74 74 72 73 20 3d 20 30 2c 20 72 65 74  umattrs = 0, ret
21f0: 76 61 6c 5f 63 6f 75 6e 74 3b 0a 09 43 4b 5f 41  val_count;..CK_A
2200: 54 54 52 49 42 55 54 45 5f 54 59 50 45 20 63 75  TTRIBUTE_TYPE cu
2210: 72 72 5f 61 74 74 72 5f 74 79 70 65 3b 0a 09 43  rr_attr_type;..C
2220: 4b 5f 41 54 54 52 49 42 55 54 45 20 63 75 72 72  K_ATTRIBUTE curr
2230: 5f 61 74 74 72 2c 20 2a 72 65 74 76 61 6c 3b 0a  _attr, *retval;.
2240: 09 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 56 61  .CK_VOID_PTR pVa
2250: 6c 75 65 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 75  lue;..CK_ULONG u
2260: 6c 56 61 6c 75 65 4c 65 6e 3b 0a 09 43 4b 5f 4f  lValueLen;..CK_O
2270: 42 4a 45 43 54 5f 43 4c 41 53 53 20 63 6b 5f 6f  BJECT_CLASS ck_o
2280: 62 6a 65 63 74 5f 63 6c 61 73 73 3b 0a 09 43 4b  bject_class;..CK
2290: 5f 43 45 52 54 49 46 49 43 41 54 45 5f 54 59 50  _CERTIFICATE_TYP
22a0: 45 20 63 6b 5f 63 65 72 74 69 66 69 63 61 74 65  E ck_certificate
22b0: 5f 74 79 70 65 3b 0a 09 43 4b 5f 4b 45 59 5f 54  _type;..CK_KEY_T
22c0: 59 50 45 20 63 6b 5f 6b 65 79 5f 74 79 70 65 3b  YPE ck_key_type;
22d0: 0a 09 43 4b 5f 55 54 46 38 43 48 41 52 20 75 63  ..CK_UTF8CHAR uc
22e0: 54 6d 70 42 75 66 5b 31 30 32 34 5d 3b 0a 09 75  TmpBuf[1024];..u
22f0: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 63 65 72  nsigned char cer
2300: 74 69 66 69 63 61 74 65 5b 31 36 33 38 34 5d 3b  tificate[16384];
2310: 0a 09 73 73 69 7a 65 5f 74 20 63 65 72 74 69 66  ..ssize_t certif
2320: 69 63 61 74 65 5f 6c 65 6e 20 3d 20 2d 31 2c 20  icate_len = -1, 
2330: 78 35 30 39 5f 72 65 61 64 5f 72 65 74 3b 0a 09  x509_read_ret;..
2340: 69 6e 74 20 70 56 61 6c 75 65 5f 66 72 65 65 3b  int pValue_free;
2350: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
2360: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 20 28  PRINTF("Called (
2370: 6f 62 6a 65 63 74 43 6c 61 73 73 20 3d 20 25 6c  objectClass = %l
2380: 75 2c 20 69 64 65 6e 74 69 74 79 5f 6e 75 6d 20  u, identity_num 
2390: 3d 20 25 6c 75 29 2e 22 2c 20 28 75 6e 73 69 67  = %lu).", (unsig
23a0: 6e 65 64 20 6c 6f 6e 67 29 20 6f 62 6a 65 63 74  ned long) object
23b0: 63 6c 61 73 73 2c 20 69 64 65 6e 74 69 74 79 5f  class, identity_
23c0: 6e 75 6d 29 3b 0a 0a 09 69 66 20 28 6f 62 6a 65  num);...if (obje
23d0: 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 43  ctclass != CKO_C
23e0: 45 52 54 49 46 49 43 41 54 45 20 26 26 20 6f 62  ERTIFICATE && ob
23f0: 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b 4f  jectclass != CKO
2400: 5f 50 55 42 4c 49 43 5f 4b 45 59 20 26 26 20 6f  _PUBLIC_KEY && o
2410: 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 43 4b  bjectclass != CK
2420: 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 29 20 7b  O_PRIVATE_KEY) {
2430: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
2440: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
2450: 67 20 30 20 6f 62 6a 65 63 74 73 20 28 4e 55 4c  g 0 objects (NUL
2460: 4c 29 2c 20 69 6e 76 61 6c 69 64 20 6f 62 6a 65  L), invalid obje
2470: 63 74 20 63 6c 61 73 73 22 29 3b 0a 0a 09 09 72  ct class");....r
2480: 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a 09 7d 0a  eturn(NULL);..}.
2490: 0a 09 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 3d  ..retval_count =
24a0: 20 31 36 3b 0a 09 72 65 74 76 61 6c 20 3d 20 6d   16;..retval = m
24b0: 61 6c 6c 6f 63 28 72 65 74 76 61 6c 5f 63 6f 75  alloc(retval_cou
24c0: 6e 74 20 2a 20 73 69 7a 65 6f 66 28 2a 72 65 74  nt * sizeof(*ret
24d0: 76 61 6c 29 29 3b 0a 0a 09 2f 2a 20 58 58 58 3a  val));.../* XXX:
24e0: 20 47 65 74 20 43 65 72 74 20 2a 2f 0a 09 63 65   Get Cert */..ce
24f0: 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3d 20  rtificate_len = 
2500: 2d 31 3b 0a 0a 09 69 66 20 28 63 65 72 74 69 66  -1;...if (certif
2510: 69 63 61 74 65 5f 6c 65 6e 20 3d 3d 20 2d 31 29  icate_len == -1)
2520: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
2530: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e  G_PRINTF("Return
2540: 69 6e 67 20 30 20 6f 62 6a 65 63 74 73 20 28 4e  ing 0 objects (N
2550: 55 4c 4c 29 2c 20 74 68 69 73 20 69 64 65 6e 74  ULL), this ident
2560: 69 74 79 20 64 6f 65 73 20 6e 6f 74 20 68 61 76  ity does not hav
2570: 65 20 61 6e 20 58 2e 35 30 39 20 63 65 72 74 69  e an X.509 certi
2580: 66 69 63 61 74 65 20 61 73 73 6f 63 69 61 74 65  ficate associate
2590: 64 20 77 69 74 68 20 69 74 20 61 6e 64 20 77 69  d with it and wi
25a0: 6c 6c 20 6e 6f 74 20 77 6f 72 6b 22 29 3b 0a 0a  ll not work");..
25b0: 09 09 72 65 74 75 72 6e 28 4e 55 4c 4c 29 3b 0a  ..return(NULL);.
25c0: 09 7d 0a 0a 09 66 6f 72 20 28 63 75 72 72 5f 61  .}...for (curr_a
25d0: 74 74 72 5f 74 79 70 65 20 3d 20 30 3b 20 63 75  ttr_type = 0; cu
25e0: 72 72 5f 61 74 74 72 5f 74 79 70 65 20 3c 20 30  rr_attr_type < 0
25f0: 78 63 65 35 33 36 33 35 66 3b 20 63 75 72 72 5f  xce53635f; curr_
2600: 61 74 74 72 5f 74 79 70 65 2b 2b 29 20 7b 0a 09  attr_type++) {..
2610: 09 69 66 20 28 63 75 72 72 5f 61 74 74 72 5f 74  .if (curr_attr_t
2620: 79 70 65 20 3d 3d 20 30 78 38 30 30 29 20 7b 0a  ype == 0x800) {.
2630: 09 09 09 63 75 72 72 5f 61 74 74 72 5f 74 79 70  ...curr_attr_typ
2640: 65 20 3d 20 30 78 63 65 35 33 36 33 30 30 3b 0a  e = 0xce536300;.
2650: 09 09 7d 0a 0a 09 09 70 56 61 6c 75 65 5f 66 72  ..}....pValue_fr
2660: 65 65 20 3d 20 30 3b 0a 09 09 70 56 61 6c 75 65  ee = 0;...pValue
2670: 20 3d 20 4e 55 4c 4c 3b 0a 09 09 75 6c 56 61 6c   = NULL;...ulVal
2680: 75 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e 47  ueLen = (CK_LONG
2690: 29 20 2d 31 3b 0a 0a 09 09 73 77 69 74 63 68 20  ) -1;....switch 
26a0: 28 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29  (curr_attr_type)
26b0: 20 7b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 43   {....case CKA_C
26c0: 4c 41 53 53 3a 0a 09 09 09 09 43 41 43 4b 45 59  LASS:.....CACKEY
26d0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52  _DEBUG_PRINTF("R
26e0: 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62  equesting attrib
26f0: 75 74 65 20 43 4b 41 5f 43 4c 41 53 53 20 28 30  ute CKA_CLASS (0
2700: 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75  x%08lx) ...", (u
2710: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75  nsigned long) cu
2720: 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a  rr_attr_type);..
2730: 09 09 09 09 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c  ....ck_object_cl
2740: 61 73 73 20 3d 20 6f 62 6a 65 63 74 63 6c 61 73  ass = objectclas
2750: 73 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d  s;......pValue =
2760: 20 26 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c 61 73   &ck_object_clas
2770: 73 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65  s;.....ulValueLe
2780: 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 6f 62  n = sizeof(ck_ob
2790: 6a 65 63 74 5f 63 6c 61 73 73 29 3b 0a 0a 09 09  ject_class);....
27a0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
27b0: 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75  RINTF(" ... retu
27c0: 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c  rning %lu (%p/%l
27d0: 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c  u)", (unsigned l
27e0: 6f 6e 67 29 20 2a 28 28 43 4b 5f 4f 42 4a 45 43  ong) *((CK_OBJEC
27f0: 54 5f 43 4c 41 53 53 20 2a 29 20 70 56 61 6c 75  T_CLASS *) pValu
2800: 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73  e), pValue, (uns
2810: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61  igned long) ulVa
2820: 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72  lueLen);......br
2830: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41  eak;....case CKA
2840: 5f 54 4f 4b 45 4e 3a 0a 09 09 09 09 43 41 43 4b  _TOKEN:.....CACK
2850: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
2860: 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72  "Requesting attr
2870: 69 62 75 74 65 20 43 4b 41 5f 54 4f 4b 45 4e 20  ibute CKA_TOKEN 
2880: 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20  (0x%08lx) ...", 
2890: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20  (unsigned long) 
28a0: 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b  curr_attr_type);
28b0: 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26  ......pValue = &
28c0: 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09 75 6c 56  ck_true;.....ulV
28d0: 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66  alueLen = sizeof
28e0: 28 63 6b 5f 74 72 75 65 29 3b 0a 0a 09 09 09 09  (ck_true);......
28f0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
2900: 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e  NTF(" ... return
2910: 69 6e 67 20 25 6c 75 20 28 25 70 2f 25 6c 75 29  ing %lu (%p/%lu)
2920: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  ", (unsigned lon
2930: 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a  g) *((CK_BBOOL *
2940: 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c 75  ) pValue), pValu
2950: 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  e, (unsigned lon
2960: 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a  g) ulValueLen);.
2970: 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63  .....break;....c
2980: 61 73 65 20 43 4b 41 5f 4d 4f 44 49 46 49 41 42  ase CKA_MODIFIAB
2990: 4c 45 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44  LE:.....CACKEY_D
29a0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71  EBUG_PRINTF("Req
29b0: 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74  uesting attribut
29c0: 65 20 43 4b 41 5f 4d 4f 44 49 46 49 41 42 4c 45  e CKA_MODIFIABLE
29d0: 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c   (0x%08lx) ...",
29e0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29   (unsigned long)
29f0: 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29   curr_attr_type)
2a00: 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20  ;......pValue = 
2a10: 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 09 09 09 75  &ck_false;.....u
2a20: 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65  lValueLen = size
2a30: 6f 66 28 63 6b 5f 66 61 6c 73 65 29 3b 0a 0a 09  of(ck_false);...
2a40: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
2a50: 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74  PRINTF(" ... ret
2a60: 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25  urning %lu (%p/%
2a70: 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20  lu)", (unsigned 
2a80: 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f  long) *((CK_BBOO
2a90: 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56  L *) pValue), pV
2aa0: 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20  alue, (unsigned 
2ab0: 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e  long) ulValueLen
2ac0: 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  );......break;..
2ad0: 09 09 63 61 73 65 20 43 4b 41 5f 4c 41 42 45 4c  ..case CKA_LABEL
2ae0: 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42  :.....CACKEY_DEB
2af0: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65  UG_PRINTF("Reque
2b00: 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20  sting attribute 
2b10: 43 4b 41 5f 4c 41 42 45 4c 20 28 30 78 25 30 38  CKA_LABEL (0x%08
2b20: 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67  lx) ...", (unsig
2b30: 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61  ned long) curr_a
2b40: 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09  ttr_type);......
2b50: 2f 2a 20 58 58 58 3a 20 44 65 74 65 72 6d 69 6e  /* XXX: Determin
2b60: 65 20 6e 61 6d 65 20 2a 2f 0a 0a 09 09 09 09 43  e name */......C
2b70: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
2b80: 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69  TF(" ... returni
2b90: 6e 67 20 25 73 20 28 25 70 2f 25 6c 75 29 22 2c  ng %s (%p/%lu)",
2ba0: 20 28 63 68 61 72 20 2a 29 20 28 28 43 4b 5f 55   (char *) ((CK_U
2bb0: 54 46 38 43 48 41 52 20 2a 29 20 70 56 61 6c 75  TF8CHAR *) pValu
2bc0: 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73  e), pValue, (uns
2bd0: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61  igned long) ulVa
2be0: 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72  lueLen);......br
2bf0: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41  eak;....case CKA
2c00: 5f 56 41 4c 55 45 3a 0a 09 09 09 09 43 41 43 4b  _VALUE:.....CACK
2c10: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
2c20: 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72  "Requesting attr
2c30: 69 62 75 74 65 20 43 4b 41 5f 56 41 4c 55 45 20  ibute CKA_VALUE 
2c40: 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20  (0x%08lx) ...", 
2c50: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20  (unsigned long) 
2c60: 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b  curr_attr_type);
2c70: 0a 0a 09 09 09 09 73 77 69 74 63 68 20 28 6f 62  ......switch (ob
2c80: 6a 65 63 74 63 6c 61 73 73 29 20 7b 0a 09 09 09  jectclass) {....
2c90: 09 09 63 61 73 65 20 43 4b 4f 5f 50 52 49 56 41  ..case CKO_PRIVA
2ca0: 54 45 5f 4b 45 59 3a 0a 09 09 09 09 09 09 43 41  TE_KEY:.......CA
2cb0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
2cc0: 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f 74 20  F(" ... but not 
2cd0: 67 65 74 74 69 6e 67 20 69 74 20 62 65 63 61 75  getting it becau
2ce0: 73 65 20 77 65 20 61 72 65 20 61 20 70 72 69 76  se we are a priv
2cf0: 61 74 65 20 6b 65 79 2e 22 29 3b 0a 0a 09 09 09  ate key.");.....
2d00: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 63  ...break;......c
2d10: 61 73 65 20 43 4b 4f 5f 50 55 42 4c 49 43 5f 4b  ase CKO_PUBLIC_K
2d20: 45 59 3a 0a 09 09 09 09 09 09 2f 2a 20 58 58 58  EY:......./* XXX
2d30: 3a 20 54 4f 44 4f 20 2a 2f 0a 0a 09 09 09 09 09  : TODO */.......
2d40: 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 63 61 73  .break;......cas
2d50: 65 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54  e CKO_CERTIFICAT
2d60: 45 3a 0a 09 09 09 09 09 09 70 56 61 6c 75 65 20  E:.......pValue 
2d70: 3d 20 63 65 72 74 69 66 69 63 61 74 65 3b 0a 09  = certificate;..
2d80: 09 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20  .....ulValueLen 
2d90: 3d 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65  = certificate_le
2da0: 6e 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b  n;........break;
2db0: 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43 4b  .....}......CACK
2dc0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
2dd0: 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20  " ... returning 
2de0: 25 70 2f 25 6c 75 22 2c 20 70 56 61 6c 75 65 2c  %p/%lu", pValue,
2df0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29   (unsigned long)
2e00: 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09   ulValueLen);...
2e10: 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73  ...break;....cas
2e20: 65 20 43 4b 41 5f 49 53 53 55 45 52 3a 0a 09 09  e CKA_ISSUER:...
2e30: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
2e40: 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e  RINTF("Requestin
2e50: 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f  g attribute CKA_
2e60: 49 53 53 55 45 52 20 28 30 78 25 30 38 6c 78 29  ISSUER (0x%08lx)
2e70: 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64   ...", (unsigned
2e80: 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72   long) curr_attr
2e90: 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20  _type);......if 
2ea0: 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20  (objectclass != 
2eb0: 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 29  CKO_CERTIFICATE)
2ec0: 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44   {......CACKEY_D
2ed0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e  EBUG_PRINTF(" ..
2ee0: 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e  . but not gettin
2ef0: 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 20  g it because we 
2f00: 61 72 65 20 6e 6f 74 20 61 20 63 65 72 74 69 66  are not a certif
2f10: 69 63 61 74 65 2e 22 29 3b 0a 0a 09 09 09 09 09  icate.");.......
2f20: 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09  break;.....}....
2f30: 09 09 69 66 20 28 63 65 72 74 69 66 69 63 61 74  ..if (certificat
2f40: 65 5f 6c 65 6e 20 3e 3d 20 30 29 20 7b 0a 09 09  e_len >= 0) {...
2f50: 09 09 09 78 35 30 39 5f 72 65 61 64 5f 72 65 74  ...x509_read_ret
2f60: 20 3d 20 78 35 30 39 5f 74 6f 5f 69 73 73 75 65   = x509_to_issue
2f70: 72 28 63 65 72 74 69 66 69 63 61 74 65 2c 20 63  r(certificate, c
2f80: 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 2c 20  ertificate_len, 
2f90: 26 70 56 61 6c 75 65 29 3b 0a 09 09 09 09 09 69  &pValue);......i
2fa0: 66 20 28 78 35 30 39 5f 72 65 61 64 5f 72 65 74  f (x509_read_ret
2fb0: 20 3c 20 30 29 20 7b 0a 09 09 09 09 09 09 70 56   < 0) {.......pV
2fc0: 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 09  alue = NULL;....
2fd0: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09  ..} else {......
2fe0: 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 78 35  .ulValueLen = x5
2ff0: 30 39 5f 72 65 61 64 5f 72 65 74 3b 0a 09 09 09  09_read_ret;....
3000: 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43  ..}.....}......C
3010: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
3020: 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69  TF(" ... returni
3030: 6e 67 20 25 70 2f 25 6c 75 22 2c 20 70 56 61 6c  ng %p/%lu", pVal
3040: 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f  ue, (unsigned lo
3050: 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b  ng) ulValueLen);
3060: 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ......break;....
3070: 63 61 73 65 20 43 4b 41 5f 53 45 52 49 41 4c 5f  case CKA_SERIAL_
3080: 4e 55 4d 42 45 52 3a 0a 09 09 09 09 43 41 43 4b  NUMBER:.....CACK
3090: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
30a0: 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72  "Requesting attr
30b0: 69 62 75 74 65 20 43 4b 41 5f 53 45 52 49 41 4c  ibute CKA_SERIAL
30c0: 5f 4e 55 4d 42 45 52 20 28 30 78 25 30 38 6c 78  _NUMBER (0x%08lx
30d0: 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65  ) ...", (unsigne
30e0: 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74  d long) curr_att
30f0: 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66  r_type);......if
3100: 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d   (objectclass !=
3110: 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45   CKO_CERTIFICATE
3120: 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f  ) {......CACKEY_
3130: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e  DEBUG_PRINTF(" .
3140: 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69  .. but not getti
3150: 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65  ng it because we
3160: 20 61 72 65 20 6e 6f 74 20 61 20 63 65 72 74 69   are not a certi
3170: 66 69 63 61 74 65 2e 22 29 3b 0a 0a 09 09 09 09  ficate.");......
3180: 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09  .break;.....}...
3190: 09 09 09 69 66 20 28 63 65 72 74 69 66 69 63 61  ...if (certifica
31a0: 74 65 5f 6c 65 6e 20 3e 3d 20 30 29 20 7b 0a 09  te_len >= 0) {..
31b0: 09 09 09 09 78 35 30 39 5f 72 65 61 64 5f 72 65  ....x509_read_re
31c0: 74 20 3d 20 78 35 30 39 5f 74 6f 5f 73 65 72 69  t = x509_to_seri
31d0: 61 6c 28 63 65 72 74 69 66 69 63 61 74 65 2c 20  al(certificate, 
31e0: 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 2c  certificate_len,
31f0: 20 26 70 56 61 6c 75 65 29 3b 0a 09 09 09 09 09   &pValue);......
3200: 69 66 20 28 78 35 30 39 5f 72 65 61 64 5f 72 65  if (x509_read_re
3210: 74 20 3c 20 30 29 20 7b 0a 09 09 09 09 09 09 70  t < 0) {.......p
3220: 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09  Value = NULL;...
3230: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
3240: 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 78  ..ulValueLen = x
3250: 35 30 39 5f 72 65 61 64 5f 72 65 74 3b 0a 09 09  509_read_ret;...
3260: 09 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09  ...}.....}......
3270: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
3280: 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e  NTF(" ... return
3290: 69 6e 67 20 28 25 70 2f 25 6c 75 29 22 2c 20 70  ing (%p/%lu)", p
32a0: 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64  Value, (unsigned
32b0: 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65   long) ulValueLe
32c0: 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a  n);......break;.
32d0: 09 09 09 63 61 73 65 20 43 4b 41 5f 53 55 42 4a  ...case CKA_SUBJ
32e0: 45 43 54 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f  ECT:.....CACKEY_
32f0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65  DEBUG_PRINTF("Re
3300: 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75  questing attribu
3310: 74 65 20 43 4b 41 5f 53 55 42 4a 45 43 54 20 28  te CKA_SUBJECT (
3320: 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28  0x%08lx) ...", (
3330: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63  unsigned long) c
3340: 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a  urr_attr_type);.
3350: 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63  .....if (objectc
3360: 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 43 45 52 54  lass != CKO_CERT
3370: 49 46 49 43 41 54 45 29 20 7b 0a 09 09 09 09 09  IFICATE) {......
3380: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
3390: 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f  NTF(" ... but no
33a0: 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 63  t getting it bec
33b0: 61 75 73 65 20 77 65 20 61 72 65 20 6e 6f 74 20  ause we are not 
33c0: 61 20 63 65 72 74 69 66 69 63 61 74 65 2e 22 29  a certificate.")
33d0: 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09  ;.......break;..
33e0: 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 63 65  ...}......if (ce
33f0: 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3e 3d  rtificate_len >=
3400: 20 30 29 20 7b 0a 09 09 09 09 09 78 35 30 39 5f   0) {......x509_
3410: 72 65 61 64 5f 72 65 74 20 3d 20 78 35 30 39 5f  read_ret = x509_
3420: 74 6f 5f 73 75 62 6a 65 63 74 28 63 65 72 74 69  to_subject(certi
3430: 66 69 63 61 74 65 2c 20 63 65 72 74 69 66 69 63  ficate, certific
3440: 61 74 65 5f 6c 65 6e 2c 20 26 70 56 61 6c 75 65  ate_len, &pValue
3450: 29 3b 0a 09 09 09 09 09 69 66 20 28 78 35 30 39  );......if (x509
3460: 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 29 20 7b  _read_ret < 0) {
3470: 0a 09 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20  .......pValue = 
3480: 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 6c 73  NULL;......} els
3490: 65 20 7b 0a 09 09 09 09 09 09 75 6c 56 61 6c 75  e {.......ulValu
34a0: 65 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 64  eLen = x509_read
34b0: 5f 72 65 74 3b 0a 09 09 09 09 09 7d 0a 09 09 09  _ret;......}....
34c0: 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44  .}......CACKEY_D
34d0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e  EBUG_PRINTF(" ..
34e0: 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 70 2f 25  . returning %p/%
34f0: 6c 75 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e  lu", pValue, (un
3500: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56  signed long) ulV
3510: 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62  alueLen);......b
3520: 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b  reak;....case CK
3530: 41 5f 49 44 3a 0a 09 09 09 09 43 41 43 4b 45 59  A_ID:.....CACKEY
3540: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52  _DEBUG_PRINTF("R
3550: 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62  equesting attrib
3560: 75 74 65 20 43 4b 41 5f 49 44 20 28 30 78 25 30  ute CKA_ID (0x%0
3570: 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69  8lx) ...", (unsi
3580: 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f  gned long) curr_
3590: 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09  attr_type);.....
35a0: 09 75 63 54 6d 70 42 75 66 5b 30 5d 20 3d 20 28  .ucTmpBuf[0] = (
35b0: 28 69 64 65 6e 74 69 74 79 5f 6e 75 6d 20 2b 20  (identity_num + 
35c0: 31 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b  1) >> 8) & 0xff;
35d0: 0a 09 09 09 09 75 63 54 6d 70 42 75 66 5b 31 5d  .....ucTmpBuf[1]
35e0: 20 3d 20 20 28 69 64 65 6e 74 69 74 79 5f 6e 75   =  (identity_nu
35f0: 6d 20 2b 20 31 29 20 26 20 30 78 66 66 3b 0a 0a  m + 1) & 0xff;..
3600: 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 75 63  ....pValue = &uc
3610: 54 6d 70 42 75 66 3b 0a 09 09 09 09 75 6c 56 61  TmpBuf;.....ulVa
3620: 6c 75 65 4c 65 6e 20 3d 20 32 3b 0a 0a 09 09 09  lueLen = 2;.....
3630: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
3640: 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72  INTF(" ... retur
3650: 6e 69 6e 67 20 25 70 2f 25 6c 75 22 2c 20 70 56  ning %p/%lu", pV
3660: 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20  alue, (unsigned 
3670: 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e  long) ulValueLen
3680: 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  );......break;..
3690: 09 09 63 61 73 65 20 43 4b 41 5f 43 45 52 54 49  ..case CKA_CERTI
36a0: 46 49 43 41 54 45 5f 54 59 50 45 3a 0a 09 09 09  FICATE_TYPE:....
36b0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
36c0: 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67  INTF("Requesting
36d0: 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 43   attribute CKA_C
36e0: 45 52 54 49 46 49 43 41 54 45 5f 54 59 50 45 20  ERTIFICATE_TYPE 
36f0: 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20  (0x%08lx) ...", 
3700: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20  (unsigned long) 
3710: 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b  curr_attr_type);
3720: 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74  ......if (object
3730: 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 43 45 52  class != CKO_CER
3740: 54 49 46 49 43 41 54 45 29 20 7b 0a 09 09 09 09  TIFICATE) {.....
3750: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
3760: 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e  INTF(" ... but n
3770: 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 65  ot getting it be
3780: 63 61 75 73 65 20 77 65 20 61 72 65 20 6e 6f 74  cause we are not
3790: 20 61 20 63 65 72 74 69 66 69 63 61 74 65 2e 22   a certificate."
37a0: 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a  );.......break;.
37b0: 09 09 09 09 7d 0a 0a 09 09 09 09 2f 2a 20 57 65  ....}....../* We
37c0: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 6f 6e   only support on
37d0: 65 20 63 65 72 74 69 66 69 63 61 74 65 20 74 79  e certificate ty
37e0: 70 65 20 2a 2f 0a 09 09 09 09 63 6b 5f 63 65 72  pe */.....ck_cer
37f0: 74 69 66 69 63 61 74 65 5f 74 79 70 65 20 3d 20  tificate_type = 
3800: 43 4b 43 5f 58 5f 35 30 39 3b 0a 0a 09 09 09 09  CKC_X_509;......
3810: 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 63 65 72  pValue = &ck_cer
3820: 74 69 66 69 63 61 74 65 5f 74 79 70 65 3b 0a 09  tificate_type;..
3830: 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20  ...ulValueLen = 
3840: 73 69 7a 65 6f 66 28 63 6b 5f 63 65 72 74 69 66  sizeof(ck_certif
3850: 69 63 61 74 65 5f 74 79 70 65 29 3b 0a 0a 09 09  icate_type);....
3860: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
3870: 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75  RINTF(" ... retu
3880: 72 6e 69 6e 67 20 43 4b 43 5f 58 5f 35 30 39 20  rning CKC_X_509 
3890: 28 25 6c 75 29 20 28 25 70 2f 25 6c 75 29 22 2c  (%lu) (%p/%lu)",
38a0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29   (unsigned long)
38b0: 20 2a 28 28 43 4b 5f 43 45 52 54 49 46 49 43 41   *((CK_CERTIFICA
38c0: 54 45 5f 54 59 50 45 20 2a 29 20 70 56 61 6c 75  TE_TYPE *) pValu
38d0: 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73  e), pValue, (uns
38e0: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61  igned long) ulVa
38f0: 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72  lueLen);......br
3900: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41  eak;....case CKA
3910: 5f 4b 45 59 5f 54 59 50 45 3a 0a 09 09 09 09 43  _KEY_TYPE:.....C
3920: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
3930: 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61  TF("Requesting a
3940: 74 74 72 69 62 75 74 65 20 43 4b 41 5f 4b 45 59  ttribute CKA_KEY
3950: 5f 54 59 50 45 20 28 30 78 25 30 38 6c 78 29 20  _TYPE (0x%08lx) 
3960: 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20  ...", (unsigned 
3970: 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f  long) curr_attr_
3980: 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20 28  type);......if (
3990: 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20 43  objectclass != C
39a0: 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 20 26  KO_PRIVATE_KEY &
39b0: 26 20 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d  & objectclass !=
39c0: 20 43 4b 4f 5f 50 55 42 4c 49 43 5f 4b 45 59 29   CKO_PUBLIC_KEY)
39d0: 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44   {......CACKEY_D
39e0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e  EBUG_PRINTF(" ..
39f0: 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e  . but not gettin
3a00: 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 20  g it because we 
3a10: 61 72 65 20 6e 6f 74 20 61 20 6b 65 79 2e 22 29  are not a key.")
3a20: 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09  ;.......break;..
3a30: 09 09 09 7d 0a 0a 09 09 09 09 2f 2a 20 57 65 20  ...}....../* We 
3a40: 6f 6e 6c 79 20 73 75 70 70 6f 72 74 20 6f 6e 65  only support one
3a50: 20 6b 65 79 20 74 79 70 65 20 2a 2f 0a 09 09 09   key type */....
3a60: 09 63 6b 5f 6b 65 79 5f 74 79 70 65 20 3d 20 43  .ck_key_type = C
3a70: 4b 4b 5f 52 53 41 3b 0a 0a 09 09 09 09 70 56 61  KK_RSA;......pVa
3a80: 6c 75 65 20 3d 20 26 63 6b 5f 6b 65 79 5f 74 79  lue = &ck_key_ty
3a90: 70 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c  pe;.....ulValueL
3aa0: 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 6b  en = sizeof(ck_k
3ab0: 65 79 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 43  ey_type);......C
3ac0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
3ad0: 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69  TF(" ... returni
3ae0: 6e 67 20 43 4b 4b 5f 52 53 41 20 28 25 6c 75 29  ng CKK_RSA (%lu)
3af0: 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73   (%p/%lu)", (uns
3b00: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43  igned long) *((C
3b10: 4b 5f 43 45 52 54 49 46 49 43 41 54 45 5f 54 59  K_CERTIFICATE_TY
3b20: 50 45 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70  PE *) pValue), p
3b30: 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64  Value, (unsigned
3b40: 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65   long) ulValueLe
3b50: 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a  n);......break;.
3b60: 09 09 09 63 61 73 65 20 43 4b 41 5f 53 49 47 4e  ...case CKA_SIGN
3b70: 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42  :.....CACKEY_DEB
3b80: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65  UG_PRINTF("Reque
3b90: 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65 20  sting attribute 
3ba0: 43 4b 41 5f 53 49 47 4e 20 28 30 78 25 30 38 6c  CKA_SIGN (0x%08l
3bb0: 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e  x) ...", (unsign
3bc0: 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74  ed long) curr_at
3bd0: 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69  tr_type);......i
3be0: 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 3d  f (objectclass =
3bf0: 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45  = CKO_PRIVATE_KE
3c00: 59 29 20 7b 0a 09 09 09 09 09 70 56 61 6c 75 65  Y) {......pValue
3c10: 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09   = &ck_true;....
3c20: 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73  ..ulValueLen = s
3c30: 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a  izeof(ck_true);.
3c40: 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
3c50: 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 66  ..pValue = &ck_f
3c60: 61 6c 73 65 3b 0a 09 09 09 09 09 75 6c 56 61 6c  alse;......ulVal
3c70: 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63  ueLen = sizeof(c
3c80: 6b 5f 66 61 6c 73 65 29 3b 0a 09 09 09 09 7d 0a  k_false);.....}.
3c90: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55  .....CACKEY_DEBU
3ca0: 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72  G_PRINTF(" ... r
3cb0: 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70  eturning %lu (%p
3cc0: 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65  /%lu)", (unsigne
3cd0: 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42  d long) *((CK_BB
3ce0: 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20  OOL *) pValue), 
3cf0: 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65  pValue, (unsigne
3d00: 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c  d long) ulValueL
3d10: 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b  en);......break;
3d20: 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 44 45 43  ....case CKA_DEC
3d30: 52 59 50 54 3a 0a 09 09 09 09 43 41 43 4b 45 59  RYPT:.....CACKEY
3d40: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52  _DEBUG_PRINTF("R
3d50: 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62  equesting attrib
3d60: 75 74 65 20 43 4b 41 5f 44 45 43 52 59 50 54 20  ute CKA_DECRYPT 
3d70: 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20  (0x%08lx) ...", 
3d80: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20  (unsigned long) 
3d90: 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b  curr_attr_type);
3da0: 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74  ......if (object
3db0: 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 50 52 49  class == CKO_PRI
3dc0: 56 41 54 45 5f 4b 45 59 20 7c 7c 20 6f 62 6a 65  VATE_KEY || obje
3dd0: 63 74 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 50  ctclass == CKO_P
3de0: 55 42 4c 49 43 5f 4b 45 59 29 20 7b 0a 09 09 09  UBLIC_KEY) {....
3df0: 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74  ..pValue = &ck_t
3e00: 72 75 65 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75  rue;......ulValu
3e10: 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b  eLen = sizeof(ck
3e20: 5f 74 72 75 65 29 3b 0a 09 09 09 09 7d 20 65 6c  _true);.....} el
3e30: 73 65 20 7b 0a 09 09 09 09 09 70 56 61 6c 75 65  se {......pValue
3e40: 20 3d 20 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 09   = &ck_false;...
3e50: 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20  ...ulValueLen = 
3e60: 73 69 7a 65 6f 66 28 63 6b 5f 66 61 6c 73 65 29  sizeof(ck_false)
3e70: 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43  ;.....}......CAC
3e80: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
3e90: 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67  (" ... returning
3ea0: 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20   %lu (%p/%lu)", 
3eb0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20  (unsigned long) 
3ec0: 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70  *((CK_BBOOL *) p
3ed0: 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20  Value), pValue, 
3ee0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20  (unsigned long) 
3ef0: 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09  ulValueLen);....
3f00: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
3f10: 20 43 4b 41 5f 54 52 55 53 54 5f 53 45 52 56 45   CKA_TRUST_SERVE
3f20: 52 5f 41 55 54 48 3a 0a 09 09 09 09 43 41 43 4b  R_AUTH:.....CACK
3f30: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
3f40: 22 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72  "Requesting attr
3f50: 69 62 75 74 65 20 43 4b 41 5f 54 52 55 53 54 5f  ibute CKA_TRUST_
3f60: 53 45 52 56 45 52 5f 41 55 54 48 20 28 30 78 25  SERVER_AUTH (0x%
3f70: 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73  08lx) ...", (uns
3f80: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72  igned long) curr
3f90: 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09  _attr_type);....
3fa0: 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74  ..pValue = &ck_t
3fb0: 72 75 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65  rue;.....ulValue
3fc0: 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f  Len = sizeof(ck_
3fd0: 74 72 75 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b  true);......CACK
3fe0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
3ff0: 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20  " ... returning 
4000: 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28  %lu (%p/%lu)", (
4010: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a  unsigned long) *
4020: 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56  ((CK_BBOOL *) pV
4030: 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28  alue), pValue, (
4040: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75  unsigned long) u
4050: 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09  lValueLen);.....
4060: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
4070: 43 4b 41 5f 54 52 55 53 54 5f 43 4c 49 45 4e 54  CKA_TRUST_CLIENT
4080: 5f 41 55 54 48 3a 0a 09 09 09 09 43 41 43 4b 45  _AUTH:.....CACKE
4090: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
40a0: 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69  Requesting attri
40b0: 62 75 74 65 20 43 4b 41 5f 54 52 55 53 54 5f 43  bute CKA_TRUST_C
40c0: 4c 49 45 4e 54 5f 41 55 54 48 20 28 30 78 25 30  LIENT_AUTH (0x%0
40d0: 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69  8lx) ...", (unsi
40e0: 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f  gned long) curr_
40f0: 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09  attr_type);.....
4100: 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74 72  .pValue = &ck_tr
4110: 75 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c  ue;.....ulValueL
4120: 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 74  en = sizeof(ck_t
4130: 72 75 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45  rue);......CACKE
4140: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
4150: 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25   ... returning %
4160: 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75  lu (%p/%lu)", (u
4170: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28  nsigned long) *(
4180: 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61  (CK_BBOOL *) pVa
4190: 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75  lue), pValue, (u
41a0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c  nsigned long) ul
41b0: 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09  ValueLen);......
41c0: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43  break;....case C
41d0: 4b 41 5f 54 52 55 53 54 5f 43 4f 44 45 5f 53 49  KA_TRUST_CODE_SI
41e0: 47 4e 49 4e 47 3a 0a 09 09 09 09 43 41 43 4b 45  GNING:.....CACKE
41f0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
4200: 52 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69  Requesting attri
4210: 62 75 74 65 20 43 4b 41 5f 54 52 55 53 54 5f 43  bute CKA_TRUST_C
4220: 4f 44 45 5f 53 49 47 4e 49 4e 47 20 28 30 78 25  ODE_SIGNING (0x%
4230: 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73  08lx) ...", (uns
4240: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72  igned long) curr
4250: 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09  _attr_type);....
4260: 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74  ..pValue = &ck_t
4270: 72 75 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65  rue;.....ulValue
4280: 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f  Len = sizeof(ck_
4290: 74 72 75 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b  true);......CACK
42a0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
42b0: 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20  " ... returning 
42c0: 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28  %lu (%p/%lu)", (
42d0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a  unsigned long) *
42e0: 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56  ((CK_BBOOL *) pV
42f0: 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28  alue), pValue, (
4300: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75  unsigned long) u
4310: 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09  lValueLen);.....
4320: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
4330: 43 4b 41 5f 54 52 55 53 54 5f 45 4d 41 49 4c 5f  CKA_TRUST_EMAIL_
4340: 50 52 4f 54 45 43 54 49 4f 4e 3a 0a 09 09 09 09  PROTECTION:.....
4350: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
4360: 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20  NTF("Requesting 
4370: 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 54 52  attribute CKA_TR
4380: 55 53 54 5f 45 4d 41 49 4c 5f 50 52 4f 54 45 43  UST_EMAIL_PROTEC
4390: 54 49 4f 4e 20 28 30 78 25 30 38 6c 78 29 20 2e  TION (0x%08lx) .
43a0: 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c  ..", (unsigned l
43b0: 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74  ong) curr_attr_t
43c0: 79 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c 75  ype);......pValu
43d0: 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09  e = &ck_true;...
43e0: 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73  ..ulValueLen = s
43f0: 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a  izeof(ck_true);.
4400: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55  .....CACKEY_DEBU
4410: 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72  G_PRINTF(" ... r
4420: 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70  eturning %lu (%p
4430: 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65  /%lu)", (unsigne
4440: 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42  d long) *((CK_BB
4450: 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20  OOL *) pValue), 
4460: 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65  pValue, (unsigne
4470: 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c  d long) ulValueL
4480: 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b  en);......break;
4490: 0a 09 09 09 64 65 66 61 75 6c 74 3a 0a 09 09 09  ....default:....
44a0: 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a  .pValue = NULL;.
44b0: 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d  ....ulValueLen =
44c0: 20 28 43 4b 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 09   (CK_LONG) -1;..
44d0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09  ...break;...}...
44e0: 09 69 66 20 28 28 28 43 4b 5f 4c 4f 4e 47 29 20  .if (((CK_LONG) 
44f0: 75 6c 56 61 6c 75 65 4c 65 6e 29 20 21 3d 20 28  ulValueLen) != (
4500: 28 43 4b 5f 4c 4f 4e 47 29 20 2d 31 29 29 20 7b  (CK_LONG) -1)) {
4510: 0a 09 09 09 2f 2a 20 50 75 73 68 20 63 75 72 72  ..../* Push curr
4520: 5f 61 74 74 72 20 6f 6e 74 6f 20 74 68 65 20 73  _attr onto the s
4530: 74 61 63 6b 20 2a 2f 0a 09 09 09 63 75 72 72 5f  tack */....curr_
4540: 61 74 74 72 2e 74 79 70 65 20 3d 20 63 75 72 72  attr.type = curr
4550: 5f 61 74 74 72 5f 74 79 70 65 3b 0a 09 09 09 63  _attr_type;....c
4560: 75 72 72 5f 61 74 74 72 2e 75 6c 56 61 6c 75 65  urr_attr.ulValue
4570: 4c 65 6e 20 3d 20 75 6c 56 61 6c 75 65 4c 65 6e  Len = ulValueLen
4580: 3b 0a 0a 09 09 09 63 75 72 72 5f 61 74 74 72 2e  ;.....curr_attr.
4590: 70 56 61 6c 75 65 20 3d 20 6d 61 6c 6c 6f 63 28  pValue = malloc(
45a0: 63 75 72 72 5f 61 74 74 72 2e 75 6c 56 61 6c 75  curr_attr.ulValu
45b0: 65 4c 65 6e 29 3b 0a 09 09 09 6d 65 6d 63 70 79  eLen);....memcpy
45c0: 28 63 75 72 72 5f 61 74 74 72 2e 70 56 61 6c 75  (curr_attr.pValu
45d0: 65 2c 20 70 56 61 6c 75 65 2c 20 63 75 72 72 5f  e, pValue, curr_
45e0: 61 74 74 72 2e 75 6c 56 61 6c 75 65 4c 65 6e 29  attr.ulValueLen)
45f0: 3b 0a 0a 09 09 09 69 66 20 28 70 56 61 6c 75 65  ;.....if (pValue
4600: 5f 66 72 65 65 20 26 26 20 70 56 61 6c 75 65 29  _free && pValue)
4610: 20 7b 0a 09 09 09 09 66 72 65 65 28 70 56 61 6c   {.....free(pVal
4620: 75 65 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 69 66  ue);....}.....if
4630: 20 28 6e 75 6d 61 74 74 72 73 20 3e 3d 20 72 65   (numattrs >= re
4640: 74 76 61 6c 5f 63 6f 75 6e 74 29 20 7b 0a 09 09  tval_count) {...
4650: 09 09 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 2a  ..retval_count *
4660: 3d 20 32 3b 0a 09 09 09 09 72 65 74 76 61 6c 20  = 2;.....retval 
4670: 3d 20 72 65 61 6c 6c 6f 63 28 72 65 74 76 61 6c  = realloc(retval
4680: 2c 20 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 2a  , retval_count *
4690: 20 73 69 7a 65 6f 66 28 2a 72 65 74 76 61 6c 29   sizeof(*retval)
46a0: 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 6d 65 6d 63  );....}.....memc
46b0: 70 79 28 26 72 65 74 76 61 6c 5b 6e 75 6d 61 74  py(&retval[numat
46c0: 74 72 73 5d 2c 20 26 63 75 72 72 5f 61 74 74 72  trs], &curr_attr
46d0: 2c 20 73 69 7a 65 6f 66 28 63 75 72 72 5f 61 74  , sizeof(curr_at
46e0: 74 72 29 29 3b 0a 09 09 09 6e 75 6d 61 74 74 72  tr));....numattr
46f0: 73 2b 2b 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 69 66  s++;...}..}...if
4700: 20 28 6e 75 6d 61 74 74 72 73 20 21 3d 20 30 29   (numattrs != 0)
4710: 20 7b 0a 09 09 72 65 74 76 61 6c 5f 63 6f 75 6e   {...retval_coun
4720: 74 20 3d 20 6e 75 6d 61 74 74 72 73 3b 0a 09 09  t = numattrs;...
4730: 72 65 74 76 61 6c 20 3d 20 72 65 61 6c 6c 6f 63  retval = realloc
4740: 28 72 65 74 76 61 6c 2c 20 72 65 74 76 61 6c 5f  (retval, retval_
4750: 63 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 28 2a  count * sizeof(*
4760: 72 65 74 76 61 6c 29 29 3b 0a 09 7d 20 65 6c 73  retval));..} els
4770: 65 20 7b 0a 09 09 66 72 65 65 28 72 65 74 76 61  e {...free(retva
4780: 6c 29 3b 0a 0a 09 09 72 65 74 76 61 6c 20 3d 20  l);....retval = 
4790: 4e 55 4c 4c 3b 0a 09 7d 0a 0a 09 2a 70 75 6c 43  NULL;..}...*pulC
47a0: 6f 75 6e 74 20 3d 20 6e 75 6d 61 74 74 72 73 3b  ount = numattrs;
47b0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
47c0: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
47d0: 67 20 25 6c 75 20 6f 62 6a 65 63 74 73 20 28 25  g %lu objects (%
47e0: 70 29 2e 22 2c 20 6e 75 6d 61 74 74 72 73 2c 20  p).", numattrs, 
47f0: 72 65 74 76 61 6c 29 3b 0a 0a 09 72 65 74 75 72  retval);...retur
4800: 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 43 4b  n(retval);.}..CK
4810: 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e  _DEFINE_FUNCTION
4820: 28 43 4b 5f 52 56 2c 20 43 5f 49 6e 69 74 69 61  (CK_RV, C_Initia
4830: 6c 69 7a 65 29 28 43 4b 5f 56 4f 49 44 5f 50 54  lize)(CK_VOID_PT
4840: 52 20 70 49 6e 69 74 41 72 67 73 29 20 7b 0a 09  R pInitArgs) {..
4850: 43 4b 5f 43 5f 49 4e 49 54 49 41 4c 49 5a 45 5f  CK_C_INITIALIZE_
4860: 41 52 47 53 20 43 4b 5f 50 54 52 20 61 72 67 73  ARGS CK_PTR args
4870: 3b 0a 09 75 69 6e 74 33 32 5f 74 20 69 64 78 3b  ;..uint32_t idx;
4880: 0a 09 69 6e 74 20 6d 75 74 65 78 5f 69 6e 69 74  ..int mutex_init
4890: 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44  _ret;...CACKEY_D
48a0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c  EBUG_PRINTF("Cal
48b0: 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 49  led.");...if (pI
48c0: 6e 69 74 41 72 67 73 20 21 3d 20 4e 55 4c 4c 29  nitArgs != NULL)
48d0: 20 7b 0a 09 09 61 72 67 73 20 3d 20 70 49 6e 69   {...args = pIni
48e0: 74 41 72 67 73 3b 0a 09 09 6d 65 6d 63 70 79 28  tArgs;...memcpy(
48f0: 26 63 61 63 6b 65 79 5f 61 72 67 73 2c 20 61 72  &cackey_args, ar
4900: 67 73 2c 20 73 69 7a 65 6f 66 28 63 61 63 6b 65  gs, sizeof(cacke
4910: 79 5f 61 72 67 73 29 29 3b 0a 0a 09 09 69 66 20  y_args));....if 
4920: 28 61 72 67 73 2d 3e 43 72 65 61 74 65 4d 75 74  (args->CreateMut
4930: 65 78 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72  ex == NULL || ar
4940: 67 73 2d 3e 44 65 73 74 72 6f 79 4d 75 74 65 78  gs->DestroyMutex
4950: 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 73   == NULL || args
4960: 2d 3e 4c 6f 63 6b 4d 75 74 65 78 20 3d 3d 20 4e  ->LockMutex == N
4970: 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 55 6e 6c  ULL || args->Unl
4980: 6f 63 6b 4d 75 74 65 78 20 3d 3d 20 4e 55 4c 4c  ockMutex == NULL
4990: 29 20 7b 0a 09 09 09 69 66 20 28 61 72 67 73 2d  ) {....if (args-
49a0: 3e 43 72 65 61 74 65 4d 75 74 65 78 20 21 3d 20  >CreateMutex != 
49b0: 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 44 65  NULL || args->De
49c0: 73 74 72 6f 79 4d 75 74 65 78 20 21 3d 20 4e 55  stroyMutex != NU
49d0: 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 4c 6f 63 6b  LL || args->Lock
49e0: 4d 75 74 65 78 20 21 3d 20 4e 55 4c 4c 20 7c 7c  Mutex != NULL ||
49f0: 20 61 72 67 73 2d 3e 55 6e 6c 6f 63 6b 4d 75 74   args->UnlockMut
4a00: 65 78 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09  ex != NULL) {...
4a10: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
4a20: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 53 6f  RINTF("Error. So
4a30: 6d 65 2c 20 62 75 74 20 6e 6f 74 20 41 6c 6c 20  me, but not All 
4a40: 74 68 72 65 61 64 69 6e 67 20 70 72 69 6d 69 74  threading primit
4a50: 69 76 65 73 20 70 72 6f 76 69 64 65 64 2e 22 29  ives provided.")
4a60: 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28 43 4b  ;......return(CK
4a70: 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29  R_ARGUMENTS_BAD)
4a80: 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a 09 09 69 66  ;....}...}....if
4a90: 20 28 61 72 67 73 2d 3e 70 52 65 73 65 72 76 65   (args->pReserve
4aa0: 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09  d != NULL) {....
4ab0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
4ac0: 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 52 65 73  NTF("Error. pRes
4ad0: 65 72 76 65 64 20 69 73 20 6e 6f 74 20 4e 55 4c  erved is not NUL
4ae0: 4c 2e 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e  L.");.....return
4af0: 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42  (CKR_ARGUMENTS_B
4b00: 41 44 29 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 65  AD);...}..} else
4b10: 20 7b 0a 09 09 63 61 63 6b 65 79 5f 61 72 67 73   {...cackey_args
4b20: 2e 43 72 65 61 74 65 4d 75 74 65 78 20 3d 20 4e  .CreateMutex = N
4b30: 55 4c 4c 3b 0a 09 09 63 61 63 6b 65 79 5f 61 72  ULL;...cackey_ar
4b40: 67 73 2e 44 65 73 74 72 6f 79 4d 75 74 65 78 20  gs.DestroyMutex 
4b50: 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 6b 65 79  = NULL;...cackey
4b60: 5f 61 72 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 20  _args.LockMutex 
4b70: 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 6b 65 79  = NULL;...cackey
4b80: 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 74 65  _args.UnlockMute
4b90: 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63 61 63 6b  x = NULL;...cack
4ba0: 65 79 5f 61 72 67 73 2e 66 6c 61 67 73 20 3d 20  ey_args.flags = 
4bb0: 30 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b  0;..}...if (cack
4bc0: 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20  ey_initialized) 
4bd0: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
4be0: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
4bf0: 20 41 6c 72 65 61 64 79 20 69 6e 69 74 69 61 6c   Already initial
4c00: 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75  ized.");....retu
4c10: 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f  rn(CKR_CRYPTOKI_
4c20: 41 4c 52 45 41 44 59 5f 49 4e 49 54 49 41 4c 49  ALREADY_INITIALI
4c30: 5a 45 44 29 3b 0a 09 7d 0a 0a 09 66 6f 72 20 28  ZED);..}...for (
4c40: 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 28  idx = 0; idx < (
4c50: 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65  sizeof(cackey_se
4c60: 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66  ssions) / sizeof
4c70: 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  (cackey_sessions
4c80: 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b 0a  [0])); idx++) {.
4c90: 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  ..cackey_session
4ca0: 73 5b 69 64 78 5d 2e 61 63 74 69 76 65 20 3d 20  s[idx].active = 
4cb0: 30 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 69  0;..}...cackey_i
4cc0: 6e 69 74 69 61 6c 69 7a 65 64 20 3d 20 31 3b 0a  nitialized = 1;.
4cd0: 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 62 69  ..if (!cackey_bi
4ce0: 67 6c 6f 63 6b 5f 69 6e 69 74 29 20 7b 0a 09 09  glock_init) {...
4cf0: 6d 75 74 65 78 5f 69 6e 69 74 5f 72 65 74 20 3d  mutex_init_ret =
4d00: 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 63 72   cackey_mutex_cr
4d10: 65 61 74 65 28 26 63 61 63 6b 65 79 5f 62 69 67  eate(&cackey_big
4d20: 6c 6f 63 6b 29 3b 0a 0a 09 09 69 66 20 28 6d 75  lock);....if (mu
4d30: 74 65 78 5f 69 6e 69 74 5f 72 65 74 20 21 3d 20  tex_init_ret != 
4d40: 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44  0) {....CACKEY_D
4d50: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
4d60: 6f 72 2e 20 20 4d 75 74 65 78 20 69 6e 69 74 69  or.  Mutex initi
4d70: 61 6c 69 7a 61 74 69 6f 6e 20 66 61 69 6c 65 64  alization failed
4d80: 2e 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28  .");.....return(
4d90: 43 4b 52 5f 43 41 4e 54 5f 4c 4f 43 4b 29 3b 0a  CKR_CANT_LOCK);.
4da0: 09 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 62 69  ..}....cackey_bi
4db0: 67 6c 6f 63 6b 5f 69 6e 69 74 20 3d 20 31 3b 0a  glock_init = 1;.
4dc0: 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  .}...CACKEY_DEBU
4dd0: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e  G_PRINTF("Return
4de0: 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22  ing CKR_OK (%i)"
4df0: 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74  , CKR_OK);...ret
4e00: 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a  urn(CKR_OK);.}..
4e10: 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49  CK_DEFINE_FUNCTI
4e20: 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 46 69 6e 61  ON(CK_RV, C_Fina
4e30: 6c 69 7a 65 29 28 43 4b 5f 56 4f 49 44 5f 50 54  lize)(CK_VOID_PT
4e40: 52 20 70 52 65 73 65 72 76 65 64 29 20 7b 0a 09  R pReserved) {..
4e50: 75 69 6e 74 33 32 5f 74 20 69 64 78 3b 0a 0a 09  uint32_t idx;...
4e60: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
4e70: 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a  NTF("Called.");.
4e80: 0a 09 69 66 20 28 70 52 65 73 65 72 76 65 64 20  ..if (pReserved 
4e90: 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43  != NULL) {...CAC
4ea0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
4eb0: 28 22 45 72 72 6f 72 2e 20 70 52 65 73 65 72 76  ("Error. pReserv
4ec0: 65 64 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22  ed is not NULL."
4ed0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
4ee0: 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b  _ARGUMENTS_BAD);
4ef0: 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ..}...if (!cacke
4f00: 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b  y_initialized) {
4f10: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
4f20: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
4f30: 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  Not initialized.
4f40: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
4f50: 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49  R_CRYPTOKI_NOT_I
4f60: 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a  NITIALIZED);..}.
4f70: 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20  ..for (idx = 0; 
4f80: 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61  idx < (sizeof(ca
4f90: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f  ckey_sessions) /
4fa0: 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73   sizeof(cackey_s
4fb0: 65 73 73 69 6f 6e 73 5b 30 5d 29 29 3b 20 69 64  essions[0])); id
4fc0: 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 63 61 63  x++) {...if (cac
4fd0: 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78  key_sessions[idx
4fe0: 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 09 43  ].active) {....C
4ff0: 5f 43 6c 6f 73 65 53 65 73 73 69 6f 6e 28 69 64  _CloseSession(id
5000: 78 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 63 61 63  x);...}..}...cac
5010: 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 20  key_initialized 
5020: 3d 20 30 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45  = 0;...CACKEY_DE
5030: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75  BUG_PRINTF("Retu
5040: 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69  rning CKR_OK (%i
5050: 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72  )", CKR_OK);...r
5060: 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d  eturn(CKR_OK);.}
5070: 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43  ..CK_DEFINE_FUNC
5080: 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65  TION(CK_RV, C_Ge
5090: 74 49 6e 66 6f 29 28 43 4b 5f 49 4e 46 4f 5f 50  tInfo)(CK_INFO_P
50a0: 54 52 20 70 49 6e 66 6f 29 20 7b 0a 09 73 74 61  TR pInfo) {..sta
50b0: 74 69 63 20 43 4b 5f 55 54 46 38 43 48 41 52 20  tic CK_UTF8CHAR 
50c0: 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 5b 5d  manufacturerID[]
50d0: 20 3d 20 22 55 2e 53 2e 20 47 6f 76 65 72 6e 6d   = "U.S. Governm
50e0: 65 6e 74 22 3b 0a 09 73 74 61 74 69 63 20 43 4b  ent";..static CK
50f0: 5f 55 54 46 38 43 48 41 52 20 6c 69 62 72 61 72  _UTF8CHAR librar
5100: 79 44 65 73 63 72 69 70 74 69 6f 6e 5b 5d 20 3d  yDescription[] =
5110: 20 22 43 41 43 4b 65 79 22 3b 0a 0a 09 43 41 43   "CACKey";...CAC
5120: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
5130: 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69  ("Called.");...i
5140: 66 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c  f (pInfo == NULL
5150: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  ) {...CACKEY_DEB
5160: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
5170: 2e 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e  . pInfo is NULL.
5180: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
5190: 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29  R_ARGUMENTS_BAD)
51a0: 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b  ;..}...if (!cack
51b0: 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20  ey_initialized) 
51c0: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
51d0: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
51e0: 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64   Not initialized
51f0: 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  .");....return(C
5200: 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f  KR_CRYPTOKI_NOT_
5210: 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d  INITIALIZED);..}
5220: 0a 0a 09 70 49 6e 66 6f 2d 3e 63 72 79 70 74 6f  ...pInfo->crypto
5230: 6b 69 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20  kiVersion.major 
5240: 3d 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54  = ((CACKEY_CRYPT
5250: 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45  OKI_VERSION_CODE
5260: 29 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b  ) >> 16) & 0xff;
5270: 0a 09 70 49 6e 66 6f 2d 3e 63 72 79 70 74 6f 6b  ..pInfo->cryptok
5280: 69 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d  iVersion.minor =
5290: 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54 4f   ((CACKEY_CRYPTO
52a0: 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 29  KI_VERSION_CODE)
52b0: 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 0a   >> 8) & 0xff;..
52c0: 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d  .memset(pInfo->m
52d0: 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 27  anufacturerID, '
52e0: 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f   ', sizeof(pInfo
52f0: 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44  ->manufacturerID
5300: 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66  ));..memcpy(pInf
5310: 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49  o->manufacturerI
5320: 44 2c 20 6d 61 6e 75 66 61 63 74 75 72 65 72 49  D, manufacturerI
5330: 44 2c 20 73 69 7a 65 6f 66 28 6d 61 6e 75 66 61  D, sizeof(manufa
5340: 63 74 75 72 65 72 49 44 29 20 2d 20 31 29 3b 0a  cturerID) - 1);.
5350: 0a 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d  ..pInfo->flags =
5360: 20 30 78 30 30 3b 0a 0a 09 6d 65 6d 73 65 74 28   0x00;...memset(
5370: 70 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 44 65  pInfo->libraryDe
5380: 73 63 72 69 70 74 69 6f 6e 2c 20 27 20 27 2c 20  scription, ' ', 
5390: 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6c 69  sizeof(pInfo->li
53a0: 62 72 61 72 79 44 65 73 63 72 69 70 74 69 6f 6e  braryDescription
53b0: 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66  ));..memcpy(pInf
53c0: 6f 2d 3e 6c 69 62 72 61 72 79 44 65 73 63 72 69  o->libraryDescri
53d0: 70 74 69 6f 6e 2c 20 6c 69 62 72 61 72 79 44 65  ption, libraryDe
53e0: 73 63 72 69 70 74 69 6f 6e 2c 20 73 69 7a 65 6f  scription, sizeo
53f0: 66 28 6c 69 62 72 61 72 79 44 65 73 63 72 69 70  f(libraryDescrip
5400: 74 69 6f 6e 29 20 2d 20 31 29 3b 0a 0a 09 70 49  tion) - 1);...pI
5410: 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 56 65 72 73  nfo->libraryVers
5420: 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 63 61 63  ion.major = (cac
5430: 6b 65 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29  key_getversion()
5440: 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b 0a   >> 16) & 0xff;.
5450: 09 70 49 6e 66 6f 2d 3e 6c 69 62 72 61 72 79 56  .pInfo->libraryV
5460: 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28  ersion.minor = (
5470: 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 6f  cackey_getversio
5480: 6e 28 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66  n() >> 8) & 0xff
5490: 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ;...CACKEY_DEBUG
54a0: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69  _PRINTF("Returni
54b0: 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c  ng CKR_OK (%i)",
54c0: 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75   CKR_OK);...retu
54d0: 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 2f  rn(CKR_OK);.}../
54e0: 2a 20 57 65 20 6f 6e 6c 79 20 73 75 70 70 6f 72  * We only suppor
54f0: 74 20 31 20 73 6c 6f 74 2e 20 20 49 66 20 74 68  t 1 slot.  If th
5500: 65 20 73 6c 6f 74 20 65 78 69 73 74 73 2c 20 74  e slot exists, t
5510: 68 65 20 74 6f 6b 65 6e 20 65 78 69 73 74 73 2e  he token exists.
5520: 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55   */.CK_DEFINE_FU
5530: 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f  NCTION(CK_RV, C_
5540: 47 65 74 53 6c 6f 74 4c 69 73 74 29 28 43 4b 5f  GetSlotList)(CK_
5550: 42 42 4f 4f 4c 20 74 6f 6b 65 6e 50 72 65 73 65  BBOOL tokenPrese
5560: 6e 74 2c 20 43 4b 5f 53 4c 4f 54 5f 49 44 5f 50  nt, CK_SLOT_ID_P
5570: 54 52 20 70 53 6c 6f 74 4c 69 73 74 2c 20 43 4b  TR pSlotList, CK
5580: 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 43 6f  _ULONG_PTR pulCo
5590: 75 6e 74 29 20 7b 0a 09 43 4b 5f 55 4c 4f 4e 47  unt) {..CK_ULONG
55a0: 20 63 6f 75 6e 74 2c 20 73 6c 6f 74 5f 70 72 65   count, slot_pre
55b0: 73 65 6e 74 20 3d 20 30 2c 20 63 75 72 72 73 6c  sent = 0, currsl
55c0: 6f 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  ot;...CACKEY_DEB
55d0: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65  UG_PRINTF("Calle
55e0: 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 75 6c 43  d.");...if (pulC
55f0: 6f 75 6e 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  ount == NULL) {.
5600: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
5610: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 75  RINTF("Error. pu
5620: 6c 43 6f 75 6e 74 20 69 73 20 4e 55 4c 4c 2e 22  lCount is NULL."
5630: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
5640: 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b  _ARGUMENTS_BAD);
5650: 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ..}...if (!cacke
5660: 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b  y_initialized) {
5670: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
5680: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
5690: 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  Not initialized.
56a0: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
56b0: 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49  R_CRYPTOKI_NOT_I
56c0: 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a  NITIALIZED);..}.
56d0: 0a 09 2f 2a 20 58 58 58 3a 20 44 65 74 65 72 6d  ../* XXX: Determ
56e0: 69 6e 65 20 69 66 20 73 6c 6f 74 20 69 73 20 70  ine if slot is p
56f0: 72 65 73 65 6e 74 20 2a 2f 0a 0a 09 69 66 20 28  resent */...if (
5700: 70 53 6c 6f 74 4c 69 73 74 20 3d 3d 20 4e 55 4c  pSlotList == NUL
5710: 4c 29 20 7b 0a 09 09 2a 70 75 6c 43 6f 75 6e 74  L) {...*pulCount
5720: 20 3d 20 73 6c 6f 74 5f 70 72 65 73 65 6e 74 3b   = slot_present;
5730: 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
5740: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69  _PRINTF("Returni
5750: 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c  ng CKR_OK (%i)",
5760: 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74   CKR_OK);....ret
5770: 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a  urn(CKR_OK);..}.
5780: 0a 09 63 6f 75 6e 74 20 3d 20 2a 70 75 6c 43 6f  ..count = *pulCo
5790: 75 6e 74 3b 0a 09 69 66 20 28 63 6f 75 6e 74 20  unt;..if (count 
57a0: 3c 20 73 6c 6f 74 5f 70 72 65 73 65 6e 74 29 20  < slot_present) 
57b0: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
57c0: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
57d0: 55 73 65 72 20 61 6c 6c 6f 63 61 74 65 64 20 25  User allocated %
57e0: 6c 75 20 65 6e 74 72 69 65 73 2c 20 62 75 74 20  lu entries, but 
57f0: 77 65 20 68 61 76 65 20 25 6c 75 20 65 6e 74 72  we have %lu entr
5800: 69 65 73 2e 22 2c 20 63 6f 75 6e 74 2c 20 73 6c  ies.", count, sl
5810: 6f 74 5f 70 72 65 73 65 6e 74 29 3b 0a 0a 09 09  ot_present);....
5820: 72 65 74 75 72 6e 28 43 4b 52 5f 42 55 46 46 45  return(CKR_BUFFE
5830: 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 3b 09 0a 09  R_TOO_SMALL);...
5840: 7d 0a 0a 09 66 6f 72 20 28 63 75 72 72 73 6c 6f  }...for (currslo
5850: 74 20 3d 20 30 3b 20 63 75 72 72 73 6c 6f 74 20  t = 0; currslot 
5860: 3c 20 73 6c 6f 74 5f 70 72 65 73 65 6e 74 3b 20  < slot_present; 
5870: 63 75 72 72 73 6c 6f 74 2b 2b 29 20 7b 0a 09 09  currslot++) {...
5880: 70 53 6c 6f 74 4c 69 73 74 5b 63 75 72 72 73 6c  pSlotList[currsl
5890: 6f 74 5d 20 3d 20 63 75 72 72 73 6c 6f 74 3b 0a  ot] = currslot;.
58a0: 09 7d 0a 0a 09 2a 70 75 6c 43 6f 75 6e 74 20 3d  .}...*pulCount =
58b0: 20 73 6c 6f 74 5f 70 72 65 73 65 6e 74 3b 0a 0a   slot_present;..
58c0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
58d0: 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20  INTF("Returning 
58e0: 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b  CKR_OK (%i)", CK
58f0: 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28  R_OK);...return(
5900: 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 74 6f 6b 65 6e  CKR_OK);...token
5910: 50 72 65 73 65 6e 74 20 3d 20 74 6f 6b 65 6e 50  Present = tokenP
5920: 72 65 73 65 6e 74 3b 20 2f 2a 20 53 75 70 72 65  resent; /* Supre
5930: 73 73 20 75 6e 75 73 65 64 20 76 61 72 69 61 62  ss unused variab
5940: 6c 65 20 77 61 72 6e 69 6e 67 20 2a 2f 0a 7d 0a  le warning */.}.
5950: 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54  .CK_DEFINE_FUNCT
5960: 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74  ION(CK_RV, C_Get
5970: 53 6c 6f 74 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f  SlotInfo)(CK_SLO
5980: 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f  T_ID slotID, CK_
5990: 53 4c 4f 54 5f 49 4e 46 4f 5f 50 54 52 20 70 49  SLOT_INFO_PTR pI
59a0: 6e 66 6f 29 20 7b 0a 09 73 74 61 74 69 63 20 43  nfo) {..static C
59b0: 4b 5f 55 54 46 38 43 48 41 52 20 6d 61 6e 75 66  K_UTF8CHAR manuf
59c0: 61 63 74 75 72 65 72 49 44 5b 5d 20 3d 20 22 55  acturerID[] = "U
59d0: 2e 53 2e 20 47 6f 76 65 72 6e 6d 65 6e 74 22 3b  .S. Government";
59e0: 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 54 46 38  ..static CK_UTF8
59f0: 43 48 41 52 20 73 6c 6f 74 44 65 73 63 72 69 70  CHAR slotDescrip
5a00: 74 69 6f 6e 5b 5d 20 3d 20 22 43 41 43 4b 65 79  tion[] = "CACKey
5a10: 20 53 6c 6f 74 22 3b 0a 0a 09 43 41 43 4b 45 59   Slot";...CACKEY
5a20: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
5a30: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
5a40: 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29 20 7b  pInfo == NULL) {
5a50: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
5a60: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70  PRINTF("Error. p
5a70: 49 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e 22 29 3b  Info is NULL.");
5a80: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41  ....return(CKR_A
5a90: 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09  RGUMENTS_BAD);..
5aa0: 7d 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 21  }...if (slotID !
5ab0: 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 41 67 61 69  = 0) {.../* Agai
5ac0: 6e 2c 20 77 65 20 6f 6e 6c 79 20 73 75 70 70 6f  n, we only suppo
5ad0: 72 74 20 6f 6e 65 20 73 6c 6f 74 20 2d 2d 20 73  rt one slot -- s
5ae0: 6c 6f 74 20 30 20 2a 2f 0a 09 09 43 41 43 4b 45  lot 0 */...CACKE
5af0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
5b00: 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73  Error. Invalid s
5b10: 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25  lot requested (%
5b20: 6c 75 29 2c 20 6f 6e 6c 79 20 6f 6e 65 20 73 6c  lu), only one sl
5b30: 6f 74 20 61 76 61 69 6c 61 62 6c 65 3a 20 30 22  ot available: 0"
5b40: 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65  , slotID);....re
5b50: 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44  turn(CKR_SLOT_ID
5b60: 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09  _INVALID);..}...
5b70: 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74  if (!cackey_init
5b80: 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43  ialized) {...CAC
5b90: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
5ba0: 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e  ("Error.  Not in
5bb0: 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09  itialized.");...
5bc0: 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50  .return(CKR_CRYP
5bd0: 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c  TOKI_NOT_INITIAL
5be0: 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 6d 65 6d 73  IZED);..}...mems
5bf0: 65 74 28 70 49 6e 66 6f 2d 3e 73 6c 6f 74 44 65  et(pInfo->slotDe
5c00: 73 63 72 69 70 74 69 6f 6e 2c 20 27 20 27 2c 20  scription, ' ', 
5c10: 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 73 6c  sizeof(pInfo->sl
5c20: 6f 74 44 65 73 63 72 69 70 74 69 6f 6e 29 29 3b  otDescription));
5c30: 0a 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e  ..memcpy(pInfo->
5c40: 73 6c 6f 74 44 65 73 63 72 69 70 74 69 6f 6e 2c  slotDescription,
5c50: 20 73 6c 6f 74 44 65 73 63 72 69 70 74 69 6f 6e   slotDescription
5c60: 2c 20 73 69 7a 65 6f 66 28 73 6c 6f 74 44 65 73  , sizeof(slotDes
5c70: 63 72 69 70 74 69 6f 6e 29 20 2d 20 31 29 3b 0a  cription) - 1);.
5c80: 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e  ..memset(pInfo->
5c90: 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20  manufacturerID, 
5ca0: 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66  ' ', sizeof(pInf
5cb0: 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49  o->manufacturerI
5cc0: 44 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e  D));..memcpy(pIn
5cd0: 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72  fo->manufacturer
5ce0: 49 44 2c 20 6d 61 6e 75 66 61 63 74 75 72 65 72  ID, manufacturer
5cf0: 49 44 2c 20 73 69 7a 65 6f 66 28 6d 61 6e 75 66  ID, sizeof(manuf
5d00: 61 63 74 75 72 65 72 49 44 29 20 2d 20 31 29 3b  acturerID) - 1);
5d10: 0a 0a 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20  ...pInfo->flags 
5d20: 3d 20 43 4b 46 5f 54 4f 4b 45 4e 5f 50 52 45 53  = CKF_TOKEN_PRES
5d30: 45 4e 54 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 68 61  ENT;...pInfo->ha
5d40: 72 64 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 61  rdwareVersion.ma
5d50: 6a 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f 67 65  jor = (cackey_ge
5d60: 74 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 31 36  tversion() >> 16
5d70: 29 20 26 20 30 78 66 66 3b 0a 09 70 49 6e 66 6f  ) & 0xff;..pInfo
5d80: 2d 3e 68 61 72 64 77 61 72 65 56 65 72 73 69 6f  ->hardwareVersio
5d90: 6e 2e 6d 69 6e 6f 72 20 3d 20 28 63 61 63 6b 65  n.minor = (cacke
5da0: 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 20 3e  y_getversion() >
5db0: 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 0a 09 70  > 8) & 0xff;...p
5dc0: 49 6e 66 6f 2d 3e 66 69 72 6d 77 61 72 65 56 65  Info->firmwareVe
5dd0: 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 30 78  rsion.major = 0x
5de0: 30 30 3b 0a 09 70 49 6e 66 6f 2d 3e 66 69 72 6d  00;..pInfo->firm
5df0: 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f  wareVersion.mino
5e00: 72 20 3d 20 30 78 30 30 3b 0a 0a 09 43 41 43 4b  r = 0x00;...CACK
5e10: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
5e20: 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f  "Returning CKR_O
5e30: 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29  K (%i)", CKR_OK)
5e40: 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f  ;...return(CKR_O
5e50: 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45  K);.}..CK_DEFINE
5e60: 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c  _FUNCTION(CK_RV,
5e70: 20 43 5f 47 65 74 54 6f 6b 65 6e 49 6e 66 6f 29   C_GetTokenInfo)
5e80: 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74  (CK_SLOT_ID slot
5e90: 49 44 2c 20 43 4b 5f 54 4f 4b 45 4e 5f 49 4e 46  ID, CK_TOKEN_INF
5ea0: 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 7b 0a 09  O_PTR pInfo) {..
5eb0: 73 74 61 74 69 63 20 43 4b 5f 55 54 46 38 43 48  static CK_UTF8CH
5ec0: 41 52 20 6d 61 6e 75 66 61 63 74 75 72 65 72 49  AR manufacturerI
5ed0: 44 5b 5d 20 3d 20 22 55 2e 53 2e 20 47 6f 76 65  D[] = "U.S. Gove
5ee0: 72 6e 6d 65 6e 74 22 3b 0a 09 73 74 61 74 69 63  rnment";..static
5ef0: 20 43 4b 5f 55 54 46 38 43 48 41 52 20 64 65 66   CK_UTF8CHAR def
5f00: 61 75 6c 74 4c 61 62 65 6c 5b 5d 20 3d 20 22 55  aultLabel[] = "U
5f10: 6e 6b 6e 6f 77 6e 20 54 6f 6b 65 6e 22 3b 0a 09  nknown Token";..
5f20: 73 74 61 74 69 63 20 43 4b 5f 55 54 46 38 43 48  static CK_UTF8CH
5f30: 41 52 20 6d 6f 64 65 6c 5b 5d 20 3d 20 22 43 41  AR model[] = "CA
5f40: 43 20 54 6f 6b 65 6e 22 3b 0a 0a 09 43 41 43 4b  C Token";...CACK
5f50: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
5f60: 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66  "Called.");...if
5f70: 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29   (pInfo == NULL)
5f80: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
5f90: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
5fa0: 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e 22   pInfo is NULL."
5fb0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
5fc0: 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b  _ARGUMENTS_BAD);
5fd0: 0a 09 7d 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44  ..}...if (slotID
5fe0: 20 21 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 41 67   != 0) {.../* Ag
5ff0: 61 69 6e 2c 20 77 65 20 6f 6e 6c 79 20 73 75 70  ain, we only sup
6000: 70 6f 72 74 20 6f 6e 65 20 73 6c 6f 74 20 2d 2d  port one slot --
6010: 20 73 6c 6f 74 20 30 20 2a 2f 0a 09 09 43 41 43   slot 0 */...CAC
6020: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
6030: 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64  ("Error. Invalid
6040: 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20   slot requested 
6050: 28 25 6c 75 29 2c 20 6f 6e 6c 79 20 6f 6e 65 20  (%lu), only one 
6060: 73 6c 6f 74 20 61 76 61 69 6c 61 62 6c 65 3a 20  slot available: 
6070: 30 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09  0", slotID);....
6080: 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f  return(CKR_SLOT_
6090: 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a  ID_INVALID);..}.
60a0: 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e  ..if (!cackey_in
60b0: 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43  itialized) {...C
60c0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
60d0: 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20  TF("Error.  Not 
60e0: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a  initialized.");.
60f0: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52  ...return(CKR_CR
6100: 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49  YPTOKI_NOT_INITI
6110: 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 2f 2a  ALIZED);..}.../*
6120: 20 58 58 58 3a 20 56 65 72 69 66 79 20 63 6f 6e   XXX: Verify con
6130: 6e 65 63 74 69 6f 6e 20 69 73 20 76 61 6c 69 64  nection is valid
6140: 20 2a 2f 0a 09 69 66 20 28 30 29 20 7b 0a 09 09   */..if (0) {...
6150: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
6160: 4e 54 46 28 22 45 72 72 6f 72 2e 20 54 72 69 65  NTF("Error. Trie
6170: 64 20 74 6f 20 63 6f 6e 6e 65 63 74 20 74 6f 20  d to connect to 
6180: 73 6c 6f 74 2c 20 62 75 74 20 66 61 69 6c 65 64  slot, but failed
6190: 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  .");....return(C
61a0: 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c  KR_SLOT_ID_INVAL
61b0: 49 44 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 58 58 58  ID);..}.../* XXX
61c0: 3a 20 47 65 74 20 6c 69 73 74 20 6f 66 20 69 64  : Get list of id
61d0: 65 6e 74 69 74 69 65 73 20 2a 2f 0a 09 69 66 20  entities */..if 
61e0: 28 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  (0) {...CACKEY_D
61f0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
6200: 6f 72 2e 20 4e 6f 20 69 64 65 6e 74 69 74 69 65  or. No identitie
6210: 73 20 66 6f 75 6e 64 20 69 6e 20 73 6c 6f 74 2e  s found in slot.
6220: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
6230: 52 5f 54 4f 4b 45 4e 5f 4e 4f 54 5f 50 52 45 53  R_TOKEN_NOT_PRES
6240: 45 4e 54 29 3b 0a 09 7d 0a 0a 09 6d 65 6d 73 65  ENT);..}...memse
6250: 74 28 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c 20  t(pInfo->label, 
6260: 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66  ' ', sizeof(pInf
6270: 6f 2d 3e 6c 61 62 65 6c 29 29 3b 0a 09 69 66 20  o->label));..if 
6280: 28 31 29 20 7b 0a 09 09 6d 65 6d 63 70 79 28 70  (1) {...memcpy(p
6290: 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c 20 64 65 66  Info->label, def
62a0: 61 75 6c 74 4c 61 62 65 6c 2c 20 73 69 7a 65 6f  aultLabel, sizeo
62b0: 66 28 64 65 66 61 75 6c 74 4c 61 62 65 6c 29 20  f(defaultLabel) 
62c0: 2d 20 31 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a  - 1);..} else {.
62d0: 09 7d 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66  .}...memset(pInf
62e0: 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49  o->manufacturerI
62f0: 44 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 70  D, ' ', sizeof(p
6300: 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72  Info->manufactur
6310: 65 72 49 44 29 29 3b 0a 09 6d 65 6d 63 70 79 28  erID));..memcpy(
6320: 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75  pInfo->manufactu
6330: 72 65 72 49 44 2c 20 6d 61 6e 75 66 61 63 74 75  rerID, manufactu
6340: 72 65 72 49 44 2c 20 73 69 7a 65 6f 66 28 6d 61  rerID, sizeof(ma
6350: 6e 75 66 61 63 74 75 72 65 72 49 44 29 20 2d 20  nufacturerID) - 
6360: 31 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e  1);...memset(pIn
6370: 66 6f 2d 3e 6d 6f 64 65 6c 2c 20 27 20 27 2c 20  fo->model, ' ', 
6380: 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 6f  sizeof(pInfo->mo
6390: 64 65 6c 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70  del));..memcpy(p
63a0: 49 6e 66 6f 2d 3e 6d 6f 64 65 6c 2c 20 6d 6f 64  Info->model, mod
63b0: 65 6c 2c 20 73 69 7a 65 6f 66 28 6d 6f 64 65 6c  el, sizeof(model
63c0: 29 20 2d 20 31 29 3b 0a 0a 09 6d 65 6d 73 65 74  ) - 1);...memset
63d0: 28 70 49 6e 66 6f 2d 3e 73 65 72 69 61 6c 4e 75  (pInfo->serialNu
63e0: 6d 62 65 72 2c 20 27 20 27 2c 20 73 69 7a 65 6f  mber, ' ', sizeo
63f0: 66 28 70 49 6e 66 6f 2d 3e 73 65 72 69 61 6c 4e  f(pInfo->serialN
6400: 75 6d 62 65 72 29 29 3b 0a 0a 09 6d 65 6d 73 65  umber));...memse
6410: 74 28 70 49 6e 66 6f 2d 3e 75 74 63 54 69 6d 65  t(pInfo->utcTime
6420: 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49  , ' ', sizeof(pI
6430: 6e 66 6f 2d 3e 75 74 63 54 69 6d 65 29 29 3b 0a  nfo->utcTime));.
6440: 0a 09 70 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72  ..pInfo->hardwar
6450: 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d  eVersion.major =
6460: 20 28 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73   (cackey_getvers
6470: 69 6f 6e 28 29 20 3e 3e 20 31 36 29 20 26 20 30  ion() >> 16) & 0
6480: 78 66 66 3b 0a 09 70 49 6e 66 6f 2d 3e 68 61 72  xff;..pInfo->har
6490: 64 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e  dwareVersion.min
64a0: 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f 67 65 74  or = (cackey_get
64b0: 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20 38 29 20  version() >> 8) 
64c0: 26 20 30 78 66 66 3b 0a 0a 09 70 49 6e 66 6f 2d  & 0xff;...pInfo-
64d0: 3e 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f 6e  >firmwareVersion
64e0: 2e 6d 61 6a 6f 72 20 3d 20 30 78 30 30 3b 0a 09  .major = 0x00;..
64f0: 70 49 6e 66 6f 2d 3e 66 69 72 6d 77 61 72 65 56  pInfo->firmwareV
6500: 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 30  ersion.minor = 0
6510: 78 30 30 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 66 6c  x00;...pInfo->fl
6520: 61 67 73 20 3d 20 43 4b 46 5f 57 52 49 54 45 5f  ags = CKF_WRITE_
6530: 50 52 4f 54 45 43 54 45 44 20 7c 20 43 4b 46 5f  PROTECTED | CKF_
6540: 55 53 45 52 5f 50 49 4e 5f 49 4e 49 54 49 41 4c  USER_PIN_INITIAL
6550: 49 5a 45 44 20 7c 20 43 4b 46 5f 50 52 4f 54 45  IZED | CKF_PROTE
6560: 43 54 45 44 5f 41 55 54 48 45 4e 54 49 43 41 54  CTED_AUTHENTICAT
6570: 49 4f 4e 5f 50 41 54 48 20 7c 20 43 4b 46 5f 54  ION_PATH | CKF_T
6580: 4f 4b 45 4e 5f 49 4e 49 54 49 41 4c 49 5a 45 44  OKEN_INITIALIZED
6590: 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78  ;...pInfo->ulMax
65a0: 53 65 73 73 69 6f 6e 43 6f 75 6e 74 20 3d 20 28  SessionCount = (
65b0: 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65  sizeof(cackey_se
65c0: 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66  ssions) / sizeof
65d0: 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  (cackey_sessions
65e0: 5b 30 5d 29 29 20 2d 20 31 3b 0a 09 70 49 6e 66  [0])) - 1;..pInf
65f0: 6f 2d 3e 75 6c 53 65 73 73 69 6f 6e 43 6f 75 6e  o->ulSessionCoun
6600: 74 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42  t = CK_UNAVAILAB
6610: 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a  LE_INFORMATION;.
6620: 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 52 77 53  .pInfo->ulMaxRwS
6630: 65 73 73 69 6f 6e 43 6f 75 6e 74 20 3d 20 30 3b  essionCount = 0;
6640: 0a 09 70 49 6e 66 6f 2d 3e 75 6c 52 77 53 65 73  ..pInfo->ulRwSes
6650: 73 69 6f 6e 43 6f 75 6e 74 20 3d 20 43 4b 5f 55  sionCount = CK_U
6660: 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52  NAVAILABLE_INFOR
6670: 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e  MATION;..pInfo->
6680: 75 6c 4d 61 78 50 69 6e 4c 65 6e 20 3d 20 31 32  ulMaxPinLen = 12
6690: 38 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e  8;..pInfo->ulMin
66a0: 50 69 6e 4c 65 6e 20 3d 20 30 3b 0a 09 70 49 6e  PinLen = 0;..pIn
66b0: 66 6f 2d 3e 75 6c 54 6f 74 61 6c 50 75 62 6c 69  fo->ulTotalPubli
66c0: 63 4d 65 6d 6f 72 79 20 3d 20 43 4b 5f 55 4e 41  cMemory = CK_UNA
66d0: 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41  VAILABLE_INFORMA
66e0: 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c  TION;..pInfo->ul
66f0: 46 72 65 65 50 75 62 6c 69 63 4d 65 6d 6f 72 79  FreePublicMemory
6700: 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c   = CK_UNAVAILABL
6710: 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 09  E_INFORMATION;..
6720: 70 49 6e 66 6f 2d 3e 75 6c 54 6f 74 61 6c 50 72  pInfo->ulTotalPr
6730: 69 76 61 74 65 4d 65 6d 6f 72 79 20 3d 20 43 4b  ivateMemory = CK
6740: 5f 55 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e 46  _UNAVAILABLE_INF
6750: 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f  ORMATION;..pInfo
6760: 2d 3e 75 6c 46 72 65 65 50 72 69 76 61 74 65 4d  ->ulFreePrivateM
6770: 65 6d 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 56 41  emory = CK_UNAVA
6780: 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49  ILABLE_INFORMATI
6790: 4f 4e 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  ON;...CACKEY_DEB
67a0: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72  UG_PRINTF("Retur
67b0: 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29  ning CKR_OK (%i)
67c0: 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65  ", CKR_OK);...re
67d0: 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a  turn(CKR_OK);.}.
67e0: 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54  .CK_DEFINE_FUNCT
67f0: 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 57 61 69  ION(CK_RV, C_Wai
6800: 74 46 6f 72 53 6c 6f 74 45 76 65 6e 74 29 28 43  tForSlotEvent)(C
6810: 4b 5f 46 4c 41 47 53 20 66 6c 61 67 73 2c 20 43  K_FLAGS flags, C
6820: 4b 5f 53 4c 4f 54 5f 49 44 5f 50 54 52 20 70 53  K_SLOT_ID_PTR pS
6830: 6c 6f 74 49 44 2c 20 43 4b 5f 56 4f 49 44 5f 50  lotID, CK_VOID_P
6840: 54 52 20 70 52 65 73 65 72 76 65 64 29 20 7b 0a  TR pReserved) {.
6850: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
6860: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b  INTF("Called.");
6870: 0a 0a 09 69 66 20 28 70 52 65 73 65 72 76 65 64  ...if (pReserved
6880: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41   != NULL) {...CA
6890: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
68a0: 46 28 22 45 72 72 6f 72 2e 20 70 52 65 73 65 72  F("Error. pReser
68b0: 76 65 64 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e  ved is not NULL.
68c0: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
68d0: 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29  R_ARGUMENTS_BAD)
68e0: 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b  ;..}...if (!cack
68f0: 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20  ey_initialized) 
6900: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
6910: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
6920: 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64   Not initialized
6930: 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  .");....return(C
6940: 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f  KR_CRYPTOKI_NOT_
6950: 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d  INITIALIZED);..}
6960: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
6970: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
6980: 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  g CKR_FUNCTION_N
6990: 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69  OT_SUPPORTED (%i
69a0: 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  )", CKR_FUNCTION
69b0: 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b  _NOT_SUPPORTED);
69c0: 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55  ...return(CKR_FU
69d0: 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
69e0: 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46  RTED);.}..CK_DEF
69f0: 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f  INE_FUNCTION(CK_
6a00: 52 56 2c 20 43 5f 47 65 74 4d 65 63 68 61 6e 69  RV, C_GetMechani
6a10: 73 6d 4c 69 73 74 29 28 43 4b 5f 53 4c 4f 54 5f  smList)(CK_SLOT_
6a20: 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 4d 45  ID slotID, CK_ME
6a30: 43 48 41 4e 49 53 4d 5f 54 59 50 45 5f 50 54 52  CHANISM_TYPE_PTR
6a40: 20 70 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 2c   pMechanismList,
6a50: 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75   CK_ULONG_PTR pu
6a60: 6c 43 6f 75 6e 74 29 20 7b 0a 09 43 41 43 4b 45  lCount) {..CACKE
6a70: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
6a80: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20  Called.");...if 
6a90: 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c  (!cackey_initial
6aa0: 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59  ized) {...CACKEY
6ab0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
6ac0: 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69  rror.  Not initi
6ad0: 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65  alized.");....re
6ae0: 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b  turn(CKR_CRYPTOK
6af0: 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45  I_NOT_INITIALIZE
6b00: 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 75 6c  D);..}...if (pul
6b10: 43 6f 75 6e 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b  Count == NULL) {
6b20: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
6b30: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
6b40: 70 75 6c 43 6f 75 6e 74 20 69 73 20 4e 55 4c 4c  pulCount is NULL
6b50: 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  .");....return(C
6b60: 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44  KR_ARGUMENTS_BAD
6b70: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 4d 65 63  );..}...if (pMec
6b80: 68 61 6e 69 73 6d 4c 69 73 74 20 3d 3d 20 4e 55  hanismList == NU
6b90: 4c 4c 29 20 7b 0a 09 09 2a 70 75 6c 43 6f 75 6e  LL) {...*pulCoun
6ba0: 74 20 3d 20 33 3b 0a 0a 09 09 43 41 43 4b 45 59  t = 3;....CACKEY
6bb0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52  _DEBUG_PRINTF("R
6bc0: 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20  eturning CKR_OK 
6bd0: 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a  (%i)", CKR_OK);.
6be0: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b  ...return(CKR_OK
6bf0: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 2a 70 75 6c  );..}...if (*pul
6c00: 43 6f 75 6e 74 20 3c 20 33 29 20 7b 0a 09 09 43  Count < 3) {...C
6c10: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
6c20: 54 46 28 22 45 72 72 6f 72 2e 20 20 42 75 66 66  TF("Error.  Buff
6c30: 65 72 20 74 6f 6f 20 73 6d 61 6c 6c 2e 22 29 3b  er too small.");
6c40: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 42  ....return(CKR_B
6c50: 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29  UFFER_TOO_SMALL)
6c60: 3b 0a 09 7d 0a 0a 09 70 4d 65 63 68 61 6e 69 73  ;..}...pMechanis
6c70: 6d 4c 69 73 74 5b 30 5d 20 3d 20 43 4b 4d 5f 52  mList[0] = CKM_R
6c80: 53 41 5f 50 4b 43 53 3b 0a 09 70 4d 65 63 68 61  SA_PKCS;..pMecha
6c90: 6e 69 73 6d 4c 69 73 74 5b 31 5d 20 3d 20 43 4b  nismList[1] = CK
6ca0: 4d 5f 53 48 41 31 5f 52 53 41 5f 50 4b 43 53 3b  M_SHA1_RSA_PKCS;
6cb0: 0a 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 32 3b  ..*pulCount = 2;
6cc0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
6cd0: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
6ce0: 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20  g CKR_OK (%i)", 
6cf0: 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72  CKR_OK);...retur
6d00: 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b  n(CKR_OK);.}..CK
6d10: 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e  _DEFINE_FUNCTION
6d20: 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 4d 65 63  (CK_RV, C_GetMec
6d30: 68 61 6e 69 73 6d 49 6e 66 6f 29 28 43 4b 5f 53  hanismInfo)(CK_S
6d40: 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 43  LOT_ID slotID, C
6d50: 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 59 50 45  K_MECHANISM_TYPE
6d60: 20 74 79 70 65 2c 20 43 4b 5f 4d 45 43 48 41 4e   type, CK_MECHAN
6d70: 49 53 4d 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e  ISM_INFO_PTR pIn
6d80: 66 6f 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45  fo) {..CACKEY_DE
6d90: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c  BUG_PRINTF("Call
6da0: 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 73 6c 6f  ed.");...if (slo
6db0: 74 49 44 20 21 3d 20 30 29 20 7b 0a 09 09 2f 2a  tID != 0) {.../*
6dc0: 20 41 67 61 69 6e 2c 20 77 65 20 6f 6e 6c 79 20   Again, we only 
6dd0: 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 6c 6f 74  support one slot
6de0: 20 2d 2d 20 73 6c 6f 74 20 30 20 2a 2f 0a 09 09   -- slot 0 */...
6df0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
6e00: 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61  NTF("Error. Inva
6e10: 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74  lid slot request
6e20: 65 64 20 28 25 6c 75 29 2c 20 6f 6e 6c 79 20 6f  ed (%lu), only o
6e30: 6e 65 20 73 6c 6f 74 20 61 76 61 69 6c 61 62 6c  ne slot availabl
6e40: 65 3a 20 30 22 2c 20 73 6c 6f 74 49 44 29 3b 0a  e: 0", slotID);.
6e50: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c  ...return(CKR_SL
6e60: 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a  OT_ID_INVALID);.
6e70: 09 7d 0a 0a 09 69 66 20 28 70 49 6e 66 6f 20 3d  .}...if (pInfo =
6e80: 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b  = NULL) {...CACK
6e90: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
6ea0: 22 45 72 72 6f 72 2e 20 70 49 6e 66 6f 20 69 73  "Error. pInfo is
6eb0: 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74   NULL.");....ret
6ec0: 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54  urn(CKR_ARGUMENT
6ed0: 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20  S_BAD);..}...if 
6ee0: 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c  (!cackey_initial
6ef0: 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59  ized) {...CACKEY
6f00: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
6f10: 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69  rror.  Not initi
6f20: 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65  alized.");....re
6f30: 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b  turn(CKR_CRYPTOK
6f40: 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45  I_NOT_INITIALIZE
6f50: 44 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 58 58 58 3a  D);..}.../* XXX:
6f60: 20 54 68 69 73 20 69 73 20 75 6e 74 65 73 74 65   This is unteste
6f70: 64 2c 20 61 6e 64 20 66 75 72 74 68 65 72 20 49  d, and further I
6f80: 27 6d 20 6e 6f 74 20 72 65 61 6c 6c 79 20 73 75  'm not really su
6f90: 72 65 20 69 66 20 74 68 69 73 20 69 73 20 63 6f  re if this is co
6fa0: 72 72 65 63 74 2e 20 2a 2f 0a 09 73 77 69 74 63  rrect. */..switc
6fb0: 68 20 28 74 79 70 65 29 20 7b 0a 09 09 63 61 73  h (type) {...cas
6fc0: 65 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 3a 0a  e CKM_RSA_PKCS:.
6fd0: 09 09 09 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 4b  ...pInfo->ulMinK
6fe0: 65 79 53 69 7a 65 20 3d 20 35 31 32 3b 0a 09 09  eySize = 512;...
6ff0: 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 4b 65 79  .pInfo->ulMaxKey
7000: 53 69 7a 65 20 3d 20 38 31 39 32 3b 0a 09 09 09  Size = 8192;....
7010: 70 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 43  pInfo->flags = C
7020: 4b 46 5f 48 57 20 7c 20 43 4b 46 5f 45 4e 43 52  KF_HW | CKF_ENCR
7030: 59 50 54 20 7c 20 43 4b 46 5f 44 45 43 52 59 50  YPT | CKF_DECRYP
7040: 54 20 7c 20 43 4b 46 5f 53 49 47 4e 20 7c 20 43  T | CKF_SIGN | C
7050: 4b 46 5f 56 45 52 49 46 59 3b 0a 09 09 09 62 72  KF_VERIFY;....br
7060: 65 61 6b 3b 0a 09 09 63 61 73 65 20 43 4b 4d 5f  eak;...case CKM_
7070: 52 53 41 5f 58 5f 35 30 39 3a 0a 09 09 09 70 49  RSA_X_509:....pI
7080: 6e 66 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 53 69 7a  nfo->ulMinKeySiz
7090: 65 20 3d 20 35 31 32 3b 0a 09 09 09 70 49 6e 66  e = 512;....pInf
70a0: 6f 2d 3e 75 6c 4d 61 78 4b 65 79 53 69 7a 65 20  o->ulMaxKeySize 
70b0: 3d 20 38 31 39 32 3b 0a 09 09 09 70 49 6e 66 6f  = 8192;....pInfo
70c0: 2d 3e 66 6c 61 67 73 20 3d 20 43 4b 46 5f 48 57  ->flags = CKF_HW
70d0: 20 7c 20 43 4b 46 5f 45 4e 43 52 59 50 54 20 7c   | CKF_ENCRYPT |
70e0: 20 43 4b 46 5f 44 45 43 52 59 50 54 20 7c 20 43   CKF_DECRYPT | C
70f0: 4b 46 5f 53 49 47 4e 20 7c 20 43 4b 46 5f 56 45  KF_SIGN | CKF_VE
7100: 52 49 46 59 3b 0a 09 09 09 62 72 65 61 6b 3b 0a  RIFY;....break;.
7110: 09 09 63 61 73 65 20 43 4b 4d 5f 53 48 41 31 5f  ..case CKM_SHA1_
7120: 52 53 41 5f 50 4b 43 53 3a 0a 09 09 09 70 49 6e  RSA_PKCS:....pIn
7130: 66 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 53 69 7a 65  fo->ulMinKeySize
7140: 20 3d 20 35 31 32 3b 0a 09 09 09 70 49 6e 66 6f   = 512;....pInfo
7150: 2d 3e 75 6c 4d 61 78 4b 65 79 53 69 7a 65 20 3d  ->ulMaxKeySize =
7160: 20 38 31 39 32 3b 0a 09 09 09 70 49 6e 66 6f 2d   8192;....pInfo-
7170: 3e 66 6c 61 67 73 20 3d 20 43 4b 46 5f 48 57 20  >flags = CKF_HW 
7180: 7c 20 43 4b 46 5f 53 49 47 4e 20 7c 20 43 4b 46  | CKF_SIGN | CKF
7190: 5f 56 45 52 49 46 59 3b 0a 09 09 09 62 72 65 61  _VERIFY;....brea
71a0: 6b 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44  k;..}...CACKEY_D
71b0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
71c0: 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25  urning CKR_OK (%
71d0: 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09  i)", CKR_OK);...
71e0: 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a  return(CKR_OK);.
71f0: 7d 0a 0a 2f 2a 20 57 65 20 64 6f 6e 27 74 20 73  }../* We don't s
7200: 75 70 70 6f 72 74 20 74 68 69 73 20 6d 65 74 68  upport this meth
7210: 6f 64 2e 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45  od. */.CK_DEFINE
7220: 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c  _FUNCTION(CK_RV,
7230: 20 43 5f 49 6e 69 74 54 6f 6b 65 6e 29 28 43 4b   C_InitToken)(CK
7240: 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c  _SLOT_ID slotID,
7250: 20 43 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 52   CK_UTF8CHAR_PTR
7260: 20 70 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20   pPin, CK_ULONG 
7270: 75 6c 50 69 6e 4c 65 6e 2c 20 43 4b 5f 55 54 46  ulPinLen, CK_UTF
7280: 38 43 48 41 52 5f 50 54 52 20 70 4c 61 62 65 6c  8CHAR_PTR pLabel
7290: 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  ) {..CACKEY_DEBU
72a0: 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64  G_PRINTF("Called
72b0: 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b  .");...if (!cack
72c0: 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20  ey_initialized) 
72d0: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
72e0: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
72f0: 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64   Not initialized
7300: 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  .");....return(C
7310: 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f  KR_CRYPTOKI_NOT_
7320: 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d  INITIALIZED);..}
7330: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
7340: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
7350: 67 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 49 54  g CKR_TOKEN_WRIT
7360: 45 5f 50 52 4f 54 45 43 54 45 44 20 28 25 69 29  E_PROTECTED (%i)
7370: 22 2c 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 49  ", CKR_TOKEN_WRI
7380: 54 45 5f 50 52 4f 54 45 43 54 45 44 29 3b 0a 0a  TE_PROTECTED);..
7390: 09 72 65 74 75 72 6e 28 43 4b 52 5f 54 4f 4b 45  .return(CKR_TOKE
73a0: 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45  N_WRITE_PROTECTE
73b0: 44 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 20 64 6f 6e  D);.}../* We don
73c0: 27 74 20 73 75 70 70 6f 72 74 20 74 68 69 73 20  't support this 
73d0: 6d 65 74 68 6f 64 2e 20 2a 2f 0a 43 4b 5f 44 45  method. */.CK_DE
73e0: 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b  FINE_FUNCTION(CK
73f0: 5f 52 56 2c 20 43 5f 49 6e 69 74 50 49 4e 29 28  _RV, C_InitPIN)(
7400: 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c  CK_SESSION_HANDL
7410: 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 55  E hSession, CK_U
7420: 54 46 38 43 48 41 52 5f 50 54 52 20 70 50 69 6e  TF8CHAR_PTR pPin
7430: 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 69 6e  , CK_ULONG ulPin
7440: 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44  Len) {..CACKEY_D
7450: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c  EBUG_PRINTF("Cal
7460: 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63  led.");...if (!c
7470: 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65  ackey_initialize
7480: 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45  d) {...CACKEY_DE
7490: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
74a0: 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69  r.  Not initiali
74b0: 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72  zed.");....retur
74c0: 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e  n(CKR_CRYPTOKI_N
74d0: 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b  OT_INITIALIZED);
74e0: 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  ..}...CACKEY_DEB
74f0: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72  UG_PRINTF("Retur
7500: 6e 69 6e 67 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57  ning CKR_TOKEN_W
7510: 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 20 28  RITE_PROTECTED (
7520: 25 69 29 22 2c 20 43 4b 52 5f 54 4f 4b 45 4e 5f  %i)", CKR_TOKEN_
7530: 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 29  WRITE_PROTECTED)
7540: 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 54  ;...return(CKR_T
7550: 4f 4b 45 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45  OKEN_WRITE_PROTE
7560: 43 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 20  CTED);.}../* We 
7570: 64 6f 6e 27 74 20 73 75 70 70 6f 72 74 20 74 68  don't support th
7580: 69 73 20 6d 65 74 68 6f 64 2e 20 2a 2f 0a 43 4b  is method. */.CK
7590: 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e  _DEFINE_FUNCTION
75a0: 28 43 4b 5f 52 56 2c 20 43 5f 53 65 74 50 49 4e  (CK_RV, C_SetPIN
75b0: 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e  )(CK_SESSION_HAN
75c0: 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b  DLE hSession, CK
75d0: 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 4f  _UTF8CHAR_PTR pO
75e0: 6c 64 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20  ldPin, CK_ULONG 
75f0: 75 6c 4f 6c 64 50 69 6e 4c 65 6e 2c 20 43 4b 5f  ulOldPinLen, CK_
7600: 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 4e 65  UTF8CHAR_PTR pNe
7610: 77 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75  wPin, CK_ULONG u
7620: 6c 4e 65 77 50 69 6e 4c 65 6e 29 20 7b 0a 09 43  lNewPinLen) {..C
7630: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
7640: 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a  TF("Called.");..
7650: 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69  .if (!cackey_ini
7660: 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41  tialized) {...CA
7670: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
7680: 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69  F("Error.  Not i
7690: 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a  nitialized.");..
76a0: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59  ..return(CKR_CRY
76b0: 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41  PTOKI_NOT_INITIA
76c0: 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43  LIZED);..}...CAC
76d0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
76e0: 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f  ("Returning CKR_
76f0: 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
7700: 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b  PORTED (%i)", CK
7710: 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53  R_FUNCTION_NOT_S
7720: 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74  UPPORTED);...ret
7730: 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  urn(CKR_FUNCTION
7740: 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b  _NOT_SUPPORTED);
7750: 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55  .}..CK_DEFINE_FU
7760: 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f  NCTION(CK_RV, C_
7770: 4f 70 65 6e 53 65 73 73 69 6f 6e 29 28 43 4b 5f  OpenSession)(CK_
7780: 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20  SLOT_ID slotID, 
7790: 43 4b 5f 46 4c 41 47 53 20 66 6c 61 67 73 2c 20  CK_FLAGS flags, 
77a0: 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 41 70 70  CK_VOID_PTR pApp
77b0: 6c 69 63 61 74 69 6f 6e 2c 20 43 4b 5f 4e 4f 54  lication, CK_NOT
77c0: 49 46 59 20 6e 6f 74 69 66 79 2c 20 43 4b 5f 53  IFY notify, CK_S
77d0: 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 50 54  ESSION_HANDLE_PT
77e0: 52 20 70 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09  R phSession) {..
77f0: 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 69 64  struct cackey_id
7800: 65 6e 74 69 74 79 20 2a 69 64 65 6e 74 69 74 69  entity *identiti
7810: 65 73 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f  es;..unsigned lo
7820: 6e 67 20 69 64 78 2c 20 6e 75 6d 5f 69 64 73 2c  ng idx, num_ids,
7830: 20 69 64 5f 69 64 78 2c 20 63 75 72 72 5f 69 64   id_idx, curr_id
7840: 5f 74 79 70 65 3b 0a 09 43 4b 5f 42 59 54 45 20  _type;..CK_BYTE 
7850: 73 69 67 62 75 66 5b 31 30 32 34 5d 3b 0a 09 73  sigbuf[1024];..s
7860: 73 69 7a 65 5f 74 20 73 69 67 62 75 66 6c 65 6e  size_t sigbuflen
7870: 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74  ;..int mutex_ret
7880: 76 61 6c 3b 0a 09 69 6e 74 20 66 6f 75 6e 64 5f  val;..int found_
7890: 73 65 73 73 69 6f 6e 20 3d 20 30 3b 0a 0a 09 43  session = 0;...C
78a0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
78b0: 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a  TF("Called.");..
78c0: 09 69 66 20 28 73 6c 6f 74 49 44 20 21 3d 20 30  .if (slotID != 0
78d0: 29 20 7b 0a 09 09 2f 2a 20 57 65 20 6f 6e 6c 79  ) {.../* We only
78e0: 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73 6c 6f   support one slo
78f0: 74 20 2d 2d 20 73 6c 6f 74 20 30 20 2a 2f 0a 09  t -- slot 0 */..
7900: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
7910: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76  INTF("Error. Inv
7920: 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73  alid slot reques
7930: 74 65 64 20 28 25 6c 75 29 2c 20 6f 6e 6c 79 20  ted (%lu), only 
7940: 6f 6e 65 20 73 6c 6f 74 20 61 76 61 69 6c 61 62  one slot availab
7950: 6c 65 3a 20 30 22 2c 20 73 6c 6f 74 49 44 29 3b  le: 0", slotID);
7960: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53  ....return(CKR_S
7970: 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b  LOT_ID_INVALID);
7980: 0a 09 7d 0a 0a 09 69 66 20 28 28 66 6c 61 67 73  ..}...if ((flags
7990: 20 26 20 43 4b 46 5f 53 45 52 49 41 4c 5f 53 45   & CKF_SERIAL_SE
79a0: 53 53 49 4f 4e 29 20 21 3d 20 43 4b 46 5f 53 45  SSION) != CKF_SE
79b0: 52 49 41 4c 5f 53 45 53 53 49 4f 4e 29 20 7b 0a  RIAL_SESSION) {.
79c0: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53  ..return(CKR_SES
79d0: 53 49 4f 4e 5f 50 41 52 41 4c 4c 45 4c 5f 4e 4f  SION_PARALLEL_NO
79e0: 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 09 7d  T_SUPPORTED);..}
79f0: 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69  ...if (!cackey_i
7a00: 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09  nitialized) {...
7a10: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
7a20: 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74  NTF("Error.  Not
7a30: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b   initialized.");
7a40: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43  ....return(CKR_C
7a50: 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54  RYPTOKI_NOT_INIT
7a60: 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 2f  IALIZED);..}.../
7a70: 2a 20 56 65 72 69 66 79 20 74 68 61 74 20 74 68  * Verify that th
7a80: 65 20 63 61 72 64 20 69 73 20 61 63 74 75 61 6c  e card is actual
7a90: 6c 79 20 69 6e 20 74 68 65 20 73 6c 6f 74 2e 20  ly in the slot. 
7aa0: 2a 2f 0a 09 2f 2a 20 58 58 58 3a 20 54 61 6c 6b  */../* XXX: Talk
7ab0: 20 74 6f 20 63 61 72 64 20 2a 2f 0a 09 69 66 20   to card */..if 
7ac0: 28 30 29 20 7b 0a 09 09 69 66 20 28 30 29 20 7b  (0) {...if (0) {
7ad0: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
7ae0: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
7af0: 20 43 61 72 64 20 6e 6f 74 20 70 72 65 73 65 6e   Card not presen
7b00: 74 2e 20 20 52 65 74 75 72 6e 69 6e 67 20 43 4b  t.  Returning CK
7b10: 52 5f 44 45 56 49 43 45 5f 52 45 4d 4f 56 45 44  R_DEVICE_REMOVED
7b20: 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 43  ");.....return(C
7b30: 4b 52 5f 44 45 56 49 43 45 5f 52 45 4d 4f 56 45  KR_DEVICE_REMOVE
7b40: 44 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 6d 75 74  D);...}..}...mut
7b50: 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b  ex_retval = cack
7b60: 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61  ey_mutex_lock(ca
7b70: 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09  ckey_biglock);..
7b80: 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c  if (mutex_retval
7b90: 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45   != 0) {...CACKE
7ba0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
7bb0: 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20  Error.  Locking 
7bc0: 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65  failed.");....re
7bd0: 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c  turn(CKR_GENERAL
7be0: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 66 6f  _ERROR);..}...fo
7bf0: 72 20 28 69 64 78 20 3d 20 31 3b 20 69 64 78 20  r (idx = 1; idx 
7c00: 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79  < (sizeof(cackey
7c10: 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a  _sessions) / siz
7c20: 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69  eof(cackey_sessi
7c30: 6f 6e 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29  ons[0])); idx++)
7c40: 20 7b 0a 09 09 69 66 20 28 21 63 61 63 6b 65 79   {...if (!cackey
7c50: 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61  _sessions[idx].a
7c60: 63 74 69 76 65 29 20 7b 0a 09 09 09 66 6f 75 6e  ctive) {....foun
7c70: 64 5f 73 65 73 73 69 6f 6e 20 3d 20 31 3b 0a 0a  d_session = 1;..
7c80: 09 09 09 2a 70 68 53 65 73 73 69 6f 6e 20 3d 20  ...*phSession = 
7c90: 69 64 78 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f  idx;.....cackey_
7ca0: 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61 63  sessions[idx].ac
7cb0: 74 69 76 65 20 3d 20 31 3b 0a 09 09 09 63 61 63  tive = 1;....cac
7cc0: 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78  key_sessions[idx
7cd0: 5d 2e 73 6c 6f 74 49 44 20 3d 20 73 6c 6f 74 49  ].slotID = slotI
7ce0: 44 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73  D;....cackey_ses
7cf0: 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 74 61 74 65  sions[idx].state
7d00: 20 3d 20 43 4b 53 5f 52 4f 5f 50 55 42 4c 49 43   = CKS_RO_PUBLIC
7d10: 5f 53 45 53 53 49 4f 4e 3b 0a 09 09 09 63 61 63  _SESSION;....cac
7d20: 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78  key_sessions[idx
7d30: 5d 2e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 3b  ].flags = flags;
7d40: 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69  ....cackey_sessi
7d50: 6f 6e 73 5b 69 64 78 5d 2e 75 6c 44 65 76 69 63  ons[idx].ulDevic
7d60: 65 45 72 72 6f 72 20 3d 20 30 3b 0a 09 09 09 63  eError = 0;....c
7d70: 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69  ackey_sessions[i
7d80: 64 78 5d 2e 70 41 70 70 6c 69 63 61 74 69 6f 6e  dx].pApplication
7d90: 20 3d 20 70 41 70 70 6c 69 63 61 74 69 6f 6e 3b   = pApplication;
7da0: 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69  ....cackey_sessi
7db0: 6f 6e 73 5b 69 64 78 5d 2e 4e 6f 74 69 66 79 20  ons[idx].Notify 
7dc0: 3d 20 6e 6f 74 69 66 79 3b 0a 0a 09 09 09 63 61  = notify;.....ca
7dd0: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64  ckey_sessions[id
7de0: 78 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 3d 20  x].identities = 
7df0: 4e 55 4c 4c 3b 0a 09 09 09 63 61 63 6b 65 79 5f  NULL;....cackey_
7e00: 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 69 64  sessions[idx].id
7e10: 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 20 3d  entities_count =
7e20: 20 30 3b 0a 0a 09 09 09 69 66 20 28 30 29 20 7b   0;.....if (0) {
7e30: 0a 09 09 09 09 6e 75 6d 5f 69 64 73 20 3d 20 30  .....num_ids = 0
7e40: 3b 0a 09 09 09 09 2f 2a 20 58 58 58 3a 20 44 65  ;...../* XXX: De
7e50: 74 65 72 6d 69 6e 65 20 6e 75 6d 62 65 72 20 6f  termine number o
7e60: 66 20 49 44 73 20 2a 2f 0a 0a 09 09 09 09 2f 2a  f IDs */....../*
7e70: 20 43 6f 6e 76 65 72 74 20 6e 75 6d 62 65 72 20   Convert number 
7e80: 6f 66 20 49 44 73 20 74 6f 20 6e 75 6d 62 65 72  of IDs to number
7e90: 20 6f 66 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 09   of objects */..
7ea0: 09 09 09 6e 75 6d 5f 69 64 73 20 3d 20 28 43 4b  ...num_ids = (CK
7eb0: 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 20 2d 20  O_PRIVATE_KEY - 
7ec0: 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 20  CKO_CERTIFICATE 
7ed0: 2b 20 31 29 20 2a 20 6e 75 6d 5f 69 64 73 3b 0a  + 1) * num_ids;.
7ee0: 0a 09 09 09 09 69 64 65 6e 74 69 74 69 65 73 20  .....identities 
7ef0: 3d 20 6d 61 6c 6c 6f 63 28 6e 75 6d 5f 69 64 73  = malloc(num_ids
7f00: 20 2a 20 73 69 7a 65 6f 66 28 2a 69 64 65 6e 74   * sizeof(*ident
7f10: 69 74 69 65 73 29 29 3b 0a 0a 09 09 09 09 69 64  ities));......id
7f20: 5f 69 64 78 20 3d 20 30 3b 0a 09 09 09 09 66 6f  _idx = 0;.....fo
7f30: 72 20 28 3b 3b 29 20 7b 0a 09 09 09 09 09 66 6f  r (;;) {......fo
7f40: 72 20 28 63 75 72 72 5f 69 64 5f 74 79 70 65 20  r (curr_id_type 
7f50: 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54  = CKO_CERTIFICAT
7f60: 45 3b 20 63 75 72 72 5f 69 64 5f 74 79 70 65 20  E; curr_id_type 
7f70: 3c 3d 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b  <= CKO_PRIVATE_K
7f80: 45 59 3b 20 63 75 72 72 5f 69 64 5f 74 79 70 65  EY; curr_id_type
7f90: 2b 2b 29 20 7b 0a 09 09 09 09 09 09 2f 2a 20 58  ++) {......./* X
7fa0: 58 58 3a 20 44 65 74 65 72 6d 69 6e 65 20 62 61  XX: Determine ba
7fb0: 73 65 20 69 6e 64 65 78 20 2a 2f 0a 0a 09 09 09  se index */.....
7fc0: 09 09 09 69 64 65 6e 74 69 74 69 65 73 5b 69 64  ...identities[id
7fd0: 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73  _idx].attributes
7fe0: 20 3d 20 63 61 63 6b 65 79 5f 67 65 74 5f 61 74   = cackey_get_at
7ff0: 74 72 69 62 75 74 65 73 28 63 75 72 72 5f 69 64  tributes(curr_id
8000: 5f 74 79 70 65 2c 20 4e 55 4c 4c 2c 20 2d 31 2c  _type, NULL, -1,
8010: 20 26 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f   &identities[id_
8020: 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 5f  idx].attributes_
8030: 63 6f 75 6e 74 29 3b 0a 0a 09 09 09 09 09 09 69  count);........i
8040: 66 20 28 69 64 65 6e 74 69 74 69 65 73 5b 69 64  f (identities[id
8050: 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73  _idx].attributes
8060: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09   == NULL) {.....
8070: 09 09 09 69 64 65 6e 74 69 74 69 65 73 5b 69 64  ...identities[id
8080: 5f 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73  _idx].attributes
8090: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 09 09 09 09  _count = 0;.....
80a0: 09 09 7d 0a 0a 09 09 09 09 09 09 69 64 5f 69 64  ..}........id_id
80b0: 78 2b 2b 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09  x++;......}.....
80c0: 7d 0a 0a 09 09 09 09 63 61 63 6b 65 79 5f 73 65  }......cackey_se
80d0: 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 69 64 65 6e  ssions[idx].iden
80e0: 74 69 74 69 65 73 20 3d 20 69 64 65 6e 74 69 74  tities = identit
80f0: 69 65 73 3b 0a 09 09 09 09 63 61 63 6b 65 79 5f  ies;.....cackey_
8100: 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 69 64  sessions[idx].id
8110: 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 20 3d  entities_count =
8120: 20 6e 75 6d 5f 69 64 73 3b 0a 09 09 09 7d 0a 0a   num_ids;....}..
8130: 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f  ...cackey_sessio
8140: 6e 73 5b 69 64 78 5d 2e 73 65 61 72 63 68 5f 61  ns[idx].search_a
8150: 63 74 69 76 65 20 3d 20 30 3b 0a 0a 09 09 09 63  ctive = 0;.....c
8160: 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69  ackey_sessions[i
8170: 64 78 5d 2e 73 69 67 6e 5f 61 63 74 69 76 65 20  dx].sign_active 
8180: 3d 20 30 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f  = 0;.....cackey_
8190: 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 64 65  sessions[idx].de
81a0: 63 72 79 70 74 5f 61 63 74 69 76 65 20 3d 20 30  crypt_active = 0
81b0: 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 7d  ;.....break;...}
81c0: 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76  ..}...mutex_retv
81d0: 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65  al = cackey_mute
81e0: 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f  x_unlock(cackey_
81f0: 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d  biglock);..if (m
8200: 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30  utex_retval != 0
8210: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  ) {...CACKEY_DEB
8220: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
8230: 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69  .  Unlocking fai
8240: 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72  led.");....retur
8250: 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52  n(CKR_GENERAL_ER
8260: 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21  ROR);..}...if (!
8270: 66 6f 75 6e 64 5f 73 65 73 73 69 6f 6e 29 20 7b  found_session) {
8280: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
8290: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
82a0: 67 20 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 43 4f  g CKR_SESSION_CO
82b0: 55 4e 54 20 28 25 69 29 22 2c 20 43 4b 52 5f 53  UNT (%i)", CKR_S
82c0: 45 53 53 49 4f 4e 5f 43 4f 55 4e 54 29 3b 0a 0a  ESSION_COUNT);..
82d0: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53  ..return(CKR_SES
82e0: 53 49 4f 4e 5f 43 4f 55 4e 54 29 3b 0a 09 7d 0a  SION_COUNT);..}.
82f0: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
8300: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
8310: 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43   CKR_OK (%i)", C
8320: 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e  KR_OK);...return
8330: 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f  (CKR_OK);.}..CK_
8340: 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28  DEFINE_FUNCTION(
8350: 43 4b 5f 52 56 2c 20 43 5f 43 6c 6f 73 65 53 65  CK_RV, C_CloseSe
8360: 73 73 69 6f 6e 29 28 43 4b 5f 53 45 53 53 49 4f  ssion)(CK_SESSIO
8370: 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f  N_HANDLE hSessio
8380: 6e 29 20 7b 0a 09 43 4b 5f 41 54 54 52 49 42 55  n) {..CK_ATTRIBU
8390: 54 45 20 2a 63 75 72 72 5f 61 74 74 72 3b 0a 09  TE *curr_attr;..
83a0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64  unsigned long id
83b0: 5f 69 64 78 2c 20 61 74 74 72 5f 69 64 78 3b 0a  _idx, attr_idx;.
83c0: 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61  .int mutex_retva
83d0: 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  l;...CACKEY_DEBU
83e0: 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64  G_PRINTF("Called
83f0: 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b  .");...if (!cack
8400: 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20  ey_initialized) 
8410: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
8420: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
8430: 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64   Not initialized
8440: 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  .");....return(C
8450: 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f  KR_CRYPTOKI_NOT_
8460: 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d  INITIALIZED);..}
8470: 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20  ...if (hSession 
8480: 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e  == 0 || hSession
8490: 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b   >= (sizeof(cack
84a0: 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73  ey_sessions) / s
84b0: 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73  izeof(cackey_ses
84c0: 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09  sions[0]))) {...
84d0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
84e0: 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73  NTF("Error.  Ses
84f0: 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67  sion out of rang
8500: 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72  e.");......retur
8510: 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41  n(CKR_SESSION_HA
8520: 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09  NDLE_INVALID);..
8530: 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c  }...mutex_retval
8540: 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f   = cackey_mutex_
8550: 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c  lock(cackey_bigl
8560: 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78  ock);..if (mutex
8570: 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a  _retval != 0) {.
8580: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
8590: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c  RINTF("Error.  L
85a0: 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29  ocking failed.")
85b0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  ;....return(CKR_
85c0: 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a  GENERAL_ERROR);.
85d0: 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79  .}...if (!cackey
85e0: 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69  _sessions[hSessi
85f0: 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09  on].active) {...
8600: 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c  cackey_mutex_unl
8610: 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f  ock(cackey_biglo
8620: 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44  ck);....CACKEY_D
8630: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
8640: 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74  or.  Session not
8650: 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09   active.");.....
8660: 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53  .return(CKR_SESS
8670: 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c  ION_HANDLE_INVAL
8680: 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79  ID);..}...cackey
8690: 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69  _sessions[hSessi
86a0: 6f 6e 5d 2e 61 63 74 69 76 65 20 3d 20 30 3b 0a  on].active = 0;.
86b0: 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73  .if (cackey_sess
86c0: 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69  ions[hSession].i
86d0: 64 65 6e 74 69 74 69 65 73 29 20 7b 0a 09 09 66  dentities) {...f
86e0: 6f 72 20 28 69 64 5f 69 64 78 20 3d 20 30 3b 20  or (id_idx = 0; 
86f0: 69 64 5f 69 64 78 20 3c 20 63 61 63 6b 65 79 5f  id_idx < cackey_
8700: 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
8710: 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f  n].identities_co
8720: 75 6e 74 3b 20 69 64 5f 69 64 78 2b 2b 29 20 7b  unt; id_idx++) {
8730: 0a 09 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73  ....if (cackey_s
8740: 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e  essions[hSession
8750: 5d 2e 69 64 65 6e 74 69 74 69 65 73 5b 69 64 5f  ].identities[id_
8760: 69 64 78 5d 2e 61 74 74 72 69 62 75 74 65 73 29  idx].attributes)
8770: 20 7b 0a 09 09 09 09 66 6f 72 20 28 61 74 74 72   {.....for (attr
8780: 5f 69 64 78 20 3d 20 30 3b 20 61 74 74 72 5f 69  _idx = 0; attr_i
8790: 64 78 20 3c 20 63 61 63 6b 65 79 5f 73 65 73 73  dx < cackey_sess
87a0: 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69  ions[hSession].i
87b0: 64 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78  dentities[id_idx
87c0: 5d 2e 61 74 74 72 69 62 75 74 65 73 5f 63 6f 75  ].attributes_cou
87d0: 6e 74 3b 20 61 74 74 72 5f 69 64 78 2b 2b 29 20  nt; attr_idx++) 
87e0: 7b 0a 09 09 09 09 09 63 75 72 72 5f 61 74 74 72  {......curr_attr
87f0: 20 3d 20 26 63 61 63 6b 65 79 5f 73 65 73 73 69   = &cackey_sessi
8800: 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64  ons[hSession].id
8810: 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d  entities[id_idx]
8820: 2e 61 74 74 72 69 62 75 74 65 73 5b 61 74 74 72  .attributes[attr
8830: 5f 69 64 78 5d 3b 0a 0a 09 09 09 09 09 69 66 20  _idx];.......if 
8840: 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c  (curr_attr->pVal
8850: 75 65 29 20 7b 0a 09 09 09 09 09 09 66 72 65 65  ue) {.......free
8860: 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c  (curr_attr->pVal
8870: 75 65 29 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09  ue);......}.....
8880: 7d 0a 0a 09 09 09 09 66 72 65 65 28 63 61 63 6b  }......free(cack
8890: 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
88a0: 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73  sion].identities
88b0: 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75  [id_idx].attribu
88c0: 74 65 73 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a  tes);....}...}..
88d0: 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f 73 65  ..free(cackey_se
88e0: 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d  ssions[hSession]
88f0: 2e 69 64 65 6e 74 69 74 69 65 73 29 3b 0a 09 7d  .identities);..}
8900: 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20  ...mutex_retval 
8910: 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75  = cackey_mutex_u
8920: 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67  nlock(cackey_big
8930: 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65  lock);..if (mute
8940: 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b  x_retval != 0) {
8950: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
8960: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
8970: 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64  Unlocking failed
8980: 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  .");....return(C
8990: 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52  KR_GENERAL_ERROR
89a0: 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44  );..}...CACKEY_D
89b0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
89c0: 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25  urning CKR_OK (%
89d0: 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09  i)", CKR_OK);...
89e0: 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a  return(CKR_OK);.
89f0: 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e  }..CK_DEFINE_FUN
8a00: 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43  CTION(CK_RV, C_C
8a10: 6c 6f 73 65 41 6c 6c 53 65 73 73 69 6f 6e 73 29  loseAllSessions)
8a20: 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f 74  (CK_SLOT_ID slot
8a30: 49 44 29 20 7b 0a 09 75 69 6e 74 33 32 5f 74 20  ID) {..uint32_t 
8a40: 69 64 78 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f  idx;..int mutex_
8a50: 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59  retval;...CACKEY
8a60: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
8a70: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
8a80: 73 6c 6f 74 49 44 20 21 3d 20 30 29 20 7b 0a 09  slotID != 0) {..
8a90: 09 2f 2a 20 41 67 61 69 6e 2c 20 77 65 20 6f 6e  ./* Again, we on
8aa0: 6c 79 20 73 75 70 70 6f 72 74 20 6f 6e 65 20 73  ly support one s
8ab0: 6c 6f 74 20 2d 2d 20 73 6c 6f 74 20 30 20 2a 2f  lot -- slot 0 */
8ac0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
8ad0: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49  PRINTF("Error. I
8ae0: 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75  nvalid slot requ
8af0: 65 73 74 65 64 20 28 25 6c 75 29 2c 20 6f 6e 6c  ested (%lu), onl
8b00: 79 20 6f 6e 65 20 73 6c 6f 74 20 61 76 61 69 6c  y one slot avail
8b10: 61 62 6c 65 3a 20 30 22 2c 20 73 6c 6f 74 49 44  able: 0", slotID
8b20: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
8b30: 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44  _SLOT_ID_INVALID
8b40: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63  );..}...if (!cac
8b50: 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29  key_initialized)
8b60: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
8b70: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
8b80: 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65    Not initialize
8b90: 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  d.");....return(
8ba0: 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54  CKR_CRYPTOKI_NOT
8bb0: 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09  _INITIALIZED);..
8bc0: 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c  }...mutex_retval
8bd0: 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f   = cackey_mutex_
8be0: 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c  lock(cackey_bigl
8bf0: 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78  ock);..if (mutex
8c00: 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a  _retval != 0) {.
8c10: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
8c20: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c  RINTF("Error.  L
8c30: 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29  ocking failed.")
8c40: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  ;....return(CKR_
8c50: 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a  GENERAL_ERROR);.
8c60: 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20  .}...for (idx = 
8c70: 30 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 66  0; idx < (sizeof
8c80: 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  (cackey_sessions
8c90: 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65  ) / sizeof(cacke
8ca0: 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 3b  y_sessions[0]));
8cb0: 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28   idx++) {...if (
8cc0: 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b  cackey_sessions[
8cd0: 69 64 78 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09  idx].active) {..
8ce0: 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 73  ..if (cackey_ses
8cf0: 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 6c 6f 74 49  sions[idx].slotI
8d00: 44 20 21 3d 20 73 6c 6f 74 49 44 29 20 7b 0a 09  D != slotID) {..
8d10: 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09  ...continue;....
8d20: 7d 0a 0a 09 09 09 63 61 63 6b 65 79 5f 6d 75 74  }.....cackey_mut
8d30: 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79  ex_unlock(cackey
8d40: 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 09 09 43 5f  _biglock);....C_
8d50: 43 6c 6f 73 65 53 65 73 73 69 6f 6e 28 69 64 78  CloseSession(idx
8d60: 29 3b 0a 09 09 09 63 61 63 6b 65 79 5f 6d 75 74  );....cackey_mut
8d70: 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62  ex_lock(cackey_b
8d80: 69 67 6c 6f 63 6b 29 3b 0a 09 09 7d 0a 09 7d 0a  iglock);...}..}.
8d90: 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d  ..mutex_retval =
8da0: 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e   cackey_mutex_un
8db0: 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c  lock(cackey_bigl
8dc0: 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78  ock);..if (mutex
8dd0: 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a  _retval != 0) {.
8de0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
8df0: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55  RINTF("Error.  U
8e00: 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e  nlocking failed.
8e10: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
8e20: 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29  R_GENERAL_ERROR)
8e30: 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45  ;..}...CACKEY_DE
8e40: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75  BUG_PRINTF("Retu
8e50: 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69  rning CKR_OK (%i
8e60: 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72  )", CKR_OK);...r
8e70: 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d  eturn(CKR_OK);.}
8e80: 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43  ..CK_DEFINE_FUNC
8e90: 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65  TION(CK_RV, C_Ge
8ea0: 74 53 65 73 73 69 6f 6e 49 6e 66 6f 29 28 43 4b  tSessionInfo)(CK
8eb0: 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20  _SESSION_HANDLE 
8ec0: 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 53 45 53  hSession, CK_SES
8ed0: 53 49 4f 4e 5f 49 4e 46 4f 5f 50 54 52 20 70 49  SION_INFO_PTR pI
8ee0: 6e 66 6f 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65  nfo) {..int mute
8ef0: 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b  x_retval;...CACK
8f00: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
8f10: 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66  "Called.");...if
8f20: 20 28 70 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29   (pInfo == NULL)
8f30: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
8f40: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
8f50: 20 70 49 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e 22   pInfo is NULL."
8f60: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
8f70: 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b  _ARGUMENTS_BAD);
8f80: 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ..}...if (!cacke
8f90: 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b  y_initialized) {
8fa0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
8fb0: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
8fc0: 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  Not initialized.
8fd0: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
8fe0: 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49  R_CRYPTOKI_NOT_I
8ff0: 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a  NITIALIZED);..}.
9000: 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d  ..if (hSession =
9010: 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20  = 0 || hSession 
9020: 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65  >= (sizeof(cacke
9030: 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69  y_sessions) / si
9040: 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73  zeof(cackey_sess
9050: 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43  ions[0]))) {...C
9060: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
9070: 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73  TF("Error.  Sess
9080: 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65  ion out of range
9090: 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e  .");......return
90a0: 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e  (CKR_SESSION_HAN
90b0: 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d  DLE_INVALID);..}
90c0: 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20  ...mutex_retval 
90d0: 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c  = cackey_mutex_l
90e0: 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f  ock(cackey_biglo
90f0: 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f  ck);..if (mutex_
9100: 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09  retval != 0) {..
9110: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
9120: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f  INTF("Error.  Lo
9130: 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b  cking failed.");
9140: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47  ....return(CKR_G
9150: 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09  ENERAL_ERROR);..
9160: 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f  }...if (!cackey_
9170: 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
9180: 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63  n].active) {...c
9190: 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f  ackey_mutex_unlo
91a0: 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63  ck(cackey_bigloc
91b0: 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45  k);....CACKEY_DE
91c0: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
91d0: 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20  r.  Session not 
91e0: 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09  active.");......
91f0: 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49  return(CKR_SESSI
9200: 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49  ON_HANDLE_INVALI
9210: 44 29 3b 0a 09 7d 0a 0a 09 70 49 6e 66 6f 2d 3e  D);..}...pInfo->
9220: 73 6c 6f 74 49 44 20 3d 20 63 61 63 6b 65 79 5f  slotID = cackey_
9230: 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
9240: 6e 5d 2e 73 6c 6f 74 49 44 3b 0a 09 70 49 6e 66  n].slotID;..pInf
9250: 6f 2d 3e 73 74 61 74 65 20 3d 20 63 61 63 6b 65  o->state = cacke
9260: 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73  y_sessions[hSess
9270: 69 6f 6e 5d 2e 73 74 61 74 65 3b 0a 09 70 49 6e  ion].state;..pIn
9280: 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 63 61 63 6b  fo->flags = cack
9290: 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
92a0: 73 69 6f 6e 5d 2e 66 6c 61 67 73 3b 0a 09 70 49  sion].flags;..pI
92b0: 6e 66 6f 2d 3e 75 6c 44 65 76 69 63 65 45 72 72  nfo->ulDeviceErr
92c0: 6f 72 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73  or = cackey_sess
92d0: 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 75  ions[hSession].u
92e0: 6c 44 65 76 69 63 65 45 72 72 6f 72 3b 0a 0a 09  lDeviceError;...
92f0: 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63  mutex_retval = c
9300: 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f  ackey_mutex_unlo
9310: 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63  ck(cackey_bigloc
9320: 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72  k);..if (mutex_r
9330: 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09  etval != 0) {...
9340: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
9350: 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c  NTF("Error.  Unl
9360: 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29  ocking failed.")
9370: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  ;....return(CKR_
9380: 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a  GENERAL_ERROR);.
9390: 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  .}...CACKEY_DEBU
93a0: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e  G_PRINTF("Return
93b0: 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22  ing CKR_OK (%i)"
93c0: 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74  , CKR_OK);...ret
93d0: 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a  urn(CKR_OK);.}..
93e0: 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49  CK_DEFINE_FUNCTI
93f0: 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 4f  ON(CK_RV, C_GetO
9400: 70 65 72 61 74 69 6f 6e 53 74 61 74 65 29 28 43  perationState)(C
9410: 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45  K_SESSION_HANDLE
9420: 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59   hSession, CK_BY
9430: 54 45 5f 50 54 52 20 70 4f 70 65 72 61 74 69 6f  TE_PTR pOperatio
9440: 6e 53 74 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47  nState, CK_ULONG
9450: 5f 50 54 52 20 70 75 6c 4f 70 65 72 61 74 69 6f  _PTR pulOperatio
9460: 6e 53 74 61 74 65 4c 65 6e 29 20 7b 0a 09 43 41  nStateLen) {..CA
9470: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
9480: 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09  F("Called.");...
9490: 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74  if (!cackey_init
94a0: 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43  ialized) {...CAC
94b0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
94c0: 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e  ("Error.  Not in
94d0: 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09  itialized.");...
94e0: 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50  .return(CKR_CRYP
94f0: 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c  TOKI_NOT_INITIAL
9500: 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b  IZED);..}...CACK
9510: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
9520: 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46  "Returning CKR_F
9530: 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50  UNCTION_NOT_SUPP
9540: 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52  ORTED (%i)", CKR
9550: 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55  _FUNCTION_NOT_SU
9560: 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75  PPORTED);...retu
9570: 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  rn(CKR_FUNCTION_
9580: 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a  NOT_SUPPORTED);.
9590: 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e  }..CK_DEFINE_FUN
95a0: 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53  CTION(CK_RV, C_S
95b0: 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65  etOperationState
95c0: 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e  )(CK_SESSION_HAN
95d0: 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b  DLE hSession, CK
95e0: 5f 42 59 54 45 5f 50 54 52 20 70 4f 70 65 72 61  _BYTE_PTR pOpera
95f0: 74 69 6f 6e 53 74 61 74 65 2c 20 43 4b 5f 55 4c  tionState, CK_UL
9600: 4f 4e 47 20 75 6c 4f 70 65 72 61 74 69 6f 6e 53  ONG ulOperationS
9610: 74 61 74 65 4c 65 6e 2c 20 43 4b 5f 4f 42 4a 45  tateLen, CK_OBJE
9620: 43 54 5f 48 41 4e 44 4c 45 20 68 45 6e 63 72 79  CT_HANDLE hEncry
9630: 70 74 69 6f 6e 4b 65 79 2c 20 43 4b 5f 4f 42 4a  ptionKey, CK_OBJ
9640: 45 43 54 5f 48 41 4e 44 4c 45 20 68 41 75 74 68  ECT_HANDLE hAuth
9650: 65 6e 74 69 63 61 74 69 6f 6e 4b 65 79 29 20 7b  enticationKey) {
9660: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
9670: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29  RINTF("Called.")
9680: 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f  ;...if (!cackey_
9690: 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09  initialized) {..
96a0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
96b0: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f  INTF("Error.  No
96c0: 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29  t initialized.")
96d0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  ;....return(CKR_
96e0: 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49  CRYPTOKI_NOT_INI
96f0: 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09  TIALIZED);..}...
9700: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
9710: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43  NTF("Returning C
9720: 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
9730: 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c  SUPPORTED (%i)",
9740: 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f   CKR_FUNCTION_NO
9750: 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09  T_SUPPORTED);...
9760: 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54  return(CKR_FUNCT
9770: 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
9780: 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45  D);.}..CK_DEFINE
9790: 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c  _FUNCTION(CK_RV,
97a0: 20 43 5f 4c 6f 67 69 6e 29 28 43 4b 5f 53 45 53   C_Login)(CK_SES
97b0: 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73  SION_HANDLE hSes
97c0: 73 69 6f 6e 2c 20 43 4b 5f 55 53 45 52 5f 54 59  sion, CK_USER_TY
97d0: 50 45 20 75 73 65 72 54 79 70 65 2c 20 43 4b 5f  PE userType, CK_
97e0: 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 50 69  UTF8CHAR_PTR pPi
97f0: 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 69  n, CK_ULONG ulPi
9800: 6e 4c 65 6e 29 20 7b 0a 09 69 6e 74 20 6d 75 74  nLen) {..int mut
9810: 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43  ex_retval;...CAC
9820: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
9830: 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69  ("Called.");...i
9840: 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69  f (!cackey_initi
9850: 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b  alized) {...CACK
9860: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
9870: 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69  "Error.  Not ini
9880: 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09  tialized.");....
9890: 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54  return(CKR_CRYPT
98a0: 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49  OKI_NOT_INITIALI
98b0: 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68  ZED);..}...if (h
98c0: 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20  Session == 0 || 
98d0: 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a  hSession >= (siz
98e0: 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69  eof(cackey_sessi
98f0: 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61  ons) / sizeof(ca
9900: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d  ckey_sessions[0]
9910: 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  ))) {...CACKEY_D
9920: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
9930: 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74  or.  Session out
9940: 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09   of range.");...
9950: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45  ...return(CKR_SE
9960: 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56  SSION_HANDLE_INV
9970: 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28  ALID);..}...if (
9980: 75 73 65 72 54 79 70 65 20 21 3d 20 43 4b 55 5f  userType != CKU_
9990: 55 53 45 52 29 20 7b 0a 09 09 43 41 43 4b 45 59  USER) {...CACKEY
99a0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
99b0: 72 72 6f 72 2e 20 20 57 65 20 6f 6e 6c 79 20 73  rror.  We only s
99c0: 75 70 70 6f 72 74 20 55 53 45 52 20 6d 6f 64 65  upport USER mode
99d0: 2c 20 61 73 6b 65 64 20 66 6f 72 20 25 6c 75 20  , asked for %lu 
99e0: 6d 6f 64 65 2e 22 2c 20 28 75 6e 73 69 67 6e 65  mode.", (unsigne
99f0: 64 20 6c 6f 6e 67 29 20 75 73 65 72 54 79 70 65  d long) userType
9a00: 29 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  )....return(CKR_
9a10: 55 53 45 52 5f 54 59 50 45 5f 49 4e 56 41 4c 49  USER_TYPE_INVALI
9a20: 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72  D);..}...mutex_r
9a30: 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d  etval = cackey_m
9a40: 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79  utex_lock(cackey
9a50: 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28  _biglock);..if (
9a60: 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20  mutex_retval != 
9a70: 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45  0) {...CACKEY_DE
9a80: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
9a90: 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c  r.  Locking fail
9aa0: 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  ed.");....return
9ab0: 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52  (CKR_GENERAL_ERR
9ac0: 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63  OR);..}...if (!c
9ad0: 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68  ackey_sessions[h
9ae0: 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29  Session].active)
9af0: 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65   {...cackey_mute
9b00: 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f  x_unlock(cackey_
9b10: 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43  biglock);....CAC
9b20: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
9b30: 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f  ("Error.  Sessio
9b40: 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b  n not active.");
9b50: 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  ......return(CKR
9b60: 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f  _SESSION_HANDLE_
9b70: 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 63  INVALID);..}...c
9b80: 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68  ackey_sessions[h
9b90: 53 65 73 73 69 6f 6e 5d 2e 73 74 61 74 65 20 3d  Session].state =
9ba0: 20 43 4b 53 5f 52 4f 5f 55 53 45 52 5f 46 55 4e   CKS_RO_USER_FUN
9bb0: 43 54 49 4f 4e 53 3b 0a 0a 09 6d 75 74 65 78 5f  CTIONS;...mutex_
9bc0: 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f  retval = cackey_
9bd0: 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63  mutex_unlock(cac
9be0: 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69  key_biglock);..i
9bf0: 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20  f (mutex_retval 
9c00: 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59  != 0) {...CACKEY
9c10: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
9c20: 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67  rror.  Unlocking
9c30: 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72   failed.");....r
9c40: 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41  eturn(CKR_GENERA
9c50: 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43  L_ERROR);..}...C
9c60: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
9c70: 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b  TF("Returning CK
9c80: 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f  R_OK (%i)", CKR_
9c90: 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b  OK);...return(CK
9ca0: 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46  R_OK);.}..CK_DEF
9cb0: 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f  INE_FUNCTION(CK_
9cc0: 52 56 2c 20 43 5f 4c 6f 67 6f 75 74 29 28 43 4b  RV, C_Logout)(CK
9cd0: 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20  _SESSION_HANDLE 
9ce0: 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09 69 6e 74  hSession) {..int
9cf0: 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a   mutex_retval;..
9d00: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
9d10: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b  INTF("Called.");
9d20: 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69  ...if (!cackey_i
9d30: 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09  nitialized) {...
9d40: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
9d50: 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74  NTF("Error.  Not
9d60: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b   initialized.");
9d70: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43  ....return(CKR_C
9d80: 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54  RYPTOKI_NOT_INIT
9d90: 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69  IALIZED);..}...i
9da0: 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30  f (hSession == 0
9db0: 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20   || hSession >= 
9dc0: 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73  (sizeof(cackey_s
9dd0: 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f  essions) / sizeo
9de0: 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  f(cackey_session
9df0: 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b  s[0]))) {...CACK
9e00: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
9e10: 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e  "Error.  Session
9e20: 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29   out of range.")
9e30: 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b  ;......return(CK
9e40: 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45  R_SESSION_HANDLE
9e50: 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09  _INVALID);..}...
9e60: 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63  mutex_retval = c
9e70: 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b  ackey_mutex_lock
9e80: 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29  (cackey_biglock)
9e90: 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74  ;..if (mutex_ret
9ea0: 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41  val != 0) {...CA
9eb0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
9ec0: 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69  F("Error.  Locki
9ed0: 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09  ng failed.");...
9ee0: 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45  .return(CKR_GENE
9ef0: 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  RAL_ERROR);..}..
9f00: 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73  .if (!cackey_ses
9f10: 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e  sions[hSession].
9f20: 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b  active) {...cack
9f30: 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28  ey_mutex_unlock(
9f40: 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b  cackey_biglock);
9f50: 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
9f60: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
9f70: 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74   Session not act
9f80: 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74  ive.");......ret
9f90: 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f  urn(CKR_SESSION_
9fa0: 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b  HANDLE_INVALID);
9fb0: 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73  ..}...cackey_ses
9fc0: 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e  sions[hSession].
9fd0: 73 74 61 74 65 20 3d 20 43 4b 53 5f 52 4f 5f 50  state = CKS_RO_P
9fe0: 55 42 4c 49 43 5f 53 45 53 53 49 4f 4e 3b 0a 0a  UBLIC_SESSION;..
9ff0: 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20  .mutex_retval = 
a000: 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c  cackey_mutex_unl
a010: 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f  ock(cackey_biglo
a020: 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f  ck);..if (mutex_
a030: 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09  retval != 0) {..
a040: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
a050: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e  INTF("Error.  Un
a060: 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22  locking failed."
a070: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
a080: 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b  _GENERAL_ERROR);
a090: 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  ..}...CACKEY_DEB
a0a0: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72  UG_PRINTF("Retur
a0b0: 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29  ning CKR_OK (%i)
a0c0: 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65  ", CKR_OK);...re
a0d0: 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a  turn(CKR_OK);.}.
a0e0: 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54  .CK_DEFINE_FUNCT
a0f0: 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 43 72 65  ION(CK_RV, C_Cre
a100: 61 74 65 4f 62 6a 65 63 74 29 28 43 4b 5f 53 45  ateObject)(CK_SE
a110: 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65  SSION_HANDLE hSe
a120: 73 73 69 6f 6e 2c 20 43 4b 5f 41 54 54 52 49 42  ssion, CK_ATTRIB
a130: 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74  UTE_PTR pTemplat
a140: 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f  e, CK_ULONG ulCo
a150: 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48  unt, CK_OBJECT_H
a160: 41 4e 44 4c 45 5f 50 54 52 20 70 68 4f 62 6a 65  ANDLE_PTR phObje
a170: 63 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45  ct) {..CACKEY_DE
a180: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c  BUG_PRINTF("Call
a190: 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61  ed.");...if (!ca
a1a0: 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64  ckey_initialized
a1b0: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  ) {...CACKEY_DEB
a1c0: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
a1d0: 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  .  Not initializ
a1e0: 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  ed.");....return
a1f0: 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f  (CKR_CRYPTOKI_NO
a200: 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a  T_INITIALIZED);.
a210: 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  .}...CACKEY_DEBU
a220: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e  G_PRINTF("Return
a230: 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  ing CKR_FUNCTION
a240: 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28  _NOT_SUPPORTED (
a250: 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49  %i)", CKR_FUNCTI
a260: 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44  ON_NOT_SUPPORTED
a270: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f  );...return(CKR_
a280: 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
a290: 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44  PORTED);.}..CK_D
a2a0: 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43  EFINE_FUNCTION(C
a2b0: 4b 5f 52 56 2c 20 43 5f 43 6f 70 79 4f 62 6a 65  K_RV, C_CopyObje
a2c0: 63 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48  ct)(CK_SESSION_H
a2d0: 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20  ANDLE hSession, 
a2e0: 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45  CK_OBJECT_HANDLE
a2f0: 20 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 41 54 54   hObject, CK_ATT
a300: 52 49 42 55 54 45 5f 50 54 52 20 70 54 65 6d 70  RIBUTE_PTR pTemp
a310: 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75  late, CK_ULONG u
a320: 6c 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43  lCount, CK_OBJEC
a330: 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 4e  T_HANDLE_PTR phN
a340: 65 77 4f 62 6a 65 63 74 29 20 7b 0a 09 43 41 43  ewObject) {..CAC
a350: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
a360: 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69  ("Called.");...i
a370: 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69  f (!cackey_initi
a380: 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b  alized) {...CACK
a390: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
a3a0: 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69  "Error.  Not ini
a3b0: 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09  tialized.");....
a3c0: 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54  return(CKR_CRYPT
a3d0: 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49  OKI_NOT_INITIALI
a3e0: 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45  ZED);..}...CACKE
a3f0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
a400: 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55  Returning CKR_FU
a410: 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
a420: 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f  RTED (%i)", CKR_
a430: 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
a440: 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72  PORTED);...retur
a450: 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  n(CKR_FUNCTION_N
a460: 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d  OT_SUPPORTED);.}
a470: 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43  ..CK_DEFINE_FUNC
a480: 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65  TION(CK_RV, C_De
a490: 73 74 72 6f 79 4f 62 6a 65 63 74 29 28 43 4b 5f  stroyObject)(CK_
a4a0: 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68  SESSION_HANDLE h
a4b0: 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45  Session, CK_OBJE
a4c0: 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63  CT_HANDLE hObjec
a4d0: 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42  t) {..CACKEY_DEB
a4e0: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65  UG_PRINTF("Calle
a4f0: 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63  d.");...if (!cac
a500: 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29  key_initialized)
a510: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
a520: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
a530: 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65    Not initialize
a540: 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  d.");....return(
a550: 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54  CKR_CRYPTOKI_NOT
a560: 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09  _INITIALIZED);..
a570: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  }...CACKEY_DEBUG
a580: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69  _PRINTF("Returni
a590: 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  ng CKR_FUNCTION_
a5a0: 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25  NOT_SUPPORTED (%
a5b0: 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f  i)", CKR_FUNCTIO
a5c0: 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29  N_NOT_SUPPORTED)
a5d0: 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46  ;...return(CKR_F
a5e0: 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50  UNCTION_NOT_SUPP
a5f0: 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45  ORTED);.}..CK_DE
a600: 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b  FINE_FUNCTION(CK
a610: 5f 52 56 2c 20 43 5f 47 65 74 4f 62 6a 65 63 74  _RV, C_GetObject
a620: 53 69 7a 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e  Size)(CK_SESSION
a630: 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e  _HANDLE hSession
a640: 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44  , CK_OBJECT_HAND
a650: 4c 45 20 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 55  LE hObject, CK_U
a660: 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 7a 65  LONG_PTR pulSize
a670: 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  ) {..CACKEY_DEBU
a680: 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64  G_PRINTF("Called
a690: 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b  .");...if (!cack
a6a0: 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20  ey_initialized) 
a6b0: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
a6c0: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
a6d0: 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64   Not initialized
a6e0: 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  .");....return(C
a6f0: 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f  KR_CRYPTOKI_NOT_
a700: 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d  INITIALIZED);..}
a710: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
a720: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
a730: 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  g CKR_FUNCTION_N
a740: 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69  OT_SUPPORTED (%i
a750: 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  )", CKR_FUNCTION
a760: 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b  _NOT_SUPPORTED);
a770: 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55  ...return(CKR_FU
a780: 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
a790: 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46  RTED);.}..CK_DEF
a7a0: 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f  INE_FUNCTION(CK_
a7b0: 52 56 2c 20 43 5f 47 65 74 41 74 74 72 69 62 75  RV, C_GetAttribu
a7c0: 74 65 56 61 6c 75 65 29 28 43 4b 5f 53 45 53 53  teValue)(CK_SESS
a7d0: 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73  ION_HANDLE hSess
a7e0: 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48  ion, CK_OBJECT_H
a7f0: 41 4e 44 4c 45 20 68 4f 62 6a 65 63 74 2c 20 43  ANDLE hObject, C
a800: 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20  K_ATTRIBUTE_PTR 
a810: 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c  pTemplate, CK_UL
a820: 4f 4e 47 20 75 6c 43 6f 75 6e 74 29 20 7b 0a 09  ONG ulCount) {..
a830: 43 4b 5f 41 54 54 52 49 42 55 54 45 20 2a 63 75  CK_ATTRIBUTE *cu
a840: 72 72 5f 61 74 74 72 3b 0a 09 73 74 72 75 63 74  rr_attr;..struct
a850: 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79   cackey_identity
a860: 20 2a 69 64 65 6e 74 69 74 79 3b 0a 09 75 6e 73   *identity;..uns
a870: 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64 65 6e 74  igned long ident
a880: 69 74 79 5f 69 64 78 2c 20 61 74 74 72 5f 69 64  ity_idx, attr_id
a890: 78 2c 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78  x, sess_attr_idx
a8a0: 2c 20 6e 75 6d 5f 69 64 73 3b 0a 09 69 6e 74 20  , num_ids;..int 
a8b0: 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 09 43  mutex_retval;..C
a8c0: 4b 5f 52 56 20 72 65 74 76 61 6c 20 3d 20 43 4b  K_RV retval = CK
a8d0: 52 5f 4f 4b 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50  R_OK;..CK_VOID_P
a8e0: 54 52 20 70 56 61 6c 75 65 3b 0a 09 43 4b 5f 55  TR pValue;..CK_U
a8f0: 4c 4f 4e 47 20 75 6c 56 61 6c 75 65 4c 65 6e 3b  LONG ulValueLen;
a900: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
a910: 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22  PRINTF("Called."
a920: 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79  );...if (!cackey
a930: 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a  _initialized) {.
a940: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
a950: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e  RINTF("Error.  N
a960: 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22  ot initialized."
a970: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
a980: 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e  _CRYPTOKI_NOT_IN
a990: 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a  ITIALIZED);..}..
a9a0: 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d  .if (hSession ==
a9b0: 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e   0 || hSession >
a9c0: 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79  = (sizeof(cackey
a9d0: 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a  _sessions) / siz
a9e0: 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69  eof(cackey_sessi
a9f0: 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41  ons[0]))) {...CA
aa00: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
aa10: 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69  F("Error.  Sessi
aa20: 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e  on out of range.
aa30: 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28  ");......return(
aa40: 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44  CKR_SESSION_HAND
aa50: 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a  LE_INVALID);..}.
aa60: 0a 09 69 66 20 28 68 4f 62 6a 65 63 74 20 3d 3d  ..if (hObject ==
aa70: 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44   0) {...CACKEY_D
aa80: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
aa90: 6f 72 2e 20 20 4f 62 6a 65 63 74 20 68 61 6e 64  or.  Object hand
aaa0: 6c 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e  le out of range.
aab0: 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28  ");......return(
aac0: 43 4b 52 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c  CKR_OBJECT_HANDL
aad0: 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a  E_INVALID);..}..
aae0: 09 69 66 20 28 75 6c 43 6f 75 6e 74 20 3d 3d 20  .if (ulCount == 
aaf0: 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 74 20  0) {.../* Short 
ab00: 63 69 72 63 75 69 74 2c 20 69 66 20 7a 65 72 6f  circuit, if zero
ab10: 20 6f 62 6a 65 63 74 73 20 77 65 72 65 20 73 70   objects were sp
ab20: 65 63 69 66 69 65 64 20 72 65 74 75 72 6e 20 7a  ecified return z
ab30: 65 72 6f 20 69 74 65 6d 73 20 69 6d 6d 65 64 69  ero items immedi
ab40: 61 74 65 6c 79 20 2a 2f 0a 09 09 43 41 43 4b 45  ately */...CACKE
ab50: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
ab60: 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b  Returning CKR_OK
ab70: 20 28 25 69 29 20 28 73 68 6f 72 74 20 63 69 72   (%i) (short cir
ab80: 63 75 69 74 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b  cuit)", CKR_OK);
ab90: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f  ....return(CKR_O
aba0: 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 54 65  K);..}...if (pTe
abb0: 6d 70 6c 61 74 65 20 3d 3d 20 4e 55 4c 4c 29 20  mplate == NULL) 
abc0: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
abd0: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
abe0: 20 70 54 65 6d 70 6c 61 74 65 20 69 73 20 4e 55   pTemplate is NU
abf0: 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  LL.");....return
ac00: 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42  (CKR_ARGUMENTS_B
ac10: 41 44 29 3b 0a 09 7d 0a 0a 09 69 64 65 6e 74 69  AD);..}...identi
ac20: 74 79 5f 69 64 78 20 3d 20 68 4f 62 6a 65 63 74  ty_idx = hObject
ac30: 20 2d 20 31 3b 0a 0a 09 6d 75 74 65 78 5f 72 65   - 1;...mutex_re
ac40: 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75  tval = cackey_mu
ac50: 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f  tex_lock(cackey_
ac60: 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d  biglock);..if (m
ac70: 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30  utex_retval != 0
ac80: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  ) {...CACKEY_DEB
ac90: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
aca0: 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65  .  Locking faile
acb0: 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  d.");....return(
acc0: 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f  CKR_GENERAL_ERRO
acd0: 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61  R);..}...if (!ca
ace0: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53  ckey_sessions[hS
acf0: 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20  ession].active) 
ad00: 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78  {...cackey_mutex
ad10: 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62  _unlock(cackey_b
ad20: 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b  iglock);....CACK
ad30: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
ad40: 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e  "Error.  Session
ad50: 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a   not active.");.
ad60: 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  .....return(CKR_
ad70: 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49  SESSION_HANDLE_I
ad80: 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6e 75  NVALID);..}...nu
ad90: 6d 5f 69 64 73 20 3d 20 63 61 63 6b 65 79 5f 73  m_ids = cackey_s
ada0: 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e  essions[hSession
adb0: 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75  ].identities_cou
adc0: 6e 74 3b 0a 0a 09 69 66 20 28 69 64 65 6e 74 69  nt;...if (identi
add0: 74 79 5f 69 64 78 20 3e 3d 20 6e 75 6d 5f 69 64  ty_idx >= num_id
ade0: 73 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75  s) {...cackey_mu
adf0: 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65  tex_unlock(cacke
ae00: 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43  y_biglock);....C
ae10: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
ae20: 54 46 28 22 45 72 72 6f 72 2e 20 20 4f 62 6a 65  TF("Error.  Obje
ae30: 63 74 20 68 61 6e 64 6c 65 20 6f 75 74 20 6f 66  ct handle out of
ae40: 20 72 61 6e 67 65 2e 20 20 69 64 65 6e 74 69 74   range.  identit
ae50: 79 5f 69 64 78 20 3d 20 25 6c 75 2c 20 6e 75 6d  y_idx = %lu, num
ae60: 5f 69 64 73 20 3d 20 25 6c 75 2e 22 2c 20 28 75  _ids = %lu.", (u
ae70: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 69 64  nsigned long) id
ae80: 65 6e 74 69 74 79 5f 69 64 78 2c 20 28 75 6e 73  entity_idx, (uns
ae90: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 6e 75 6d 5f  igned long) num_
aea0: 69 64 73 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  ids);....return(
aeb0: 43 4b 52 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c  CKR_OBJECT_HANDL
aec0: 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a  E_INVALID);..}..
aed0: 09 69 64 65 6e 74 69 74 79 20 3d 20 26 63 61 63  .identity = &cac
aee0: 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65  key_sessions[hSe
aef0: 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65  ssion].identitie
af00: 73 5b 69 64 65 6e 74 69 74 79 5f 69 64 78 5d 3b  s[identity_idx];
af10: 0a 0a 09 66 6f 72 20 28 61 74 74 72 5f 69 64 78  ...for (attr_idx
af20: 20 3d 20 30 3b 20 61 74 74 72 5f 69 64 78 20 3c   = 0; attr_idx <
af30: 20 75 6c 43 6f 75 6e 74 3b 20 61 74 74 72 5f 69   ulCount; attr_i
af40: 64 78 2b 2b 29 20 7b 0a 09 09 63 75 72 72 5f 61  dx++) {...curr_a
af50: 74 74 72 20 3d 20 26 70 54 65 6d 70 6c 61 74 65  ttr = &pTemplate
af60: 5b 61 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 70  [attr_idx];....p
af70: 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09  Value = NULL;...
af80: 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 28 43 4b  ulValueLen = (CK
af90: 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 0a 09 09 43 41  _LONG) -1;....CA
afa0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
afb0: 46 28 22 4c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61  F("Looking for a
afc0: 74 74 72 69 62 75 74 65 20 30 78 25 30 38 6c 78  ttribute 0x%08lx
afd0: 20 28 69 64 65 6e 74 69 74 79 3a 25 6c 75 29 20   (identity:%lu) 
afe0: 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20  ...", (unsigned 
aff0: 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 2d  long) curr_attr-
b000: 3e 74 79 70 65 2c 20 28 75 6e 73 69 67 6e 65 64  >type, (unsigned
b010: 20 6c 6f 6e 67 29 20 69 64 65 6e 74 69 74 79 5f   long) identity_
b020: 69 64 78 29 3b 0a 0a 09 09 66 6f 72 20 28 73 65  idx);....for (se
b030: 73 73 5f 61 74 74 72 5f 69 64 78 20 3d 20 30 3b  ss_attr_idx = 0;
b040: 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78 20 3c   sess_attr_idx <
b050: 20 69 64 65 6e 74 69 74 79 2d 3e 61 74 74 72 69   identity->attri
b060: 62 75 74 65 73 5f 63 6f 75 6e 74 3b 20 73 65 73  butes_count; ses
b070: 73 5f 61 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a  s_attr_idx++) {.
b080: 09 09 09 69 66 20 28 69 64 65 6e 74 69 74 79 2d  ...if (identity-
b090: 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 73  >attributes[sess
b0a0: 5f 61 74 74 72 5f 69 64 78 5d 2e 74 79 70 65 20  _attr_idx].type 
b0b0: 3d 3d 20 63 75 72 72 5f 61 74 74 72 2d 3e 74 79  == curr_attr->ty
b0c0: 70 65 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59  pe) {.....CACKEY
b0d0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20  _DEBUG_PRINTF(" 
b0e0: 2e 2e 2e 20 66 6f 75 6e 64 20 69 74 2c 20 70 56  ... found it, pV
b0f0: 61 6c 75 65 20 3d 20 25 70 2c 20 75 6c 56 61 6c  alue = %p, ulVal
b100: 75 65 4c 65 6e 20 3d 20 25 6c 75 22 2c 20 69 64  ueLen = %lu", id
b110: 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 75 74  entity->attribut
b120: 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78  es[sess_attr_idx
b130: 5d 2e 70 56 61 6c 75 65 2c 20 69 64 65 6e 74 69  ].pValue, identi
b140: 74 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73  ty->attributes[s
b150: 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c  ess_attr_idx].ul
b160: 56 61 6c 75 65 4c 65 6e 29 3b 0a 09 09 09 09 0a  ValueLen);......
b170: 09 09 09 09 70 56 61 6c 75 65 20 3d 20 69 64 65  ....pValue = ide
b180: 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 75 74 65  ntity->attribute
b190: 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d  s[sess_attr_idx]
b1a0: 2e 70 56 61 6c 75 65 3b 0a 09 09 09 09 75 6c 56  .pValue;.....ulV
b1b0: 61 6c 75 65 4c 65 6e 20 3d 20 69 64 65 6e 74 69  alueLen = identi
b1c0: 74 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73  ty->attributes[s
b1d0: 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c  ess_attr_idx].ul
b1e0: 56 61 6c 75 65 4c 65 6e 3b 0a 09 09 09 7d 0a 09  ValueLen;....}..
b1f0: 09 7d 0a 0a 09 09 69 66 20 28 63 75 72 72 5f 61  .}....if (curr_a
b200: 74 74 72 2d 3e 70 56 61 6c 75 65 20 26 26 20 70  ttr->pValue && p
b210: 56 61 6c 75 65 29 20 7b 0a 09 09 09 69 66 20 28  Value) {....if (
b220: 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c  curr_attr->ulVal
b230: 75 65 4c 65 6e 20 3e 3d 20 75 6c 56 61 6c 75 65  ueLen >= ulValue
b240: 4c 65 6e 29 20 7b 0a 09 09 09 09 6d 65 6d 63 70  Len) {.....memcp
b250: 79 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61  y(curr_attr->pVa
b260: 6c 75 65 2c 20 70 56 61 6c 75 65 2c 20 75 6c 56  lue, pValue, ulV
b270: 61 6c 75 65 4c 65 6e 29 3b 0a 09 09 09 7d 20 65  alueLen);....} e
b280: 6c 73 65 20 7b 0a 09 09 09 09 75 6c 56 61 6c 75  lse {.....ulValu
b290: 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e 47 29  eLen = (CK_LONG)
b2a0: 20 2d 31 3b 0a 0a 09 09 09 09 72 65 74 76 61 6c   -1;......retval
b2b0: 20 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f   = CKR_BUFFER_TO
b2c0: 4f 5f 53 4d 41 4c 4c 3b 0a 09 09 09 7d 0a 09 09  O_SMALL;....}...
b2d0: 7d 0a 0a 09 09 63 75 72 72 5f 61 74 74 72 2d 3e  }....curr_attr->
b2e0: 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 75 6c 56  ulValueLen = ulV
b2f0: 61 6c 75 65 4c 65 6e 3b 0a 09 7d 0a 0a 09 6d 75  alueLen;..}...mu
b300: 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63  tex_retval = cac
b310: 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b  key_mutex_unlock
b320: 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29  (cackey_biglock)
b330: 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74  ;..if (mutex_ret
b340: 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41  val != 0) {...CA
b350: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
b360: 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63  F("Error.  Unloc
b370: 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a  king failed.");.
b380: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45  ...return(CKR_GE
b390: 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  NERAL_ERROR);..}
b3a0: 0a 0a 09 69 66 20 28 72 65 74 76 61 6c 20 3d 3d  ...if (retval ==
b3b0: 20 43 4b 52 5f 41 54 54 52 49 42 55 54 45 5f 54   CKR_ATTRIBUTE_T
b3c0: 59 50 45 5f 49 4e 56 41 4c 49 44 29 20 7b 0a 09  YPE_INVALID) {..
b3d0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
b3e0: 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20  INTF("Returning 
b3f0: 43 4b 52 5f 41 54 54 52 49 42 55 54 45 5f 54 59  CKR_ATTRIBUTE_TY
b400: 50 45 5f 49 4e 56 41 4c 49 44 20 28 25 69 29 22  PE_INVALID (%i)"
b410: 2c 20 28 69 6e 74 29 20 72 65 74 76 61 6c 29 3b  , (int) retval);
b420: 0a 09 7d 20 65 6c 73 65 20 69 66 20 28 72 65 74  ..} else if (ret
b430: 76 61 6c 20 3d 3d 20 43 4b 52 5f 42 55 46 46 45  val == CKR_BUFFE
b440: 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 20 7b 0a 09  R_TOO_SMALL) {..
b450: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
b460: 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20  INTF("Returning 
b470: 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53  CKR_BUFFER_TOO_S
b480: 4d 41 4c 4c 20 28 25 69 29 22 2c 20 28 69 6e 74  MALL (%i)", (int
b490: 29 20 72 65 74 76 61 6c 29 3b 0a 09 7d 20 65 6c  ) retval);..} el
b4a0: 73 65 20 69 66 20 28 72 65 74 76 61 6c 20 3d 3d  se if (retval ==
b4b0: 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43   CKR_OK) {...CAC
b4c0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
b4d0: 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f  ("Returning CKR_
b4e0: 4f 4b 20 28 25 69 29 22 2c 20 28 69 6e 74 29 20  OK (%i)", (int) 
b4f0: 72 65 74 76 61 6c 29 3b 0a 09 7d 20 65 6c 73 65  retval);..} else
b500: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
b510: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e  G_PRINTF("Return
b520: 69 6e 67 20 25 69 22 2c 20 28 69 6e 74 29 20 72  ing %i", (int) r
b530: 65 74 76 61 6c 29 3b 0a 09 7d 0a 0a 09 72 65 74  etval);..}...ret
b540: 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a  urn(retval);.}..
b550: 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49  CK_DEFINE_FUNCTI
b560: 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 74 41  ON(CK_RV, C_SetA
b570: 74 74 72 69 62 75 74 65 56 61 6c 75 65 29 28 43  ttributeValue)(C
b580: 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45  K_SESSION_HANDLE
b590: 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42   hSession, CK_OB
b5a0: 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a  JECT_HANDLE hObj
b5b0: 65 63 74 2c 20 43 4b 5f 41 54 54 52 49 42 55 54  ect, CK_ATTRIBUT
b5c0: 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c  E_PTR pTemplate,
b5d0: 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e   CK_ULONG ulCoun
b5e0: 74 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42  t) {..CACKEY_DEB
b5f0: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65  UG_PRINTF("Calle
b600: 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63  d.");...if (!cac
b610: 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29  key_initialized)
b620: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
b630: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
b640: 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65    Not initialize
b650: 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  d.");....return(
b660: 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54  CKR_CRYPTOKI_NOT
b670: 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09  _INITIALIZED);..
b680: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  }...CACKEY_DEBUG
b690: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69  _PRINTF("Returni
b6a0: 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  ng CKR_FUNCTION_
b6b0: 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25  NOT_SUPPORTED (%
b6c0: 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f  i)", CKR_FUNCTIO
b6d0: 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29  N_NOT_SUPPORTED)
b6e0: 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46  ;...return(CKR_F
b6f0: 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50  UNCTION_NOT_SUPP
b700: 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45  ORTED);.}..CK_DE
b710: 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b  FINE_FUNCTION(CK
b720: 5f 52 56 2c 20 43 5f 46 69 6e 64 4f 62 6a 65 63  _RV, C_FindObjec
b730: 74 73 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49  tsInit)(CK_SESSI
b740: 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69  ON_HANDLE hSessi
b750: 6f 6e 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45  on, CK_ATTRIBUTE
b760: 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20  _PTR pTemplate, 
b770: 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74  CK_ULONG ulCount
b780: 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72  ) {..int mutex_r
b790: 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f  etval;...CACKEY_
b7a0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61  DEBUG_PRINTF("Ca
b7b0: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21  lled.");...if (!
b7c0: 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a  cackey_initializ
b7d0: 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  ed) {...CACKEY_D
b7e0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
b7f0: 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c  or.  Not initial
b800: 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75  ized.");....retu
b810: 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f  rn(CKR_CRYPTOKI_
b820: 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29  NOT_INITIALIZED)
b830: 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73  ;..}...if (hSess
b840: 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73  ion == 0 || hSes
b850: 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28  sion >= (sizeof(
b860: 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29  cackey_sessions)
b870: 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79   / sizeof(cackey
b880: 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20  _sessions[0]))) 
b890: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
b8a0: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
b8b0: 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20   Session out of 
b8c0: 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72  range.");......r
b8d0: 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f  eturn(CKR_SESSIO
b8e0: 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44  N_HANDLE_INVALID
b8f0: 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65  );..}...mutex_re
b900: 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75  tval = cackey_mu
b910: 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f  tex_lock(cackey_
b920: 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d  biglock);..if (m
b930: 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30  utex_retval != 0
b940: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  ) {...CACKEY_DEB
b950: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
b960: 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65  .  Locking faile
b970: 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  d.");....return(
b980: 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f  CKR_GENERAL_ERRO
b990: 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61  R);..}...if (!ca
b9a0: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53  ckey_sessions[hS
b9b0: 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20  ession].active) 
b9c0: 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78  {...cackey_mutex
b9d0: 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62  _unlock(cackey_b
b9e0: 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b  iglock);....CACK
b9f0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
ba00: 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e  "Error.  Session
ba10: 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a   not active.");.
ba20: 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  .....return(CKR_
ba30: 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49  SESSION_HANDLE_I
ba40: 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66  NVALID);..}...if
ba50: 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e   (cackey_session
ba60: 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72  s[hSession].sear
ba70: 63 68 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63  ch_active) {...c
ba80: 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f  ackey_mutex_unlo
ba90: 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63  ck(cackey_bigloc
baa0: 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45  k);....CACKEY_DE
bab0: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
bac0: 72 2e 20 20 53 65 61 72 63 68 20 61 6c 72 65 61  r.  Search alrea
bad0: 64 79 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09  dy active.");...
bae0: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50  ...return(CKR_OP
baf0: 45 52 41 54 49 4f 4e 5f 41 43 54 49 56 45 29 3b  ERATION_ACTIVE);
bb00: 0a 09 7d 0a 0a 09 69 66 20 28 70 54 65 6d 70 6c  ..}...if (pTempl
bb10: 61 74 65 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09  ate != NULL) {..
bb20: 09 69 66 20 28 75 6c 43 6f 75 6e 74 20 21 3d 20  .if (ulCount != 
bb30: 30 29 20 7b 0a 09 09 09 63 61 63 6b 65 79 5f 73  0) {....cackey_s
bb40: 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e  essions[hSession
bb50: 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5f 63  ].search_query_c
bb60: 6f 75 6e 74 20 3d 20 75 6c 43 6f 75 6e 74 3b 0a  ount = ulCount;.
bb70: 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f  ...cackey_sessio
bb80: 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61  ns[hSession].sea
bb90: 72 63 68 5f 71 75 65 72 79 20 3d 20 6d 61 6c 6c  rch_query = mall
bba0: 6f 63 28 75 6c 43 6f 75 6e 74 20 2a 20 73 69 7a  oc(ulCount * siz
bbb0: 65 6f 66 28 2a 70 54 65 6d 70 6c 61 74 65 29 29  eof(*pTemplate))
bbc0: 3b 0a 0a 09 09 09 6d 65 6d 63 70 79 28 63 61 63  ;.....memcpy(cac
bbd0: 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65  key_sessions[hSe
bbe0: 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75  ssion].search_qu
bbf0: 65 72 79 2c 20 70 54 65 6d 70 6c 61 74 65 2c 20  ery, pTemplate, 
bc00: 75 6c 43 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66  ulCount * sizeof
bc10: 28 2a 70 54 65 6d 70 6c 61 74 65 29 29 3b 0a 09  (*pTemplate));..
bc20: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 63 61 63  .} else {....cac
bc30: 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65  key_sessions[hSe
bc40: 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75  ssion].search_qu
bc50: 65 72 79 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 09  ery_count = 0;..
bc60: 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  ..cackey_session
bc70: 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72  s[hSession].sear
bc80: 63 68 5f 71 75 65 72 79 20 3d 20 4e 55 4c 4c 3b  ch_query = NULL;
bc90: 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  ...}..} else {..
bca0: 09 69 66 20 28 75 6c 43 6f 75 6e 74 20 21 3d 20  .if (ulCount != 
bcb0: 30 29 20 7b 0a 09 09 09 63 61 63 6b 65 79 5f 6d  0) {....cackey_m
bcc0: 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b  utex_unlock(cack
bcd0: 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09  ey_biglock);....
bce0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
bcf0: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65  INTF("Error.  Se
bd00: 61 72 63 68 20 71 75 65 72 79 20 73 70 65 63 69  arch query speci
bd10: 66 69 65 64 20 61 73 20 4e 55 4c 4c 2c 20 62 75  fied as NULL, bu
bd20: 74 20 6e 75 6d 62 65 72 20 6f 66 20 71 75 65 72  t number of quer
bd30: 79 20 74 65 72 6d 73 20 6e 6f 74 20 73 70 65 63  y terms not spec
bd40: 69 66 69 65 64 20 61 73 20 30 2e 22 29 3b 0a 0a  ified as 0.");..
bd50: 09 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52  ...return(CKR_AR
bd60: 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 09  GUMENTS_BAD);...
bd70: 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 73  }....cackey_sess
bd80: 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73  ions[hSession].s
bd90: 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e  earch_query_coun
bda0: 74 20 3d 20 30 3b 0a 09 09 63 61 63 6b 65 79 5f  t = 0;...cackey_
bdb0: 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
bdc0: 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 20  n].search_query 
bdd0: 3d 20 4e 55 4c 4c 3b 0a 09 7d 0a 0a 09 63 61 63  = NULL;..}...cac
bde0: 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65  key_sessions[hSe
bdf0: 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63  ssion].search_ac
be00: 74 69 76 65 20 3d 20 31 3b 0a 09 63 61 63 6b 65  tive = 1;..cacke
be10: 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73  y_sessions[hSess
be20: 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 63 75 72 72  ion].search_curr
be30: 5f 69 64 20 3d 20 30 3b 0a 0a 09 6d 75 74 65 78  _id = 0;...mutex
be40: 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79  _retval = cackey
be50: 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61  _mutex_unlock(ca
be60: 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09  ckey_biglock);..
be70: 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c  if (mutex_retval
be80: 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45   != 0) {...CACKE
be90: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
bea0: 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e  Error.  Unlockin
beb0: 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09  g failed.");....
bec0: 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52  return(CKR_GENER
bed0: 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09  AL_ERROR);..}...
bee0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
bef0: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43  NTF("Returning C
bf00: 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52  KR_OK (%i)", CKR
bf10: 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  _OK);...return(C
bf20: 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45  KR_OK);.}..CK_DE
bf30: 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b  FINE_FUNCTION(CK
bf40: 5f 52 56 2c 20 43 5f 46 69 6e 64 4f 62 6a 65 63  _RV, C_FindObjec
bf50: 74 73 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48  ts)(CK_SESSION_H
bf60: 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20  ANDLE hSession, 
bf70: 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45  CK_OBJECT_HANDLE
bf80: 5f 50 54 52 20 70 68 4f 62 6a 65 63 74 2c 20 43  _PTR phObject, C
bf90: 4b 5f 55 4c 4f 4e 47 20 75 6c 4d 61 78 4f 62 6a  K_ULONG ulMaxObj
bfa0: 65 63 74 43 6f 75 6e 74 2c 20 43 4b 5f 55 4c 4f  ectCount, CK_ULO
bfb0: 4e 47 5f 50 54 52 20 70 75 6c 4f 62 6a 65 63 74  NG_PTR pulObject
bfc0: 43 6f 75 6e 74 29 20 7b 0a 09 73 74 72 75 63 74  Count) {..struct
bfd0: 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74 79   cackey_identity
bfe0: 20 2a 63 75 72 72 5f 69 64 3b 0a 09 43 4b 5f 41   *curr_id;..CK_A
bff0: 54 54 52 49 42 55 54 45 20 2a 63 75 72 72 5f 61  TTRIBUTE *curr_a
c000: 74 74 72 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 63  ttr;..CK_ULONG c
c010: 75 72 72 5f 69 64 5f 69 64 78 2c 20 63 75 72 72  urr_id_idx, curr
c020: 5f 6f 75 74 5f 69 64 5f 69 64 78 2c 20 63 75 72  _out_id_idx, cur
c030: 72 5f 61 74 74 72 5f 69 64 78 2c 20 73 65 73 73  r_attr_idx, sess
c040: 5f 61 74 74 72 5f 69 64 78 3b 0a 09 43 4b 5f 55  _attr_idx;..CK_U
c050: 4c 4f 4e 47 20 6d 61 74 63 68 65 64 5f 63 6f 75  LONG matched_cou
c060: 6e 74 2c 20 70 72 65 76 5f 6d 61 74 63 68 65 64  nt, prev_matched
c070: 5f 63 6f 75 6e 74 3b 0a 09 69 6e 74 20 6d 75 74  _count;..int mut
c080: 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43  ex_retval;...CAC
c090: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
c0a0: 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69  ("Called.");...i
c0b0: 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69  f (!cackey_initi
c0c0: 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b  alized) {...CACK
c0d0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
c0e0: 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69  "Error.  Not ini
c0f0: 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09  tialized.");....
c100: 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54  return(CKR_CRYPT
c110: 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49  OKI_NOT_INITIALI
c120: 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70  ZED);..}...if (p
c130: 75 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 3d  ulObjectCount ==
c140: 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45   NULL) {...CACKE
c150: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
c160: 45 72 72 6f 72 2e 20 20 70 75 6c 4f 62 6a 65 63  Error.  pulObjec
c170: 74 43 6f 75 6e 74 20 69 73 20 4e 55 4c 4c 2e 22  tCount is NULL."
c180: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
c190: 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b  _ARGUMENTS_BAD);
c1a0: 0a 09 7d 0a 0a 09 69 66 20 28 70 68 4f 62 6a 65  ..}...if (phObje
c1b0: 63 74 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c  ct == NULL && ul
c1c0: 4d 61 78 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d  MaxObjectCount =
c1d0: 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72  = 0) {.../* Shor
c1e0: 74 20 63 69 72 63 75 69 74 2c 20 69 66 20 7a 65  t circuit, if ze
c1f0: 72 6f 20 6f 62 6a 65 63 74 73 20 77 65 72 65 20  ro objects were 
c200: 73 70 65 63 69 66 69 65 64 20 72 65 74 75 72 6e  specified return
c210: 20 7a 65 72 6f 20 69 74 65 6d 73 20 69 6d 6d 65   zero items imme
c220: 64 69 61 74 65 6c 79 20 2a 2f 0a 09 09 2a 70 75  diately */...*pu
c230: 6c 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 20 30  lObjectCount = 0
c240: 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55  ;....CACKEY_DEBU
c250: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e  G_PRINTF("Return
c260: 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 20  ing CKR_OK (%i) 
c270: 28 73 68 6f 72 74 20 63 69 72 63 75 69 74 29 22  (short circuit)"
c280: 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65  , CKR_OK);....re
c290: 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d  turn(CKR_OK);..}
c2a0: 0a 0a 09 69 66 20 28 70 68 4f 62 6a 65 63 74 20  ...if (phObject 
c2b0: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43  == NULL) {...CAC
c2c0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
c2d0: 28 22 45 72 72 6f 72 2e 20 20 70 68 4f 62 6a 65  ("Error.  phObje
c2e0: 63 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a  ct is NULL.");..
c2f0: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47  ..return(CKR_ARG
c300: 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a  UMENTS_BAD);..}.
c310: 0a 09 69 66 20 28 75 6c 4d 61 78 4f 62 6a 65 63  ..if (ulMaxObjec
c320: 74 43 6f 75 6e 74 20 3d 3d 20 30 29 20 7b 0a 09  tCount == 0) {..
c330: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
c340: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4d 61  INTF("Error.  Ma
c350: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
c360: 6f 62 6a 65 63 74 73 20 73 70 65 63 69 66 69 65  objects specifie
c370: 64 20 61 73 20 7a 65 72 6f 2e 22 29 3b 0a 0a 09  d as zero.");...
c380: 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55  .return(CKR_ARGU
c390: 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a  MENTS_BAD);..}..
c3a0: 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d  .if (hSession ==
c3b0: 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e   0 || hSession >
c3c0: 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79  = (sizeof(cackey
c3d0: 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a  _sessions) / siz
c3e0: 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69  eof(cackey_sessi
c3f0: 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41  ons[0]))) {...CA
c400: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
c410: 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69  F("Error.  Sessi
c420: 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e  on out of range.
c430: 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28  ");......return(
c440: 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44  CKR_SESSION_HAND
c450: 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a  LE_INVALID);..}.
c460: 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d  ..mutex_retval =
c470: 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f   cackey_mutex_lo
c480: 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63  ck(cackey_bigloc
c490: 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72  k);..if (mutex_r
c4a0: 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09  etval != 0) {...
c4b0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
c4c0: 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63  NTF("Error.  Loc
c4d0: 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a  king failed.");.
c4e0: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45  ...return(CKR_GE
c4f0: 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  NERAL_ERROR);..}
c500: 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73  ...if (!cackey_s
c510: 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e  essions[hSession
c520: 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61  ].active) {...ca
c530: 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63  ckey_mutex_unloc
c540: 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b  k(cackey_biglock
c550: 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  );....CACKEY_DEB
c560: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
c570: 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61  .  Session not a
c580: 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72  ctive.");......r
c590: 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f  eturn(CKR_SESSIO
c5a0: 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44  N_HANDLE_INVALID
c5b0: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63  );..}...if (!cac
c5c0: 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65  key_sessions[hSe
c5d0: 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63  ssion].search_ac
c5e0: 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79  tive) {...cackey
c5f0: 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61  _mutex_unlock(ca
c600: 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a  ckey_biglock);..
c610: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
c620: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53  RINTF("Error.  S
c630: 65 61 72 63 68 20 6e 6f 74 20 61 63 74 69 76 65  earch not active
c640: 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e  .");......return
c650: 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e  (CKR_OPERATION_N
c660: 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b  OT_INITIALIZED);
c670: 0a 09 7d 0a 0a 09 63 75 72 72 5f 69 64 5f 69 64  ..}...curr_id_id
c680: 78 20 3d 20 30 3b 0a 09 63 75 72 72 5f 6f 75 74  x = 0;..curr_out
c690: 5f 69 64 5f 69 64 78 20 3d 20 30 3b 0a 09 66 6f  _id_idx = 0;..fo
c6a0: 72 20 28 63 75 72 72 5f 69 64 5f 69 64 78 20 3d  r (curr_id_idx =
c6b0: 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73   cackey_sessions
c6c0: 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63  [hSession].searc
c6d0: 68 5f 63 75 72 72 5f 69 64 3b 20 63 75 72 72 5f  h_curr_id; curr_
c6e0: 69 64 5f 69 64 78 20 3c 20 63 61 63 6b 65 79 5f  id_idx < cackey_
c6f0: 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
c700: 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f  n].identities_co
c710: 75 6e 74 20 26 26 20 75 6c 4d 61 78 4f 62 6a 65  unt && ulMaxObje
c720: 63 74 43 6f 75 6e 74 3b 20 63 75 72 72 5f 69 64  ctCount; curr_id
c730: 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 63 75 72 72  _idx++) {...curr
c740: 5f 69 64 20 3d 20 26 63 61 63 6b 65 79 5f 73 65  _id = &cackey_se
c750: 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d  ssions[hSession]
c760: 2e 69 64 65 6e 74 69 74 69 65 73 5b 63 75 72 72  .identities[curr
c770: 5f 69 64 5f 69 64 78 5d 3b 0a 0a 09 09 43 41 43  _id_idx];....CAC
c780: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
c790: 28 22 50 72 6f 63 65 73 73 69 6e 67 20 69 64 65  ("Processing ide
c7a0: 6e 74 69 74 79 3a 25 6c 75 22 2c 20 28 75 6e 73  ntity:%lu", (uns
c7b0: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72 72  igned long) curr
c7c0: 5f 69 64 5f 69 64 78 29 3b 0a 0a 09 09 6d 61 74  _id_idx);....mat
c7d0: 63 68 65 64 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a  ched_count = 0;.
c7e0: 0a 09 09 66 6f 72 20 28 63 75 72 72 5f 61 74 74  ...for (curr_att
c7f0: 72 5f 69 64 78 20 3d 20 30 3b 20 63 75 72 72 5f  r_idx = 0; curr_
c800: 61 74 74 72 5f 69 64 78 20 3c 20 63 61 63 6b 65  attr_idx < cacke
c810: 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73  y_sessions[hSess
c820: 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72  ion].search_quer
c830: 79 5f 63 6f 75 6e 74 3b 20 63 75 72 72 5f 61 74  y_count; curr_at
c840: 74 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 70  tr_idx++) {....p
c850: 72 65 76 5f 6d 61 74 63 68 65 64 5f 63 6f 75 6e  rev_matched_coun
c860: 74 20 3d 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e  t = matched_coun
c870: 74 3b 0a 0a 09 09 09 63 75 72 72 5f 61 74 74 72  t;.....curr_attr
c880: 20 3d 20 26 63 61 63 6b 65 79 5f 73 65 73 73 69   = &cackey_sessi
c890: 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65  ons[hSession].se
c8a0: 61 72 63 68 5f 71 75 65 72 79 5b 63 75 72 72 5f  arch_query[curr_
c8b0: 61 74 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 09 43  attr_idx];.....C
c8c0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
c8d0: 54 46 28 22 20 20 43 68 65 63 6b 69 6e 67 20 66  TF("  Checking f
c8e0: 6f 72 20 61 74 74 72 69 62 75 74 65 20 30 78 25  or attribute 0x%
c8f0: 30 38 6c 78 20 69 6e 20 69 64 65 6e 74 69 74 79  08lx in identity
c900: 3a 25 69 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e  :%i...", (unsign
c910: 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74  ed long) curr_at
c920: 74 72 2d 3e 74 79 70 65 2c 20 28 69 6e 74 29 20  tr->type, (int) 
c930: 63 75 72 72 5f 69 64 5f 69 64 78 29 3b 0a 09 09  curr_id_idx);...
c940: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
c950: 49 4e 54 42 55 46 28 22 20 20 20 20 56 61 6c 75  INTBUF("    Valu
c960: 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 3a 22 2c  e looking for:",
c970: 20 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c   curr_attr->pVal
c980: 75 65 2c 20 63 75 72 72 5f 61 74 74 72 2d 3e 75  ue, curr_attr->u
c990: 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09  lValueLen);.....
c9a0: 66 6f 72 20 28 73 65 73 73 5f 61 74 74 72 5f 69  for (sess_attr_i
c9b0: 64 78 20 3d 20 30 3b 20 73 65 73 73 5f 61 74 74  dx = 0; sess_att
c9c0: 72 5f 69 64 78 20 3c 20 63 75 72 72 5f 69 64 2d  r_idx < curr_id-
c9d0: 3e 61 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e  >attributes_coun
c9e0: 74 3b 20 73 65 73 73 5f 61 74 74 72 5f 69 64 78  t; sess_attr_idx
c9f0: 2b 2b 29 20 7b 0a 09 09 09 09 69 66 20 28 63 75  ++) {.....if (cu
ca00: 72 72 5f 69 64 2d 3e 61 74 74 72 69 62 75 74 65  rr_id->attribute
ca10: 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d  s[sess_attr_idx]
ca20: 2e 74 79 70 65 20 3d 3d 20 63 75 72 72 5f 61 74  .type == curr_at
ca30: 74 72 2d 3e 74 79 70 65 29 20 7b 0a 09 09 09 09  tr->type) {.....
ca40: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
ca50: 49 4e 54 46 28 22 20 20 20 20 2e 2e 2e 20 66 6f  INTF("    ... fo
ca60: 75 6e 64 20 6d 61 74 63 68 69 6e 67 20 74 79 70  und matching typ
ca70: 65 20 2e 2e 2e 22 29 3b 0a 09 09 09 09 09 43 41  e ...");......CA
ca80: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
ca90: 42 55 46 28 22 20 20 20 20 2e 2e 2e 20 6f 75 72  BUF("    ... our
caa0: 20 76 61 6c 75 65 3a 22 2c 20 63 75 72 72 5f 69   value:", curr_i
cab0: 64 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65  d->attributes[se
cac0: 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 70 56 61  ss_attr_idx].pVa
cad0: 6c 75 65 2c 20 63 75 72 72 5f 69 64 2d 3e 61 74  lue, curr_id->at
cae0: 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74  tributes[sess_at
caf0: 74 72 5f 69 64 78 5d 2e 75 6c 56 61 6c 75 65 4c  tr_idx].ulValueL
cb00: 65 6e 29 3b 0a 0a 09 09 09 09 09 69 66 20 28 63  en);.......if (c
cb10: 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65  urr_attr->pValue
cb20: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09   == NULL) {.....
cb30: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
cb40: 52 49 4e 54 46 28 22 20 20 20 20 20 20 20 2e 2e  RINTF("       ..
cb50: 2e 20 66 6f 75 6e 64 20 77 69 6c 64 63 61 72 64  . found wildcard
cb60: 20 6d 61 74 63 68 22 29 3b 0a 0a 09 09 09 09 09   match");.......
cb70: 09 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 2b 2b  .matched_count++
cb80: 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a  ;........break;.
cb90: 09 09 09 09 09 7d 0a 0a 20 09 09 09 09 09 69 66  .....}.. .....if
cba0: 20 28 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56   (curr_attr->ulV
cbb0: 61 6c 75 65 4c 65 6e 20 3d 3d 20 63 75 72 72 5f  alueLen == curr_
cbc0: 69 64 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73  id->attributes[s
cbd0: 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c  ess_attr_idx].ul
cbe0: 56 61 6c 75 65 4c 65 6e 20 26 26 20 6d 65 6d 63  ValueLen && memc
cbf0: 6d 70 28 63 75 72 72 5f 61 74 74 72 2d 3e 70 56  mp(curr_attr->pV
cc00: 61 6c 75 65 2c 20 63 75 72 72 5f 69 64 2d 3e 61  alue, curr_id->a
cc10: 74 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61  ttributes[sess_a
cc20: 74 74 72 5f 69 64 78 5d 2e 70 56 61 6c 75 65 2c  ttr_idx].pValue,
cc30: 20 63 75 72 72 5f 69 64 2d 3e 61 74 74 72 69 62   curr_id->attrib
cc40: 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72 5f 69  utes[sess_attr_i
cc50: 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 20  dx].ulValueLen) 
cc60: 3d 3d 20 30 29 20 7b 0a 09 09 09 09 09 09 43 41  == 0) {.......CA
cc70: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
cc80: 46 28 22 20 20 20 20 20 20 20 2e 2e 2e 20 66 6f  F("       ... fo
cc90: 75 6e 64 20 65 78 61 63 74 20 6d 61 74 63 68 22  und exact match"
cca0: 29 3b 0a 0a 09 09 09 09 09 09 6d 61 74 63 68 65  );........matche
ccb0: 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 0a 09 09 09 09  d_count++;......
ccc0: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a  ..break;......}.
ccd0: 09 09 09 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 2f  ....}....}...../
cce0: 2a 20 49 66 20 74 68 65 20 61 74 74 72 69 62 75  * If the attribu
ccf0: 74 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20  te could not be 
cd00: 6d 61 74 63 68 65 64 2c 20 64 6f 20 6e 6f 74 20  matched, do not 
cd10: 74 72 79 20 74 6f 20 6d 61 74 63 68 20 61 64 64  try to match add
cd20: 69 74 69 6f 6e 61 6c 20 61 74 74 72 69 62 75 74  itional attribut
cd30: 65 73 20 2a 2f 0a 09 09 09 69 66 20 28 70 72 65  es */....if (pre
cd40: 76 5f 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 20  v_matched_count 
cd50: 3d 3d 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74  == matched_count
cd60: 29 20 7b 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  ) {.....break;..
cd70: 09 09 7d 0a 09 09 7d 0a 0a 09 09 69 66 20 28 6d  ..}...}....if (m
cd80: 61 74 63 68 65 64 5f 63 6f 75 6e 74 20 3d 3d 20  atched_count == 
cd90: 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b  cackey_sessions[
cda0: 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68  hSession].search
cdb0: 5f 71 75 65 72 79 5f 63 6f 75 6e 74 29 20 7b 0a  _query_count) {.
cdc0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
cdd0: 50 52 49 4e 54 46 28 22 20 20 2e 2e 2e 20 41 6c  PRINTF("  ... Al
cde0: 6c 20 25 69 20 61 74 74 72 69 62 75 74 65 73 20  l %i attributes 
cdf0: 63 68 65 63 6b 65 64 20 66 6f 72 20 66 6f 75 6e  checked for foun
ce00: 64 2c 20 61 64 64 69 6e 67 20 69 64 65 6e 74 69  d, adding identi
ce10: 74 79 3a 25 69 20 74 6f 20 72 65 74 75 72 6e 65  ty:%i to returne
ce20: 64 20 6c 69 73 74 22 2c 20 28 69 6e 74 29 20 63  d list", (int) c
ce30: 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68  ackey_sessions[h
ce40: 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f  Session].search_
ce50: 71 75 65 72 79 5f 63 6f 75 6e 74 2c 20 28 69 6e  query_count, (in
ce60: 74 29 20 63 75 72 72 5f 69 64 5f 69 64 78 29 3b  t) curr_id_idx);
ce70: 0a 0a 09 09 09 70 68 4f 62 6a 65 63 74 5b 63 75  .....phObject[cu
ce80: 72 72 5f 6f 75 74 5f 69 64 5f 69 64 78 5d 20 3d  rr_out_id_idx] =
ce90: 20 63 75 72 72 5f 69 64 5f 69 64 78 20 2b 20 31   curr_id_idx + 1
cea0: 3b 0a 0a 09 09 09 75 6c 4d 61 78 4f 62 6a 65 63  ;.....ulMaxObjec
ceb0: 74 43 6f 75 6e 74 2d 2d 3b 0a 0a 09 09 09 63 75  tCount--;.....cu
cec0: 72 72 5f 6f 75 74 5f 69 64 5f 69 64 78 2b 2b 3b  rr_out_id_idx++;
ced0: 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 43  ...} else {....C
cee0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
cef0: 54 46 28 22 20 20 2e 2e 2e 20 4e 6f 74 20 61 6c  TF("  ... Not al
cf00: 6c 20 25 69 20 28 6f 6e 6c 79 20 66 6f 75 6e 64  l %i (only found
cf10: 20 25 69 29 20 61 74 74 72 69 62 75 74 65 73 20   %i) attributes 
cf20: 63 68 65 63 6b 65 64 20 66 6f 72 20 66 6f 75 6e  checked for foun
cf30: 64 2c 20 6e 6f 74 20 61 64 64 69 6e 67 20 69 64  d, not adding id
cf40: 65 6e 74 69 74 79 3a 25 69 22 2c 20 28 69 6e 74  entity:%i", (int
cf50: 29 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  ) cackey_session
cf60: 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72  s[hSession].sear
cf70: 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 2c 20  ch_query_count, 
cf80: 28 69 6e 74 29 20 6d 61 74 63 68 65 64 5f 63 6f  (int) matched_co
cf90: 75 6e 74 2c 20 28 69 6e 74 29 20 63 75 72 72 5f  unt, (int) curr_
cfa0: 69 64 5f 69 64 78 29 3b 0a 09 09 7d 0a 09 7d 0a  id_idx);...}..}.
cfb0: 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  .cackey_sessions
cfc0: 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63  [hSession].searc
cfd0: 68 5f 63 75 72 72 5f 69 64 20 3d 20 63 75 72 72  h_curr_id = curr
cfe0: 5f 69 64 5f 69 64 78 3b 0a 09 2a 70 75 6c 4f 62  _id_idx;..*pulOb
cff0: 6a 65 63 74 43 6f 75 6e 74 20 3d 20 63 75 72 72  jectCount = curr
d000: 5f 6f 75 74 5f 69 64 5f 69 64 78 3b 0a 0a 09 6d  _out_id_idx;...m
d010: 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61  utex_retval = ca
d020: 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63  ckey_mutex_unloc
d030: 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b  k(cackey_biglock
d040: 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65  );..if (mutex_re
d050: 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43  tval != 0) {...C
d060: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
d070: 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f  TF("Error.  Unlo
d080: 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b  cking failed.");
d090: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47  ....return(CKR_G
d0a0: 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09  ENERAL_ERROR);..
d0b0: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  }...CACKEY_DEBUG
d0c0: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69  _PRINTF("Returni
d0d0: 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 2c 20  ng CKR_OK (%i), 
d0e0: 6e 75 6d 20 6f 62 6a 65 63 74 73 20 3d 20 25 6c  num objects = %l
d0f0: 75 22 2c 20 43 4b 52 5f 4f 4b 2c 20 2a 70 75 6c  u", CKR_OK, *pul
d100: 4f 62 6a 65 63 74 43 6f 75 6e 74 29 3b 0a 0a 09  ObjectCount);...
d110: 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a  return(CKR_OK);.
d120: 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e  }..CK_DEFINE_FUN
d130: 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 46  CTION(CK_RV, C_F
d140: 69 6e 64 4f 62 6a 65 63 74 73 46 69 6e 61 6c 29  indObjectsFinal)
d150: 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44  (CK_SESSION_HAND
d160: 4c 45 20 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09  LE hSession) {..
d170: 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c  int mutex_retval
d180: 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ;...CACKEY_DEBUG
d190: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e  _PRINTF("Called.
d1a0: 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ");...if (!cacke
d1b0: 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b  y_initialized) {
d1c0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
d1d0: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
d1e0: 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  Not initialized.
d1f0: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
d200: 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49  R_CRYPTOKI_NOT_I
d210: 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a  NITIALIZED);..}.
d220: 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20 3d  ..if (hSession =
d230: 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20  = 0 || hSession 
d240: 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65  >= (sizeof(cacke
d250: 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73 69  y_sessions) / si
d260: 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73  zeof(cackey_sess
d270: 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43  ions[0]))) {...C
d280: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
d290: 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73  TF("Error.  Sess
d2a0: 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67 65  ion out of range
d2b0: 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e  .");......return
d2c0: 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e  (CKR_SESSION_HAN
d2d0: 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d  DLE_INVALID);..}
d2e0: 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20  ...mutex_retval 
d2f0: 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c  = cackey_mutex_l
d300: 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f  ock(cackey_biglo
d310: 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f  ck);..if (mutex_
d320: 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09  retval != 0) {..
d330: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
d340: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f  INTF("Error.  Lo
d350: 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b  cking failed.");
d360: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47  ....return(CKR_G
d370: 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09  ENERAL_ERROR);..
d380: 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f  }...if (!cackey_
d390: 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
d3a0: 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63  n].active) {...c
d3b0: 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f  ackey_mutex_unlo
d3c0: 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63  ck(cackey_bigloc
d3d0: 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45  k);....CACKEY_DE
d3e0: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
d3f0: 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20  r.  Session not 
d400: 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09  active.");......
d410: 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49  return(CKR_SESSI
d420: 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49  ON_HANDLE_INVALI
d430: 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61  D);..}...if (!ca
d440: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53  ckey_sessions[hS
d450: 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61  ession].search_a
d460: 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65  ctive) {...cacke
d470: 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63  y_mutex_unlock(c
d480: 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a  ackey_biglock);.
d490: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
d4a0: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
d4b0: 53 65 61 72 63 68 20 6e 6f 74 20 61 63 74 69 76  Search not activ
d4c0: 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72  e.");......retur
d4d0: 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f  n(CKR_OPERATION_
d4e0: 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29  NOT_INITIALIZED)
d4f0: 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65  ;..}...cackey_se
d500: 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d  ssions[hSession]
d510: 2e 73 65 61 72 63 68 5f 61 63 74 69 76 65 20 3d  .search_active =
d520: 20 30 3b 0a 09 69 66 20 28 63 61 63 6b 65 79 5f   0;..if (cackey_
d530: 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
d540: 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 29  n].search_query)
d550: 20 7b 0a 09 09 66 72 65 65 28 63 61 63 6b 65 79   {...free(cackey
d560: 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69  _sessions[hSessi
d570: 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79  on].search_query
d580: 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65  );..}...mutex_re
d590: 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75  tval = cackey_mu
d5a0: 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65  tex_unlock(cacke
d5b0: 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20  y_biglock);..if 
d5c0: 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d  (mutex_retval !=
d5d0: 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44   0) {...CACKEY_D
d5e0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
d5f0: 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66  or.  Unlocking f
d600: 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  ailed.");....ret
d610: 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f  urn(CKR_GENERAL_
d620: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43  ERROR);..}...CAC
d630: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
d640: 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f  ("Returning CKR_
d650: 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b  OK (%i)", CKR_OK
d660: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f  );...return(CKR_
d670: 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e  OK);.}..CK_DEFIN
d680: 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56  E_FUNCTION(CK_RV
d690: 2c 20 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 29  , C_EncryptInit)
d6a0: 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44  (CK_SESSION_HAND
d6b0: 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f  LE hSession, CK_
d6c0: 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d  MECHANISM_PTR pM
d6d0: 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a  echanism, CK_OBJ
d6e0: 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29  ECT_HANDLE hKey)
d6f0: 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47   {..CACKEY_DEBUG
d700: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e  _PRINTF("Called.
d710: 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ");...if (!cacke
d720: 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b  y_initialized) {
d730: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
d740: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
d750: 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  Not initialized.
d760: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
d770: 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49  R_CRYPTOKI_NOT_I
d780: 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a  NITIALIZED);..}.
d790: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
d7a0: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
d7b0: 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f   CKR_FUNCTION_NO
d7c0: 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29  T_SUPPORTED (%i)
d7d0: 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  ", CKR_FUNCTION_
d7e0: 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a  NOT_SUPPORTED);.
d7f0: 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e  ..return(CKR_FUN
d800: 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
d810: 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49  TED);.}..CK_DEFI
d820: 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52  NE_FUNCTION(CK_R
d830: 56 2c 20 43 5f 45 6e 63 72 79 70 74 29 28 43 4b  V, C_Encrypt)(CK
d840: 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20  _SESSION_HANDLE 
d850: 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54  hSession, CK_BYT
d860: 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f  E_PTR pData, CK_
d870: 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c  ULONG ulDataLen,
d880: 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e   CK_BYTE_PTR pEn
d890: 63 72 79 70 74 65 64 44 61 74 61 2c 20 43 4b 5f  cryptedData, CK_
d8a0: 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 45 6e 63  ULONG_PTR pulEnc
d8b0: 72 79 70 74 65 64 44 61 74 61 4c 65 6e 29 20 7b  ryptedDataLen) {
d8c0: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
d8d0: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29  RINTF("Called.")
d8e0: 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f  ;...if (!cackey_
d8f0: 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09  initialized) {..
d900: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
d910: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f  INTF("Error.  No
d920: 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29  t initialized.")
d930: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  ;....return(CKR_
d940: 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49  CRYPTOKI_NOT_INI
d950: 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09  TIALIZED);..}...
d960: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
d970: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43  NTF("Returning C
d980: 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
d990: 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c  SUPPORTED (%i)",
d9a0: 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f   CKR_FUNCTION_NO
d9b0: 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09  T_SUPPORTED);...
d9c0: 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54  return(CKR_FUNCT
d9d0: 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
d9e0: 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45  D);.}..CK_DEFINE
d9f0: 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c  _FUNCTION(CK_RV,
da00: 20 43 5f 45 6e 63 72 79 70 74 55 70 64 61 74 65   C_EncryptUpdate
da10: 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e  )(CK_SESSION_HAN
da20: 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b  DLE hSession, CK
da30: 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c  _BYTE_PTR pPart,
da40: 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74   CK_ULONG ulPart
da50: 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52  Len, CK_BYTE_PTR
da60: 20 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c   pEncryptedPart,
da70: 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75   CK_ULONG_PTR pu
da80: 6c 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65  lEncryptedPartLe
da90: 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42  n) {..CACKEY_DEB
daa0: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65  UG_PRINTF("Calle
dab0: 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63  d.");...if (!cac
dac0: 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29  key_initialized)
dad0: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
dae0: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
daf0: 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65    Not initialize
db00: 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  d.");....return(
db10: 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54  CKR_CRYPTOKI_NOT
db20: 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09  _INITIALIZED);..
db30: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  }...CACKEY_DEBUG
db40: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69  _PRINTF("Returni
db50: 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  ng CKR_FUNCTION_
db60: 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25  NOT_SUPPORTED (%
db70: 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f  i)", CKR_FUNCTIO
db80: 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29  N_NOT_SUPPORTED)
db90: 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46  ;...return(CKR_F
dba0: 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50  UNCTION_NOT_SUPP
dbb0: 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45  ORTED);.}..CK_DE
dbc0: 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b  FINE_FUNCTION(CK
dbd0: 5f 52 56 2c 20 43 5f 45 6e 63 72 79 70 74 46 69  _RV, C_EncryptFi
dbe0: 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f  nal)(CK_SESSION_
dbf0: 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c  HANDLE hSession,
dc00: 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 4c 61   CK_BYTE_PTR pLa
dc10: 73 74 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c  stEncryptedPart,
dc20: 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75   CK_ULONG_PTR pu
dc30: 6c 4c 61 73 74 45 6e 63 72 79 70 74 65 64 50 61  lLastEncryptedPa
dc40: 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59  rtLen) {..CACKEY
dc50: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
dc60: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
dc70: 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69  !cackey_initiali
dc80: 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  zed) {...CACKEY_
dc90: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
dca0: 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61  ror.  Not initia
dcb0: 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  lized.");....ret
dcc0: 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49  urn(CKR_CRYPTOKI
dcd0: 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
dce0: 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44  );..}...CACKEY_D
dcf0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
dd00: 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54  urning CKR_FUNCT
dd10: 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
dd20: 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e  D (%i)", CKR_FUN
dd30: 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
dd40: 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  TED);...return(C
dd50: 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
dd60: 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43  SUPPORTED);.}..C
dd70: 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f  K_DEFINE_FUNCTIO
dd80: 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79  N(CK_RV, C_Decry
dd90: 70 74 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49  ptInit)(CK_SESSI
dda0: 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69  ON_HANDLE hSessi
ddb0: 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d  on, CK_MECHANISM
ddc0: 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c  _PTR pMechanism,
ddd0: 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c   CK_OBJECT_HANDL
dde0: 45 20 68 4b 65 79 29 20 7b 0a 09 69 6e 74 20 6d  E hKey) {..int m
ddf0: 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 68  utex_retval;...h
de00: 4b 65 79 2d 2d 3b 0a 0a 09 43 41 43 4b 45 59 5f  Key--;...CACKEY_
de10: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61  DEBUG_PRINTF("Ca
de20: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21  lled.");...if (!
de30: 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a  cackey_initializ
de40: 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  ed) {...CACKEY_D
de50: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
de60: 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c  or.  Not initial
de70: 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75  ized.");....retu
de80: 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f  rn(CKR_CRYPTOKI_
de90: 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29  NOT_INITIALIZED)
dea0: 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 4d 65 63 68  ;..}...if (pMech
deb0: 61 6e 69 73 6d 20 3d 3d 20 4e 55 4c 4c 29 20 7b  anism == NULL) {
dec0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
ded0: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70  PRINTF("Error. p
dee0: 4d 65 63 68 61 6e 69 73 6d 20 69 73 20 4e 55 4c  Mechanism is NUL
def0: 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  L.");....return(
df00: 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41  CKR_ARGUMENTS_BA
df10: 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 4d 65  D);..}...if (pMe
df20: 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69  chanism->mechani
df30: 73 6d 20 21 3d 20 43 4b 4d 5f 52 53 41 5f 50 4b  sm != CKM_RSA_PK
df40: 43 53 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  CS) {...CACKEY_D
df50: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
df60: 6f 72 2e 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e  or. pMechanism->
df70: 6d 65 63 68 61 6e 69 73 6d 20 6e 6f 74 20 73 70  mechanism not sp
df80: 65 63 69 66 69 65 64 20 61 73 20 43 4b 4d 5f 52  ecified as CKM_R
df90: 53 41 5f 50 4b 43 53 22 29 3b 0a 0a 09 09 72 65  SA_PKCS");....re
dfa0: 74 75 72 6e 28 43 4b 52 5f 4d 45 43 48 41 4e 49  turn(CKR_MECHANI
dfb0: 53 4d 5f 50 41 52 41 4d 5f 49 4e 56 41 4c 49 44  SM_PARAM_INVALID
dfc0: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73  );..}...if (hSes
dfd0: 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65  sion == 0 || hSe
dfe0: 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66  ssion >= (sizeof
dff0: 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  (cackey_sessions
e000: 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65  ) / sizeof(cacke
e010: 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29  y_sessions[0])))
e020: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
e030: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
e040: 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66    Session out of
e050: 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09   range.");......
e060: 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49  return(CKR_SESSI
e070: 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49  ON_HANDLE_INVALI
e080: 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72  D);..}...mutex_r
e090: 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d  etval = cackey_m
e0a0: 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79  utex_lock(cackey
e0b0: 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28  _biglock);..if (
e0c0: 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20  mutex_retval != 
e0d0: 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45  0) {...CACKEY_DE
e0e0: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
e0f0: 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c  r.  Locking fail
e100: 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  ed.");....return
e110: 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52  (CKR_GENERAL_ERR
e120: 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63  OR);..}...if (!c
e130: 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68  ackey_sessions[h
e140: 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29  Session].active)
e150: 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65   {...cackey_mute
e160: 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f  x_unlock(cackey_
e170: 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43  biglock);....CAC
e180: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
e190: 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f  ("Error.  Sessio
e1a0: 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b  n not active.");
e1b0: 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  ......return(CKR
e1c0: 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f  _SESSION_HANDLE_
e1d0: 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69  INVALID);..}...i
e1e0: 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f  f (cackey_sessio
e1f0: 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63  ns[hSession].dec
e200: 72 79 70 74 5f 61 63 74 69 76 65 29 20 7b 0a 09  rypt_active) {..
e210: 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e  .cackey_mutex_un
e220: 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c  lock(cackey_bigl
e230: 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f  ock);....CACKEY_
e240: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
e250: 72 6f 72 2e 20 20 44 65 63 72 79 70 74 20 61 6c  ror.  Decrypt al
e260: 72 65 61 64 79 20 69 6e 20 70 72 6f 67 72 65 73  ready in progres
e270: 73 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72  s.");......retur
e280: 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f  n(CKR_OPERATION_
e290: 41 43 54 49 56 45 29 3b 0a 09 7d 0a 0a 09 69 66  ACTIVE);..}...if
e2a0: 20 28 68 4b 65 79 20 3e 3d 20 63 61 63 6b 65 79   (hKey >= cackey
e2b0: 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69  _sessions[hSessi
e2c0: 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5f 63  on].identities_c
e2d0: 6f 75 6e 74 29 20 7b 0a 09 09 63 61 63 6b 65 79  ount) {...cackey
e2e0: 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61  _mutex_unlock(ca
e2f0: 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a  ckey_biglock);..
e300: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
e310: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4b  RINTF("Error.  K
e320: 65 79 20 68 61 6e 64 6c 65 20 6f 75 74 20 6f 66  ey handle out of
e330: 20 72 61 6e 67 65 2e 22 29 3b 0a 0a 09 09 72 65   range.");....re
e340: 74 75 72 6e 28 43 4b 52 5f 4b 45 59 5f 48 41 4e  turn(CKR_KEY_HAN
e350: 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d  DLE_INVALID);..}
e360: 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f  ...cackey_sessio
e370: 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63  ns[hSession].dec
e380: 72 79 70 74 5f 61 63 74 69 76 65 20 3d 20 31 3b  rypt_active = 1;
e390: 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f  ...cackey_sessio
e3a0: 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63  ns[hSession].dec
e3b0: 72 79 70 74 5f 6d 65 63 68 61 6e 69 73 6d 20 3d  rypt_mechanism =
e3c0: 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63   pMechanism->mec
e3d0: 68 61 6e 69 73 6d 3b 0a 09 63 61 63 6b 65 79 5f  hanism;..cackey_
e3e0: 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
e3f0: 6e 5d 2e 64 65 63 72 79 70 74 5f 6d 65 63 68 5f  n].decrypt_mech_
e400: 70 61 72 6d 20 3d 20 70 4d 65 63 68 61 6e 69 73  parm = pMechanis
e410: 6d 2d 3e 70 50 61 72 61 6d 65 74 65 72 3b 0a 09  m->pParameter;..
e420: 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b  cackey_sessions[
e430: 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70  hSession].decryp
e440: 74 5f 6d 65 63 68 5f 70 61 72 6d 6c 65 6e 20 3d  t_mech_parmlen =
e450: 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 75 6c 50   pMechanism->ulP
e460: 61 72 61 6d 65 74 65 72 4c 65 6e 3b 0a 0a 09 6d  arameterLen;...m
e470: 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61  utex_retval = ca
e480: 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63  ckey_mutex_unloc
e490: 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b  k(cackey_biglock
e4a0: 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65  );..if (mutex_re
e4b0: 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43  tval != 0) {...C
e4c0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
e4d0: 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f  TF("Error.  Unlo
e4e0: 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b  cking failed.");
e4f0: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47  ....return(CKR_G
e500: 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09  ENERAL_ERROR);..
e510: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  }...CACKEY_DEBUG
e520: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69  _PRINTF("Returni
e530: 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c  ng CKR_OK (%i)",
e540: 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75   CKR_OK);...retu
e550: 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43  rn(CKR_OK);.}..C
e560: 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f  K_DEFINE_FUNCTIO
e570: 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79  N(CK_RV, C_Decry
e580: 70 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48  pt)(CK_SESSION_H
e590: 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20  ANDLE hSession, 
e5a0: 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63  CK_BYTE_PTR pEnc
e5b0: 72 79 70 74 65 64 44 61 74 61 2c 20 43 4b 5f 55  ryptedData, CK_U
e5c0: 4c 4f 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 64  LONG ulEncrypted
e5d0: 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45  DataLen, CK_BYTE
e5e0: 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55  _PTR pData, CK_U
e5f0: 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 44 61 74 61  LONG_PTR pulData
e600: 4c 65 6e 29 20 7b 0a 09 43 4b 5f 55 4c 4f 4e 47  Len) {..CK_ULONG
e610: 20 64 61 74 61 6c 65 6e 5f 75 70 64 61 74 65 2c   datalen_update,
e620: 20 64 61 74 61 6c 65 6e 5f 66 69 6e 61 6c 3b 0a   datalen_final;.
e630: 09 43 4b 5f 52 56 20 64 65 63 72 79 70 74 5f 72  .CK_RV decrypt_r
e640: 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  et;...CACKEY_DEB
e650: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65  UG_PRINTF("Calle
e660: 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63  d.");...if (!cac
e670: 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29  key_initialized)
e680: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
e690: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
e6a0: 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65    Not initialize
e6b0: 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  d.");....return(
e6c0: 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54  CKR_CRYPTOKI_NOT
e6d0: 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09  _INITIALIZED);..
e6e0: 7d 0a 0a 09 69 66 20 28 70 75 6c 44 61 74 61 4c  }...if (pulDataL
e6f0: 65 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09  en == NULL) {...
e700: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
e710: 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 75 6c 44  NTF("Error. pulD
e720: 61 74 61 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22  ataLen is NULL."
e730: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
e740: 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b  _ARGUMENTS_BAD);
e750: 0a 09 7d 0a 0a 09 64 61 74 61 6c 65 6e 5f 75 70  ..}...datalen_up
e760: 64 61 74 65 20 3d 20 2a 70 75 6c 44 61 74 61 4c  date = *pulDataL
e770: 65 6e 3b 0a 0a 09 64 65 63 72 79 70 74 5f 72 65  en;...decrypt_re
e780: 74 20 3d 20 43 5f 44 65 63 72 79 70 74 55 70 64  t = C_DecryptUpd
e790: 61 74 65 28 68 53 65 73 73 69 6f 6e 2c 20 70 45  ate(hSession, pE
e7a0: 6e 63 72 79 70 74 65 64 44 61 74 61 2c 20 75 6c  ncryptedData, ul
e7b0: 45 6e 63 72 79 70 74 65 64 44 61 74 61 4c 65 6e  EncryptedDataLen
e7c0: 2c 20 70 44 61 74 61 2c 20 26 64 61 74 61 6c 65  , pData, &datale
e7d0: 6e 5f 75 70 64 61 74 65 29 3b 0a 09 69 66 20 28  n_update);..if (
e7e0: 64 65 63 72 79 70 74 5f 72 65 74 20 21 3d 20 43  decrypt_ret != C
e7f0: 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45  KR_OK) {...CACKE
e800: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
e810: 45 72 72 6f 72 2e 20 20 44 65 63 72 79 70 74 55  Error.  DecryptU
e820: 70 64 61 74 65 28 29 20 72 65 74 75 72 6e 65 64  pdate() returned
e830: 20 66 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25   failure (rv = %
e840: 6c 75 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64  lu).", (unsigned
e850: 20 6c 6f 6e 67 29 20 64 65 63 72 79 70 74 5f 72   long) decrypt_r
e860: 65 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 64  et);....return(d
e870: 65 63 72 79 70 74 5f 72 65 74 29 3b 0a 09 7d 0a  ecrypt_ret);..}.
e880: 0a 09 69 66 20 28 70 44 61 74 61 29 20 7b 0a 09  ..if (pData) {..
e890: 09 70 44 61 74 61 20 2b 3d 20 64 61 74 61 6c 65  .pData += datale
e8a0: 6e 5f 75 70 64 61 74 65 3b 0a 09 7d 0a 09 64 61  n_update;..}..da
e8b0: 74 61 6c 65 6e 5f 66 69 6e 61 6c 20 3d 20 2a 70  talen_final = *p
e8c0: 75 6c 44 61 74 61 4c 65 6e 20 2d 20 64 61 74 61  ulDataLen - data
e8d0: 6c 65 6e 5f 75 70 64 61 74 65 3b 0a 0a 09 64 65  len_update;...de
e8e0: 63 72 79 70 74 5f 72 65 74 20 3d 20 43 5f 44 65  crypt_ret = C_De
e8f0: 63 72 79 70 74 46 69 6e 61 6c 28 68 53 65 73 73  cryptFinal(hSess
e900: 69 6f 6e 2c 20 70 44 61 74 61 2c 20 26 64 61 74  ion, pData, &dat
e910: 61 6c 65 6e 5f 66 69 6e 61 6c 29 3b 0a 09 69 66  alen_final);..if
e920: 20 28 64 65 63 72 79 70 74 5f 72 65 74 20 21 3d   (decrypt_ret !=
e930: 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43   CKR_OK) {...CAC
e940: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
e950: 28 22 45 72 72 6f 72 2e 20 20 44 65 63 72 79 70  ("Error.  Decryp
e960: 74 46 69 6e 61 6c 28 29 20 72 65 74 75 72 6e 65  tFinal() returne
e970: 64 20 66 61 69 6c 75 72 65 20 28 72 76 20 3d 20  d failure (rv = 
e980: 25 6c 75 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65  %lu).", (unsigne
e990: 64 20 6c 6f 6e 67 29 20 64 65 63 72 79 70 74 5f  d long) decrypt_
e9a0: 72 65 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  ret);....return(
e9b0: 64 65 63 72 79 70 74 5f 72 65 74 29 3b 0a 09 7d  decrypt_ret);..}
e9c0: 0a 0a 09 2a 70 75 6c 44 61 74 61 4c 65 6e 20 3d  ...*pulDataLen =
e9d0: 20 64 61 74 61 6c 65 6e 5f 75 70 64 61 74 65 20   datalen_update 
e9e0: 2b 20 64 61 74 61 6c 65 6e 5f 66 69 6e 61 6c 3b  + datalen_final;
e9f0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
ea00: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
ea10: 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20  g CKR_OK (%i)", 
ea20: 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72  CKR_OK);...retur
ea30: 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b  n(CKR_OK);.}..CK
ea40: 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e  _DEFINE_FUNCTION
ea50: 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 70  (CK_RV, C_Decryp
ea60: 74 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53  tUpdate)(CK_SESS
ea70: 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73  ION_HANDLE hSess
ea80: 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52  ion, CK_BYTE_PTR
ea90: 20 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 2c   pEncryptedPart,
eaa0: 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 45 6e 63 72   CK_ULONG ulEncr
eab0: 79 70 74 65 64 50 61 72 74 4c 65 6e 2c 20 43 4b  yptedPartLen, CK
eac0: 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c  _BYTE_PTR pPart,
ead0: 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75   CK_ULONG_PTR pu
eae0: 6c 50 61 72 74 4c 65 6e 29 20 7b 0a 09 73 74 61  lPartLen) {..sta
eaf0: 74 69 63 20 43 4b 5f 42 59 54 45 20 62 75 66 5b  tic CK_BYTE buf[
eb00: 31 36 33 38 34 5d 3b 0a 09 73 73 69 7a 65 5f 74  16384];..ssize_t
eb10: 20 62 75 66 6c 65 6e 3b 0a 09 43 4b 5f 52 56 20   buflen;..CK_RV 
eb20: 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e  retval = CKR_GEN
eb30: 45 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 69 6e 74  ERAL_ERROR;..int
eb40: 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a   mutex_retval;..
eb50: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
eb60: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b  INTF("Called.");
eb70: 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69  ...if (!cackey_i
eb80: 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09  nitialized) {...
eb90: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
eba0: 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74  NTF("Error.  Not
ebb0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b   initialized.");
ebc0: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43  ....return(CKR_C
ebd0: 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54  RYPTOKI_NOT_INIT
ebe0: 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69  IALIZED);..}...i
ebf0: 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30  f (hSession == 0
ec00: 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20   || hSession >= 
ec10: 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73  (sizeof(cackey_s
ec20: 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f  essions) / sizeo
ec30: 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  f(cackey_session
ec40: 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b  s[0]))) {...CACK
ec50: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
ec60: 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e  "Error.  Session
ec70: 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29   out of range.")
ec80: 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b  ;......return(CK
ec90: 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45  R_SESSION_HANDLE
eca0: 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09  _INVALID);..}...
ecb0: 69 66 20 28 70 45 6e 63 72 79 70 74 65 64 50 61  if (pEncryptedPa
ecc0: 72 74 20 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c  rt == NULL && ul
ecd0: 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e  EncryptedPartLen
ece0: 20 3d 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68   == 0) {.../* Sh
ecf0: 6f 72 74 20 63 69 72 63 75 69 74 20 69 66 20 77  ort circuit if w
ed00: 65 20 61 72 65 20 61 73 6b 65 64 20 74 6f 20 64  e are asked to d
ed10: 65 63 72 79 70 74 20 6e 6f 74 68 69 6e 67 2e 2e  ecrypt nothing..
ed20: 2e 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45  . */...CACKEY_DE
ed30: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75  BUG_PRINTF("Retu
ed40: 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69  rning CKR_OK (%i
ed50: 29 20 28 73 68 6f 72 74 20 63 69 72 63 75 69 74  ) (short circuit
ed60: 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09  )", CKR_OK);....
ed70: 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a  return(CKR_OK);.
ed80: 09 7d 0a 0a 09 69 66 20 28 70 45 6e 63 72 79 70  .}...if (pEncryp
ed90: 74 65 64 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 29  tedPart == NULL)
eda0: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
edb0: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
edc0: 20 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 20   pEncryptedPart 
edd0: 69 73 20 4e 55 4c 4c 2c 20 62 75 74 20 75 6c 45  is NULL, but ulE
ede0: 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20  ncryptedPartLen 
edf0: 69 73 20 6e 6f 74 20 30 2e 22 29 3b 0a 0a 09 09  is not 0.");....
ee00: 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d  return(CKR_ARGUM
ee10: 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09  ENTS_BAD);..}...
ee20: 69 66 20 28 75 6c 45 6e 63 72 79 70 74 65 64 50  if (ulEncryptedP
ee30: 61 72 74 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09  artLen == 0) {..
ee40: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
ee50: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 75 6c 45  INTF("Error. ulE
ee60: 6e 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20  ncryptedPartLen 
ee70: 69 73 20 30 2c 20 62 75 74 20 70 50 61 72 74 20  is 0, but pPart 
ee80: 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a  is not NULL.");.
ee90: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52  ...return(CKR_AR
eea0: 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d  GUMENTS_BAD);..}
eeb0: 0a 0a 09 69 66 20 28 70 75 6c 50 61 72 74 4c 65  ...if (pulPartLe
eec0: 6e 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43  n == NULL) {...C
eed0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
eee0: 54 46 28 22 45 72 72 6f 72 2e 20 70 75 6c 50 61  TF("Error. pulPa
eef0: 72 74 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29  rtLen is NULL.")
ef00: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  ;....return(CKR_
ef10: 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a  ARGUMENTS_BAD);.
ef20: 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61  .}...mutex_retva
ef30: 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78  l = cackey_mutex
ef40: 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67  _lock(cackey_big
ef50: 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65  lock);..if (mute
ef60: 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b  x_retval != 0) {
ef70: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
ef80: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
ef90: 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22  Locking failed."
efa0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
efb0: 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b  _GENERAL_ERROR);
efc0: 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ..}...if (!cacke
efd0: 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73  y_sessions[hSess
efe0: 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09  ion].active) {..
eff0: 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e  .cackey_mutex_un
f000: 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c  lock(cackey_bigl
f010: 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f  ock);....CACKEY_
f020: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
f030: 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f  ror.  Session no
f040: 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a  t active.");....
f050: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53  ..return(CKR_SES
f060: 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41  SION_HANDLE_INVA
f070: 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21  LID);..}...if (!
f080: 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b  cackey_sessions[
f090: 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70  hSession].decryp
f0a0: 74 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61  t_active) {...ca
f0b0: 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63  ckey_mutex_unloc
f0c0: 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b  k(cackey_biglock
f0d0: 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  );....CACKEY_DEB
f0e0: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
f0f0: 2e 20 20 44 65 63 72 79 70 74 20 6e 6f 74 20 61  .  Decrypt not a
f100: 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72  ctive.");......r
f110: 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54  eturn(CKR_OPERAT
f120: 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49  ION_NOT_INITIALI
f130: 5a 45 44 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 63  ZED);..}...switc
f140: 68 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f  h (cackey_sessio
f150: 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63  ns[hSession].dec
f160: 72 79 70 74 5f 6d 65 63 68 61 6e 69 73 6d 29 20  rypt_mechanism) 
f170: 7b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 53 41  {...case CKM_RSA
f180: 5f 50 4b 43 53 3a 0a 09 09 09 62 75 66 6c 65 6e  _PKCS:....buflen
f190: 20 3d 20 2d 31 3b 0a 0a 09 09 09 2f 2a 20 58 58   = -1;...../* XX
f1a0: 58 3a 20 41 73 6b 20 63 61 72 64 20 74 6f 20 64  X: Ask card to d
f1b0: 65 63 72 79 70 74 20 2a 2f 0a 0a 09 09 09 69 66  ecrypt */.....if
f1c0: 20 28 62 75 66 6c 65 6e 20 3c 20 30 29 20 7b 0a   (buflen < 0) {.
f1d0: 09 09 09 09 2f 2a 20 44 65 63 72 79 70 74 69 6f  ..../* Decryptio
f1e0: 6e 20 66 61 69 6c 65 64 2e 20 2a 2f 0a 09 09 09  n failed. */....
f1f0: 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 47 45  .retval = CKR_GE
f200: 4e 45 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 09 09  NERAL_ERROR;....
f210: 7d 20 65 6c 73 65 20 69 66 20 28 28 28 75 6e 73  } else if (((uns
f220: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 62 75 66 6c  igned long) bufl
f230: 65 6e 29 20 3e 20 2a 70 75 6c 50 61 72 74 4c 65  en) > *pulPartLe
f240: 6e 20 26 26 20 70 50 61 72 74 29 20 7b 0a 09 09  n && pPart) {...
f250: 09 09 2f 2a 20 44 65 63 72 79 70 74 65 64 20 64  ../* Decrypted d
f260: 61 74 61 20 74 6f 6f 20 6c 61 72 67 65 20 2a 2f  ata too large */
f270: 0a 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b  .....retval = CK
f280: 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41  R_BUFFER_TOO_SMA
f290: 4c 4c 3b 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a  LL;....} else {.
f2a0: 09 09 09 09 69 66 20 28 70 50 61 72 74 29 20 7b  ....if (pPart) {
f2b0: 0a 09 09 09 09 09 6d 65 6d 63 70 79 28 70 50 61  ......memcpy(pPa
f2c0: 72 74 2c 20 62 75 66 2c 20 62 75 66 6c 65 6e 29  rt, buf, buflen)
f2d0: 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 2a 70 75  ;.....}......*pu
f2e0: 6c 50 61 72 74 4c 65 6e 20 3d 20 62 75 66 6c 65  lPartLen = bufle
f2f0: 6e 3b 0a 0a 09 09 09 09 72 65 74 76 61 6c 20 3d  n;......retval =
f300: 20 43 4b 52 5f 4f 4b 3b 0a 09 09 09 7d 0a 0a 09   CKR_OK;....}...
f310: 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 6d 75  ..break;..}...mu
f320: 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63  tex_retval = cac
f330: 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b  key_mutex_unlock
f340: 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29  (cackey_biglock)
f350: 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74  ;..if (mutex_ret
f360: 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41  val != 0) {...CA
f370: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
f380: 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63  F("Error.  Unloc
f390: 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a  king failed.");.
f3a0: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45  ...return(CKR_GE
f3b0: 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  NERAL_ERROR);..}
f3c0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
f3d0: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
f3e0: 67 20 25 69 22 2c 20 28 69 6e 74 29 20 72 65 74  g %i", (int) ret
f3f0: 76 61 6c 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72  val);...return(r
f400: 65 74 76 61 6c 29 3b 0a 7d 0a 0a 43 4b 5f 44 45  etval);.}..CK_DE
f410: 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b  FINE_FUNCTION(CK
f420: 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 74 46 69  _RV, C_DecryptFi
f430: 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f  nal)(CK_SESSION_
f440: 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c  HANDLE hSession,
f450: 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 4c 61   CK_BYTE_PTR pLa
f460: 73 74 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47  stPart, CK_ULONG
f470: 5f 50 54 52 20 70 75 6c 4c 61 73 74 50 61 72 74  _PTR pulLastPart
f480: 4c 65 6e 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65  Len) {..int mute
f490: 78 5f 72 65 74 76 61 6c 3b 0a 09 69 6e 74 20 74  x_retval;..int t
f4a0: 65 72 6d 69 6e 61 74 65 5f 64 65 63 72 79 70 74  erminate_decrypt
f4b0: 20 3d 20 31 3b 0a 0a 09 43 41 43 4b 45 59 5f 44   = 1;...CACKEY_D
f4c0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c  EBUG_PRINTF("Cal
f4d0: 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63  led.");...if (!c
f4e0: 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65  ackey_initialize
f4f0: 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45  d) {...CACKEY_DE
f500: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
f510: 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69  r.  Not initiali
f520: 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72  zed.");....retur
f530: 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e  n(CKR_CRYPTOKI_N
f540: 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b  OT_INITIALIZED);
f550: 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69  ..}...if (hSessi
f560: 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73  on == 0 || hSess
f570: 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63  ion >= (sizeof(c
f580: 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20  ackey_sessions) 
f590: 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f  / sizeof(cackey_
f5a0: 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b  sessions[0]))) {
f5b0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
f5c0: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
f5d0: 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72  Session out of r
f5e0: 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65  ange.");......re
f5f0: 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e  turn(CKR_SESSION
f600: 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29  _HANDLE_INVALID)
f610: 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 75 6c 4c 61  ;..}...if (pulLa
f620: 73 74 50 61 72 74 4c 65 6e 20 3d 3d 20 4e 55 4c  stPartLen == NUL
f630: 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45  L) {...CACKEY_DE
f640: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
f650: 72 2e 20 70 75 6c 4c 61 73 74 50 61 72 74 4c 65  r. pulLastPartLe
f660: 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09  n is NULL.");...
f670: 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55  .return(CKR_ARGU
f680: 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a  MENTS_BAD);..}..
f690: 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20  .mutex_retval = 
f6a0: 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63  cackey_mutex_loc
f6b0: 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b  k(cackey_biglock
f6c0: 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65  );..if (mutex_re
f6d0: 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43  tval != 0) {...C
f6e0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
f6f0: 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b  TF("Error.  Lock
f700: 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a  ing failed.");..
f710: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e  ..return(CKR_GEN
f720: 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a  ERAL_ERROR);..}.
f730: 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65  ..if (!cackey_se
f740: 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d  ssions[hSession]
f750: 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63  .active) {...cac
f760: 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b  key_mutex_unlock
f770: 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29  (cackey_biglock)
f780: 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55  ;....CACKEY_DEBU
f790: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
f7a0: 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63    Session not ac
f7b0: 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65  tive.");......re
f7c0: 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e  turn(CKR_SESSION
f7d0: 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29  _HANDLE_INVALID)
f7e0: 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b  ;..}...if (!cack
f7f0: 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
f800: 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 61 63  sion].decrypt_ac
f810: 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79  tive) {...cackey
f820: 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61  _mutex_unlock(ca
f830: 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a  ckey_biglock);..
f840: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
f850: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 44  RINTF("Error.  D
f860: 65 63 72 79 70 74 20 6e 6f 74 20 61 63 74 69 76  ecrypt not activ
f870: 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72  e.");......retur
f880: 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f  n(CKR_OPERATION_
f890: 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29  NOT_INITIALIZED)
f8a0: 3b 0a 09 7d 0a 0a 09 2a 70 75 6c 4c 61 73 74 50  ;..}...*pulLastP
f8b0: 61 72 74 4c 65 6e 20 3d 20 30 3b 0a 0a 09 69 66  artLen = 0;...if
f8c0: 20 28 70 4c 61 73 74 50 61 72 74 20 3d 3d 20 4e   (pLastPart == N
f8d0: 55 4c 4c 29 20 7b 0a 09 09 74 65 72 6d 69 6e 61  ULL) {...termina
f8e0: 74 65 5f 64 65 63 72 79 70 74 20 3d 20 30 3b 0a  te_decrypt = 0;.
f8f0: 09 7d 0a 0a 09 69 66 20 28 74 65 72 6d 69 6e 61  .}...if (termina
f900: 74 65 5f 64 65 63 72 79 70 74 29 20 7b 0a 09 09  te_decrypt) {...
f910: 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b  cackey_sessions[
f920: 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70  hSession].decryp
f930: 74 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a 09 7d  t_active = 0;..}
f940: 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20  ...mutex_retval 
f950: 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75  = cackey_mutex_u
f960: 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67  nlock(cackey_big
f970: 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65  lock);..if (mute
f980: 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b  x_retval != 0) {
f990: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
f9a0: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
f9b0: 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64  Unlocking failed
f9c0: 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  .");....return(C
f9d0: 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52  KR_GENERAL_ERROR
f9e0: 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44  );..}...CACKEY_D
f9f0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
fa00: 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25  urning CKR_OK (%
fa10: 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09  i)", CKR_OK);...
fa20: 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a  return(CKR_OK);.
fa30: 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e  }..CK_DEFINE_FUN
fa40: 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44  CTION(CK_RV, C_D
fa50: 69 67 65 73 74 49 6e 69 74 29 28 43 4b 5f 53 45  igestInit)(CK_SE
fa60: 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65  SSION_HANDLE hSe
fa70: 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e  ssion, CK_MECHAN
fa80: 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69  ISM_PTR pMechani
fa90: 73 6d 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45  sm) {..CACKEY_DE
faa0: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c  BUG_PRINTF("Call
fab0: 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61  ed.");...if (!ca
fac0: 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64  ckey_initialized
fad0: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  ) {...CACKEY_DEB
fae0: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
faf0: 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  .  Not initializ
fb00: 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  ed.");....return
fb10: 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f  (CKR_CRYPTOKI_NO
fb20: 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a  T_INITIALIZED);.
fb30: 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  .}...CACKEY_DEBU
fb40: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e  G_PRINTF("Return
fb50: 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  ing CKR_FUNCTION
fb60: 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28  _NOT_SUPPORTED (
fb70: 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49  %i)", CKR_FUNCTI
fb80: 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44  ON_NOT_SUPPORTED
fb90: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f  );...return(CKR_
fba0: 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
fbb0: 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44  PORTED);.}..CK_D
fbc0: 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43  EFINE_FUNCTION(C
fbd0: 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 29 28  K_RV, C_Digest)(
fbe0: 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c  CK_SESSION_HANDL
fbf0: 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42  E hSession, CK_B
fc00: 59 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43  YTE_PTR pData, C
fc10: 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65  K_ULONG ulDataLe
fc20: 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70  n, CK_BYTE_PTR p
fc30: 44 69 67 65 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47  Digest, CK_ULONG
fc40: 5f 50 54 52 20 70 75 6c 44 69 67 65 73 74 4c 65  _PTR pulDigestLe
fc50: 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42  n) {..CACKEY_DEB
fc60: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65  UG_PRINTF("Calle
fc70: 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63  d.");...if (!cac
fc80: 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29  key_initialized)
fc90: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
fca0: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
fcb0: 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65    Not initialize
fcc0: 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  d.");....return(
fcd0: 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54  CKR_CRYPTOKI_NOT
fce0: 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09  _INITIALIZED);..
fcf0: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  }...CACKEY_DEBUG
fd00: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69  _PRINTF("Returni
fd10: 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  ng CKR_FUNCTION_
fd20: 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25  NOT_SUPPORTED (%
fd30: 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f  i)", CKR_FUNCTIO
fd40: 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29  N_NOT_SUPPORTED)
fd50: 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46  ;...return(CKR_F
fd60: 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50  UNCTION_NOT_SUPP
fd70: 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45  ORTED);.}..CK_DE
fd80: 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b  FINE_FUNCTION(CK
fd90: 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 55 70 64  _RV, C_DigestUpd
fda0: 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f  ate)(CK_SESSION_
fdb0: 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c  HANDLE hSession,
fdc0: 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61   CK_BYTE_PTR pPa
fdd0: 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50  rt, CK_ULONG ulP
fde0: 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45  artLen) {..CACKE
fdf0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
fe00: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20  Called.");...if 
fe10: 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c  (!cackey_initial
fe20: 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59  ized) {...CACKEY
fe30: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
fe40: 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69  rror.  Not initi
fe50: 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65  alized.");....re
fe60: 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b  turn(CKR_CRYPTOK
fe70: 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45  I_NOT_INITIALIZE
fe80: 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f  D);..}...CACKEY_
fe90: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65  DEBUG_PRINTF("Re
fea0: 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43  turning CKR_FUNC
feb0: 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54  TION_NOT_SUPPORT
fec0: 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55  ED (%i)", CKR_FU
fed0: 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
fee0: 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28  RTED);...return(
fef0: 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54  CKR_FUNCTION_NOT
ff00: 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a  _SUPPORTED);.}..
ff10: 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49  CK_DEFINE_FUNCTI
ff20: 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65  ON(CK_RV, C_Dige
ff30: 73 74 4b 65 79 29 28 43 4b 5f 53 45 53 53 49 4f  stKey)(CK_SESSIO
ff40: 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f  N_HANDLE hSessio
ff50: 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e  n, CK_OBJECT_HAN
ff60: 44 4c 45 20 68 4b 65 79 29 20 7b 0a 09 43 41 43  DLE hKey) {..CAC
ff70: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
ff80: 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69  ("Called.");...i
ff90: 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69  f (!cackey_initi
ffa0: 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b  alized) {...CACK
ffb0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
ffc0: 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69  "Error.  Not ini
ffd0: 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09  tialized.");....
ffe0: 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54  return(CKR_CRYPT
fff0: 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49  OKI_NOT_INITIALI
10000 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45  ZED);..}...CACKE
10010 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
10020 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55  Returning CKR_FU
10030 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
10040 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f  RTED (%i)", CKR_
10050 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
10060 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72  PORTED);...retur
10070 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  n(CKR_FUNCTION_N
10080 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d  OT_SUPPORTED);.}
10090 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43  ..CK_DEFINE_FUNC
100a0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 69  TION(CK_RV, C_Di
100b0 67 65 73 74 46 69 6e 61 6c 29 28 43 4b 5f 53 45  gestFinal)(CK_SE
100c0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65  SSION_HANDLE hSe
100d0 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50  ssion, CK_BYTE_P
100e0 54 52 20 70 44 69 67 65 73 74 2c 20 43 4b 5f 55  TR pDigest, CK_U
100f0 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 44 69 67 65  LONG_PTR pulDige
10100 73 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59  stLen) {..CACKEY
10110 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
10120 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
10130 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69  !cackey_initiali
10140 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  zed) {...CACKEY_
10150 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
10160 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61  ror.  Not initia
10170 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  lized.");....ret
10180 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49  urn(CKR_CRYPTOKI
10190 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
101a0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44  );..}...CACKEY_D
101b0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
101c0 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54  urning CKR_FUNCT
101d0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
101e0 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e  D (%i)", CKR_FUN
101f0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
10200 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  TED);...return(C
10210 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
10220 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43  SUPPORTED);.}..C
10230 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f  K_DEFINE_FUNCTIO
10240 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 49  N(CK_RV, C_SignI
10250 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f  nit)(CK_SESSION_
10260 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c  HANDLE hSession,
10270 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54   CK_MECHANISM_PT
10280 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b  R pMechanism, CK
10290 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68  _OBJECT_HANDLE h
102a0 4b 65 79 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65  Key) {..int mute
102b0 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 68 4b 65 79  x_retval;...hKey
102c0 2d 2d 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  --;...CACKEY_DEB
102d0 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65  UG_PRINTF("Calle
102e0 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63  d.");...if (!cac
102f0 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29  key_initialized)
10300 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
10310 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
10320 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65    Not initialize
10330 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  d.");....return(
10340 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54  CKR_CRYPTOKI_NOT
10350 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09  _INITIALIZED);..
10360 7d 0a 0a 09 69 66 20 28 70 4d 65 63 68 61 6e 69  }...if (pMechani
10370 73 6d 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09  sm == NULL) {...
10380 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
10390 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 4d 65 63  NTF("Error. pMec
103a0 68 61 6e 69 73 6d 20 69 73 20 4e 55 4c 4c 2e 22  hanism is NULL."
103b0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
103c0 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b  _ARGUMENTS_BAD);
103d0 0a 09 7d 0a 0a 09 69 66 20 28 70 4d 65 63 68 61  ..}...if (pMecha
103e0 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 20  nism->mechanism 
103f0 21 3d 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 20  != CKM_RSA_PKCS 
10400 26 26 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d  && pMechanism->m
10410 65 63 68 61 6e 69 73 6d 20 21 3d 20 43 4b 4d 5f  echanism != CKM_
10420 53 48 41 31 5f 52 53 41 5f 50 4b 43 53 29 20 7b  SHA1_RSA_PKCS) {
10430 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
10440 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70  PRINTF("Error. p
10450 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61  Mechanism->mecha
10460 6e 69 73 6d 20 6e 6f 74 20 73 70 65 63 69 66 69  nism not specifi
10470 65 64 20 61 73 20 43 4b 4d 5f 52 53 41 5f 50 4b  ed as CKM_RSA_PK
10480 43 53 20 6f 72 20 43 4b 4d 5f 53 48 41 31 5f 52  CS or CKM_SHA1_R
10490 53 41 5f 50 4b 43 53 22 29 3b 0a 0a 09 09 72 65  SA_PKCS");....re
104a0 74 75 72 6e 28 43 4b 52 5f 4d 45 43 48 41 4e 49  turn(CKR_MECHANI
104b0 53 4d 5f 50 41 52 41 4d 5f 49 4e 56 41 4c 49 44  SM_PARAM_INVALID
104c0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73  );..}...if (hSes
104d0 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65  sion == 0 || hSe
104e0 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66  ssion >= (sizeof
104f0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  (cackey_sessions
10500 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65  ) / sizeof(cacke
10510 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29  y_sessions[0])))
10520 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
10530 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
10540 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66    Session out of
10550 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09   range.");......
10560 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49  return(CKR_SESSI
10570 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49  ON_HANDLE_INVALI
10580 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72  D);..}...mutex_r
10590 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d  etval = cackey_m
105a0 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79  utex_lock(cackey
105b0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28  _biglock);..if (
105c0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20  mutex_retval != 
105d0 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45  0) {...CACKEY_DE
105e0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
105f0 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c  r.  Locking fail
10600 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  ed.");....return
10610 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52  (CKR_GENERAL_ERR
10620 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63  OR);..}...if (!c
10630 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68  ackey_sessions[h
10640 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29  Session].active)
10650 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65   {...cackey_mute
10660 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f  x_unlock(cackey_
10670 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43  biglock);....CAC
10680 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
10690 28 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f  ("Error.  Sessio
106a0 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b  n not active.");
106b0 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  ......return(CKR
106c0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f  _SESSION_HANDLE_
106d0 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69  INVALID);..}...i
106e0 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f  f (cackey_sessio
106f0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67  ns[hSession].sig
10700 6e 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61  n_active) {...ca
10710 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63  ckey_mutex_unloc
10720 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b  k(cackey_biglock
10730 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  );....CACKEY_DEB
10740 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
10750 2e 20 20 53 69 67 6e 20 61 6c 72 65 61 64 79 20  .  Sign already 
10760 69 6e 20 70 72 6f 67 72 65 73 73 2e 22 29 3b 0a  in progress.");.
10770 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  .....return(CKR_
10780 4f 50 45 52 41 54 49 4f 4e 5f 41 43 54 49 56 45  OPERATION_ACTIVE
10790 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 4b 65 79  );..}...if (hKey
107a0 20 3e 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69   >= cackey_sessi
107b0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64  ons[hSession].id
107c0 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 29 20  entities_count) 
107d0 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78  {...cackey_mutex
107e0 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62  _unlock(cackey_b
107f0 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b  iglock);....CACK
10800 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
10810 22 45 72 72 6f 72 2e 20 20 4b 65 79 20 68 61 6e  "Error.  Key han
10820 64 6c 65 20 6f 75 74 20 6f 66 20 72 61 6e 67 65  dle out of range
10830 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  .");....return(C
10840 4b 52 5f 4b 45 59 5f 48 41 4e 44 4c 45 5f 49 4e  KR_KEY_HANDLE_IN
10850 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 63  VALID);..}...cac
10860 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65  key_sessions[hSe
10870 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69  ssion].sign_acti
10880 76 65 20 3d 20 31 3b 0a 0a 09 63 61 63 6b 65 79  ve = 1;...cackey
10890 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69  _sessions[hSessi
108a0 6f 6e 5d 2e 73 69 67 6e 5f 6d 65 63 68 61 6e 69  on].sign_mechani
108b0 73 6d 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d 2d  sm = pMechanism-
108c0 3e 6d 65 63 68 61 6e 69 73 6d 3b 0a 0a 09 63 61  >mechanism;...ca
108d0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53  ckey_sessions[hS
108e0 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66  ession].sign_buf
108f0 6c 65 6e 20 3d 20 31 32 38 3b 0a 09 63 61 63 6b  len = 128;..cack
10900 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
10910 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73  sion].sign_bufus
10920 65 64 20 3d 20 30 3b 0a 09 63 61 63 6b 65 79 5f  ed = 0;..cackey_
10930 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
10940 6e 5d 2e 73 69 67 6e 5f 62 75 66 20 3d 20 6d 61  n].sign_buf = ma
10950 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 61 63  lloc(sizeof(*cac
10960 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65  key_sessions[hSe
10970 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29  ssion].sign_buf)
10980 20 2a 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f   * cackey_sessio
10990 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67  ns[hSession].sig
109a0 6e 5f 62 75 66 6c 65 6e 29 3b 0a 0a 09 6d 75 74  n_buflen);...mut
109b0 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b  ex_retval = cack
109c0 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28  ey_mutex_unlock(
109d0 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b  cackey_biglock);
109e0 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76  ..if (mutex_retv
109f0 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43  al != 0) {...CAC
10a00 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
10a10 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b  ("Error.  Unlock
10a20 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a  ing failed.");..
10a30 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e  ..return(CKR_GEN
10a40 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a  ERAL_ERROR);..}.
10a50 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
10a60 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
10a70 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43   CKR_OK (%i)", C
10a80 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e  KR_OK);...return
10a90 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f  (CKR_OK);.}..CK_
10aa0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28  DEFINE_FUNCTION(
10ab0 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 29 28 43  CK_RV, C_Sign)(C
10ac0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45  K_SESSION_HANDLE
10ad0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59   hSession, CK_BY
10ae0 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b  TE_PTR pData, CK
10af0 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e  _ULONG ulDataLen
10b00 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53  , CK_BYTE_PTR pS
10b10 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f  ignature, CK_ULO
10b20 4e 47 5f 50 54 52 20 70 75 6c 53 69 67 6e 61 74  NG_PTR pulSignat
10b30 75 72 65 4c 65 6e 29 20 7b 0a 09 43 4b 5f 52 56  ureLen) {..CK_RV
10b40 20 73 69 67 6e 5f 72 65 74 3b 0a 0a 09 43 41 43   sign_ret;...CAC
10b50 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
10b60 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69  ("Called.");...i
10b70 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69  f (!cackey_initi
10b80 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b  alized) {...CACK
10b90 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
10ba0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69  "Error.  Not ini
10bb0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09  tialized.");....
10bc0 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54  return(CKR_CRYPT
10bd0 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49  OKI_NOT_INITIALI
10be0 5a 45 44 29 3b 0a 09 7d 0a 0a 09 73 69 67 6e 5f  ZED);..}...sign_
10bf0 72 65 74 20 3d 20 43 5f 53 69 67 6e 55 70 64 61  ret = C_SignUpda
10c00 74 65 28 68 53 65 73 73 69 6f 6e 2c 20 70 44 61  te(hSession, pDa
10c10 74 61 2c 20 75 6c 44 61 74 61 4c 65 6e 29 3b 0a  ta, ulDataLen);.
10c20 09 69 66 20 28 73 69 67 6e 5f 72 65 74 20 21 3d  .if (sign_ret !=
10c30 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43   CKR_OK) {...CAC
10c40 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
10c50 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e 55 70  ("Error.  SignUp
10c60 64 61 74 65 28 29 20 72 65 74 75 72 6e 65 64 20  date() returned 
10c70 66 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25 6c  failure (rv = %l
10c80 75 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20  u).", (unsigned 
10c90 6c 6f 6e 67 29 20 73 69 67 6e 5f 72 65 74 29 3b  long) sign_ret);
10ca0 0a 0a 09 09 72 65 74 75 72 6e 28 73 69 67 6e 5f  ....return(sign_
10cb0 72 65 74 29 3b 0a 09 7d 0a 0a 09 73 69 67 6e 5f  ret);..}...sign_
10cc0 72 65 74 20 3d 20 43 5f 53 69 67 6e 46 69 6e 61  ret = C_SignFina
10cd0 6c 28 68 53 65 73 73 69 6f 6e 2c 20 70 53 69 67  l(hSession, pSig
10ce0 6e 61 74 75 72 65 2c 20 70 75 6c 53 69 67 6e 61  nature, pulSigna
10cf0 74 75 72 65 4c 65 6e 29 3b 0a 09 69 66 20 28 73  tureLen);..if (s
10d00 69 67 6e 5f 72 65 74 20 21 3d 20 43 4b 52 5f 4f  ign_ret != CKR_O
10d10 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45  K) {...CACKEY_DE
10d20 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
10d30 72 2e 20 20 53 69 67 6e 46 69 6e 61 6c 28 29 20  r.  SignFinal() 
10d40 72 65 74 75 72 6e 65 64 20 66 61 69 6c 75 72 65  returned failure
10d50 20 28 72 76 20 3d 20 25 6c 75 29 2e 22 2c 20 28   (rv = %lu).", (
10d60 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73  unsigned long) s
10d70 69 67 6e 5f 72 65 74 29 3b 0a 0a 09 09 72 65 74  ign_ret);....ret
10d80 75 72 6e 28 73 69 67 6e 5f 72 65 74 29 3b 0a 09  urn(sign_ret);..
10d90 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  }...CACKEY_DEBUG
10da0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69  _PRINTF("Returni
10db0 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c  ng CKR_OK (%i)",
10dc0 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75   CKR_OK);...retu
10dd0 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43  rn(CKR_OK);.}..C
10de0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f  K_DEFINE_FUNCTIO
10df0 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 55  N(CK_RV, C_SignU
10e00 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f  pdate)(CK_SESSIO
10e10 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f  N_HANDLE hSessio
10e20 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70  n, CK_BYTE_PTR p
10e30 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75  Part, CK_ULONG u
10e40 6c 50 61 72 74 4c 65 6e 29 20 7b 0a 09 69 6e 74  lPartLen) {..int
10e50 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a   mutex_retval;..
10e60 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
10e70 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b  INTF("Called.");
10e80 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69  ...if (!cackey_i
10e90 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09  nitialized) {...
10ea0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
10eb0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74  NTF("Error.  Not
10ec0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b   initialized.");
10ed0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43  ....return(CKR_C
10ee0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54  RYPTOKI_NOT_INIT
10ef0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69  IALIZED);..}...i
10f00 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30  f (hSession == 0
10f10 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20   || hSession >= 
10f20 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73  (sizeof(cackey_s
10f30 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f  essions) / sizeo
10f40 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  f(cackey_session
10f50 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b  s[0]))) {...CACK
10f60 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
10f70 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e  "Error.  Session
10f80 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29   out of range.")
10f90 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b  ;......return(CK
10fa0 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45  R_SESSION_HANDLE
10fb0 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09  _INVALID);..}...
10fc0 69 66 20 28 70 50 61 72 74 20 3d 3d 20 4e 55 4c  if (pPart == NUL
10fd0 4c 20 26 26 20 75 6c 50 61 72 74 4c 65 6e 20 3d  L && ulPartLen =
10fe0 3d 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72  = 0) {.../* Shor
10ff0 74 20 63 69 72 63 75 69 74 20 69 66 20 77 65 20  t circuit if we 
11000 61 72 65 20 61 73 6b 65 64 20 74 6f 20 73 69 67  are asked to sig
11010 6e 20 6e 6f 74 68 69 6e 67 2e 2e 2e 20 2a 2f 0a  n nothing... */.
11020 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
11030 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
11040 20 43 4b 52 5f 4f 4b 20 28 25 69 29 20 28 73 68   CKR_OK (%i) (sh
11050 6f 72 74 20 63 69 72 63 75 69 74 29 22 2c 20 43  ort circuit)", C
11060 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72  KR_OK);....retur
11070 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09  n(CKR_OK);..}...
11080 69 66 20 28 70 50 61 72 74 20 3d 3d 20 4e 55 4c  if (pPart == NUL
11090 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45  L) {...CACKEY_DE
110a0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
110b0 72 2e 20 70 50 61 72 74 20 69 73 20 4e 55 4c 4c  r. pPart is NULL
110c0 2c 20 62 75 74 20 75 6c 50 61 72 74 4c 65 6e 20  , but ulPartLen 
110d0 69 73 20 6e 6f 74 20 30 2e 22 29 3b 0a 0a 09 09  is not 0.");....
110e0 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d  return(CKR_ARGUM
110f0 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09  ENTS_BAD);..}...
11100 69 66 20 28 75 6c 50 61 72 74 4c 65 6e 20 3d 3d  if (ulPartLen ==
11110 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44   0) {...CACKEY_D
11120 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
11130 6f 72 2e 20 75 6c 50 61 72 74 4c 65 6e 20 69 73  or. ulPartLen is
11140 20 30 2c 20 62 75 74 20 70 50 61 72 74 20 69 73   0, but pPart is
11150 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09   not NULL.");...
11160 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55  .return(CKR_ARGU
11170 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a  MENTS_BAD);..}..
11180 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20  .mutex_retval = 
11190 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63  cackey_mutex_loc
111a0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b  k(cackey_biglock
111b0 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65  );..if (mutex_re
111c0 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43  tval != 0) {...C
111d0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
111e0 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b  TF("Error.  Lock
111f0 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a  ing failed.");..
11200 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e  ..return(CKR_GEN
11210 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a  ERAL_ERROR);..}.
11220 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65  ..if (!cackey_se
11230 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d  ssions[hSession]
11240 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63  .active) {...cac
11250 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b  key_mutex_unlock
11260 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29  (cackey_biglock)
11270 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55  ;....CACKEY_DEBU
11280 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
11290 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63    Session not ac
112a0 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65  tive.");......re
112b0 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e  turn(CKR_SESSION
112c0 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29  _HANDLE_INVALID)
112d0 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b  ;..}...if (!cack
112e0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
112f0 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76  sion].sign_activ
11300 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75  e) {...cackey_mu
11310 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65  tex_unlock(cacke
11320 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43  y_biglock);....C
11330 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
11340 54 46 28 22 45 72 72 6f 72 2e 20 20 53 69 67 6e  TF("Error.  Sign
11350 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a   not active.");.
11360 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  .....return(CKR_
11370 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e  OPERATION_NOT_IN
11380 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a  ITIALIZED);..}..
11390 09 73 77 69 74 63 68 20 28 63 61 63 6b 65 79 5f  .switch (cackey_
113a0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
113b0 6e 5d 2e 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73  n].sign_mechanis
113c0 6d 29 20 7b 0a 09 09 63 61 73 65 20 43 4b 4d 5f  m) {...case CKM_
113d0 52 53 41 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20  RSA_PKCS:..../* 
113e0 41 63 63 75 6d 75 6c 61 74 65 20 64 69 72 65 63  Accumulate direc
113f0 74 6c 79 20 2a 2f 0a 09 09 09 69 66 20 28 28 63  tly */....if ((c
11400 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68  ackey_sessions[h
11410 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75  Session].sign_bu
11420 66 75 73 65 64 20 2b 20 75 6c 50 61 72 74 4c 65  fused + ulPartLe
11430 6e 29 20 3e 20 63 61 63 6b 65 79 5f 73 65 73 73  n) > cackey_sess
11440 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73  ions[hSession].s
11450 69 67 6e 5f 62 75 66 6c 65 6e 29 20 7b 0a 09 09  ign_buflen) {...
11460 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  ..cackey_session
11470 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e  s[hSession].sign
11480 5f 62 75 66 6c 65 6e 20 2a 3d 20 32 3b 0a 0a 09  _buflen *= 2;...
11490 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f  ...cackey_sessio
114a0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67  ns[hSession].sig
114b0 6e 5f 62 75 66 20 3d 20 72 65 61 6c 6c 6f 63 28  n_buf = realloc(
114c0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b  cackey_sessions[
114d0 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62  hSession].sign_b
114e0 75 66 2c 20 73 69 7a 65 6f 66 28 2a 63 61 63 6b  uf, sizeof(*cack
114f0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
11500 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20  sion].sign_buf) 
11510 2a 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  * cackey_session
11520 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e  s[hSession].sign
11530 5f 62 75 66 6c 65 6e 29 3b 0a 09 09 09 7d 0a 0a  _buflen);....}..
11540 09 09 09 6d 65 6d 63 70 79 28 63 61 63 6b 65 79  ...memcpy(cackey
11550 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69  _sessions[hSessi
11560 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 20 2b 20 63  on].sign_buf + c
11570 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68  ackey_sessions[h
11580 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75  Session].sign_bu
11590 66 75 73 65 64 2c 20 70 50 61 72 74 2c 20 75 6c  fused, pPart, ul
115a0 50 61 72 74 4c 65 6e 29 3b 0a 0a 09 09 09 63 61  PartLen);.....ca
115b0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53  ckey_sessions[hS
115c0 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66  ession].sign_buf
115d0 75 73 65 64 20 2b 3d 20 75 6c 50 61 72 74 4c 65  used += ulPartLe
115e0 6e 3b 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09  n;.....break;...
115f0 63 61 73 65 20 43 4b 4d 5f 53 48 41 31 5f 52 53  case CKM_SHA1_RS
11600 41 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 63  A_PKCS:..../* Ac
11610 63 75 6d 75 6c 61 74 65 20 69 6e 74 6f 20 61 20  cumulate into a 
11620 53 48 41 31 20 68 61 73 68 20 2a 2f 0a 09 09 09  SHA1 hash */....
11630 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c  cackey_mutex_unl
11640 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f  ock(cackey_biglo
11650 63 6b 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f  ck);.....CACKEY_
11660 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65  DEBUG_PRINTF("Re
11670 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43  turning CKR_FUNC
11680 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54  TION_NOT_SUPPORT
11690 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55  ED (%i)", CKR_FU
116a0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
116b0 52 54 45 44 29 3b 0a 0a 09 09 09 72 65 74 75 72  RTED);.....retur
116c0 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  n(CKR_FUNCTION_N
116d0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 09  OT_SUPPORTED);..
116e0 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 6d 75  ..break;..}...mu
116f0 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63  tex_retval = cac
11700 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b  key_mutex_unlock
11710 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29  (cackey_biglock)
11720 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74  ;..if (mutex_ret
11730 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41  val != 0) {...CA
11740 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
11750 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63  F("Error.  Unloc
11760 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a  king failed.");.
11770 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45  ...return(CKR_GE
11780 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  NERAL_ERROR);..}
11790 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
117a0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
117b0 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20  g CKR_OK (%i)", 
117c0 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72  CKR_OK);...retur
117d0 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b  n(CKR_OK);.}..CK
117e0 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e  _DEFINE_FUNCTION
117f0 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 46 69  (CK_RV, C_SignFi
11800 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f  nal)(CK_SESSION_
11810 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c  HANDLE hSession,
11820 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69   CK_BYTE_PTR pSi
11830 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e  gnature, CK_ULON
11840 47 5f 50 54 52 20 70 75 6c 53 69 67 6e 61 74 75  G_PTR pulSignatu
11850 72 65 4c 65 6e 29 20 7b 0a 09 73 74 61 74 69 63  reLen) {..static
11860 20 43 4b 5f 42 59 54 45 20 73 69 67 62 75 66 5b   CK_BYTE sigbuf[
11870 31 30 32 34 5d 3b 0a 09 73 73 69 7a 65 5f 74 20  1024];..ssize_t 
11880 73 69 67 62 75 66 6c 65 6e 3b 0a 09 43 4b 5f 52  sigbuflen;..CK_R
11890 56 20 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 47  V retval = CKR_G
118a0 45 4e 45 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 69  ENERAL_ERROR;..i
118b0 6e 74 20 74 65 72 6d 69 6e 61 74 65 5f 73 69 67  nt terminate_sig
118c0 6e 20 3d 20 31 3b 0a 09 69 6e 74 20 6d 75 74 65  n = 1;..int mute
118d0 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b  x_retval;...CACK
118e0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
118f0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66  "Called.");...if
11900 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61   (!cackey_initia
11910 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45  lized) {...CACKE
11920 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
11930 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74  Error.  Not init
11940 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72  ialized.");....r
11950 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f  eturn(CKR_CRYPTO
11960 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a  KI_NOT_INITIALIZ
11970 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 75  ED);..}...if (pu
11980 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 20 3d 3d  lSignatureLen ==
11990 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45   NULL) {...CACKE
119a0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
119b0 45 72 72 6f 72 2e 20 70 75 6c 53 69 67 6e 61 74  Error. pulSignat
119c0 75 72 65 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22  ureLen is NULL."
119d0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
119e0 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b  _ARGUMENTS_BAD);
119f0 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69  ..}...if (hSessi
11a00 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73  on == 0 || hSess
11a10 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63  ion >= (sizeof(c
11a20 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20  ackey_sessions) 
11a30 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f  / sizeof(cackey_
11a40 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b  sessions[0]))) {
11a50 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
11a60 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
11a70 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72  Session out of r
11a80 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65  ange.");......re
11a90 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e  turn(CKR_SESSION
11aa0 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29  _HANDLE_INVALID)
11ab0 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74  ;..}...mutex_ret
11ac0 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74  val = cackey_mut
11ad0 65 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62  ex_lock(cackey_b
11ae0 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75  iglock);..if (mu
11af0 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29  tex_retval != 0)
11b00 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
11b10 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
11b20 20 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64    Locking failed
11b30 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  .");....return(C
11b40 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52  KR_GENERAL_ERROR
11b50 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63  );..}...if (!cac
11b60 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65  key_sessions[hSe
11b70 73 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b  ssion].active) {
11b80 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f  ...cackey_mutex_
11b90 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69  unlock(cackey_bi
11ba0 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45  glock);....CACKE
11bb0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
11bc0 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20  Error.  Session 
11bd0 6e 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09  not active.");..
11be0 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53  ....return(CKR_S
11bf0 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e  ESSION_HANDLE_IN
11c00 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20  VALID);..}...if 
11c10 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  (!cackey_session
11c20 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e  s[hSession].sign
11c30 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63  _active) {...cac
11c40 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b  key_mutex_unlock
11c50 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29  (cackey_biglock)
11c60 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55  ;....CACKEY_DEBU
11c70 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
11c80 20 20 53 69 67 6e 20 6e 6f 74 20 61 63 74 69 76    Sign not activ
11c90 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72  e.");......retur
11ca0 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f  n(CKR_OPERATION_
11cb0 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29  NOT_INITIALIZED)
11cc0 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 68 20 28 63  ;..}...switch (c
11cd0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68  ackey_sessions[h
11ce0 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 6d 65  Session].sign_me
11cf0 63 68 61 6e 69 73 6d 29 20 7b 0a 09 09 63 61 73  chanism) {...cas
11d00 65 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 3a 0a  e CKM_RSA_PKCS:.
11d10 09 09 09 73 69 67 62 75 66 6c 65 6e 20 3d 20 2d  ...sigbuflen = -
11d20 31 3b 0a 0a 09 09 09 2f 2a 20 58 58 58 3a 20 41  1;...../* XXX: A
11d30 73 6b 20 63 61 72 64 20 74 6f 20 73 69 67 6e 20  sk card to sign 
11d40 2a 2f 0a 0a 09 09 09 69 66 20 28 73 69 67 62 75  */.....if (sigbu
11d50 66 6c 65 6e 20 3c 20 30 29 20 7b 0a 09 09 09 09  flen < 0) {.....
11d60 2f 2a 20 53 69 67 6e 69 6e 67 20 66 61 69 6c 65  /* Signing faile
11d70 64 2e 20 2a 2f 0a 09 09 09 09 72 65 74 76 61 6c  d. */.....retval
11d80 20 3d 20 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45   = CKR_GENERAL_E
11d90 52 52 4f 52 3b 0a 09 09 09 7d 20 65 6c 73 65 20  RROR;....} else 
11da0 69 66 20 28 28 28 75 6e 73 69 67 6e 65 64 20 6c  if (((unsigned l
11db0 6f 6e 67 29 20 73 69 67 62 75 66 6c 65 6e 29 20  ong) sigbuflen) 
11dc0 3e 20 2a 70 75 6c 53 69 67 6e 61 74 75 72 65 4c  > *pulSignatureL
11dd0 65 6e 20 26 26 20 70 53 69 67 6e 61 74 75 72 65  en && pSignature
11de0 29 20 7b 0a 09 09 09 09 2f 2a 20 53 69 67 6e 65  ) {...../* Signe
11df0 64 20 64 61 74 61 20 74 6f 6f 20 6c 61 72 67 65  d data too large
11e00 20 2a 2f 0a 09 09 09 09 72 65 74 76 61 6c 20 3d   */.....retval =
11e10 20 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f   CKR_BUFFER_TOO_
11e20 53 4d 41 4c 4c 3b 0a 0a 09 09 09 09 74 65 72 6d  SMALL;......term
11e30 69 6e 61 74 65 5f 73 69 67 6e 20 3d 20 30 3b 0a  inate_sign = 0;.
11e40 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
11e50 74 65 72 6d 69 6e 61 74 65 5f 73 69 67 6e 20 3d  terminate_sign =
11e60 20 30 3b 0a 0a 09 09 09 09 69 66 20 28 70 53 69   0;......if (pSi
11e70 67 6e 61 74 75 72 65 29 20 7b 0a 09 09 09 09 09  gnature) {......
11e80 6d 65 6d 63 70 79 28 70 53 69 67 6e 61 74 75 72  memcpy(pSignatur
11e90 65 2c 20 73 69 67 62 75 66 2c 20 73 69 67 62 75  e, sigbuf, sigbu
11ea0 66 6c 65 6e 29 3b 0a 0a 09 09 09 09 09 74 65 72  flen);.......ter
11eb0 6d 69 6e 61 74 65 5f 73 69 67 6e 20 3d 20 31 3b  minate_sign = 1;
11ec0 0a 09 09 09 09 7d 0a 0a 09 09 09 09 2a 70 75 6c  .....}......*pul
11ed0 53 69 67 6e 61 74 75 72 65 4c 65 6e 20 3d 20 73  SignatureLen = s
11ee0 69 67 62 75 66 6c 65 6e 3b 0a 0a 09 09 09 09 72  igbuflen;......r
11ef0 65 74 76 61 6c 20 3d 20 43 4b 52 5f 4f 4b 3b 0a  etval = CKR_OK;.
11f00 09 09 09 7d 0a 0a 09 09 09 62 72 65 61 6b 3b 0a  ...}.....break;.
11f10 09 09 63 61 73 65 20 43 4b 4d 5f 53 48 41 31 5f  ..case CKM_SHA1_
11f20 52 53 41 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20  RSA_PKCS:..../* 
11f30 41 63 63 75 6d 75 6c 61 74 65 20 69 6e 74 6f 20  Accumulate into 
11f40 61 20 53 48 41 31 20 68 61 73 68 20 2a 2f 0a 09  a SHA1 hash */..
11f50 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75  ..cackey_mutex_u
11f60 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67  nlock(cackey_big
11f70 6c 6f 63 6b 29 3b 0a 0a 09 09 09 43 41 43 4b 45  lock);.....CACKE
11f80 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
11f90 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55  Returning CKR_FU
11fa0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
11fb0 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f  RTED (%i)", CKR_
11fc0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
11fd0 50 4f 52 54 45 44 29 3b 0a 0a 09 09 09 72 65 74  PORTED);.....ret
11fe0 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  urn(CKR_FUNCTION
11ff0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b  _NOT_SUPPORTED);
12000 0a 09 09 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09  ....break;..}...
12010 69 66 20 28 74 65 72 6d 69 6e 61 74 65 5f 73 69  if (terminate_si
12020 67 6e 29 20 7b 0a 09 09 69 66 20 28 63 61 63 6b  gn) {...if (cack
12030 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
12040 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20  sion].sign_buf) 
12050 7b 0a 09 09 09 66 72 65 65 28 63 61 63 6b 65 79  {....free(cackey
12060 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69  _sessions[hSessi
12070 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 3b 0a 09  on].sign_buf);..
12080 09 7d 0a 0a 09 09 63 61 63 6b 65 79 5f 73 65 73  .}....cackey_ses
12090 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e  sions[hSession].
120a0 73 69 67 6e 5f 61 63 74 69 76 65 20 3d 20 30 3b  sign_active = 0;
120b0 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76  ..}...mutex_retv
120c0 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65  al = cackey_mute
120d0 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f  x_unlock(cackey_
120e0 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d  biglock);..if (m
120f0 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30  utex_retval != 0
12100 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  ) {...CACKEY_DEB
12110 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
12120 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69  .  Unlocking fai
12130 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72  led.");....retur
12140 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52  n(CKR_GENERAL_ER
12150 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45  ROR);..}...CACKE
12160 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
12170 52 65 74 75 72 6e 69 6e 67 20 25 69 22 2c 20 28  Returning %i", (
12180 69 6e 74 29 20 72 65 74 76 61 6c 29 3b 0a 0a 09  int) retval);...
12190 72 65 74 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a  return(retval);.
121a0 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e  }..CK_DEFINE_FUN
121b0 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53  CTION(CK_RV, C_S
121c0 69 67 6e 52 65 63 6f 76 65 72 49 6e 69 74 29 28  ignRecoverInit)(
121d0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c  CK_SESSION_HANDL
121e0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d  E hSession, CK_M
121f0 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65  ECHANISM_PTR pMe
12200 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45  chanism, CK_OBJE
12210 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20  CT_HANDLE hKey) 
12220 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  {..CACKEY_DEBUG_
12230 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22  PRINTF("Called."
12240 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79  );...if (!cackey
12250 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a  _initialized) {.
12260 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
12270 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e  RINTF("Error.  N
12280 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22  ot initialized."
12290 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
122a0 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e  _CRYPTOKI_NOT_IN
122b0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a  ITIALIZED);..}..
122c0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
122d0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20  INTF("Returning 
122e0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54  CKR_FUNCTION_NOT
122f0 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22  _SUPPORTED (%i)"
12300 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  , CKR_FUNCTION_N
12310 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a  OT_SUPPORTED);..
12320 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43  .return(CKR_FUNC
12330 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54  TION_NOT_SUPPORT
12340 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e  ED);.}..CK_DEFIN
12350 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56  E_FUNCTION(CK_RV
12360 2c 20 43 5f 53 69 67 6e 52 65 63 6f 76 65 72 29  , C_SignRecover)
12370 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44  (CK_SESSION_HAND
12380 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f  LE hSession, CK_
12390 42 59 54 45 5f 50 54 52 20 70 44 61 74 61 2c 20  BYTE_PTR pData, 
123a0 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c  CK_ULONG ulDataL
123b0 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20  en, CK_BYTE_PTR 
123c0 70 53 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55  pSignature, CK_U
123d0 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 53 69 67 6e  LONG_PTR pulSign
123e0 61 74 75 72 65 4c 65 6e 29 20 7b 0a 09 43 41 43  atureLen) {..CAC
123f0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
12400 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69  ("Called.");...i
12410 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69  f (!cackey_initi
12420 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b  alized) {...CACK
12430 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
12440 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69  "Error.  Not ini
12450 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09  tialized.");....
12460 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54  return(CKR_CRYPT
12470 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49  OKI_NOT_INITIALI
12480 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45  ZED);..}...CACKE
12490 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
124a0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55  Returning CKR_FU
124b0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
124c0 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f  RTED (%i)", CKR_
124d0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
124e0 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72  PORTED);...retur
124f0 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  n(CKR_FUNCTION_N
12500 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d  OT_SUPPORTED);.}
12510 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43  ..CK_DEFINE_FUNC
12520 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65  TION(CK_RV, C_Ve
12530 72 69 66 79 49 6e 69 74 29 28 43 4b 5f 53 45 53  rifyInit)(CK_SES
12540 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73  SION_HANDLE hSes
12550 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49  sion, CK_MECHANI
12560 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73  SM_PTR pMechanis
12570 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e  m, CK_OBJECT_HAN
12580 44 4c 45 20 68 4b 65 79 29 20 7b 0a 09 43 41 43  DLE hKey) {..CAC
12590 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
125a0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69  ("Called.");...i
125b0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69  f (!cackey_initi
125c0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b  alized) {...CACK
125d0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
125e0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69  "Error.  Not ini
125f0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09  tialized.");....
12600 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54  return(CKR_CRYPT
12610 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49  OKI_NOT_INITIALI
12620 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45  ZED);..}...CACKE
12630 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
12640 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55  Returning CKR_FU
12650 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
12660 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f  RTED (%i)", CKR_
12670 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
12680 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72  PORTED);...retur
12690 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  n(CKR_FUNCTION_N
126a0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d  OT_SUPPORTED);.}
126b0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43  ..CK_DEFINE_FUNC
126c0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65  TION(CK_RV, C_Ve
126d0 72 69 66 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e  rify)(CK_SESSION
126e0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e  _HANDLE hSession
126f0 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44  , CK_BYTE_PTR pD
12700 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c  ata, CK_ULONG ul
12710 44 61 74 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45  DataLen, CK_BYTE
12720 5f 50 54 52 20 70 53 69 67 6e 61 74 75 72 65 2c  _PTR pSignature,
12730 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 69 67 6e   CK_ULONG ulSign
12740 61 74 75 72 65 4c 65 6e 29 20 7b 0a 09 43 41 43  atureLen) {..CAC
12750 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
12760 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69  ("Called.");...i
12770 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69  f (!cackey_initi
12780 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b  alized) {...CACK
12790 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
127a0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69  "Error.  Not ini
127b0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09  tialized.");....
127c0 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54  return(CKR_CRYPT
127d0 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49  OKI_NOT_INITIALI
127e0 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45  ZED);..}...CACKE
127f0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
12800 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55  Returning CKR_FU
12810 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
12820 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f  RTED (%i)", CKR_
12830 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
12840 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72  PORTED);...retur
12850 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  n(CKR_FUNCTION_N
12860 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d  OT_SUPPORTED);.}
12870 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43  ..CK_DEFINE_FUNC
12880 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65  TION(CK_RV, C_Ve
12890 72 69 66 79 55 70 64 61 74 65 29 28 43 4b 5f 53  rifyUpdate)(CK_S
128a0 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53  ESSION_HANDLE hS
128b0 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f  ession, CK_BYTE_
128c0 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c  PTR pPart, CK_UL
128d0 4f 4e 47 20 75 6c 50 61 72 74 4c 65 6e 29 20 7b  ONG ulPartLen) {
128e0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
128f0 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29  RINTF("Called.")
12900 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f  ;...if (!cackey_
12910 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09  initialized) {..
12920 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
12930 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f  INTF("Error.  No
12940 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29  t initialized.")
12950 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  ;....return(CKR_
12960 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49  CRYPTOKI_NOT_INI
12970 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09  TIALIZED);..}...
12980 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
12990 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43  NTF("Returning C
129a0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
129b0 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c  SUPPORTED (%i)",
129c0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f   CKR_FUNCTION_NO
129d0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09  T_SUPPORTED);...
129e0 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54  return(CKR_FUNCT
129f0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
12a00 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45  D);.}..CK_DEFINE
12a10 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c  _FUNCTION(CK_RV,
12a20 20 43 5f 56 65 72 69 66 79 46 69 6e 61 6c 29 28   C_VerifyFinal)(
12a30 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c  CK_SESSION_HANDL
12a40 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42  E hSession, CK_B
12a50 59 54 45 5f 50 54 52 20 70 53 69 67 6e 61 74 75  YTE_PTR pSignatu
12a60 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53  re, CK_ULONG ulS
12a70 69 67 6e 61 74 75 72 65 4c 65 6e 29 20 7b 0a 09  ignatureLen) {..
12a80 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
12a90 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a  NTF("Called.");.
12aa0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e  ..if (!cackey_in
12ab0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43  itialized) {...C
12ac0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
12ad0 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20  TF("Error.  Not 
12ae0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a  initialized.");.
12af0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52  ...return(CKR_CR
12b00 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49  YPTOKI_NOT_INITI
12b10 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41  ALIZED);..}...CA
12b20 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
12b30 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52  F("Returning CKR
12b40 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55  _FUNCTION_NOT_SU
12b50 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43  PPORTED (%i)", C
12b60 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
12b70 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65  SUPPORTED);...re
12b80 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f  turn(CKR_FUNCTIO
12b90 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29  N_NOT_SUPPORTED)
12ba0 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46  ;.}..CK_DEFINE_F
12bb0 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43  UNCTION(CK_RV, C
12bc0 5f 56 65 72 69 66 79 52 65 63 6f 76 65 72 49 6e  _VerifyRecoverIn
12bd0 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48  it)(CK_SESSION_H
12be0 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20  ANDLE hSession, 
12bf0 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52  CK_MECHANISM_PTR
12c00 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f   pMechanism, CK_
12c10 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b  OBJECT_HANDLE hK
12c20 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45  ey) {..CACKEY_DE
12c30 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c  BUG_PRINTF("Call
12c40 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61  ed.");...if (!ca
12c50 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64  ckey_initialized
12c60 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  ) {...CACKEY_DEB
12c70 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
12c80 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  .  Not initializ
12c90 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  ed.");....return
12ca0 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f  (CKR_CRYPTOKI_NO
12cb0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a  T_INITIALIZED);.
12cc0 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  .}...CACKEY_DEBU
12cd0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e  G_PRINTF("Return
12ce0 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  ing CKR_FUNCTION
12cf0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28  _NOT_SUPPORTED (
12d00 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49  %i)", CKR_FUNCTI
12d10 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44  ON_NOT_SUPPORTED
12d20 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f  );...return(CKR_
12d30 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
12d40 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44  PORTED);.}..CK_D
12d50 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43  EFINE_FUNCTION(C
12d60 4b 5f 52 56 2c 20 43 5f 56 65 72 69 66 79 52 65  K_RV, C_VerifyRe
12d70 63 6f 76 65 72 29 28 43 4b 5f 53 45 53 53 49 4f  cover)(CK_SESSIO
12d80 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f  N_HANDLE hSessio
12d90 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70  n, CK_BYTE_PTR p
12da0 53 69 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c  Signature, CK_UL
12db0 4f 4e 47 20 75 6c 53 69 67 6e 61 74 75 72 65 4c  ONG ulSignatureL
12dc0 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20  en, CK_BYTE_PTR 
12dd0 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 5f  pData, CK_ULONG_
12de0 50 54 52 20 70 75 6c 44 61 74 61 4c 65 6e 29 20  PTR pulDataLen) 
12df0 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  {..CACKEY_DEBUG_
12e00 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22  PRINTF("Called."
12e10 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79  );...if (!cackey
12e20 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a  _initialized) {.
12e30 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
12e40 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e  RINTF("Error.  N
12e50 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22  ot initialized."
12e60 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
12e70 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e  _CRYPTOKI_NOT_IN
12e80 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a  ITIALIZED);..}..
12e90 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
12ea0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20  INTF("Returning 
12eb0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54  CKR_FUNCTION_NOT
12ec0 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22  _SUPPORTED (%i)"
12ed0 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  , CKR_FUNCTION_N
12ee0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a  OT_SUPPORTED);..
12ef0 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43  .return(CKR_FUNC
12f00 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54  TION_NOT_SUPPORT
12f10 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e  ED);.}..CK_DEFIN
12f20 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56  E_FUNCTION(CK_RV
12f30 2c 20 43 5f 44 69 67 65 73 74 45 6e 63 72 79 70  , C_DigestEncryp
12f40 74 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53  tUpdate)(CK_SESS
12f50 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73  ION_HANDLE hSess
12f60 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52  ion, CK_BYTE_PTR
12f70 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47   pPart, CK_ULONG
12f80 20 75 6c 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42   ulPartLen, CK_B
12f90 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 74  YTE_PTR pEncrypt
12fa0 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47  edPart, CK_ULONG
12fb0 5f 50 54 52 20 70 75 6c 45 6e 63 72 79 70 74 65  _PTR pulEncrypte
12fc0 64 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43  dPartLen) {..CAC
12fd0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
12fe0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69  ("Called.");...i
12ff0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69  f (!cackey_initi
13000 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b  alized) {...CACK
13010 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
13020 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69  "Error.  Not ini
13030 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09  tialized.");....
13040 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54  return(CKR_CRYPT
13050 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49  OKI_NOT_INITIALI
13060 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45  ZED);..}...CACKE
13070 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
13080 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55  Returning CKR_FU
13090 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
130a0 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f  RTED (%i)", CKR_
130b0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
130c0 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72  PORTED);...retur
130d0 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  n(CKR_FUNCTION_N
130e0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d  OT_SUPPORTED);.}
130f0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43  ..CK_DEFINE_FUNC
13100 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65  TION(CK_RV, C_De
13110 63 72 79 70 74 44 69 67 65 73 74 55 70 64 61 74  cryptDigestUpdat
13120 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41  e)(CK_SESSION_HA
13130 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43  NDLE hSession, C
13140 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72  K_BYTE_PTR pEncr
13150 79 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c  yptedPart, CK_UL
13160 4f 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 64 50  ONG ulEncryptedP
13170 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f  artLen, CK_BYTE_
13180 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c  PTR pPart, CK_UL
13190 4f 4e 47 5f 50 54 52 20 70 75 6c 50 61 72 74 4c  ONG_PTR pulPartL
131a0 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45  en) {..CACKEY_DE
131b0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c  BUG_PRINTF("Call
131c0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61  ed.");...if (!ca
131d0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64  ckey_initialized
131e0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  ) {...CACKEY_DEB
131f0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
13200 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  .  Not initializ
13210 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  ed.");....return
13220 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f  (CKR_CRYPTOKI_NO
13230 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a  T_INITIALIZED);.
13240 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  .}...CACKEY_DEBU
13250 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e  G_PRINTF("Return
13260 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  ing CKR_FUNCTION
13270 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28  _NOT_SUPPORTED (
13280 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49  %i)", CKR_FUNCTI
13290 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44  ON_NOT_SUPPORTED
132a0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f  );...return(CKR_
132b0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
132c0 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44  PORTED);.}..CK_D
132d0 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43  EFINE_FUNCTION(C
132e0 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 45 6e 63 72  K_RV, C_SignEncr
132f0 79 70 74 55 70 64 61 74 65 29 28 43 4b 5f 53 45  yptUpdate)(CK_SE
13300 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65  SSION_HANDLE hSe
13310 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50  ssion, CK_BYTE_P
13320 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f  TR pPart, CK_ULO
13330 4e 47 20 75 6c 50 61 72 74 4c 65 6e 2c 20 43 4b  NG ulPartLen, CK
13340 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79  _BYTE_PTR pEncry
13350 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f  ptedPart, CK_ULO
13360 4e 47 5f 50 54 52 20 70 75 6c 45 6e 63 72 79 70  NG_PTR pulEncryp
13370 74 65 64 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43  tedPartLen) {..C
13380 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
13390 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a  TF("Called.");..
133a0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69  .if (!cackey_ini
133b0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41  tialized) {...CA
133c0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
133d0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69  F("Error.  Not i
133e0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a  nitialized.");..
133f0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59  ..return(CKR_CRY
13400 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41  PTOKI_NOT_INITIA
13410 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43  LIZED);..}...CAC
13420 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
13430 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f  ("Returning CKR_
13440 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
13450 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b  PORTED (%i)", CK
13460 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53  R_FUNCTION_NOT_S
13470 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74  UPPORTED);...ret
13480 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  urn(CKR_FUNCTION
13490 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b  _NOT_SUPPORTED);
134a0 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55  .}..CK_DEFINE_FU
134b0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f  NCTION(CK_RV, C_
134c0 44 65 63 72 79 70 74 56 65 72 69 66 79 55 70 64  DecryptVerifyUpd
134d0 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f  ate)(CK_SESSION_
134e0 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c  HANDLE hSession,
134f0 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45 6e   CK_BYTE_PTR pEn
13500 63 72 79 70 74 65 64 50 61 72 74 2c 20 43 4b 5f  cryptedPart, CK_
13510 55 4c 4f 4e 47 20 75 6c 45 6e 63 72 79 70 74 65  ULONG ulEncrypte
13520 64 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54  dPartLen, CK_BYT
13530 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b 5f  E_PTR pPart, CK_
13540 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 50 61 72  ULONG_PTR pulPar
13550 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f  tLen) {..CACKEY_
13560 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61  DEBUG_PRINTF("Ca
13570 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21  lled.");...if (!
13580 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a  cackey_initializ
13590 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  ed) {...CACKEY_D
135a0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
135b0 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c  or.  Not initial
135c0 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75  ized.");....retu
135d0 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f  rn(CKR_CRYPTOKI_
135e0 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29  NOT_INITIALIZED)
135f0 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45  ;..}...CACKEY_DE
13600 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75  BUG_PRINTF("Retu
13610 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49  rning CKR_FUNCTI
13620 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44  ON_NOT_SUPPORTED
13630 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43   (%i)", CKR_FUNC
13640 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54  TION_NOT_SUPPORT
13650 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b  ED);...return(CK
13660 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53  R_FUNCTION_NOT_S
13670 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b  UPPORTED);.}..CK
13680 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e  _DEFINE_FUNCTION
13690 28 43 4b 5f 52 56 2c 20 43 5f 47 65 6e 65 72 61  (CK_RV, C_Genera
136a0 74 65 4b 65 79 29 28 43 4b 5f 53 45 53 53 49 4f  teKey)(CK_SESSIO
136b0 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f  N_HANDLE hSessio
136c0 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f  n, CK_MECHANISM_
136d0 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20  PTR pMechanism, 
136e0 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52  CK_ATTRIBUTE_PTR
136f0 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55   pTemplate, CK_U
13700 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 2c 20 43 4b  LONG ulCount, CK
13710 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50  _OBJECT_HANDLE_P
13720 54 52 20 70 68 4b 65 79 29 20 7b 0a 09 43 41 43  TR phKey) {..CAC
13730 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
13740 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69  ("Called.");...i
13750 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69  f (!cackey_initi
13760 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b  alized) {...CACK
13770 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
13780 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69  "Error.  Not ini
13790 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09  tialized.");....
137a0 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54  return(CKR_CRYPT
137b0 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49  OKI_NOT_INITIALI
137c0 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45  ZED);..}...CACKE
137d0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
137e0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55  Returning CKR_FU
137f0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
13800 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f  RTED (%i)", CKR_
13810 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
13820 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72  PORTED);...retur
13830 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  n(CKR_FUNCTION_N
13840 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d  OT_SUPPORTED);.}
13850 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43  ..CK_DEFINE_FUNC
13860 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65  TION(CK_RV, C_Ge
13870 6e 65 72 61 74 65 4b 65 79 50 61 69 72 29 28 43  nerateKeyPair)(C
13880 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45  K_SESSION_HANDLE
13890 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45   hSession, CK_ME
138a0 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63  CHANISM_PTR pMec
138b0 68 61 6e 69 73 6d 2c 20 43 4b 5f 41 54 54 52 49  hanism, CK_ATTRI
138c0 42 55 54 45 5f 50 54 52 20 70 50 75 62 6c 69 63  BUTE_PTR pPublic
138d0 4b 65 79 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f  KeyTemplate, CK_
138e0 55 4c 4f 4e 47 20 75 6c 50 75 62 6c 69 63 4b 65  ULONG ulPublicKe
138f0 79 41 74 74 72 69 62 75 74 65 43 6f 75 6e 74 2c  yAttributeCount,
13900 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54   CK_ATTRIBUTE_PT
13910 52 20 70 50 72 69 76 61 74 65 4b 65 79 54 65 6d  R pPrivateKeyTem
13920 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20  plate, CK_ULONG 
13930 75 6c 50 72 69 76 61 74 65 4b 65 79 41 74 74 72  ulPrivateKeyAttr
13940 69 62 75 74 65 43 6f 75 6e 74 2c 20 43 4b 5f 4f  ibuteCount, CK_O
13950 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52  BJECT_HANDLE_PTR
13960 20 70 68 50 75 62 6c 69 63 4b 65 79 2c 20 43 4b   phPublicKey, CK
13970 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50  _OBJECT_HANDLE_P
13980 54 52 20 70 68 50 72 69 76 61 74 65 4b 65 79 29  TR phPrivateKey)
13990 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47   {..CACKEY_DEBUG
139a0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e  _PRINTF("Called.
139b0 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ");...if (!cacke
139c0 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b  y_initialized) {
139d0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
139e0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
139f0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  Not initialized.
13a00 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
13a10 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49  R_CRYPTOKI_NOT_I
13a20 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a  NITIALIZED);..}.
13a30 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
13a40 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
13a50 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f   CKR_FUNCTION_NO
13a60 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29  T_SUPPORTED (%i)
13a70 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  ", CKR_FUNCTION_
13a80 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a  NOT_SUPPORTED);.
13a90 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e  ..return(CKR_FUN
13aa0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
13ab0 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49  TED);.}..CK_DEFI
13ac0 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52  NE_FUNCTION(CK_R
13ad0 56 2c 20 43 5f 57 72 61 70 4b 65 79 29 28 43 4b  V, C_WrapKey)(CK
13ae0 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20  _SESSION_HANDLE 
13af0 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43  hSession, CK_MEC
13b00 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68  HANISM_PTR pMech
13b10 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54  anism, CK_OBJECT
13b20 5f 48 41 4e 44 4c 45 20 68 57 72 61 70 70 69 6e  _HANDLE hWrappin
13b30 67 4b 65 79 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f  gKey, CK_OBJECT_
13b40 48 41 4e 44 4c 45 20 68 4b 65 79 2c 20 43 4b 5f  HANDLE hKey, CK_
13b50 42 59 54 45 5f 50 54 52 20 70 57 72 61 70 70 65  BYTE_PTR pWrappe
13b60 64 4b 65 79 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50  dKey, CK_ULONG_P
13b70 54 52 20 70 75 6c 57 72 61 70 70 65 64 4b 65 79  TR pulWrappedKey
13b80 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44  Len) {..CACKEY_D
13b90 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c  EBUG_PRINTF("Cal
13ba0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63  led.");...if (!c
13bb0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65  ackey_initialize
13bc0 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45  d) {...CACKEY_DE
13bd0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
13be0 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69  r.  Not initiali
13bf0 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72  zed.");....retur
13c00 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e  n(CKR_CRYPTOKI_N
13c10 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b  OT_INITIALIZED);
13c20 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  ..}...CACKEY_DEB
13c30 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72  UG_PRINTF("Retur
13c40 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f  ning CKR_FUNCTIO
13c50 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20  N_NOT_SUPPORTED 
13c60 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54  (%i)", CKR_FUNCT
13c70 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
13c80 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52  D);...return(CKR
13c90 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55  _FUNCTION_NOT_SU
13ca0 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f  PPORTED);.}..CK_
13cb0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28  DEFINE_FUNCTION(
13cc0 43 4b 5f 52 56 2c 20 43 5f 55 6e 77 72 61 70 4b  CK_RV, C_UnwrapK
13cd0 65 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48  ey)(CK_SESSION_H
13ce0 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20  ANDLE hSession, 
13cf0 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52  CK_MECHANISM_PTR
13d00 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f   pMechanism, CK_
13d10 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 55  OBJECT_HANDLE hU
13d20 6e 77 72 61 70 70 69 6e 67 4b 65 79 2c 20 43 4b  nwrappingKey, CK
13d30 5f 42 59 54 45 5f 50 54 52 20 70 57 72 61 70 70  _BYTE_PTR pWrapp
13d40 65 64 4b 65 79 2c 20 43 4b 5f 55 4c 4f 4e 47 20  edKey, CK_ULONG 
13d50 75 6c 57 72 61 70 70 65 64 4b 65 79 4c 65 6e 2c  ulWrappedKeyLen,
13d60 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54   CK_ATTRIBUTE_PT
13d70 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f  R pTemplate, CK_
13d80 55 4c 4f 4e 47 20 75 6c 41 74 74 72 69 62 75 74  ULONG ulAttribut
13d90 65 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43  eCount, CK_OBJEC
13da0 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68 4b  T_HANDLE_PTR phK
13db0 65 79 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45  ey) {..CACKEY_DE
13dc0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c  BUG_PRINTF("Call
13dd0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61  ed.");...if (!ca
13de0 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64  ckey_initialized
13df0 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  ) {...CACKEY_DEB
13e00 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
13e10 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  .  Not initializ
13e20 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  ed.");....return
13e30 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f  (CKR_CRYPTOKI_NO
13e40 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a  T_INITIALIZED);.
13e50 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  .}...CACKEY_DEBU
13e60 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e  G_PRINTF("Return
13e70 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  ing CKR_FUNCTION
13e80 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28  _NOT_SUPPORTED (
13e90 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49  %i)", CKR_FUNCTI
13ea0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44  ON_NOT_SUPPORTED
13eb0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f  );...return(CKR_
13ec0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
13ed0 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44  PORTED);.}..CK_D
13ee0 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43  EFINE_FUNCTION(C
13ef0 4b 5f 52 56 2c 20 43 5f 44 65 72 69 76 65 4b 65  K_RV, C_DeriveKe
13f00 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41  y)(CK_SESSION_HA
13f10 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43  NDLE hSession, C
13f20 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20  K_MECHANISM_PTR 
13f30 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f  pMechanism, CK_O
13f40 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 42 61  BJECT_HANDLE hBa
13f50 73 65 4b 65 79 2c 20 43 4b 5f 41 54 54 52 49 42  seKey, CK_ATTRIB
13f60 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74  UTE_PTR pTemplat
13f70 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 41 74  e, CK_ULONG ulAt
13f80 74 72 69 62 75 74 65 43 6f 75 6e 74 2c 20 43 4b  tributeCount, CK
13f90 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50  _OBJECT_HANDLE_P
13fa0 54 52 20 70 68 4b 65 79 29 20 7b 0a 09 43 41 43  TR phKey) {..CAC
13fb0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
13fc0 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69  ("Called.");...i
13fd0 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69  f (!cackey_initi
13fe0 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b  alized) {...CACK
13ff0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
14000 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69  "Error.  Not ini
14010 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09  tialized.");....
14020 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54  return(CKR_CRYPT
14030 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49  OKI_NOT_INITIALI
14040 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45  ZED);..}...CACKE
14050 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
14060 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55  Returning CKR_FU
14070 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
14080 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f  RTED (%i)", CKR_
14090 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
140a0 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72  PORTED);...retur
140b0 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  n(CKR_FUNCTION_N
140c0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d  OT_SUPPORTED);.}
140d0 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43  ..CK_DEFINE_FUNC
140e0 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65  TION(CK_RV, C_Se
140f0 65 64 52 61 6e 64 6f 6d 29 28 43 4b 5f 53 45 53  edRandom)(CK_SES
14100 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73  SION_HANDLE hSes
14110 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54  sion, CK_BYTE_PT
14120 52 20 70 53 65 65 64 2c 20 43 4b 5f 55 4c 4f 4e  R pSeed, CK_ULON
14130 47 20 75 6c 53 65 65 64 4c 65 6e 29 20 7b 0a 09  G ulSeedLen) {..
14140 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
14150 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a  NTF("Called.");.
14160 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e  ..if (!cackey_in
14170 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43  itialized) {...C
14180 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
14190 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20  TF("Error.  Not 
141a0 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a  initialized.");.
141b0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52  ...return(CKR_CR
141c0 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49  YPTOKI_NOT_INITI
141d0 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41  ALIZED);..}...CA
141e0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
141f0 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52  F("Returning CKR
14200 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55  _FUNCTION_NOT_SU
14210 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43  PPORTED (%i)", C
14220 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
14230 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65  SUPPORTED);...re
14240 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f  turn(CKR_FUNCTIO
14250 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29  N_NOT_SUPPORTED)
14260 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46  ;.}..CK_DEFINE_F
14270 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43  UNCTION(CK_RV, C
14280 5f 47 65 6e 65 72 61 74 65 52 61 6e 64 6f 6d 29  _GenerateRandom)
14290 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44  (CK_SESSION_HAND
142a0 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f  LE hSession, CK_
142b0 42 59 54 45 5f 50 54 52 20 70 52 61 6e 64 6f 6d  BYTE_PTR pRandom
142c0 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75  Data, CK_ULONG u
142d0 6c 52 61 6e 64 6f 6d 4c 65 6e 29 20 7b 0a 09 43  lRandomLen) {..C
142e0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
142f0 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a  TF("Called.");..
14300 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69  .if (!cackey_ini
14310 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41  tialized) {...CA
14320 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
14330 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69  F("Error.  Not i
14340 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a  nitialized.");..
14350 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59  ..return(CKR_CRY
14360 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41  PTOKI_NOT_INITIA
14370 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43  LIZED);..}...CAC
14380 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
14390 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f  ("Returning CKR_
143a0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
143b0 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b  PORTED (%i)", CK
143c0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53  R_FUNCTION_NOT_S
143d0 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74  UPPORTED);...ret
143e0 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  urn(CKR_FUNCTION
143f0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b  _NOT_SUPPORTED);
14400 0a 7d 0a 0a 2f 2a 20 44 65 70 72 65 63 61 74 65  .}../* Deprecate
14410 64 20 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 43 4b  d Function */.CK
14420 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e  _DEFINE_FUNCTION
14430 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 46 75 6e  (CK_RV, C_GetFun
14440 63 74 69 6f 6e 53 74 61 74 75 73 29 28 43 4b 5f  ctionStatus)(CK_
14450 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68  SESSION_HANDLE h
14460 53 65 73 73 69 6f 6e 29 20 7b 0a 09 43 41 43 4b  Session) {..CACK
14470 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
14480 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 43 41  "Called.");...CA
14490 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
144a0 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52  F("Returning CKR
144b0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41  _FUNCTION_NOT_PA
144c0 52 41 4c 4c 45 4c 20 28 25 69 29 22 2c 20 43 4b  RALLEL (%i)", CK
144d0 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50  R_FUNCTION_NOT_P
144e0 41 52 41 4c 4c 45 4c 29 3b 0a 0a 09 72 65 74 75  ARALLEL);...retu
144f0 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  rn(CKR_FUNCTION_
14500 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 3b 0a 0a  NOT_PARALLEL);..
14510 09 68 53 65 73 73 69 6f 6e 20 3d 20 68 53 65 73  .hSession = hSes
14520 73 69 6f 6e 3b 20 2f 2a 20 53 75 70 72 65 73 73  sion; /* Supress
14530 20 75 6e 75 73 65 64 20 76 61 72 69 61 62 6c 65   unused variable
14540 20 77 61 72 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f   warning */.}../
14550 2a 20 44 65 70 72 65 63 61 74 65 64 20 46 75 6e  * Deprecated Fun
14560 63 74 69 6f 6e 20 2a 2f 0a 43 4b 5f 44 45 46 49  ction */.CK_DEFI
14570 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52  NE_FUNCTION(CK_R
14580 56 2c 20 43 5f 43 61 6e 63 65 6c 46 75 6e 63 74  V, C_CancelFunct
14590 69 6f 6e 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f  ion)(CK_SESSION_
145a0 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 29  HANDLE hSession)
145b0 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47   {..CACKEY_DEBUG
145c0 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e  _PRINTF("Called.
145d0 22 29 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  ");...CACKEY_DEB
145e0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72  UG_PRINTF("Retur
145f0 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f  ning CKR_FUNCTIO
14600 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 20 28  N_NOT_PARALLEL (
14610 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49  %i)", CKR_FUNCTI
14620 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 29  ON_NOT_PARALLEL)
14630 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46  ;...return(CKR_F
14640 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41  UNCTION_NOT_PARA
14650 4c 4c 45 4c 29 3b 0a 0a 09 68 53 65 73 73 69 6f  LLEL);...hSessio
14660 6e 20 3d 20 68 53 65 73 73 69 6f 6e 3b 20 2f 2a  n = hSession; /*
14670 20 53 75 70 72 65 73 73 20 75 6e 75 73 65 64 20   Supress unused 
14680 76 61 72 69 61 62 6c 65 20 77 61 72 6e 69 6e 67  variable warning
14690 20 2a 2f 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45   */.}..CK_DEFINE
146a0 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c  _FUNCTION(CK_RV,
146b0 20 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e 4c 69   C_GetFunctionLi
146c0 73 74 29 28 43 4b 5f 46 55 4e 43 54 49 4f 4e 5f  st)(CK_FUNCTION_
146d0 4c 49 53 54 5f 50 54 52 5f 50 54 52 20 70 70 46  LIST_PTR_PTR ppF
146e0 75 6e 63 74 69 6f 6e 4c 69 73 74 29 20 7b 0a 09  unctionList) {..
146f0 43 4b 5f 46 55 4e 43 54 49 4f 4e 5f 4c 49 53 54  CK_FUNCTION_LIST
14700 5f 50 54 52 20 70 46 75 6e 63 74 69 6f 6e 4c 69  _PTR pFunctionLi
14710 73 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  st;...CACKEY_DEB
14720 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65  UG_PRINTF("Calle
14730 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70 70 46 75  d.");...if (ppFu
14740 6e 63 74 69 6f 6e 4c 69 73 74 20 3d 3d 20 4e 55  nctionList == NU
14750 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  LL) {...CACKEY_D
14760 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
14770 6f 72 2e 20 70 70 46 75 6e 63 74 69 6f 6e 4c 69  or. ppFunctionLi
14780 73 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a  st is NULL.");..
14790 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47  ..return(CKR_ARG
147a0 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a  UMENTS_BAD);..}.
147b0 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 20  ..pFunctionList 
147c0 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28  = malloc(sizeof(
147d0 2a 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 29 29  *pFunctionList))
147e0 3b 0a 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73  ;...pFunctionLis
147f0 74 2d 3e 76 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72  t->version.major
14800 20 3d 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50   = ((CACKEY_CRYP
14810 54 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44  TOKI_VERSION_COD
14820 45 29 20 3e 3e 20 31 36 29 20 26 20 30 78 66 66  E) >> 16) & 0xff
14830 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74  ;..pFunctionList
14840 2d 3e 76 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20  ->version.minor 
14850 3d 20 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54  = ((CACKEY_CRYPT
14860 4f 4b 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45  OKI_VERSION_CODE
14870 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a  ) >> 8) & 0xff;.
14880 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d  ..pFunctionList-
14890 3e 43 5f 49 6e 69 74 69 61 6c 69 7a 65 20 3d 20  >C_Initialize = 
148a0 43 5f 49 6e 69 74 69 61 6c 69 7a 65 3b 0a 09 70  C_Initialize;..p
148b0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f  FunctionList->C_
148c0 46 69 6e 61 6c 69 7a 65 20 3d 20 43 5f 46 69 6e  Finalize = C_Fin
148d0 61 6c 69 7a 65 3b 0a 09 70 46 75 6e 63 74 69 6f  alize;..pFunctio
148e0 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 49 6e 66 6f  nList->C_GetInfo
148f0 20 3d 20 43 5f 47 65 74 49 6e 66 6f 3b 0a 09 70   = C_GetInfo;..p
14900 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f  FunctionList->C_
14910 47 65 74 53 6c 6f 74 4c 69 73 74 20 3d 20 43 5f  GetSlotList = C_
14920 47 65 74 53 6c 6f 74 4c 69 73 74 3b 0a 09 70 46  GetSlotList;..pF
14930 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47  unctionList->C_G
14940 65 74 53 6c 6f 74 49 6e 66 6f 20 3d 20 43 5f 47  etSlotInfo = C_G
14950 65 74 53 6c 6f 74 49 6e 66 6f 3b 0a 09 70 46 75  etSlotInfo;..pFu
14960 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65  nctionList->C_Ge
14970 74 54 6f 6b 65 6e 49 6e 66 6f 20 3d 20 43 5f 47  tTokenInfo = C_G
14980 65 74 54 6f 6b 65 6e 49 6e 66 6f 3b 0a 09 70 46  etTokenInfo;..pF
14990 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 57  unctionList->C_W
149a0 61 69 74 46 6f 72 53 6c 6f 74 45 76 65 6e 74 20  aitForSlotEvent 
149b0 3d 20 43 5f 57 61 69 74 46 6f 72 53 6c 6f 74 45  = C_WaitForSlotE
149c0 76 65 6e 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e  vent;..pFunction
149d0 4c 69 73 74 2d 3e 43 5f 47 65 74 4d 65 63 68 61  List->C_GetMecha
149e0 6e 69 73 6d 4c 69 73 74 20 3d 20 43 5f 47 65 74  nismList = C_Get
149f0 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 3b 0a 09  MechanismList;..
14a00 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43  pFunctionList->C
14a10 5f 47 65 74 4d 65 63 68 61 6e 69 73 6d 49 6e 66  _GetMechanismInf
14a20 6f 20 3d 20 43 5f 47 65 74 4d 65 63 68 61 6e 69  o = C_GetMechani
14a30 73 6d 49 6e 66 6f 3b 0a 09 70 46 75 6e 63 74 69  smInfo;..pFuncti
14a40 6f 6e 4c 69 73 74 2d 3e 43 5f 49 6e 69 74 54 6f  onList->C_InitTo
14a50 6b 65 6e 20 3d 20 43 5f 49 6e 69 74 54 6f 6b 65  ken = C_InitToke
14a60 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73  n;..pFunctionLis
14a70 74 2d 3e 43 5f 49 6e 69 74 50 49 4e 20 3d 20 43  t->C_InitPIN = C
14a80 5f 49 6e 69 74 50 49 4e 3b 0a 09 70 46 75 6e 63  _InitPIN;..pFunc
14a90 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 50  tionList->C_SetP
14aa0 49 4e 20 3d 20 43 5f 53 65 74 50 49 4e 3b 0a 09  IN = C_SetPIN;..
14ab0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43  pFunctionList->C
14ac0 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 20 3d 20 43  _OpenSession = C
14ad0 5f 4f 70 65 6e 53 65 73 73 69 6f 6e 3b 0a 09 70  _OpenSession;..p
14ae0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f  FunctionList->C_
14af0 43 6c 6f 73 65 53 65 73 73 69 6f 6e 20 3d 20 43  CloseSession = C
14b00 5f 43 6c 6f 73 65 53 65 73 73 69 6f 6e 3b 0a 09  _CloseSession;..
14b10 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43  pFunctionList->C
14b20 5f 43 6c 6f 73 65 41 6c 6c 53 65 73 73 69 6f 6e  _CloseAllSession
14b30 73 20 3d 20 43 5f 43 6c 6f 73 65 41 6c 6c 53 65  s = C_CloseAllSe
14b40 73 73 69 6f 6e 73 3b 0a 09 70 46 75 6e 63 74 69  ssions;..pFuncti
14b50 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 53 65 73  onList->C_GetSes
14b60 73 69 6f 6e 49 6e 66 6f 20 3d 20 43 5f 47 65 74  sionInfo = C_Get
14b70 53 65 73 73 69 6f 6e 49 6e 66 6f 3b 0a 09 70 46  SessionInfo;..pF
14b80 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47  unctionList->C_G
14b90 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65  etOperationState
14ba0 20 3d 20 43 5f 47 65 74 4f 70 65 72 61 74 69 6f   = C_GetOperatio
14bb0 6e 53 74 61 74 65 3b 0a 09 70 46 75 6e 63 74 69  nState;..pFuncti
14bc0 6f 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 4f 70 65  onList->C_SetOpe
14bd0 72 61 74 69 6f 6e 53 74 61 74 65 20 3d 20 43 5f  rationState = C_
14be0 53 65 74 4f 70 65 72 61 74 69 6f 6e 53 74 61 74  SetOperationStat
14bf0 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73  e;..pFunctionLis
14c00 74 2d 3e 43 5f 4c 6f 67 69 6e 20 3d 20 43 5f 4c  t->C_Login = C_L
14c10 6f 67 69 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e  ogin;..pFunction
14c20 4c 69 73 74 2d 3e 43 5f 4c 6f 67 6f 75 74 20 3d  List->C_Logout =
14c30 20 43 5f 4c 6f 67 6f 75 74 3b 0a 09 70 46 75 6e   C_Logout;..pFun
14c40 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 72 65  ctionList->C_Cre
14c50 61 74 65 4f 62 6a 65 63 74 20 3d 20 43 5f 43 72  ateObject = C_Cr
14c60 65 61 74 65 4f 62 6a 65 63 74 3b 0a 09 70 46 75  eateObject;..pFu
14c70 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 6f  nctionList->C_Co
14c80 70 79 4f 62 6a 65 63 74 20 3d 20 43 5f 43 6f 70  pyObject = C_Cop
14c90 79 4f 62 6a 65 63 74 3b 0a 09 70 46 75 6e 63 74  yObject;..pFunct
14ca0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 73 74 72  ionList->C_Destr
14cb0 6f 79 4f 62 6a 65 63 74 20 3d 20 43 5f 44 65 73  oyObject = C_Des
14cc0 74 72 6f 79 4f 62 6a 65 63 74 3b 0a 09 70 46 75  troyObject;..pFu
14cd0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65  nctionList->C_Ge
14ce0 74 4f 62 6a 65 63 74 53 69 7a 65 20 3d 20 43 5f  tObjectSize = C_
14cf0 47 65 74 4f 62 6a 65 63 74 53 69 7a 65 3b 0a 09  GetObjectSize;..
14d00 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43  pFunctionList->C
14d10 5f 47 65 74 41 74 74 72 69 62 75 74 65 56 61 6c  _GetAttributeVal
14d20 75 65 20 3d 20 43 5f 47 65 74 41 74 74 72 69 62  ue = C_GetAttrib
14d30 75 74 65 56 61 6c 75 65 3b 0a 09 70 46 75 6e 63  uteValue;..pFunc
14d40 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 41  tionList->C_SetA
14d50 74 74 72 69 62 75 74 65 56 61 6c 75 65 20 3d 20  ttributeValue = 
14d60 43 5f 53 65 74 41 74 74 72 69 62 75 74 65 56 61  C_SetAttributeVa
14d70 6c 75 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c  lue;..pFunctionL
14d80 69 73 74 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63  ist->C_FindObjec
14d90 74 73 49 6e 69 74 20 3d 20 43 5f 46 69 6e 64 4f  tsInit = C_FindO
14da0 62 6a 65 63 74 73 49 6e 69 74 3b 0a 09 70 46 75  bjectsInit;..pFu
14db0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69  nctionList->C_Fi
14dc0 6e 64 4f 62 6a 65 63 74 73 20 3d 20 43 5f 46 69  ndObjects = C_Fi
14dd0 6e 64 4f 62 6a 65 63 74 73 3b 0a 09 70 46 75 6e  ndObjects;..pFun
14de0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e  ctionList->C_Fin
14df0 64 4f 62 6a 65 63 74 73 46 69 6e 61 6c 20 3d 20  dObjectsFinal = 
14e00 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 46 69 6e  C_FindObjectsFin
14e10 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69  al;..pFunctionLi
14e20 73 74 2d 3e 43 5f 45 6e 63 72 79 70 74 49 6e 69  st->C_EncryptIni
14e30 74 20 3d 20 43 5f 45 6e 63 72 79 70 74 49 6e 69  t = C_EncryptIni
14e40 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73  t;..pFunctionLis
14e50 74 2d 3e 43 5f 45 6e 63 72 79 70 74 20 3d 20 43  t->C_Encrypt = C
14e60 5f 45 6e 63 72 79 70 74 3b 0a 09 70 46 75 6e 63  _Encrypt;..pFunc
14e70 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 72  tionList->C_Encr
14e80 79 70 74 55 70 64 61 74 65 20 3d 20 43 5f 45 6e  yptUpdate = C_En
14e90 63 72 79 70 74 55 70 64 61 74 65 3b 0a 09 70 46  cryptUpdate;..pF
14ea0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45  unctionList->C_E
14eb0 6e 63 72 79 70 74 46 69 6e 61 6c 20 3d 20 43 5f  ncryptFinal = C_
14ec0 45 6e 63 72 79 70 74 46 69 6e 61 6c 3b 0a 09 70  EncryptFinal;..p
14ed0 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f  FunctionList->C_
14ee0 44 65 63 72 79 70 74 49 6e 69 74 20 3d 20 43 5f  DecryptInit = C_
14ef0 44 65 63 72 79 70 74 49 6e 69 74 3b 0a 09 70 46  DecryptInit;..pF
14f00 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44  unctionList->C_D
14f10 65 63 72 79 70 74 20 3d 20 43 5f 44 65 63 72 79  ecrypt = C_Decry
14f20 70 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69  pt;..pFunctionLi
14f30 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 55 70 64  st->C_DecryptUpd
14f40 61 74 65 20 3d 20 43 5f 44 65 63 72 79 70 74 55  ate = C_DecryptU
14f50 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f  pdate;..pFunctio
14f60 6e 4c 69 73 74 2d 3e 43 5f 44 65 63 72 79 70 74  nList->C_Decrypt
14f70 46 69 6e 61 6c 20 3d 20 43 5f 44 65 63 72 79 70  Final = C_Decryp
14f80 74 46 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69  tFinal;..pFuncti
14f90 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 73 74  onList->C_Digest
14fa0 49 6e 69 74 20 3d 20 43 5f 44 69 67 65 73 74 49  Init = C_DigestI
14fb0 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c  nit;..pFunctionL
14fc0 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 20 3d 20  ist->C_Digest = 
14fd0 43 5f 44 69 67 65 73 74 3b 0a 09 70 46 75 6e 63  C_Digest;..pFunc
14fe0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65  tionList->C_Dige
14ff0 73 74 55 70 64 61 74 65 20 3d 20 43 5f 44 69 67  stUpdate = C_Dig
15000 65 73 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e  estUpdate;..pFun
15010 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67  ctionList->C_Dig
15020 65 73 74 4b 65 79 20 3d 20 43 5f 44 69 67 65 73  estKey = C_Diges
15030 74 4b 65 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e  tKey;..pFunction
15040 4c 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 46 69  List->C_DigestFi
15050 6e 61 6c 20 3d 20 43 5f 44 69 67 65 73 74 46 69  nal = C_DigestFi
15060 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c  nal;..pFunctionL
15070 69 73 74 2d 3e 43 5f 53 69 67 6e 49 6e 69 74 20  ist->C_SignInit 
15080 3d 20 43 5f 53 69 67 6e 49 6e 69 74 3b 0a 09 70  = C_SignInit;..p
15090 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f  FunctionList->C_
150a0 53 69 67 6e 20 3d 20 43 5f 53 69 67 6e 3b 0a 09  Sign = C_Sign;..
150b0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43  pFunctionList->C
150c0 5f 53 69 67 6e 55 70 64 61 74 65 20 3d 20 43 5f  _SignUpdate = C_
150d0 53 69 67 6e 55 70 64 61 74 65 3b 0a 09 70 46 75  SignUpdate;..pFu
150e0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69  nctionList->C_Si
150f0 67 6e 46 69 6e 61 6c 20 3d 20 43 5f 53 69 67 6e  gnFinal = C_Sign
15100 46 69 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f  Final;..pFunctio
15110 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 52 65 63  nList->C_SignRec
15120 6f 76 65 72 49 6e 69 74 20 3d 20 43 5f 53 69 67  overInit = C_Sig
15130 6e 52 65 63 6f 76 65 72 49 6e 69 74 3b 0a 09 70  nRecoverInit;..p
15140 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f  FunctionList->C_
15150 53 69 67 6e 52 65 63 6f 76 65 72 20 3d 20 43 5f  SignRecover = C_
15160 53 69 67 6e 52 65 63 6f 76 65 72 3b 0a 09 70 46  SignRecover;..pF
15170 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56  unctionList->C_V
15180 65 72 69 66 79 49 6e 69 74 20 3d 20 43 5f 56 65  erifyInit = C_Ve
15190 72 69 66 79 49 6e 69 74 3b 0a 09 70 46 75 6e 63  rifyInit;..pFunc
151a0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69  tionList->C_Veri
151b0 66 79 20 3d 20 43 5f 56 65 72 69 66 79 3b 0a 09  fy = C_Verify;..
151c0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43  pFunctionList->C
151d0 5f 56 65 72 69 66 79 55 70 64 61 74 65 20 3d 20  _VerifyUpdate = 
151e0 43 5f 56 65 72 69 66 79 55 70 64 61 74 65 3b 0a  C_VerifyUpdate;.
151f0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e  .pFunctionList->
15200 43 5f 56 65 72 69 66 79 46 69 6e 61 6c 20 3d 20  C_VerifyFinal = 
15210 43 5f 56 65 72 69 66 79 46 69 6e 61 6c 3b 0a 09  C_VerifyFinal;..
15220 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43  pFunctionList->C
15230 5f 56 65 72 69 66 79 52 65 63 6f 76 65 72 49 6e  _VerifyRecoverIn
15240 69 74 20 3d 20 43 5f 56 65 72 69 66 79 52 65 63  it = C_VerifyRec
15250 6f 76 65 72 49 6e 69 74 3b 0a 09 70 46 75 6e 63  overInit;..pFunc
15260 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69  tionList->C_Veri
15270 66 79 52 65 63 6f 76 65 72 20 3d 20 43 5f 56 65  fyRecover = C_Ve
15280 72 69 66 79 52 65 63 6f 76 65 72 3b 0a 09 70 46  rifyRecover;..pF
15290 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44  unctionList->C_D
152a0 69 67 65 73 74 45 6e 63 72 79 70 74 55 70 64 61  igestEncryptUpda
152b0 74 65 20 3d 20 43 5f 44 69 67 65 73 74 45 6e 63  te = C_DigestEnc
152c0 72 79 70 74 55 70 64 61 74 65 3b 0a 09 70 46 75  ryptUpdate;..pFu
152d0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65  nctionList->C_De
152e0 63 72 79 70 74 44 69 67 65 73 74 55 70 64 61 74  cryptDigestUpdat
152f0 65 20 3d 20 43 5f 44 65 63 72 79 70 74 44 69 67  e = C_DecryptDig
15300 65 73 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e  estUpdate;..pFun
15310 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67  ctionList->C_Sig
15320 6e 45 6e 63 72 79 70 74 55 70 64 61 74 65 20 3d  nEncryptUpdate =
15330 20 43 5f 53 69 67 6e 45 6e 63 72 79 70 74 55 70   C_SignEncryptUp
15340 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e  date;..pFunction
15350 4c 69 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 56  List->C_DecryptV
15360 65 72 69 66 79 55 70 64 61 74 65 20 3d 20 43 5f  erifyUpdate = C_
15370 44 65 63 72 79 70 74 56 65 72 69 66 79 55 70 64  DecryptVerifyUpd
15380 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c  ate;..pFunctionL
15390 69 73 74 2d 3e 43 5f 47 65 6e 65 72 61 74 65 4b  ist->C_GenerateK
153a0 65 79 20 3d 20 43 5f 47 65 6e 65 72 61 74 65 4b  ey = C_GenerateK
153b0 65 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69  ey;..pFunctionLi
153c0 73 74 2d 3e 43 5f 47 65 6e 65 72 61 74 65 4b 65  st->C_GenerateKe
153d0 79 50 61 69 72 20 3d 20 43 5f 47 65 6e 65 72 61  yPair = C_Genera
153e0 74 65 4b 65 79 50 61 69 72 3b 0a 09 70 46 75 6e  teKeyPair;..pFun
153f0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 57 72 61  ctionList->C_Wra
15400 70 4b 65 79 20 3d 20 43 5f 57 72 61 70 4b 65 79  pKey = C_WrapKey
15410 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74  ;..pFunctionList
15420 2d 3e 43 5f 55 6e 77 72 61 70 4b 65 79 20 3d 20  ->C_UnwrapKey = 
15430 43 5f 55 6e 77 72 61 70 4b 65 79 3b 0a 09 70 46  C_UnwrapKey;..pF
15440 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44  unctionList->C_D
15450 65 72 69 76 65 4b 65 79 20 3d 20 43 5f 44 65 72  eriveKey = C_Der
15460 69 76 65 4b 65 79 3b 0a 09 70 46 75 6e 63 74 69  iveKey;..pFuncti
15470 6f 6e 4c 69 73 74 2d 3e 43 5f 53 65 65 64 52 61  onList->C_SeedRa
15480 6e 64 6f 6d 20 3d 20 43 5f 53 65 65 64 52 61 6e  ndom = C_SeedRan
15490 64 6f 6d 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c  dom;..pFunctionL
154a0 69 73 74 2d 3e 43 5f 47 65 6e 65 72 61 74 65 52  ist->C_GenerateR
154b0 61 6e 64 6f 6d 20 3d 20 43 5f 47 65 6e 65 72 61  andom = C_Genera
154c0 74 65 52 61 6e 64 6f 6d 3b 0a 09 70 46 75 6e 63  teRandom;..pFunc
154d0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 46  tionList->C_GetF
154e0 75 6e 63 74 69 6f 6e 53 74 61 74 75 73 20 3d 20  unctionStatus = 
154f0 43 5f 47 65 74 46 75 6e 63 74 69 6f 6e 53 74 61  C_GetFunctionSta
15500 74 75 73 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c  tus;..pFunctionL
15510 69 73 74 2d 3e 43 5f 43 61 6e 63 65 6c 46 75 6e  ist->C_CancelFun
15520 63 74 69 6f 6e 20 3d 20 43 5f 43 61 6e 63 65 6c  ction = C_Cancel
15530 46 75 6e 63 74 69 6f 6e 3b 0a 09 70 46 75 6e 63  Function;..pFunc
15540 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 46  tionList->C_GetF
15550 75 6e 63 74 69 6f 6e 4c 69 73 74 20 3d 20 43 5f  unctionList = C_
15560 47 65 74 46 75 6e 63 74 69 6f 6e 4c 69 73 74 3b  GetFunctionList;
15570 0a 0a 09 2a 70 70 46 75 6e 63 74 69 6f 6e 4c 69  ...*ppFunctionLi
15580 73 74 20 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69  st = pFunctionLi
15590 73 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  st;...CACKEY_DEB
155a0 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72  UG_PRINTF("Retur
155b0 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29  ning CKR_OK (%i)
155c0 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65  ", CKR_OK);...re
155d0 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a  turn(CKR_OK);.}.
155e0 0a                                               .