Hex Artifact Content

Artifact d5b94d106df5be2eec82a1b948925274d305dfa5:


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 23 69 6e 63 6c  "pkcs11.h".#incl
0330: 75 64 65 20 22 61 73 6e 31 2d 78 35 30 39 2e 68  ude "asn1-x509.h
0340: 22 0a 0a 23 69 66 6e 64 65 66 20 43 41 43 4b 45  "..#ifndef CACKE
0350: 59 5f 43 52 59 50 54 4f 4b 49 5f 56 45 52 53 49  Y_CRYPTOKI_VERSI
0360: 4f 4e 5f 43 4f 44 45 0a 23 20 20 64 65 66 69 6e  ON_CODE.#  defin
0370: 65 20 43 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b  e CACKEY_CRYPTOK
0380: 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 20 30  I_VERSION_CODE 0
0390: 78 30 32 31 65 30 30 0a 23 65 6e 64 69 66 0a 0a  x021e00.#endif..
03a0: 23 69 66 6e 64 65 66 20 43 4b 41 5f 54 52 55 53  #ifndef CKA_TRUS
03b0: 54 5f 53 45 52 56 45 52 5f 41 55 54 48 0a 23 20  T_SERVER_AUTH.# 
03c0: 20 64 65 66 69 6e 65 20 43 4b 41 5f 54 52 55 53   define CKA_TRUS
03d0: 54 5f 53 45 52 56 45 52 5f 41 55 54 48 20 30 78  T_SERVER_AUTH 0x
03e0: 63 65 35 33 36 33 35 38 0a 23 65 6e 64 69 66 0a  ce536358.#endif.
03f0: 23 69 66 6e 64 65 66 20 43 4b 41 5f 54 52 55 53  #ifndef CKA_TRUS
0400: 54 5f 43 4c 49 45 4e 54 5f 41 55 54 48 0a 23 20  T_CLIENT_AUTH.# 
0410: 20 64 65 66 69 6e 65 20 43 4b 41 5f 54 52 55 53   define CKA_TRUS
0420: 54 5f 43 4c 49 45 4e 54 5f 41 55 54 48 20 30 78  T_CLIENT_AUTH 0x
0430: 63 65 35 33 36 33 35 39 0a 23 65 6e 64 69 66 0a  ce536359.#endif.
0440: 23 69 66 6e 64 65 66 20 43 4b 41 5f 54 52 55 53  #ifndef CKA_TRUS
0450: 54 5f 43 4f 44 45 5f 53 49 47 4e 49 4e 47 0a 23  T_CODE_SIGNING.#
0460: 20 20 64 65 66 69 6e 65 20 43 4b 41 5f 54 52 55    define CKA_TRU
0470: 53 54 5f 43 4f 44 45 5f 53 49 47 4e 49 4e 47 20  ST_CODE_SIGNING 
0480: 30 78 63 65 35 33 36 33 35 61 0a 23 65 6e 64 69  0xce53635a.#endi
0490: 66 0a 23 69 66 6e 64 65 66 20 43 4b 41 5f 54 52  f.#ifndef CKA_TR
04a0: 55 53 54 5f 45 4d 41 49 4c 5f 50 52 4f 54 45 43  UST_EMAIL_PROTEC
04b0: 54 49 4f 4e 0a 23 20 20 64 65 66 69 6e 65 20 43  TION.#  define C
04c0: 4b 41 5f 54 52 55 53 54 5f 45 4d 41 49 4c 5f 50  KA_TRUST_EMAIL_P
04d0: 52 4f 54 45 43 54 49 4f 4e 20 30 78 63 65 35 33  ROTECTION 0xce53
04e0: 36 33 35 62 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  635b.#endif../* 
04f0: 47 53 43 2d 49 53 20 76 32 2e 31 20 44 65 66 69  GSC-IS v2.1 Defi
0500: 6e 69 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nitions */.#defi
0510: 6e 65 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 49  ne GSCIS_CLASS_I
0520: 53 4f 37 38 31 36 20 20 20 20 20 20 20 20 20 20  SO7816          
0530: 20 30 78 30 30 0a 23 64 65 66 69 6e 65 20 47 53   0x00.#define GS
0540: 43 49 53 5f 43 4c 41 53 53 5f 47 4c 4f 42 41 4c  CIS_CLASS_GLOBAL
0550: 5f 50 4c 41 54 46 4f 52 4d 20 20 20 30 78 38 30  _PLATFORM   0x80
0560: 0a 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f  ..#define GSCIS_
0570: 49 4e 53 54 52 5f 47 45 54 5f 52 45 53 50 4f 4e  INSTR_GET_RESPON
0580: 53 45 20 20 20 20 20 20 30 78 43 30 0a 23 64 65  SE      0xC0.#de
0590: 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52  fine GSCIS_INSTR
05a0: 5f 52 45 41 44 5f 42 49 4e 41 52 59 20 20 20 20  _READ_BINARY    
05b0: 20 20 20 30 78 42 30 0a 23 64 65 66 69 6e 65 20     0xB0.#define 
05c0: 47 53 43 49 53 5f 49 4e 53 54 52 5f 55 50 44 41  GSCIS_INSTR_UPDA
05d0: 54 45 5f 42 49 4e 41 52 59 20 20 20 20 20 30 78  TE_BINARY     0x
05e0: 44 36 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53  D6.#define GSCIS
05f0: 5f 49 4e 53 54 52 5f 53 45 4c 45 43 54 20 20 20  _INSTR_SELECT   
0600: 20 20 20 20 20 20 20 20 20 30 78 41 34 0a 23 64           0xA4.#d
0610: 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53 54  efine GSCIS_INST
0620: 52 5f 45 58 54 45 52 4e 41 4c 5f 41 55 54 48 20  R_EXTERNAL_AUTH 
0630: 20 20 20 20 30 78 38 32 0a 23 64 65 66 69 6e 65      0x82.#define
0640: 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 47 45 54   GSCIS_INSTR_GET
0650: 5f 43 48 41 4c 4c 45 4e 47 45 20 20 20 20 20 30  _CHALLENGE     0
0660: 78 38 34 0a 23 64 65 66 69 6e 65 20 47 53 43 49  x84.#define GSCI
0670: 53 5f 49 4e 53 54 52 5f 49 4e 54 45 52 4e 41 4c  S_INSTR_INTERNAL
0680: 5f 41 55 54 48 20 20 20 20 20 30 78 38 38 0a 23  _AUTH     0x88.#
0690: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e 53  define GSCIS_INS
06a0: 54 52 5f 56 45 52 49 46 59 20 20 20 20 20 20 20  TR_VERIFY       
06b0: 20 20 20 20 20 30 78 32 30 0a 23 64 65 66 69 6e       0x20.#defin
06c0: 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 49  e GSCIS_INSTR_SI
06d0: 47 4e 20 20 20 20 20 20 20 20 20 20 20 20 20 20  GN              
06e0: 30 78 32 41 0a 23 64 65 66 69 6e 65 20 47 53 43  0x2A.#define GSC
06f0: 49 53 5f 49 4e 53 54 52 5f 47 45 54 5f 50 52 4f  IS_INSTR_GET_PRO
0700: 50 20 20 20 20 20 20 20 20 20 20 30 78 35 36 0a  P          0x56.
0710: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 49 4e  #define GSCIS_IN
0720: 53 54 52 5f 47 45 54 5f 41 43 52 20 20 20 20 20  STR_GET_ACR     
0730: 20 20 20 20 20 20 30 78 34 43 0a 23 64 65 66 69        0x4C.#defi
0740: 6e 65 20 47 53 43 49 53 5f 49 4e 53 54 52 5f 52  ne GSCIS_INSTR_R
0750: 45 41 44 5f 42 55 46 46 45 52 20 20 20 20 20 20  EAD_BUFFER      
0760: 20 30 78 35 32 0a 23 64 65 66 69 6e 65 20 47 53   0x52.#define GS
0770: 43 49 53 5f 49 4e 53 54 52 5f 53 49 47 4e 44 45  CIS_INSTR_SIGNDE
0780: 43 52 59 50 54 20 20 20 20 20 20 20 30 78 34 32  CRYPT       0x42
0790: 0a 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f  ..#define GSCIS_
07a0: 50 41 52 41 4d 5f 53 45 4c 45 43 54 5f 41 50 50  PARAM_SELECT_APP
07b0: 4c 45 54 20 20 20 20 20 30 78 30 34 0a 0a 2f 2a  LET     0x04../*
07c0: 20 43 43 43 20 2a 2f 0a 23 64 65 66 69 6e 65 20   CCC */.#define 
07d0: 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 49 44  GSCIS_TAG_CARDID
07e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78                0x
07f0: 46 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53  F0.#define GSCIS
0800: 5f 54 41 47 5f 43 43 43 5f 56 45 52 20 20 20 20  _TAG_CCC_VER    
0810: 20 20 20 20 20 20 20 20 20 30 78 46 31 0a 23 64           0xF1.#d
0820: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f  efine GSCIS_TAG_
0830: 43 43 47 5f 56 45 52 20 20 20 20 20 20 20 20 20  CCG_VER         
0840: 20 20 20 20 30 78 46 32 0a 23 64 65 66 69 6e 65      0xF2.#define
0850: 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 55   GSCIS_TAG_CARDU
0860: 52 4c 20 20 20 20 20 20 20 20 20 20 20 20 20 30  RL             0
0870: 78 46 33 0a 23 64 65 66 69 6e 65 20 47 53 43 49  xF3.#define GSCI
0880: 53 5f 54 41 47 5f 50 4b 43 53 31 35 20 20 20 20  S_TAG_PKCS15    
0890: 20 20 20 20 20 20 20 20 20 20 30 78 46 34 0a 23            0xF4.#
08a0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47  define GSCIS_TAG
08b0: 5f 52 45 47 5f 44 41 54 41 5f 4d 4f 44 45 4c 20  _REG_DATA_MODEL 
08c0: 20 20 20 20 20 30 78 46 35 0a 23 64 65 66 69 6e       0xF5.#defin
08d0: 65 20 47 53 43 49 53 5f 54 41 47 5f 41 43 52 5f  e GSCIS_TAG_ACR_
08e0: 54 41 42 4c 45 20 20 20 20 20 20 20 20 20 20 20  TABLE           
08f0: 30 78 46 36 0a 23 64 65 66 69 6e 65 20 47 53 43  0xF6.#define GSC
0900: 49 53 5f 54 41 47 5f 43 41 52 44 5f 41 50 44 55  IS_TAG_CARD_APDU
0910: 20 20 20 20 20 20 20 20 20 20 20 30 78 46 37 0a             0xF7.
0920: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41  #define GSCIS_TA
0930: 47 5f 52 45 44 49 52 45 43 54 49 4f 4e 20 20 20  G_REDIRECTION   
0940: 20 20 20 20 20 20 30 78 46 41 0a 23 64 65 66 69        0xFA.#defi
0950: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 54 20  ne GSCIS_TAG_CT 
0960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0970: 20 30 78 46 42 0a 23 64 65 66 69 6e 65 20 47 53   0xFB.#define GS
0980: 43 49 53 5f 54 41 47 5f 53 54 20 20 20 20 20 20  CIS_TAG_ST      
0990: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 46 43              0xFC
09a0: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54  .#define GSCIS_T
09b0: 41 47 5f 4e 45 58 54 43 43 43 20 20 20 20 20 20  AG_NEXTCCC      
09c0: 20 20 20 20 20 20 20 30 78 46 44 0a 0a 2f 2a 20         0xFD../* 
09d0: 47 65 6e 65 72 61 6c 20 2d 20 45 46 20 32 32 30  General - EF 220
09e0: 30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 47 53 43  0 */.#define GSC
09f0: 49 53 5f 54 41 47 5f 46 4e 41 4d 45 20 20 20 20  IS_TAG_FNAME    
0a00: 20 20 20 20 20 20 20 20 20 20 20 30 78 30 31 0a             0x01.
0a10: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41  #define GSCIS_TA
0a20: 47 5f 4d 4e 41 4d 45 20 20 20 20 20 20 20 20 20  G_MNAME         
0a30: 20 20 20 20 20 20 30 78 30 32 0a 23 64 65 66 69        0x02.#defi
0a40: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4c 4e 41  ne GSCIS_TAG_LNA
0a50: 4d 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ME              
0a60: 20 30 78 30 33 0a 23 64 65 66 69 6e 65 20 47 53   0x03.#define GS
0a70: 43 49 53 5f 54 41 47 5f 53 55 46 46 49 58 20 20  CIS_TAG_SUFFIX  
0a80: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 30 34              0x04
0a90: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54  .#define GSCIS_T
0aa0: 41 47 5f 47 4f 56 54 5f 41 47 45 4e 43 59 20 20  AG_GOVT_AGENCY  
0ab0: 20 20 20 20 20 20 20 30 78 30 35 0a 23 64 65 66         0x05.#def
0ac0: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 42 55  ine GSCIS_TAG_BU
0ad0: 52 45 41 55 20 20 20 20 20 20 20 20 20 20 20 20  REAU            
0ae0: 20 20 30 78 30 36 0a 23 64 65 66 69 6e 65 20 47    0x06.#define G
0af0: 53 43 49 53 5f 54 41 47 5f 42 55 52 45 41 55 5f  SCIS_TAG_BUREAU_
0b00: 43 4f 44 45 20 20 20 20 20 20 20 20 20 30 78 30  CODE         0x0
0b10: 37 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f  7.#define GSCIS_
0b20: 54 41 47 5f 44 45 50 54 5f 43 4f 44 45 20 20 20  TAG_DEPT_CODE   
0b30: 20 20 20 20 20 20 20 20 30 78 30 38 0a 23 64 65          0x08.#de
0b40: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 54  fine GSCIS_TAG_T
0b50: 49 54 4c 45 20 20 20 20 20 20 20 20 20 20 20 20  ITLE            
0b60: 20 20 20 30 78 30 39 0a 23 64 65 66 69 6e 65 20     0x09.#define 
0b70: 47 53 43 49 53 5f 54 41 47 5f 42 55 49 4c 44 49  GSCIS_TAG_BUILDI
0b80: 4e 47 20 20 20 20 20 20 20 20 20 20 20 20 30 78  NG            0x
0b90: 31 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53  10.#define GSCIS
0ba0: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 52  _TAG_OFFICE_ADDR
0bb0: 31 20 20 20 20 20 20 20 20 30 78 31 31 0a 23 64  1        0x11.#d
0bc0: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f  efine GSCIS_TAG_
0bd0: 4f 46 46 49 43 45 5f 41 44 44 52 32 20 20 20 20  OFFICE_ADDR2    
0be0: 20 20 20 20 30 78 31 32 0a 23 64 65 66 69 6e 65      0x12.#define
0bf0: 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43   GSCIS_TAG_OFFIC
0c00: 45 5f 43 49 54 59 20 20 20 20 20 20 20 20 20 30  E_CITY         0
0c10: 78 31 33 0a 23 64 65 66 69 6e 65 20 47 53 43 49  x13.#define GSCI
0c20: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 53 54 41  S_TAG_OFFICE_STA
0c30: 54 45 20 20 20 20 20 20 20 20 30 78 31 34 0a 23  TE        0x14.#
0c40: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47  define GSCIS_TAG
0c50: 5f 4f 46 46 49 43 45 5f 5a 49 50 20 20 20 20 20  _OFFICE_ZIP     
0c60: 20 20 20 20 20 30 78 31 35 0a 23 64 65 66 69 6e       0x15.#defin
0c70: 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49  e GSCIS_TAG_OFFI
0c80: 43 45 5f 43 4f 55 4e 54 52 59 20 20 20 20 20 20  CE_COUNTRY      
0c90: 30 78 31 36 0a 23 64 65 66 69 6e 65 20 47 53 43  0x16.#define GSC
0ca0: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 48  IS_TAG_OFFICE_PH
0cb0: 4f 4e 45 20 20 20 20 20 20 20 20 30 78 31 37 0a  ONE        0x17.
0cc0: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41  #define GSCIS_TA
0cd0: 47 5f 4f 46 46 49 43 45 5f 50 48 4f 4e 45 5f 45  G_OFFICE_PHONE_E
0ce0: 58 54 20 20 20 20 30 78 31 38 0a 23 64 65 66 69  XT    0x18.#defi
0cf0: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46  ne GSCIS_TAG_OFF
0d00: 49 43 45 5f 46 41 58 20 20 20 20 20 20 20 20 20  ICE_FAX         
0d10: 20 30 78 31 39 0a 23 64 65 66 69 6e 65 20 47 53   0x19.#define GS
0d20: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 45  CIS_TAG_OFFICE_E
0d30: 4d 41 49 4c 20 20 20 20 20 20 20 20 30 78 31 41  MAIL        0x1A
0d40: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54  .#define GSCIS_T
0d50: 41 47 5f 4f 46 46 49 43 45 5f 52 4f 4f 4d 20 20  AG_OFFICE_ROOM  
0d60: 20 20 20 20 20 20 20 30 78 31 42 0a 23 64 65 66         0x1B.#def
0d70: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 4e 4f  ine GSCIS_TAG_NO
0d80: 4e 47 4f 56 5f 41 47 45 4e 43 59 20 20 20 20 20  NGOV_AGENCY     
0d90: 20 20 30 78 31 43 0a 23 64 65 66 69 6e 65 20 47    0x1C.#define G
0da0: 53 43 49 53 5f 54 41 47 5f 53 53 4e 5f 44 45 53  SCIS_TAG_SSN_DES
0db0: 49 47 4e 41 54 4f 52 20 20 20 20 20 20 30 78 31  IGNATOR      0x1
0dc0: 44 0a 0a 2f 2a 20 50 49 49 20 2d 20 45 46 20 32  D../* PII - EF 2
0dd0: 31 30 30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 47  100 */.#define G
0de0: 53 43 49 53 5f 54 41 47 5f 53 53 4e 20 20 20 20  SCIS_TAG_SSN    
0df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 78 32               0x2
0e00: 30 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f  0.#define GSCIS_
0e10: 54 41 47 5f 44 4f 42 20 20 20 20 20 20 20 20 20  TAG_DOB         
0e20: 20 20 20 20 20 20 20 20 30 78 32 31 0a 23 64 65          0x21.#de
0e30: 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 47  fine GSCIS_TAG_G
0e40: 45 4e 44 45 52 20 20 20 20 20 20 20 20 20 20 20  ENDER           
0e50: 20 20 20 30 78 32 32 0a 0a 2f 2a 20 4c 6f 67 69     0x22../* Logi
0e60: 6e 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 2d 20  n Information - 
0e70: 45 46 20 34 30 30 30 20 2a 2f 0a 23 64 65 66 69  EF 4000 */.#defi
0e80: 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 55 53 45  ne GSCIS_TAG_USE
0e90: 52 49 44 20 20 20 20 20 20 20 20 20 20 20 20 20  RID             
0ea0: 20 30 78 34 30 0a 23 64 65 66 69 6e 65 20 47 53   0x40.#define GS
0eb0: 43 49 53 5f 54 41 47 5f 44 4f 4d 41 49 4e 20 20  CIS_TAG_DOMAIN  
0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 30 78 34 31              0x41
0ed0: 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54  .#define GSCIS_T
0ee0: 41 47 5f 50 41 53 53 57 4f 52 44 20 20 20 20 20  AG_PASSWORD     
0ef0: 20 20 20 20 20 20 20 30 78 34 32 0a 0a 2f 2a 20         0x42../* 
0f00: 43 61 72 64 20 49 6e 66 6f 72 6d 61 74 69 6f 6e  Card Information
0f10: 20 2d 20 45 46 20 35 30 30 30 20 2a 2f 0a 23 64   - EF 5000 */.#d
0f20: 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f  efine GSCIS_TAG_
0f30: 49 53 53 55 45 52 49 44 20 20 20 20 20 20 20 20  ISSUERID        
0f40: 20 20 20 20 30 78 35 30 0a 23 64 65 66 69 6e 65      0x50.#define
0f50: 20 47 53 43 49 53 5f 54 41 47 5f 53 45 52 4e 4f   GSCIS_TAG_SERNO
0f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
0f70: 78 35 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49  x51.#define GSCI
0f80: 53 5f 54 41 47 5f 49 53 53 55 45 5f 44 41 54 45  S_TAG_ISSUE_DATE
0f90: 20 20 20 20 20 20 20 20 20 20 30 78 35 32 0a 23            0x52.#
0fa0: 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41 47  define GSCIS_TAG
0fb0: 5f 45 58 50 49 52 45 5f 44 41 54 45 20 20 20 20  _EXPIRE_DATE    
0fc0: 20 20 20 20 20 30 78 35 33 0a 23 64 65 66 69 6e       0x53.#defin
0fd0: 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44  e GSCIS_TAG_CARD
0fe0: 5f 54 59 50 45 20 20 20 20 20 20 20 20 20 20 20  _TYPE           
0ff0: 30 78 35 34 0a 23 64 65 66 69 6e 65 20 47 53 43  0x54.#define GSC
1000: 49 53 5f 54 41 47 5f 53 45 43 55 52 49 54 59 5f  IS_TAG_SECURITY_
1010: 43 4f 44 45 20 20 20 20 20 20 20 30 78 35 37 0a  CODE       0x57.
1020: 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f 54 41  #define GSCIS_TA
1030: 47 5f 43 41 52 44 49 44 5f 41 49 44 20 20 20 20  G_CARDID_AID    
1040: 20 20 20 20 20 20 30 78 35 38 0a 0a 2f 2a 20 50        0x58../* P
1050: 4b 49 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 2d  KI Information -
1060: 20 45 46 20 37 30 30 30 20 2a 2f 0a 23 64 65 66   EF 7000 */.#def
1070: 69 6e 65 20 47 53 43 49 53 5f 54 41 47 5f 43 45  ine GSCIS_TAG_CE
1080: 52 54 49 46 49 43 41 54 45 20 20 20 20 20 20 20  RTIFICATE       
1090: 20 20 30 78 37 30 0a 23 64 65 66 69 6e 65 20 47    0x70.#define G
10a0: 53 43 49 53 5f 54 41 47 5f 43 45 52 54 5f 49 53  SCIS_TAG_CERT_IS
10b0: 53 55 45 5f 44 41 54 45 20 20 20 20 20 30 78 37  SUE_DATE     0x7
10c0: 31 0a 23 64 65 66 69 6e 65 20 47 53 43 49 53 5f  1.#define GSCIS_
10d0: 54 41 47 5f 43 45 52 54 5f 45 58 50 49 52 45 5f  TAG_CERT_EXPIRE_
10e0: 44 41 54 45 20 20 20 20 30 78 37 32 0a 0a 23 69  DATE    0x72..#i
10f0: 66 64 65 66 20 43 41 43 4b 45 59 5f 44 45 42 55  fdef CACKEY_DEBU
1100: 47 0a 23 20 20 69 66 64 65 66 20 48 41 56 45 5f  G.#  ifdef HAVE_
1110: 53 54 44 49 4f 5f 48 0a 23 20 20 20 20 69 6e 63  STDIO_H.#    inc
1120: 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e 0a 23  lude <stdio.h>.#
1130: 20 20 65 6e 64 69 66 0a 0a 23 20 20 64 65 66 69    endif..#  defi
1140: 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ne CACKEY_DEBUG_
1150: 50 52 49 4e 54 46 28 78 2e 2e 2e 29 20 7b 20 66  PRINTF(x...) { f
1160: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
1170: 25 73 28 29 3a 20 22 2c 20 5f 5f 66 75 6e 63 5f  %s(): ", __func_
1180: 5f 29 3b 20 66 70 72 69 6e 74 66 28 73 74 64 65  _); fprintf(stde
1190: 72 72 2c 20 78 29 3b 20 66 70 72 69 6e 74 66 28  rr, x); fprintf(
11a0: 73 74 64 65 72 72 2c 20 22 5c 6e 22 29 3b 20 7d  stderr, "\n"); }
11b0: 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45  .#  define CACKE
11c0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46  Y_DEBUG_PRINTBUF
11d0: 28 66 2c 20 78 2c 20 79 29 20 7b 20 75 6e 73 69  (f, x, y) { unsi
11e0: 67 6e 65 64 20 63 68 61 72 20 2a 62 75 66 3b 20  gned char *buf; 
11f0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64  unsigned long id
1200: 78 3b 20 62 75 66 20 3d 20 28 75 6e 73 69 67 6e  x; buf = (unsign
1210: 65 64 20 63 68 61 72 20 2a 29 20 28 78 29 3b 20  ed char *) (x); 
1220: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  fprintf(stderr, 
1230: 22 25 73 28 29 3a 20 25 73 20 20 28 25 73 2f 25  "%s(): %s  (%s/%
1240: 6c 75 20 3d 20 7b 25 30 32 78 22 2c 20 5f 5f 66  lu = {%02x", __f
1250: 75 6e 63 5f 5f 2c 20 66 2c 20 23 78 2c 20 28 75  unc__, f, #x, (u
1260: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 28 79  nsigned long) (y
1270: 29 2c 20 62 75 66 5b 30 5d 29 3b 20 66 6f 72 20  ), buf[0]); for 
1280: 28 69 64 78 20 3d 20 31 3b 20 69 64 78 20 3c 20  (idx = 1; idx < 
1290: 28 79 29 3b 20 69 64 78 2b 2b 29 20 7b 20 66 70  (y); idx++) { fp
12a0: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 2c  rintf(stderr, ",
12b0: 20 25 30 32 78 22 2c 20 62 75 66 5b 69 64 78 5d   %02x", buf[idx]
12c0: 29 3b 20 7d 3b 20 66 70 72 69 6e 74 66 28 73 74  ); }; fprintf(st
12d0: 64 65 72 72 2c 20 22 7d 29 5c 6e 22 29 3b 20 7d  derr, "})\n"); }
12e0: 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45  .#  define CACKE
12f0: 59 5f 44 45 42 55 47 5f 50 45 52 52 4f 52 28 78  Y_DEBUG_PERROR(x
1300: 29 20 7b 20 66 70 72 69 6e 74 66 28 73 74 64 65  ) { fprintf(stde
1310: 72 72 2c 20 22 25 73 28 29 3a 20 22 2c 20 5f 5f  rr, "%s(): ", __
1320: 66 75 6e 63 5f 5f 29 3b 20 70 65 72 72 6f 72 28  func__); perror(
1330: 78 29 3b 20 7d 0a 23 20 20 64 65 66 69 6e 65 20  x); }.#  define 
1340: 66 72 65 65 28 78 29 20 7b 20 43 41 43 4b 45 59  free(x) { CACKEY
1350: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46  _DEBUG_PRINTF("F
1360: 52 45 45 28 25 70 29 20 28 25 73 29 22 2c 20 78  REE(%p) (%s)", x
1370: 2c 20 23 78 29 3b 20 66 72 65 65 28 78 29 3b 20  , #x); free(x); 
1380: 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 20 2a  }..static void *
1390: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e  CACKEY_DEBUG_FUN
13a0: 43 5f 4d 41 4c 4c 4f 43 28 73 69 7a 65 5f 74 20  C_MALLOC(size_t 
13b0: 73 69 7a 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  size, const char
13c0: 20 2a 66 75 6e 63 29 20 7b 0a 09 76 6f 69 64 20   *func) {..void 
13d0: 2a 72 65 74 76 61 6c 3b 0a 0a 09 72 65 74 76 61  *retval;...retva
13e0: 6c 20 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 29  l = malloc(size)
13f0: 3b 0a 0a 09 66 70 72 69 6e 74 66 28 73 74 64 65  ;...fprintf(stde
1400: 72 72 2c 20 22 25 73 28 29 3a 20 22 2c 20 66 75  rr, "%s(): ", fu
1410: 6e 63 29 3b 0a 09 66 70 72 69 6e 74 66 28 73 74  nc);..fprintf(st
1420: 64 65 72 72 2c 20 22 4d 41 4c 4c 4f 43 28 29 20  derr, "MALLOC() 
1430: 3d 20 25 70 22 2c 20 72 65 74 76 61 6c 29 3b 0a  = %p", retval);.
1440: 09 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c  .fprintf(stderr,
1450: 20 22 5c 6e 22 29 3b 0a 0a 09 72 65 74 75 72 6e   "\n");...return
1460: 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61  (retval);.}..sta
1470: 74 69 63 20 76 6f 69 64 20 2a 43 41 43 4b 45 59  tic void *CACKEY
1480: 5f 44 45 42 55 47 5f 46 55 4e 43 5f 52 45 41 4c  _DEBUG_FUNC_REAL
1490: 4c 4f 43 28 76 6f 69 64 20 2a 70 74 72 2c 20 73  LOC(void *ptr, s
14a0: 69 7a 65 5f 74 20 73 69 7a 65 2c 20 63 6f 6e 73  ize_t size, cons
14b0: 74 20 63 68 61 72 20 2a 66 75 6e 63 29 20 7b 0a  t char *func) {.
14c0: 09 76 6f 69 64 20 2a 72 65 74 76 61 6c 3b 0a 0a  .void *retval;..
14d0: 09 72 65 74 76 61 6c 20 3d 20 72 65 61 6c 6c 6f  .retval = reallo
14e0: 63 28 70 74 72 2c 20 73 69 7a 65 29 3b 0a 0a 09  c(ptr, size);...
14f0: 69 66 20 28 72 65 74 76 61 6c 20 21 3d 20 70 74  if (retval != pt
1500: 72 29 20 7b 0a 09 09 66 70 72 69 6e 74 66 28 73  r) {...fprintf(s
1510: 74 64 65 72 72 2c 20 22 25 73 28 29 3a 20 22 2c  tderr, "%s(): ",
1520: 20 66 75 6e 63 29 3b 0a 09 09 66 70 72 69 6e 74   func);...fprint
1530: 66 28 73 74 64 65 72 72 2c 20 22 52 45 41 4c 4c  f(stderr, "REALL
1540: 4f 43 28 25 70 29 20 3d 20 25 70 22 2c 20 70 74  OC(%p) = %p", pt
1550: 72 2c 20 72 65 74 76 61 6c 29 3b 0a 09 09 66 70  r, retval);...fp
1560: 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22 5c  rintf(stderr, "\
1570: 6e 22 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e  n");..}...return
1580: 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73 74 61  (retval);.}..sta
1590: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
15a0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e  CACKEY_DEBUG_FUN
15b0: 43 5f 54 41 47 5f 54 4f 5f 53 54 52 28 75 6e 73  C_TAG_TO_STR(uns
15c0: 69 67 6e 65 64 20 63 68 61 72 20 74 61 67 29 20  igned char tag) 
15d0: 7b 0a 09 63 6f 6e 73 74 20 63 68 61 72 20 2a 72  {..const char *r
15e0: 65 74 76 61 6c 20 3d 20 4e 55 4c 4c 3b 0a 0a 09  etval = NULL;...
15f0: 73 77 69 74 63 68 20 28 74 61 67 29 20 7b 0a 09  switch (tag) {..
1600: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f  .case GSCIS_TAG_
1610: 43 41 52 44 49 44 3a 0a 09 09 09 72 65 74 76 61  CARDID:....retva
1620: 6c 20 3d 20 22 47 53 43 49 53 5f 54 41 47 5f 43  l = "GSCIS_TAG_C
1630: 41 52 44 49 44 22 3b 0a 09 09 09 62 72 65 61 6b  ARDID";....break
1640: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54  ;...case GSCIS_T
1650: 41 47 5f 43 43 43 5f 56 45 52 3a 0a 09 09 09 72  AG_CCC_VER:....r
1660: 65 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f 54  etval = "GSCIS_T
1670: 41 47 5f 43 43 43 5f 56 45 52 22 3b 0a 09 09 09  AG_CCC_VER";....
1680: 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 47 53  break;...case GS
1690: 43 49 53 5f 54 41 47 5f 43 43 47 5f 56 45 52 3a  CIS_TAG_CCG_VER:
16a0: 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 22 47 53  ....retval = "GS
16b0: 43 49 53 5f 54 41 47 5f 43 43 47 5f 56 45 52 22  CIS_TAG_CCG_VER"
16c0: 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61  ;....break;...ca
16d0: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 41 52  se GSCIS_TAG_CAR
16e0: 44 55 52 4c 3a 0a 09 09 09 72 65 74 76 61 6c 20  DURL:....retval 
16f0: 3d 20 22 47 53 43 49 53 5f 54 41 47 5f 43 41 52  = "GSCIS_TAG_CAR
1700: 44 55 52 4c 22 3b 0a 09 09 09 62 72 65 61 6b 3b  DURL";....break;
1710: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41  ...case GSCIS_TA
1720: 47 5f 50 4b 43 53 31 35 3a 0a 09 09 09 72 65 74  G_PKCS15:....ret
1730: 76 61 6c 20 3d 20 22 47 53 43 49 53 5f 54 41 47  val = "GSCIS_TAG
1740: 5f 50 4b 43 53 31 35 22 3b 0a 09 09 09 62 72 65  _PKCS15";....bre
1750: 61 6b 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53  ak;...case GSCIS
1760: 5f 54 41 47 5f 52 45 47 5f 44 41 54 41 5f 4d 4f  _TAG_REG_DATA_MO
1770: 44 45 4c 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d  DEL:....retval =
1780: 20 22 47 53 43 49 53 5f 54 41 47 5f 52 45 47 5f   "GSCIS_TAG_REG_
1790: 44 41 54 41 5f 4d 4f 44 45 4c 22 3b 0a 09 09 09  DATA_MODEL";....
17a0: 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 47 53  break;...case GS
17b0: 43 49 53 5f 54 41 47 5f 41 43 52 5f 54 41 42 4c  CIS_TAG_ACR_TABL
17c0: 45 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 22  E:....retval = "
17d0: 47 53 43 49 53 5f 54 41 47 5f 41 43 52 5f 54 41  GSCIS_TAG_ACR_TA
17e0: 42 4c 45 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a  BLE";....break;.
17f0: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47  ..case GSCIS_TAG
1800: 5f 43 41 52 44 5f 41 50 44 55 3a 0a 09 09 09 72  _CARD_APDU:....r
1810: 65 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f 54  etval = "GSCIS_T
1820: 41 47 5f 43 41 52 44 5f 41 50 44 55 22 3b 0a 09  AG_CARD_APDU";..
1830: 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20  ..break;...case 
1840: 47 53 43 49 53 5f 54 41 47 5f 52 45 44 49 52 45  GSCIS_TAG_REDIRE
1850: 43 54 49 4f 4e 3a 0a 09 09 09 72 65 74 76 61 6c  CTION:....retval
1860: 20 3d 20 22 47 53 43 49 53 5f 54 41 47 5f 52 45   = "GSCIS_TAG_RE
1870: 44 49 52 45 43 54 49 4f 4e 22 3b 0a 09 09 09 62  DIRECTION";....b
1880: 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 47 53 43  reak;...case GSC
1890: 49 53 5f 54 41 47 5f 43 54 3a 0a 09 09 09 72 65  IS_TAG_CT:....re
18a0: 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f 54 41  tval = "GSCIS_TA
18b0: 47 5f 43 54 22 3b 0a 09 09 09 62 72 65 61 6b 3b  G_CT";....break;
18c0: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41  ...case GSCIS_TA
18d0: 47 5f 53 54 3a 0a 09 09 09 72 65 74 76 61 6c 20  G_ST:....retval 
18e0: 3d 20 22 47 53 43 49 53 5f 54 41 47 5f 53 54 22  = "GSCIS_TAG_ST"
18f0: 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61  ;....break;...ca
1900: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4e 45 58  se GSCIS_TAG_NEX
1910: 54 43 43 43 3a 0a 09 09 09 72 65 74 76 61 6c 20  TCCC:....retval 
1920: 3d 20 22 47 53 43 49 53 5f 54 41 47 5f 4e 45 58  = "GSCIS_TAG_NEX
1930: 54 43 43 43 22 3b 0a 09 09 09 62 72 65 61 6b 3b  TCCC";....break;
1940: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41  ...case GSCIS_TA
1950: 47 5f 46 4e 41 4d 45 3a 0a 09 09 09 72 65 74 76  G_FNAME:....retv
1960: 61 6c 20 3d 20 22 47 53 43 49 53 5f 54 41 47 5f  al = "GSCIS_TAG_
1970: 46 4e 41 4d 45 22 3b 0a 09 09 09 62 72 65 61 6b  FNAME";....break
1980: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54  ;...case GSCIS_T
1990: 41 47 5f 4d 4e 41 4d 45 3a 0a 09 09 09 72 65 74  AG_MNAME:....ret
19a0: 76 61 6c 20 3d 20 22 47 53 43 49 53 5f 54 41 47  val = "GSCIS_TAG
19b0: 5f 4d 4e 41 4d 45 22 3b 0a 09 09 09 62 72 65 61  _MNAME";....brea
19c0: 6b 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f  k;...case GSCIS_
19d0: 54 41 47 5f 4c 4e 41 4d 45 3a 0a 09 09 09 72 65  TAG_LNAME:....re
19e0: 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f 54 41  tval = "GSCIS_TA
19f0: 47 5f 4c 4e 41 4d 45 22 3b 0a 09 09 09 62 72 65  G_LNAME";....bre
1a00: 61 6b 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53  ak;...case GSCIS
1a10: 5f 54 41 47 5f 53 55 46 46 49 58 3a 0a 09 09 09  _TAG_SUFFIX:....
1a20: 72 65 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f  retval = "GSCIS_
1a30: 54 41 47 5f 53 55 46 46 49 58 22 3b 0a 09 09 09  TAG_SUFFIX";....
1a40: 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 47 53  break;...case GS
1a50: 43 49 53 5f 54 41 47 5f 47 4f 56 54 5f 41 47 45  CIS_TAG_GOVT_AGE
1a60: 4e 43 59 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d  NCY:....retval =
1a70: 20 22 47 53 43 49 53 5f 54 41 47 5f 47 4f 56 54   "GSCIS_TAG_GOVT
1a80: 5f 41 47 45 4e 43 59 22 3b 0a 09 09 09 62 72 65  _AGENCY";....bre
1a90: 61 6b 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53  ak;...case GSCIS
1aa0: 5f 54 41 47 5f 42 55 52 45 41 55 3a 0a 09 09 09  _TAG_BUREAU:....
1ab0: 72 65 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f  retval = "GSCIS_
1ac0: 54 41 47 5f 42 55 52 45 41 55 22 3b 0a 09 09 09  TAG_BUREAU";....
1ad0: 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 47 53  break;...case GS
1ae0: 43 49 53 5f 54 41 47 5f 42 55 52 45 41 55 5f 43  CIS_TAG_BUREAU_C
1af0: 4f 44 45 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d  ODE:....retval =
1b00: 20 22 47 53 43 49 53 5f 54 41 47 5f 42 55 52 45   "GSCIS_TAG_BURE
1b10: 41 55 5f 43 4f 44 45 22 3b 0a 09 09 09 62 72 65  AU_CODE";....bre
1b20: 61 6b 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53  ak;...case GSCIS
1b30: 5f 54 41 47 5f 44 45 50 54 5f 43 4f 44 45 3a 0a  _TAG_DEPT_CODE:.
1b40: 09 09 09 72 65 74 76 61 6c 20 3d 20 22 47 53 43  ...retval = "GSC
1b50: 49 53 5f 54 41 47 5f 44 45 50 54 5f 43 4f 44 45  IS_TAG_DEPT_CODE
1b60: 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63  ";....break;...c
1b70: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 54 49  ase GSCIS_TAG_TI
1b80: 54 4c 45 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d  TLE:....retval =
1b90: 20 22 47 53 43 49 53 5f 54 41 47 5f 54 49 54 4c   "GSCIS_TAG_TITL
1ba0: 45 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09  E";....break;...
1bb0: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 42  case GSCIS_TAG_B
1bc0: 55 49 4c 44 49 4e 47 3a 0a 09 09 09 72 65 74 76  UILDING:....retv
1bd0: 61 6c 20 3d 20 22 47 53 43 49 53 5f 54 41 47 5f  al = "GSCIS_TAG_
1be0: 42 55 49 4c 44 49 4e 47 22 3b 0a 09 09 09 62 72  BUILDING";....br
1bf0: 65 61 6b 3b 0a 09 09 63 61 73 65 20 47 53 43 49  eak;...case GSCI
1c00: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 44  S_TAG_OFFICE_ADD
1c10: 52 31 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d 20  R1:....retval = 
1c20: 22 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43  "GSCIS_TAG_OFFIC
1c30: 45 5f 41 44 44 52 31 22 3b 0a 09 09 09 62 72 65  E_ADDR1";....bre
1c40: 61 6b 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53  ak;...case GSCIS
1c50: 5f 54 41 47 5f 4f 46 46 49 43 45 5f 41 44 44 52  _TAG_OFFICE_ADDR
1c60: 32 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 22  2:....retval = "
1c70: 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45  GSCIS_TAG_OFFICE
1c80: 5f 41 44 44 52 32 22 3b 0a 09 09 09 62 72 65 61  _ADDR2";....brea
1c90: 6b 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f  k;...case GSCIS_
1ca0: 54 41 47 5f 4f 46 46 49 43 45 5f 43 49 54 59 3a  TAG_OFFICE_CITY:
1cb0: 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 22 47 53  ....retval = "GS
1cc0: 43 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 43  CIS_TAG_OFFICE_C
1cd0: 49 54 59 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a  ITY";....break;.
1ce0: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47  ..case GSCIS_TAG
1cf0: 5f 4f 46 46 49 43 45 5f 53 54 41 54 45 3a 0a 09  _OFFICE_STATE:..
1d00: 09 09 72 65 74 76 61 6c 20 3d 20 22 47 53 43 49  ..retval = "GSCI
1d10: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 53 54 41  S_TAG_OFFICE_STA
1d20: 54 45 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09  TE";....break;..
1d30: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f  .case GSCIS_TAG_
1d40: 4f 46 46 49 43 45 5f 5a 49 50 3a 0a 09 09 09 72  OFFICE_ZIP:....r
1d50: 65 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f 54  etval = "GSCIS_T
1d60: 41 47 5f 4f 46 46 49 43 45 5f 5a 49 50 22 3b 0a  AG_OFFICE_ZIP";.
1d70: 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65  ...break;...case
1d80: 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46 49 43   GSCIS_TAG_OFFIC
1d90: 45 5f 43 4f 55 4e 54 52 59 3a 0a 09 09 09 72 65  E_COUNTRY:....re
1da0: 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f 54 41  tval = "GSCIS_TA
1db0: 47 5f 4f 46 46 49 43 45 5f 43 4f 55 4e 54 52 59  G_OFFICE_COUNTRY
1dc0: 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63  ";....break;...c
1dd0: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46  ase GSCIS_TAG_OF
1de0: 46 49 43 45 5f 50 48 4f 4e 45 3a 0a 09 09 09 72  FICE_PHONE:....r
1df0: 65 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f 54  etval = "GSCIS_T
1e00: 41 47 5f 4f 46 46 49 43 45 5f 50 48 4f 4e 45 22  AG_OFFICE_PHONE"
1e10: 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61  ;....break;...ca
1e20: 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46 46  se GSCIS_TAG_OFF
1e30: 49 43 45 5f 50 48 4f 4e 45 5f 45 58 54 3a 0a 09  ICE_PHONE_EXT:..
1e40: 09 09 72 65 74 76 61 6c 20 3d 20 22 47 53 43 49  ..retval = "GSCI
1e50: 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 50 48 4f  S_TAG_OFFICE_PHO
1e60: 4e 45 5f 45 58 54 22 3b 0a 09 09 09 62 72 65 61  NE_EXT";....brea
1e70: 6b 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f  k;...case GSCIS_
1e80: 54 41 47 5f 4f 46 46 49 43 45 5f 46 41 58 3a 0a  TAG_OFFICE_FAX:.
1e90: 09 09 09 72 65 74 76 61 6c 20 3d 20 22 47 53 43  ...retval = "GSC
1ea0: 49 53 5f 54 41 47 5f 4f 46 46 49 43 45 5f 46 41  IS_TAG_OFFICE_FA
1eb0: 58 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09  X";....break;...
1ec0: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f  case GSCIS_TAG_O
1ed0: 46 46 49 43 45 5f 45 4d 41 49 4c 3a 0a 09 09 09  FFICE_EMAIL:....
1ee0: 72 65 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f  retval = "GSCIS_
1ef0: 54 41 47 5f 4f 46 46 49 43 45 5f 45 4d 41 49 4c  TAG_OFFICE_EMAIL
1f00: 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63  ";....break;...c
1f10: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 4f 46  ase GSCIS_TAG_OF
1f20: 46 49 43 45 5f 52 4f 4f 4d 3a 0a 09 09 09 72 65  FICE_ROOM:....re
1f30: 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f 54 41  tval = "GSCIS_TA
1f40: 47 5f 4f 46 46 49 43 45 5f 52 4f 4f 4d 22 3b 0a  G_OFFICE_ROOM";.
1f50: 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65  ...break;...case
1f60: 20 47 53 43 49 53 5f 54 41 47 5f 4e 4f 4e 47 4f   GSCIS_TAG_NONGO
1f70: 56 5f 41 47 45 4e 43 59 3a 0a 09 09 09 72 65 74  V_AGENCY:....ret
1f80: 76 61 6c 20 3d 20 22 47 53 43 49 53 5f 54 41 47  val = "GSCIS_TAG
1f90: 5f 4e 4f 4e 47 4f 56 5f 41 47 45 4e 43 59 22 3b  _NONGOV_AGENCY";
1fa0: 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73  ....break;...cas
1fb0: 65 20 47 53 43 49 53 5f 54 41 47 5f 53 53 4e 5f  e GSCIS_TAG_SSN_
1fc0: 44 45 53 49 47 4e 41 54 4f 52 3a 0a 09 09 09 72  DESIGNATOR:....r
1fd0: 65 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f 54  etval = "GSCIS_T
1fe0: 41 47 5f 53 53 4e 5f 44 45 53 49 47 4e 41 54 4f  AG_SSN_DESIGNATO
1ff0: 52 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09  R";....break;...
2000: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 53  case GSCIS_TAG_S
2010: 53 4e 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d 20  SN:....retval = 
2020: 22 47 53 43 49 53 5f 54 41 47 5f 53 53 4e 22 3b  "GSCIS_TAG_SSN";
2030: 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73  ....break;...cas
2040: 65 20 47 53 43 49 53 5f 54 41 47 5f 44 4f 42 3a  e GSCIS_TAG_DOB:
2050: 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 22 47 53  ....retval = "GS
2060: 43 49 53 5f 54 41 47 5f 44 4f 42 22 3b 0a 09 09  CIS_TAG_DOB";...
2070: 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 47  .break;...case G
2080: 53 43 49 53 5f 54 41 47 5f 47 45 4e 44 45 52 3a  SCIS_TAG_GENDER:
2090: 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 22 47 53  ....retval = "GS
20a0: 43 49 53 5f 54 41 47 5f 47 45 4e 44 45 52 22 3b  CIS_TAG_GENDER";
20b0: 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73  ....break;...cas
20c0: 65 20 47 53 43 49 53 5f 54 41 47 5f 55 53 45 52  e GSCIS_TAG_USER
20d0: 49 44 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d 20  ID:....retval = 
20e0: 22 47 53 43 49 53 5f 54 41 47 5f 55 53 45 52 49  "GSCIS_TAG_USERI
20f0: 44 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09  D";....break;...
2100: 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 44  case GSCIS_TAG_D
2110: 4f 4d 41 49 4e 3a 0a 09 09 09 72 65 74 76 61 6c  OMAIN:....retval
2120: 20 3d 20 22 47 53 43 49 53 5f 54 41 47 5f 44 4f   = "GSCIS_TAG_DO
2130: 4d 41 49 4e 22 3b 0a 09 09 09 62 72 65 61 6b 3b  MAIN";....break;
2140: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41  ...case GSCIS_TA
2150: 47 5f 50 41 53 53 57 4f 52 44 3a 0a 09 09 09 72  G_PASSWORD:....r
2160: 65 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f 54  etval = "GSCIS_T
2170: 41 47 5f 50 41 53 53 57 4f 52 44 22 3b 0a 09 09  AG_PASSWORD";...
2180: 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 47  .break;...case G
2190: 53 43 49 53 5f 54 41 47 5f 49 53 53 55 45 52 49  SCIS_TAG_ISSUERI
21a0: 44 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 22  D:....retval = "
21b0: 47 53 43 49 53 5f 54 41 47 5f 49 53 53 55 45 52  GSCIS_TAG_ISSUER
21c0: 49 44 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09  ID";....break;..
21d0: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f  .case GSCIS_TAG_
21e0: 53 45 52 4e 4f 3a 0a 09 09 09 72 65 74 76 61 6c  SERNO:....retval
21f0: 20 3d 20 22 47 53 43 49 53 5f 54 41 47 5f 53 45   = "GSCIS_TAG_SE
2200: 52 4e 4f 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a  RNO";....break;.
2210: 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47  ..case GSCIS_TAG
2220: 5f 49 53 53 55 45 5f 44 41 54 45 3a 0a 09 09 09  _ISSUE_DATE:....
2230: 72 65 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f  retval = "GSCIS_
2240: 54 41 47 5f 49 53 53 55 45 5f 44 41 54 45 22 3b  TAG_ISSUE_DATE";
2250: 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73  ....break;...cas
2260: 65 20 47 53 43 49 53 5f 54 41 47 5f 45 58 50 49  e GSCIS_TAG_EXPI
2270: 52 45 5f 44 41 54 45 3a 0a 09 09 09 72 65 74 76  RE_DATE:....retv
2280: 61 6c 20 3d 20 22 47 53 43 49 53 5f 54 41 47 5f  al = "GSCIS_TAG_
2290: 45 58 50 49 52 45 5f 44 41 54 45 22 3b 0a 09 09  EXPIRE_DATE";...
22a0: 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 47  .break;...case G
22b0: 53 43 49 53 5f 54 41 47 5f 43 41 52 44 5f 54 59  SCIS_TAG_CARD_TY
22c0: 50 45 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d 20  PE:....retval = 
22d0: 22 47 53 43 49 53 5f 54 41 47 5f 43 41 52 44 5f  "GSCIS_TAG_CARD_
22e0: 54 59 50 45 22 3b 0a 09 09 09 62 72 65 61 6b 3b  TYPE";....break;
22f0: 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41  ...case GSCIS_TA
2300: 47 5f 53 45 43 55 52 49 54 59 5f 43 4f 44 45 3a  G_SECURITY_CODE:
2310: 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 22 47 53  ....retval = "GS
2320: 43 49 53 5f 54 41 47 5f 53 45 43 55 52 49 54 59  CIS_TAG_SECURITY
2330: 5f 43 4f 44 45 22 3b 0a 09 09 09 62 72 65 61 6b  _CODE";....break
2340: 3b 0a 09 09 63 61 73 65 20 47 53 43 49 53 5f 54  ;...case GSCIS_T
2350: 41 47 5f 43 41 52 44 49 44 5f 41 49 44 3a 0a 09  AG_CARDID_AID:..
2360: 09 09 72 65 74 76 61 6c 20 3d 20 22 47 53 43 49  ..retval = "GSCI
2370: 53 5f 54 41 47 5f 43 41 52 44 49 44 5f 41 49 44  S_TAG_CARDID_AID
2380: 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63  ";....break;...c
2390: 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f 43 45  ase GSCIS_TAG_CE
23a0: 52 54 49 46 49 43 41 54 45 3a 0a 09 09 09 72 65  RTIFICATE:....re
23b0: 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f 54 41  tval = "GSCIS_TA
23c0: 47 5f 43 45 52 54 49 46 49 43 41 54 45 22 3b 0a  G_CERTIFICATE";.
23d0: 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65  ...break;...case
23e0: 20 47 53 43 49 53 5f 54 41 47 5f 43 45 52 54 5f   GSCIS_TAG_CERT_
23f0: 49 53 53 55 45 5f 44 41 54 45 3a 0a 09 09 09 72  ISSUE_DATE:....r
2400: 65 74 76 61 6c 20 3d 20 22 47 53 43 49 53 5f 54  etval = "GSCIS_T
2410: 41 47 5f 43 45 52 54 5f 49 53 53 55 45 5f 44 41  AG_CERT_ISSUE_DA
2420: 54 45 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09  TE";....break;..
2430: 09 63 61 73 65 20 47 53 43 49 53 5f 54 41 47 5f  .case GSCIS_TAG_
2440: 43 45 52 54 5f 45 58 50 49 52 45 5f 44 41 54 45  CERT_EXPIRE_DATE
2450: 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 22 47  :....retval = "G
2460: 53 43 49 53 5f 54 41 47 5f 43 45 52 54 5f 45 58  SCIS_TAG_CERT_EX
2470: 50 49 52 45 5f 44 41 54 45 22 3b 0a 09 09 09 62  PIRE_DATE";....b
2480: 72 65 61 6b 3b 0a 09 7d 0a 0a 09 69 66 20 28 72  reak;..}...if (r
2490: 65 74 76 61 6c 20 3d 3d 20 4e 55 4c 4c 29 20 7b  etval == NULL) {
24a0: 0a 09 09 72 65 74 76 61 6c 20 3d 20 22 55 4e 4b  ...retval = "UNK
24b0: 4e 4f 57 4e 22 3b 0a 09 7d 0a 0a 09 72 65 74 75  NOWN";..}...retu
24c0: 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 73  rn(retval);.}..s
24d0: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
24e0: 20 2a 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46   *CACKEY_DEBUG_F
24f0: 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f  UNC_SCARDERR_TO_
2500: 53 54 52 28 4c 4f 4e 47 20 72 65 74 63 6f 64 65  STR(LONG retcode
2510: 29 20 7b 0a 09 63 6f 6e 73 74 20 63 68 61 72 20  ) {..const char 
2520: 2a 72 65 74 76 61 6c 20 3d 20 4e 55 4c 4c 3b 0a  *retval = NULL;.
2530: 0a 09 73 77 69 74 63 68 20 28 72 65 74 63 6f 64  ..switch (retcod
2540: 65 29 20 7b 0a 09 09 63 61 73 65 20 53 43 41 52  e) {...case SCAR
2550: 44 5f 53 5f 53 55 43 43 45 53 53 3a 0a 09 09 09  D_S_SUCCESS:....
2560: 72 65 74 76 61 6c 20 3d 20 22 53 43 41 52 44 5f  retval = "SCARD_
2570: 53 5f 53 55 43 43 45 53 53 22 3b 0a 09 09 09 62  S_SUCCESS";....b
2580: 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 53 43 41  reak;...case SCA
2590: 52 44 5f 45 5f 43 41 4e 43 45 4c 4c 45 44 3a 0a  RD_E_CANCELLED:.
25a0: 09 09 09 72 65 74 76 61 6c 20 3d 20 22 53 43 41  ...retval = "SCA
25b0: 52 44 5f 45 5f 43 41 4e 43 45 4c 4c 45 44 22 3b  RD_E_CANCELLED";
25c0: 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73  ....break;...cas
25d0: 65 20 53 43 41 52 44 5f 45 5f 43 41 4e 54 5f 44  e SCARD_E_CANT_D
25e0: 49 53 50 4f 53 45 3a 0a 09 09 09 72 65 74 76 61  ISPOSE:....retva
25f0: 6c 20 3d 20 22 53 43 41 52 44 5f 45 5f 43 41 4e  l = "SCARD_E_CAN
2600: 54 5f 44 49 53 50 4f 53 45 22 3b 0a 09 09 09 62  T_DISPOSE";....b
2610: 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 53 43 41  reak;...case SCA
2620: 52 44 5f 45 5f 49 4e 53 55 46 46 49 43 49 45 4e  RD_E_INSUFFICIEN
2630: 54 5f 42 55 46 46 45 52 3a 0a 09 09 09 72 65 74  T_BUFFER:....ret
2640: 76 61 6c 20 3d 20 22 53 43 41 52 44 5f 45 5f 49  val = "SCARD_E_I
2650: 4e 53 55 46 46 49 43 49 45 4e 54 5f 42 55 46 46  NSUFFICIENT_BUFF
2660: 45 52 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09  ER";....break;..
2670: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 49 4e  .case SCARD_E_IN
2680: 56 41 4c 49 44 5f 41 54 52 3a 0a 09 09 09 72 65  VALID_ATR:....re
2690: 74 76 61 6c 20 3d 20 22 53 43 41 52 44 5f 45 5f  tval = "SCARD_E_
26a0: 49 4e 56 41 4c 49 44 5f 41 54 52 22 3b 0a 09 09  INVALID_ATR";...
26b0: 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 53  .break;...case S
26c0: 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 48  CARD_E_INVALID_H
26d0: 41 4e 44 4c 45 3a 0a 09 09 09 72 65 74 76 61 6c  ANDLE:....retval
26e0: 20 3d 20 22 53 43 41 52 44 5f 45 5f 49 4e 56 41   = "SCARD_E_INVA
26f0: 4c 49 44 5f 48 41 4e 44 4c 45 22 3b 0a 09 09 09  LID_HANDLE";....
2700: 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 53 43  break;...case SC
2710: 41 52 44 5f 45 5f 49 4e 56 41 4c 49 44 5f 50 41  ARD_E_INVALID_PA
2720: 52 41 4d 45 54 45 52 3a 0a 09 09 09 72 65 74 76  RAMETER:....retv
2730: 61 6c 20 3d 20 22 53 43 41 52 44 5f 45 5f 49 4e  al = "SCARD_E_IN
2740: 56 41 4c 49 44 5f 50 41 52 41 4d 45 54 45 52 22  VALID_PARAMETER"
2750: 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61  ;....break;...ca
2760: 73 65 20 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c  se SCARD_E_INVAL
2770: 49 44 5f 54 41 52 47 45 54 3a 0a 09 09 09 72 65  ID_TARGET:....re
2780: 74 76 61 6c 20 3d 20 22 53 43 41 52 44 5f 45 5f  tval = "SCARD_E_
2790: 49 4e 56 41 4c 49 44 5f 54 41 52 47 45 54 22 3b  INVALID_TARGET";
27a0: 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73  ....break;...cas
27b0: 65 20 53 43 41 52 44 5f 45 5f 49 4e 56 41 4c 49  e SCARD_E_INVALI
27c0: 44 5f 56 41 4c 55 45 3a 0a 09 09 09 72 65 74 76  D_VALUE:....retv
27d0: 61 6c 20 3d 20 22 53 43 41 52 44 5f 45 5f 49 4e  al = "SCARD_E_IN
27e0: 56 41 4c 49 44 5f 56 41 4c 55 45 22 3b 0a 09 09  VALID_VALUE";...
27f0: 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 53  .break;...case S
2800: 43 41 52 44 5f 45 5f 4e 4f 5f 4d 45 4d 4f 52 59  CARD_E_NO_MEMORY
2810: 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 22 53  :....retval = "S
2820: 43 41 52 44 5f 45 5f 4e 4f 5f 4d 45 4d 4f 52 59  CARD_E_NO_MEMORY
2830: 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63  ";....break;...c
2840: 61 73 65 20 53 43 41 52 44 5f 45 5f 55 4e 4b 4e  ase SCARD_E_UNKN
2850: 4f 57 4e 5f 52 45 41 44 45 52 3a 0a 09 09 09 72  OWN_READER:....r
2860: 65 74 76 61 6c 20 3d 20 22 53 43 41 52 44 5f 45  etval = "SCARD_E
2870: 5f 55 4e 4b 4e 4f 57 4e 5f 52 45 41 44 45 52 22  _UNKNOWN_READER"
2880: 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61  ;....break;...ca
2890: 73 65 20 53 43 41 52 44 5f 45 5f 54 49 4d 45 4f  se SCARD_E_TIMEO
28a0: 55 54 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d 20  UT:....retval = 
28b0: 22 53 43 41 52 44 5f 45 5f 54 49 4d 45 4f 55 54  "SCARD_E_TIMEOUT
28c0: 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63  ";....break;...c
28d0: 61 73 65 20 53 43 41 52 44 5f 45 5f 53 48 41 52  ase SCARD_E_SHAR
28e0: 49 4e 47 5f 56 49 4f 4c 41 54 49 4f 4e 3a 0a 09  ING_VIOLATION:..
28f0: 09 09 72 65 74 76 61 6c 20 3d 20 22 53 43 41 52  ..retval = "SCAR
2900: 44 5f 45 5f 53 48 41 52 49 4e 47 5f 56 49 4f 4c  D_E_SHARING_VIOL
2910: 41 54 49 4f 4e 22 3b 0a 09 09 09 62 72 65 61 6b  ATION";....break
2920: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45  ;...case SCARD_E
2930: 5f 4e 4f 5f 53 4d 41 52 54 43 41 52 44 3a 0a 09  _NO_SMARTCARD:..
2940: 09 09 72 65 74 76 61 6c 20 3d 20 22 53 43 41 52  ..retval = "SCAR
2950: 44 5f 45 5f 4e 4f 5f 53 4d 41 52 54 43 41 52 44  D_E_NO_SMARTCARD
2960: 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63  ";....break;...c
2970: 61 73 65 20 53 43 41 52 44 5f 45 5f 55 4e 4b 4e  ase SCARD_E_UNKN
2980: 4f 57 4e 5f 43 41 52 44 3a 0a 09 09 09 72 65 74  OWN_CARD:....ret
2990: 76 61 6c 20 3d 20 22 53 43 41 52 44 5f 45 5f 55  val = "SCARD_E_U
29a0: 4e 4b 4e 4f 57 4e 5f 43 41 52 44 22 3b 0a 09 09  NKNOWN_CARD";...
29b0: 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 53  .break;...case S
29c0: 43 41 52 44 5f 45 5f 50 52 4f 54 4f 5f 4d 49 53  CARD_E_PROTO_MIS
29d0: 4d 41 54 43 48 3a 0a 09 09 09 72 65 74 76 61 6c  MATCH:....retval
29e0: 20 3d 20 22 53 43 41 52 44 5f 45 5f 50 52 4f 54   = "SCARD_E_PROT
29f0: 4f 5f 4d 49 53 4d 41 54 43 48 22 3b 0a 09 09 09  O_MISMATCH";....
2a00: 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 53 43  break;...case SC
2a10: 41 52 44 5f 45 5f 4e 4f 54 5f 52 45 41 44 59 3a  ARD_E_NOT_READY:
2a20: 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 22 53 43  ....retval = "SC
2a30: 41 52 44 5f 45 5f 4e 4f 54 5f 52 45 41 44 59 22  ARD_E_NOT_READY"
2a40: 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61  ;....break;...ca
2a50: 73 65 20 53 43 41 52 44 5f 45 5f 53 59 53 54 45  se SCARD_E_SYSTE
2a60: 4d 5f 43 41 4e 43 45 4c 4c 45 44 3a 0a 09 09 09  M_CANCELLED:....
2a70: 72 65 74 76 61 6c 20 3d 20 22 53 43 41 52 44 5f  retval = "SCARD_
2a80: 45 5f 53 59 53 54 45 4d 5f 43 41 4e 43 45 4c 4c  E_SYSTEM_CANCELL
2a90: 45 44 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09  ED";....break;..
2aa0: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 4e 4f  .case SCARD_E_NO
2ab0: 54 5f 54 52 41 4e 53 41 43 54 45 44 3a 0a 09 09  T_TRANSACTED:...
2ac0: 09 72 65 74 76 61 6c 20 3d 20 22 53 43 41 52 44  .retval = "SCARD
2ad0: 5f 45 5f 4e 4f 54 5f 54 52 41 4e 53 41 43 54 45  _E_NOT_TRANSACTE
2ae0: 44 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09  D";....break;...
2af0: 63 61 73 65 20 53 43 41 52 44 5f 45 5f 52 45 41  case SCARD_E_REA
2b00: 44 45 52 5f 55 4e 41 56 41 49 4c 41 42 4c 45 3a  DER_UNAVAILABLE:
2b10: 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 22 53 43  ....retval = "SC
2b20: 41 52 44 5f 45 5f 52 45 41 44 45 52 5f 55 4e 41  ARD_E_READER_UNA
2b30: 56 41 49 4c 41 42 4c 45 22 3b 0a 09 09 09 62 72  VAILABLE";....br
2b40: 65 61 6b 3b 0a 09 09 63 61 73 65 20 53 43 41 52  eak;...case SCAR
2b50: 44 5f 57 5f 55 4e 53 55 50 50 4f 52 54 45 44 5f  D_W_UNSUPPORTED_
2b60: 43 41 52 44 3a 0a 09 09 09 72 65 74 76 61 6c 20  CARD:....retval 
2b70: 3d 20 22 53 43 41 52 44 5f 57 5f 55 4e 53 55 50  = "SCARD_W_UNSUP
2b80: 50 4f 52 54 45 44 5f 43 41 52 44 22 3b 0a 09 09  PORTED_CARD";...
2b90: 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 53  .break;...case S
2ba0: 43 41 52 44 5f 57 5f 55 4e 52 45 53 50 4f 4e 53  CARD_W_UNRESPONS
2bb0: 49 56 45 5f 43 41 52 44 3a 0a 09 09 09 72 65 74  IVE_CARD:....ret
2bc0: 76 61 6c 20 3d 20 22 53 43 41 52 44 5f 57 5f 55  val = "SCARD_W_U
2bd0: 4e 52 45 53 50 4f 4e 53 49 56 45 5f 43 41 52 44  NRESPONSIVE_CARD
2be0: 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63  ";....break;...c
2bf0: 61 73 65 20 53 43 41 52 44 5f 57 5f 55 4e 50 4f  ase SCARD_W_UNPO
2c00: 57 45 52 45 44 5f 43 41 52 44 3a 0a 09 09 09 72  WERED_CARD:....r
2c10: 65 74 76 61 6c 20 3d 20 22 53 43 41 52 44 5f 57  etval = "SCARD_W
2c20: 5f 55 4e 50 4f 57 45 52 45 44 5f 43 41 52 44 22  _UNPOWERED_CARD"
2c30: 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61  ;....break;...ca
2c40: 73 65 20 53 43 41 52 44 5f 57 5f 52 45 53 45 54  se SCARD_W_RESET
2c50: 5f 43 41 52 44 3a 0a 09 09 09 72 65 74 76 61 6c  _CARD:....retval
2c60: 20 3d 20 22 53 43 41 52 44 5f 57 5f 52 45 53 45   = "SCARD_W_RESE
2c70: 54 5f 43 41 52 44 22 3b 0a 09 09 09 62 72 65 61  T_CARD";....brea
2c80: 6b 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f  k;...case SCARD_
2c90: 57 5f 52 45 4d 4f 56 45 44 5f 43 41 52 44 3a 0a  W_REMOVED_CARD:.
2ca0: 09 09 09 72 65 74 76 61 6c 20 3d 20 22 53 43 41  ...retval = "SCA
2cb0: 52 44 5f 57 5f 52 45 4d 4f 56 45 44 5f 43 41 52  RD_W_REMOVED_CAR
2cc0: 44 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09  D";....break;...
2cd0: 63 61 73 65 20 53 43 41 52 44 5f 45 5f 50 43 49  case SCARD_E_PCI
2ce0: 5f 54 4f 4f 5f 53 4d 41 4c 4c 3a 0a 09 09 09 72  _TOO_SMALL:....r
2cf0: 65 74 76 61 6c 20 3d 20 22 53 43 41 52 44 5f 45  etval = "SCARD_E
2d00: 5f 50 43 49 5f 54 4f 4f 5f 53 4d 41 4c 4c 22 3b  _PCI_TOO_SMALL";
2d10: 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73  ....break;...cas
2d20: 65 20 53 43 41 52 44 5f 45 5f 52 45 41 44 45 52  e SCARD_E_READER
2d30: 5f 55 4e 53 55 50 50 4f 52 54 45 44 3a 0a 09 09  _UNSUPPORTED:...
2d40: 09 72 65 74 76 61 6c 20 3d 20 22 53 43 41 52 44  .retval = "SCARD
2d50: 5f 45 5f 52 45 41 44 45 52 5f 55 4e 53 55 50 50  _E_READER_UNSUPP
2d60: 4f 52 54 45 44 22 3b 0a 09 09 09 62 72 65 61 6b  ORTED";....break
2d70: 3b 0a 09 09 63 61 73 65 20 53 43 41 52 44 5f 45  ;...case SCARD_E
2d80: 5f 44 55 50 4c 49 43 41 54 45 5f 52 45 41 44 45  _DUPLICATE_READE
2d90: 52 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 22  R:....retval = "
2da0: 53 43 41 52 44 5f 45 5f 44 55 50 4c 49 43 41 54  SCARD_E_DUPLICAT
2db0: 45 5f 52 45 41 44 45 52 22 3b 0a 09 09 09 62 72  E_READER";....br
2dc0: 65 61 6b 3b 0a 09 09 63 61 73 65 20 53 43 41 52  eak;...case SCAR
2dd0: 44 5f 45 5f 43 41 52 44 5f 55 4e 53 55 50 50 4f  D_E_CARD_UNSUPPO
2de0: 52 54 45 44 3a 0a 09 09 09 72 65 74 76 61 6c 20  RTED:....retval 
2df0: 3d 20 22 53 43 41 52 44 5f 45 5f 43 41 52 44 5f  = "SCARD_E_CARD_
2e00: 55 4e 53 55 50 50 4f 52 54 45 44 22 3b 0a 09 09  UNSUPPORTED";...
2e10: 09 62 72 65 61 6b 3b 0a 09 09 63 61 73 65 20 53  .break;...case S
2e20: 43 41 52 44 5f 45 5f 4e 4f 5f 53 45 52 56 49 43  CARD_E_NO_SERVIC
2e30: 45 3a 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 22  E:....retval = "
2e40: 53 43 41 52 44 5f 45 5f 4e 4f 5f 53 45 52 56 49  SCARD_E_NO_SERVI
2e50: 43 45 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09  CE";....break;..
2e60: 09 63 61 73 65 20 53 43 41 52 44 5f 45 5f 53 45  .case SCARD_E_SE
2e70: 52 56 49 43 45 5f 53 54 4f 50 50 45 44 3a 0a 09  RVICE_STOPPED:..
2e80: 09 09 72 65 74 76 61 6c 20 3d 20 22 53 43 41 52  ..retval = "SCAR
2e90: 44 5f 45 5f 53 45 52 56 49 43 45 5f 53 54 4f 50  D_E_SERVICE_STOP
2ea0: 50 45 44 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a  PED";....break;.
2eb0: 09 09 63 61 73 65 20 53 43 41 52 44 5f 57 5f 49  ..case SCARD_W_I
2ec0: 4e 53 45 52 54 45 44 5f 43 41 52 44 3a 0a 09 09  NSERTED_CARD:...
2ed0: 09 72 65 74 76 61 6c 20 3d 20 22 53 43 41 52 44  .retval = "SCARD
2ee0: 5f 57 5f 49 4e 53 45 52 54 45 44 5f 43 41 52 44  _W_INSERTED_CARD
2ef0: 22 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63  ";....break;...c
2f00: 61 73 65 20 53 43 41 52 44 5f 45 5f 55 4e 53 55  ase SCARD_E_UNSU
2f10: 50 50 4f 52 54 45 44 5f 46 45 41 54 55 52 45 3a  PPORTED_FEATURE:
2f20: 0a 09 09 09 72 65 74 76 61 6c 20 3d 20 22 53 43  ....retval = "SC
2f30: 41 52 44 5f 45 5f 55 4e 53 55 50 50 4f 52 54 45  ARD_E_UNSUPPORTE
2f40: 44 5f 46 45 41 54 55 52 45 22 3b 0a 09 09 09 62  D_FEATURE";....b
2f50: 72 65 61 6b 3b 0a 09 7d 0a 0a 09 69 66 20 28 72  reak;..}...if (r
2f60: 65 74 76 61 6c 20 3d 3d 20 4e 55 4c 4c 29 20 7b  etval == NULL) {
2f70: 0a 09 09 72 65 74 76 61 6c 20 3d 20 22 55 4e 4b  ...retval = "UNK
2f80: 4e 4f 57 4e 22 3b 0a 09 7d 0a 0a 09 72 65 74 75  NOWN";..}...retu
2f90: 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 23  rn(retval);.}..#
2fa0: 20 20 64 65 66 69 6e 65 20 6d 61 6c 6c 6f 63 28    define malloc(
2fb0: 78 29 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  x) CACKEY_DEBUG_
2fc0: 46 55 4e 43 5f 4d 41 4c 4c 4f 43 28 78 2c 20 5f  FUNC_MALLOC(x, _
2fd0: 5f 66 75 6e 63 5f 5f 29 0a 23 20 20 64 65 66 69  _func__).#  defi
2fe0: 6e 65 20 72 65 61 6c 6c 6f 63 28 78 2c 20 79 29  ne realloc(x, y)
2ff0: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55   CACKEY_DEBUG_FU
3000: 4e 43 5f 52 45 41 4c 4c 4f 43 28 78 2c 20 79 2c  NC_REALLOC(x, y,
3010: 20 5f 5f 66 75 6e 63 5f 5f 29 0a 23 65 6c 73 65   __func__).#else
3020: 0a 23 20 20 64 65 66 69 6e 65 20 43 41 43 4b 45  .#  define CACKE
3030: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 78  Y_DEBUG_PRINTF(x
3040: 2e 2e 2e 29 20 2f 2a 2a 2f 0a 23 20 20 64 65 66  ...) /**/.#  def
3050: 69 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47  ine CACKEY_DEBUG
3060: 5f 50 52 49 4e 54 42 55 46 28 66 2c 20 78 2c 20  _PRINTBUF(f, x, 
3070: 79 29 20 2f 2a 2a 2f 0a 23 20 20 64 65 66 69 6e  y) /**/.#  defin
3080: 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  e CACKEY_DEBUG_P
3090: 45 52 52 4f 52 28 78 29 20 2f 2a 2a 2f 0a 23 20  ERROR(x) /**/.# 
30a0: 20 64 65 66 69 6e 65 20 43 41 43 4b 45 59 5f 44   define CACKEY_D
30b0: 45 42 55 47 5f 46 55 4e 43 5f 54 41 47 5f 54 4f  EBUG_FUNC_TAG_TO
30c0: 5f 53 54 52 28 78 29 20 22 44 45 42 55 47 5f 44  _STR(x) "DEBUG_D
30d0: 49 53 41 42 4c 45 44 22 0a 23 20 20 64 65 66 69  ISABLED".#  defi
30e0: 6e 65 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ne CACKEY_DEBUG_
30f0: 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f  FUNC_SCARDERR_TO
3100: 5f 53 54 52 28 78 29 20 22 44 45 42 55 47 5f 44  _STR(x) "DEBUG_D
3110: 49 53 41 42 4c 45 44 22 0a 23 65 6e 64 69 66 0a  ISABLED".#endif.
3120: 0a 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 69  .struct cackey_i
3130: 64 65 6e 74 69 74 79 20 7b 0a 09 43 4b 5f 41 54  dentity {..CK_AT
3140: 54 52 49 42 55 54 45 20 2a 61 74 74 72 69 62 75  TRIBUTE *attribu
3150: 74 65 73 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 61  tes;..CK_ULONG a
3160: 74 74 72 69 62 75 74 65 73 5f 63 6f 75 6e 74 3b  ttributes_count;
3170: 0a 7d 3b 0a 0a 73 74 72 75 63 74 20 63 61 63 6b  .};..struct cack
3180: 65 79 5f 73 65 73 73 69 6f 6e 20 7b 0a 09 69 6e  ey_session {..in
3190: 74 20 61 63 74 69 76 65 3b 0a 0a 09 43 4b 5f 53  t active;...CK_S
31a0: 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 3b 0a 0a  LOT_ID slotID;..
31b0: 09 43 4b 5f 53 54 41 54 45 20 73 74 61 74 65 3b  .CK_STATE state;
31c0: 0a 09 43 4b 5f 46 4c 41 47 53 20 66 6c 61 67 73  ..CK_FLAGS flags
31d0: 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 65  ;..CK_ULONG ulDe
31e0: 76 69 63 65 45 72 72 6f 72 3b 0a 09 43 4b 5f 56  viceError;..CK_V
31f0: 4f 49 44 5f 50 54 52 20 70 41 70 70 6c 69 63 61  OID_PTR pApplica
3200: 74 69 6f 6e 3b 0a 09 43 4b 5f 4e 4f 54 49 46 59  tion;..CK_NOTIFY
3210: 20 4e 6f 74 69 66 79 3b 0a 0a 09 73 74 72 75 63   Notify;...struc
3220: 74 20 63 61 63 6b 65 79 5f 69 64 65 6e 74 69 74  t cackey_identit
3230: 79 20 2a 69 64 65 6e 74 69 74 69 65 73 3b 0a 09  y *identities;..
3240: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 69 64  unsigned long id
3250: 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 3b 0a  entities_count;.
3260: 0a 09 69 6e 74 20 73 65 61 72 63 68 5f 61 63 74  ..int search_act
3270: 69 76 65 3b 0a 09 43 4b 5f 41 54 54 52 49 42 55  ive;..CK_ATTRIBU
3280: 54 45 5f 50 54 52 20 73 65 61 72 63 68 5f 71 75  TE_PTR search_qu
3290: 65 72 79 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 73  ery;..CK_ULONG s
32a0: 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e  earch_query_coun
32b0: 74 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  t;..unsigned lon
32c0: 67 20 73 65 61 72 63 68 5f 63 75 72 72 5f 69 64  g search_curr_id
32d0: 3b 0a 0a 09 69 6e 74 20 73 69 67 6e 5f 61 63 74  ;...int sign_act
32e0: 69 76 65 3b 0a 09 43 4b 5f 4d 45 43 48 41 4e 49  ive;..CK_MECHANI
32f0: 53 4d 5f 54 59 50 45 20 73 69 67 6e 5f 6d 65 63  SM_TYPE sign_mec
3300: 68 61 6e 69 73 6d 3b 0a 09 43 4b 5f 42 59 54 45  hanism;..CK_BYTE
3310: 5f 50 54 52 20 73 69 67 6e 5f 62 75 66 3b 0a 09  _PTR sign_buf;..
3320: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20 73 69  unsigned long si
3330: 67 6e 5f 62 75 66 6c 65 6e 3b 0a 09 75 6e 73 69  gn_buflen;..unsi
3340: 67 6e 65 64 20 6c 6f 6e 67 20 73 69 67 6e 5f 62  gned long sign_b
3350: 75 66 75 73 65 64 3b 0a 0a 09 69 6e 74 20 64 65  ufused;...int de
3360: 63 72 79 70 74 5f 61 63 74 69 76 65 3b 0a 09 43  crypt_active;..C
3370: 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 54 59 50 45  K_MECHANISM_TYPE
3380: 20 64 65 63 72 79 70 74 5f 6d 65 63 68 61 6e 69   decrypt_mechani
3390: 73 6d 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50 54 52  sm;..CK_VOID_PTR
33a0: 20 64 65 63 72 79 70 74 5f 6d 65 63 68 5f 70 61   decrypt_mech_pa
33b0: 72 6d 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 64 65  rm;..CK_ULONG de
33c0: 63 72 79 70 74 5f 6d 65 63 68 5f 70 61 72 6d 6c  crypt_mech_parml
33d0: 65 6e 3b 0a 0a 7d 3b 0a 0a 73 74 72 75 63 74 20  en;..};..struct 
33e0: 63 61 63 6b 65 79 5f 73 6c 6f 74 20 7b 0a 09 69  cackey_slot {..i
33f0: 6e 74 20 61 63 74 69 76 65 3b 0a 0a 09 63 68 61  nt active;...cha
3400: 72 20 2a 70 63 73 63 5f 72 65 61 64 65 72 3b 0a  r *pcsc_reader;.
3410: 0a 09 69 6e 74 20 70 63 73 63 5f 63 61 72 64 5f  ..int pcsc_card_
3420: 63 6f 6e 6e 65 63 74 65 64 3b 0a 09 53 43 41 52  connected;..SCAR
3430: 44 48 41 4e 44 4c 45 20 70 63 73 63 5f 63 61 72  DHANDLE pcsc_car
3440: 64 3b 0a 7d 3b 0a 0a 73 74 72 75 63 74 20 63 61  d;.};..struct ca
3450: 63 6b 65 79 5f 74 6c 76 5f 63 61 72 64 75 72 6c  ckey_tlv_cardurl
3460: 20 7b 0a 7d 3b 0a 0a 73 74 72 75 63 74 20 63 61   {.};..struct ca
3470: 63 6b 65 79 5f 74 6c 76 5f 65 6e 74 69 74 79 20  ckey_tlv_entity 
3480: 7b 0a 09 75 69 6e 74 38 5f 74 20 74 61 67 3b 0a  {..uint8_t tag;.
3490: 09 73 69 7a 65 5f 74 20 6c 65 6e 67 74 68 3b 0a  .size_t length;.
34a0: 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a  .unsigned char *
34b0: 76 61 6c 75 65 5f 62 75 66 3b 20 2f 2a 20 52 61  value_buf; /* Ra
34c0: 77 20 62 75 66 66 65 72 20 2a 2f 0a 09 76 6f 69  w buffer */..voi
34d0: 64 20 2a 76 61 6c 75 65 3b 0a 7d 3b 0a 0a 2f 2a  d *value;.};../*
34e0: 20 43 41 43 4b 45 59 20 47 6c 6f 62 61 6c 20 48   CACKEY Global H
34f0: 61 6e 64 6c 65 73 20 2a 2f 0a 73 74 61 74 69 63  andles */.static
3500: 20 76 6f 69 64 20 2a 63 61 63 6b 65 79 5f 62 69   void *cackey_bi
3510: 67 6c 6f 63 6b 20 3d 20 4e 55 4c 4c 3b 0a 73 74  glock = NULL;.st
3520: 61 74 69 63 20 73 74 72 75 63 74 20 63 61 63 6b  atic struct cack
3530: 65 79 5f 73 65 73 73 69 6f 6e 20 63 61 63 6b 65  ey_session cacke
3540: 79 5f 73 65 73 73 69 6f 6e 73 5b 31 32 38 5d 3b  y_sessions[128];
3550: 0a 73 74 61 74 69 63 20 73 74 72 75 63 74 20 63  .static struct c
3560: 61 63 6b 65 79 5f 73 6c 6f 74 20 63 61 63 6b 65  ackey_slot cacke
3570: 79 5f 73 6c 6f 74 73 5b 31 32 38 5d 3b 0a 73 74  y_slots[128];.st
3580: 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f  atic int cackey_
3590: 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d 20 30 3b  initialized = 0;
35a0: 0a 73 74 61 74 69 63 20 69 6e 74 20 63 61 63 6b  .static int cack
35b0: 65 79 5f 62 69 67 6c 6f 63 6b 5f 69 6e 69 74 20  ey_biglock_init 
35c0: 3d 20 30 3b 0a 43 4b 5f 43 5f 49 4e 49 54 49 41  = 0;.CK_C_INITIA
35d0: 4c 49 5a 45 5f 41 52 47 53 20 63 61 63 6b 65 79  LIZE_ARGS cackey
35e0: 5f 61 72 67 73 3b 0a 0a 2f 2a 20 50 43 53 43 20  _args;../* PCSC 
35f0: 47 6c 6f 62 61 6c 20 48 61 6e 64 6c 65 73 20 2a  Global Handles *
3600: 2f 0a 73 74 61 74 69 63 20 4c 50 53 43 41 52 44  /.static LPSCARD
3610: 43 4f 4e 54 45 58 54 20 63 61 63 6b 65 79 5f 70  CONTEXT cackey_p
3620: 63 73 63 5f 68 61 6e 64 6c 65 20 3d 20 4e 55 4c  csc_handle = NUL
3630: 4c 3b 0a 0a 73 74 61 74 69 63 20 75 6e 73 69 67  L;..static unsig
3640: 6e 65 64 20 6c 6f 6e 67 20 63 61 63 6b 65 79 5f  ned long cackey_
3650: 67 65 74 76 65 72 73 69 6f 6e 28 76 6f 69 64 29  getversion(void)
3660: 20 7b 0a 09 73 74 61 74 69 63 20 75 6e 73 69 67   {..static unsig
3670: 6e 65 64 20 6c 6f 6e 67 20 72 65 74 76 61 6c 20  ned long retval 
3680: 3d 20 32 35 35 3b 0a 09 75 6e 73 69 67 6e 65 64  = 255;..unsigned
3690: 20 6c 6f 6e 67 20 6d 61 6a 6f 72 20 3d 20 30 3b   long major = 0;
36a0: 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 20  ..unsigned long 
36b0: 6d 69 6e 6f 72 20 3d 20 30 3b 0a 09 63 68 61 72  minor = 0;..char
36c0: 20 2a 6d 61 6a 6f 72 5f 73 74 72 20 3d 20 4e 55   *major_str = NU
36d0: 4c 4c 3b 0a 09 63 68 61 72 20 2a 6d 69 6e 6f 72  LL;..char *minor
36e0: 5f 73 74 72 20 3d 20 4e 55 4c 4c 3b 0a 0a 09 43  _str = NULL;...C
36f0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
3700: 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a  TF("Called.");..
3710: 09 69 66 20 28 72 65 74 76 61 6c 20 21 3d 20 32  .if (retval != 2
3720: 35 35 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  55) {...CACKEY_D
3730: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
3740: 75 72 6e 69 6e 67 20 30 78 25 6c 78 20 28 63 61  urning 0x%lx (ca
3750: 63 68 65 64 29 2e 22 2c 20 72 65 74 76 61 6c 29  ched).", retval)
3760: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 72 65 74 76  ;....return(retv
3770: 61 6c 29 3b 0a 09 7d 0a 0a 09 72 65 74 76 61 6c  al);..}...retval
3780: 20 3d 20 30 3b 0a 0a 23 69 66 64 65 66 20 50 41   = 0;..#ifdef PA
3790: 43 4b 41 47 45 5f 56 45 52 53 49 4f 4e 0a 20 20  CKAGE_VERSION.  
37a0: 20 20 20 20 20 20 6d 61 6a 6f 72 5f 73 74 72 20        major_str 
37b0: 3d 20 50 41 43 4b 41 47 45 5f 56 45 52 53 49 4f  = PACKAGE_VERSIO
37c0: 4e 3b 0a 09 69 66 20 28 6d 61 6a 6f 72 5f 73 74  N;..if (major_st
37d0: 72 29 20 7b 0a 09 20 20 20 20 20 20 20 20 6d 61  r) {..        ma
37e0: 6a 6f 72 20 3d 20 73 74 72 74 6f 75 6c 28 6d 61  jor = strtoul(ma
37f0: 6a 6f 72 5f 73 74 72 2c 20 26 6d 69 6e 6f 72 5f  jor_str, &minor_
3800: 73 74 72 2c 20 31 30 29 3b 0a 0a 09 09 69 66 20  str, 10);....if 
3810: 28 6d 69 6e 6f 72 5f 73 74 72 29 20 7b 0a 09 09  (minor_str) {...
3820: 09 6d 69 6e 6f 72 20 3d 20 73 74 72 74 6f 75 6c  .minor = strtoul
3830: 28 6d 69 6e 6f 72 5f 73 74 72 20 2b 20 31 2c 20  (minor_str + 1, 
3840: 4e 55 4c 4c 2c 20 31 30 29 3b 0a 09 09 7d 0a 09  NULL, 10);...}..
3850: 7d 0a 0a 09 72 65 74 76 61 6c 20 3d 20 28 6d 61  }...retval = (ma
3860: 6a 6f 72 20 3c 3c 20 31 36 29 20 7c 20 28 6d 69  jor << 16) | (mi
3870: 6e 6f 72 20 3c 3c 20 38 29 3b 0a 23 65 6e 64 69  nor << 8);.#endi
3880: 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  f...CACKEY_DEBUG
3890: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69  _PRINTF("Returni
38a0: 6e 67 20 30 78 25 6c 78 22 2c 20 72 65 74 76 61  ng 0x%lx", retva
38b0: 6c 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74  l);...return(ret
38c0: 76 61 6c 29 3b 0a 7d 0a 0a 2f 2a 20 50 43 2f 53  val);.}../* PC/S
38d0: 43 20 52 65 6c 61 74 65 64 20 46 75 6e 63 74 69  C Related Functi
38e0: 6f 6e 73 20 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ons */.static vo
38f0: 69 64 20 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f  id cackey_slots_
3900: 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 76  disconnect_all(v
3910: 6f 69 64 29 20 7b 0a 09 75 69 6e 74 33 32 5f 74  oid) {..uint32_t
3920: 20 69 64 78 3b 0a 0a 09 43 41 43 4b 45 59 5f 44   idx;...CACKEY_D
3930: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c  EBUG_PRINTF("Cal
3940: 6c 65 64 2e 22 29 3b 0a 0a 09 66 6f 72 20 28 69  led.");...for (i
3950: 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 28 73  dx = 0; idx < (s
3960: 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f  izeof(cackey_slo
3970: 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63  ts) / sizeof(cac
3980: 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 3b 20  key_slots[0])); 
3990: 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 63  idx++) {...if (c
39a0: 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d  ackey_slots[idx]
39b0: 2e 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65  .pcsc_card_conne
39c0: 63 74 65 64 29 20 7b 0a 09 09 09 43 41 43 4b 45  cted) {....CACKE
39d0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
39e0: 53 43 61 72 64 44 69 73 63 6f 6e 6e 65 63 74 28  SCardDisconnect(
39f0: 25 6c 75 29 20 63 61 6c 6c 65 64 22 2c 20 28 75  %lu) called", (u
3a00: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 69 64  nsigned long) id
3a10: 78 29 3b 0a 0a 09 09 09 53 43 61 72 64 44 69 73  x);.....SCardDis
3a20: 63 6f 6e 6e 65 63 74 28 63 61 63 6b 65 79 5f 73  connect(cackey_s
3a30: 6c 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 63  lots[idx].pcsc_c
3a40: 61 72 64 2c 20 53 43 41 52 44 5f 4c 45 41 56 45  ard, SCARD_LEAVE
3a50: 5f 43 41 52 44 29 3b 0a 09 09 7d 0a 0a 09 09 63  _CARD);...}....c
3a60: 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78 5d  ackey_slots[idx]
3a70: 2e 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65  .pcsc_card_conne
3a80: 63 74 65 64 20 3d 20 30 3b 0a 09 7d 0a 0a 09 43  cted = 0;..}...C
3a90: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
3aa0: 54 46 28 22 52 65 74 75 72 6e 69 6e 67 22 29 3b  TF("Returning");
3ab0: 0a 0a 09 72 65 74 75 72 6e 3b 0a 7d 0a 0a 73 74  ...return;.}..st
3ac0: 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f  atic int cackey_
3ad0: 70 63 73 63 5f 63 6f 6e 6e 65 63 74 28 76 6f 69  pcsc_connect(voi
3ae0: 64 29 20 7b 0a 09 4c 4f 4e 47 20 73 63 61 72 64  d) {..LONG scard
3af0: 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74  _est_context_ret
3b00: 3b 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 43  ;.#ifdef HAVE_SC
3b10: 41 52 44 49 53 56 41 4c 49 44 43 4f 4e 54 45 58  ARDISVALIDCONTEX
3b20: 54 0a 09 4c 4f 4e 47 20 73 63 61 72 64 5f 69 73  T..LONG scard_is
3b30: 76 61 6c 69 64 5f 72 65 74 3b 0a 23 65 6e 64 69  valid_ret;.#endi
3b40: 66 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  f...CACKEY_DEBUG
3b50: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e  _PRINTF("Called.
3b60: 22 29 3b 0a 0a 09 69 66 20 28 63 61 63 6b 65 79  ");...if (cackey
3b70: 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 3d 20  _pcsc_handle == 
3b80: 4e 55 4c 4c 29 20 7b 0a 09 09 63 61 63 6b 65 79  NULL) {...cackey
3b90: 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 20 6d  _pcsc_handle = m
3ba0: 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 63 61  alloc(sizeof(*ca
3bb0: 63 6b 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65  ckey_pcsc_handle
3bc0: 29 29 3b 0a 09 09 69 66 20 28 63 61 63 6b 65 79  ));...if (cackey
3bd0: 5f 70 63 73 63 5f 68 61 6e 64 6c 65 20 3d 3d 20  _pcsc_handle == 
3be0: 4e 55 4c 4c 29 20 7b 0a 09 09 09 43 41 43 4b 45  NULL) {....CACKE
3bf0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
3c00: 43 61 6c 6c 20 74 6f 20 6d 61 6c 6c 6f 63 28 29  Call to malloc()
3c10: 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 69   failed, returni
3c20: 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b  ng in failure");
3c30: 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74  .....cackey_slot
3c40: 73 5f 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c  s_disconnect_all
3c50: 28 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d  ();.....return(-
3c60: 31 29 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b 45  1);...}....CACKE
3c70: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
3c80: 53 43 61 72 64 45 73 74 61 62 6c 69 73 68 43 6f  SCardEstablishCo
3c90: 6e 74 65 78 74 28 29 20 63 61 6c 6c 65 64 22 29  ntext() called")
3ca0: 3b 0a 09 09 73 63 61 72 64 5f 65 73 74 5f 63 6f  ;...scard_est_co
3cb0: 6e 74 65 78 74 5f 72 65 74 20 3d 20 53 43 61 72  ntext_ret = SCar
3cc0: 64 45 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 78  dEstablishContex
3cd0: 74 28 53 43 41 52 44 5f 53 43 4f 50 45 5f 53 59  t(SCARD_SCOPE_SY
3ce0: 53 54 45 4d 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c  STEM, NULL, NULL
3cf0: 2c 20 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61  , cackey_pcsc_ha
3d00: 6e 64 6c 65 29 3b 0a 09 09 69 66 20 28 73 63 61  ndle);...if (sca
3d10: 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72  rd_est_context_r
3d20: 65 74 20 21 3d 20 53 43 41 52 44 5f 53 5f 53 55  et != SCARD_S_SU
3d30: 43 43 45 53 53 29 20 7b 0a 09 09 09 43 41 43 4b  CCESS) {....CACK
3d40: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
3d50: 22 43 61 6c 6c 20 74 6f 20 53 43 61 72 64 45 73  "Call to SCardEs
3d60: 74 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 20 66  tablishContext f
3d70: 61 69 6c 65 64 20 28 72 65 74 75 72 6e 65 64 20  ailed (returned 
3d80: 25 73 2f 25 6c 69 29 2c 20 72 65 74 75 72 6e 69  %s/%li), returni
3d90: 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 2c 20  ng in failure", 
3da0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e  CACKEY_DEBUG_FUN
3db0: 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54  C_SCARDERR_TO_ST
3dc0: 52 28 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74  R(scard_est_cont
3dd0: 65 78 74 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29  ext_ret), (long)
3de0: 20 73 63 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65   scard_est_conte
3df0: 78 74 5f 72 65 74 29 3b 0a 0a 09 09 09 66 72 65  xt_ret);.....fre
3e00: 65 28 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61  e(cackey_pcsc_ha
3e10: 6e 64 6c 65 29 3b 0a 0a 09 09 09 63 61 63 6b 65  ndle);.....cacke
3e20: 79 5f 73 6c 6f 74 73 5f 64 69 73 63 6f 6e 6e 65  y_slots_disconne
3e30: 63 74 5f 61 6c 6c 28 29 3b 0a 0a 09 09 09 72 65  ct_all();.....re
3e40: 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 09 7d  turn(-1);...}..}
3e50: 0a 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 43  ..#ifdef HAVE_SC
3e60: 41 52 44 49 53 56 41 4c 49 44 43 4f 4e 54 45 58  ARDISVALIDCONTEX
3e70: 54 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  T..CACKEY_DEBUG_
3e80: 50 52 49 4e 54 46 28 22 53 43 61 72 64 49 73 56  PRINTF("SCardIsV
3e90: 61 6c 69 64 43 6f 6e 74 65 78 74 28 29 20 63 61  alidContext() ca
3ea0: 6c 6c 65 64 22 29 3b 0a 09 73 63 61 72 64 5f 69  lled");..scard_i
3eb0: 73 76 61 6c 69 64 5f 72 65 74 20 3d 20 53 43 61  svalid_ret = SCa
3ec0: 72 64 49 73 56 61 6c 69 64 43 6f 6e 74 65 78 74  rdIsValidContext
3ed0: 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 5f 68 61  (*cackey_pcsc_ha
3ee0: 6e 64 6c 65 29 3b 0a 09 69 66 20 28 73 63 61 72  ndle);..if (scar
3ef0: 64 5f 69 73 76 61 6c 69 64 5f 72 65 74 20 21 3d  d_isvalid_ret !=
3f00: 20 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53   SCARD_S_SUCCESS
3f10: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  ) {...CACKEY_DEB
3f20: 55 47 5f 50 52 49 4e 54 46 28 22 48 61 6e 64 6c  UG_PRINTF("Handl
3f30: 65 20 68 61 73 20 62 65 63 6f 6d 65 20 69 6e 76  e has become inv
3f40: 61 6c 69 64 20 28 53 43 61 72 64 49 73 56 61 6c  alid (SCardIsVal
3f50: 69 64 43 6f 6e 74 65 78 74 20 3d 20 25 73 2f 25  idContext = %s/%
3f60: 6c 69 29 2c 20 74 72 79 69 6e 67 20 74 6f 20 72  li), trying to r
3f70: 65 2d 65 73 74 61 62 6c 69 73 68 2e 2e 2e 22 2c  e-establish...",
3f80: 20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55   CACKEY_DEBUG_FU
3f90: 4e 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53  NC_SCARDERR_TO_S
3fa0: 54 52 28 73 63 61 72 64 5f 69 73 76 61 6c 69 64  TR(scard_isvalid
3fb0: 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63  _ret), (long) sc
3fc0: 61 72 64 5f 69 73 76 61 6c 69 64 5f 72 65 74 29  ard_isvalid_ret)
3fd0: 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55  ;....CACKEY_DEBU
3fe0: 47 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 45  G_PRINTF("SCardE
3ff0: 73 74 61 62 6c 69 73 68 43 6f 6e 74 65 78 74 28  stablishContext(
4000: 29 20 63 61 6c 6c 65 64 22 29 3b 0a 09 09 73 63  ) called");...sc
4010: 61 72 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f  ard_est_context_
4020: 72 65 74 20 3d 20 53 43 61 72 64 45 73 74 61 62  ret = SCardEstab
4030: 6c 69 73 68 43 6f 6e 74 65 78 74 28 53 43 41 52  lishContext(SCAR
4040: 44 5f 53 43 4f 50 45 5f 53 59 53 54 45 4d 2c 20  D_SCOPE_SYSTEM, 
4050: 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 63 61 63 6b  NULL, NULL, cack
4060: 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b  ey_pcsc_handle);
4070: 0a 09 09 69 66 20 28 73 63 61 72 64 5f 65 73 74  ...if (scard_est
4080: 5f 63 6f 6e 74 65 78 74 5f 72 65 74 20 21 3d 20  _context_ret != 
4090: 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29  SCARD_S_SUCCESS)
40a0: 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42   {....CACKEY_DEB
40b0: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 20  UG_PRINTF("Call 
40c0: 74 6f 20 53 43 61 72 64 45 73 74 61 62 6c 69 73  to SCardEstablis
40d0: 68 43 6f 6e 74 65 78 74 20 66 61 69 6c 65 64 20  hContext failed 
40e0: 28 72 65 74 75 72 6e 65 64 20 25 73 2f 25 6c 69  (returned %s/%li
40f0: 29 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20  ), returning in 
4100: 66 61 69 6c 75 72 65 22 2c 20 43 41 43 4b 45 59  failure", CACKEY
4110: 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41 52  _DEBUG_FUNC_SCAR
4120: 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61 72  DERR_TO_STR(scar
4130: 64 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65  d_est_context_re
4140: 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72 64  t), (long) scard
4150: 5f 65 73 74 5f 63 6f 6e 74 65 78 74 5f 72 65 74  _est_context_ret
4160: 29 3b 0a 0a 09 09 09 66 72 65 65 28 63 61 63 6b  );.....free(cack
4170: 65 79 5f 70 63 73 63 5f 68 61 6e 64 6c 65 29 3b  ey_pcsc_handle);
4180: 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 6c 6f 74  .....cackey_slot
4190: 73 5f 64 69 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c  s_disconnect_all
41a0: 28 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d  ();.....return(-
41b0: 31 29 3b 0a 09 09 7d 0a 0a 09 09 43 41 43 4b 45  1);...}....CACKE
41c0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
41d0: 48 61 6e 64 6c 65 20 68 61 73 20 62 65 65 6e 20  Handle has been 
41e0: 72 65 2d 65 73 74 61 62 6c 69 73 68 65 64 22 29  re-established")
41f0: 3b 0a 09 7d 0a 23 65 6e 64 69 66 0a 0a 09 43 41  ;..}.#endif...CA
4200: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
4210: 46 28 22 53 75 63 65 73 73 66 75 6c 6c 79 20 63  F("Sucessfully c
4220: 6f 6e 6e 65 63 74 65 64 20 74 6f 20 50 43 2f 53  onnected to PC/S
4230: 43 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20  C, returning in 
4240: 73 75 63 63 65 73 73 22 29 3b 0a 0a 09 72 65 74  success");...ret
4250: 75 72 6e 28 30 29 3b 0a 7d 0a 0a 2f 2a 20 41 50  urn(0);.}../* AP
4260: 44 55 20 52 65 6c 61 74 65 64 20 46 75 6e 63 74  DU Related Funct
4270: 69 6f 6e 73 20 2a 2f 0a 2f 2a 2a 20 4c 65 20 3d  ions */./** Le =
4280: 20 30 78 30 30 20 74 6f 20 69 6e 64 69 63 61 74   0x00 to indicat
4290: 65 20 6e 6f 74 20 74 6f 20 73 65 6e 64 20 4c 65  e not to send Le
42a0: 20 2a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20   **/.static int 
42b0: 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64 75  cackey_send_apdu
42c0: 28 73 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73  (struct cackey_s
42d0: 6c 6f 74 20 2a 73 6c 6f 74 2c 20 75 6e 73 69 67  lot *slot, unsig
42e0: 6e 65 64 20 63 68 61 72 20 63 6c 61 73 73 2c 20  ned char class, 
42f0: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 69 6e  unsigned char in
4300: 73 74 72 75 63 74 69 6f 6e 2c 20 75 6e 73 69 67  struction, unsig
4310: 6e 65 64 20 63 68 61 72 20 70 31 2c 20 75 6e 73  ned char p1, uns
4320: 69 67 6e 65 64 20 63 68 61 72 20 70 32 2c 20 75  igned char p2, u
4330: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6c 63 2c  nsigned char lc,
4340: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a   unsigned char *
4350: 64 61 74 61 2c 20 75 6e 73 69 67 6e 65 64 20 63  data, unsigned c
4360: 68 61 72 20 6c 65 2c 20 75 69 6e 74 31 36 5f 74  har le, uint16_t
4370: 20 2a 72 65 73 70 63 6f 64 65 2c 20 75 6e 73 69   *respcode, unsi
4380: 67 6e 65 64 20 63 68 61 72 20 2a 72 65 73 70 64  gned char *respd
4390: 61 74 61 2c 20 73 69 7a 65 5f 74 20 2a 72 65 73  ata, size_t *res
43a0: 70 64 61 74 61 5f 6c 65 6e 29 20 7b 0a 09 75 69  pdata_len) {..ui
43b0: 6e 74 38 5f 74 20 6d 61 6a 6f 72 5f 72 63 2c 20  nt8_t major_rc, 
43c0: 6d 69 6e 6f 72 5f 72 63 3b 0a 09 73 69 7a 65 5f  minor_rc;..size_
43d0: 74 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 2c  t bytes_to_copy,
43e0: 20 74 6d 70 5f 72 65 73 70 64 61 74 61 5f 6c 65   tmp_respdata_le
43f0: 6e 3b 0a 09 44 57 4f 52 44 20 70 72 6f 74 6f 63  n;..DWORD protoc
4400: 6f 6c 3b 0a 09 44 57 4f 52 44 20 78 6d 69 74 5f  ol;..DWORD xmit_
4410: 6c 65 6e 2c 20 72 65 63 76 5f 6c 65 6e 3b 0a 09  len, recv_len;..
4420: 4c 4f 4e 47 20 73 63 61 72 64 5f 63 6f 6e 6e 5f  LONG scard_conn_
4430: 72 65 74 2c 20 73 63 61 72 64 5f 78 6d 69 74 5f  ret, scard_xmit_
4440: 72 65 74 2c 20 73 63 61 72 64 5f 72 65 63 6f 6e  ret, scard_recon
4450: 6e 5f 72 65 74 3b 0a 09 42 59 54 45 20 78 6d 69  n_ret;..BYTE xmi
4460: 74 5f 62 75 66 5b 31 30 32 34 5d 2c 20 72 65 63  t_buf[1024], rec
4470: 76 5f 62 75 66 5b 31 30 32 34 5d 3b 0a 09 69 6e  v_buf[1024];..in
4480: 74 20 70 63 73 63 5f 63 6f 6e 6e 65 63 74 5f 72  t pcsc_connect_r
4490: 65 74 2c 20 70 63 73 63 5f 67 65 74 72 65 73 70  et, pcsc_getresp
44a0: 5f 72 65 74 3b 0a 09 69 6e 74 20 69 64 78 3b 0a  _ret;..int idx;.
44b0: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
44c0: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29  RINTF("Called.")
44d0: 3b 0a 0a 09 69 66 20 28 21 73 6c 6f 74 29 20 7b  ;...if (!slot) {
44e0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
44f0: 50 52 49 4e 54 46 28 22 49 6e 76 61 6c 69 64 20  PRINTF("Invalid 
4500: 73 6c 6f 74 20 73 70 65 63 69 66 69 65 64 2e 22  slot specified."
4510: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31 29  );....return(-1)
4520: 3b 0a 09 7d 0a 0a 09 70 63 73 63 5f 63 6f 6e 6e  ;..}...pcsc_conn
4530: 65 63 74 5f 72 65 74 20 3d 20 63 61 63 6b 65 79  ect_ret = cackey
4540: 5f 70 63 73 63 5f 63 6f 6e 6e 65 63 74 28 29 3b  _pcsc_connect();
4550: 0a 09 69 66 20 28 70 63 73 63 5f 63 6f 6e 6e 65  ..if (pcsc_conne
4560: 63 74 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09  ct_ret < 0) {...
4570: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
4580: 4e 54 46 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 20  NTF("Connection 
4590: 74 6f 20 50 43 2f 53 43 20 66 61 69 6c 65 64 2c  to PC/SC failed,
45a0: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61   returning in fa
45b0: 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75  ilure");....retu
45c0: 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09 2f 2a 20  rn(-1);..}.../* 
45d0: 43 6f 6e 6e 65 63 74 20 74 6f 20 72 65 61 64 65  Connect to reade
45e0: 72 2c 20 69 66 20 6e 65 65 64 65 64 20 2a 2f 0a  r, if needed */.
45f0: 09 69 66 20 28 21 73 6c 6f 74 2d 3e 70 63 73 63  .if (!slot->pcsc
4600: 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64 29  _card_connected)
4610: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
4620: 47 5f 50 52 49 4e 54 46 28 22 53 43 61 72 64 43  G_PRINTF("SCardC
4630: 6f 6e 6e 65 63 74 28 25 73 29 20 63 61 6c 6c 65  onnect(%s) calle
4640: 64 22 2c 20 73 6c 6f 74 2d 3e 70 63 73 63 5f 72  d", slot->pcsc_r
4650: 65 61 64 65 72 29 3b 0a 09 09 73 63 61 72 64 5f  eader);...scard_
4660: 63 6f 6e 6e 5f 72 65 74 20 3d 20 53 43 61 72 64  conn_ret = SCard
4670: 43 6f 6e 6e 65 63 74 28 2a 63 61 63 6b 65 79 5f  Connect(*cackey_
4680: 70 63 73 63 5f 68 61 6e 64 6c 65 2c 20 73 6c 6f  pcsc_handle, slo
4690: 74 2d 3e 70 63 73 63 5f 72 65 61 64 65 72 2c 20  t->pcsc_reader, 
46a0: 53 43 41 52 44 5f 53 48 41 52 45 5f 53 48 41 52  SCARD_SHARE_SHAR
46b0: 45 44 2c 20 53 43 41 52 44 5f 50 52 4f 54 4f 43  ED, SCARD_PROTOC
46c0: 4f 4c 5f 54 30 2c 20 26 73 6c 6f 74 2d 3e 70 63  OL_T0, &slot->pc
46d0: 73 63 5f 63 61 72 64 2c 20 26 70 72 6f 74 6f 63  sc_card, &protoc
46e0: 6f 6c 29 3b 0a 0a 09 09 69 66 20 28 73 63 61 72  ol);....if (scar
46f0: 64 5f 63 6f 6e 6e 5f 72 65 74 20 21 3d 20 53 43  d_conn_ret != SC
4700: 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b  ARD_S_SUCCESS) {
4710: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
4720: 5f 50 52 49 4e 54 46 28 22 43 6f 6e 6e 65 63 74  _PRINTF("Connect
4730: 69 6f 6e 20 74 6f 20 63 61 72 64 20 66 61 69 6c  ion to card fail
4740: 65 64 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e  ed, returning in
4750: 20 66 61 69 6c 75 72 65 20 28 53 43 61 72 64 43   failure (SCardC
4760: 6f 6e 6e 65 63 74 28 29 20 3d 20 25 73 2f 25 6c  onnect() = %s/%l
4770: 69 29 22 2c 20 43 41 43 4b 45 59 5f 44 45 42 55  i)", CACKEY_DEBU
4780: 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52 5f  G_FUNC_SCARDERR_
4790: 54 4f 5f 53 54 52 28 73 63 61 72 64 5f 63 6f 6e  TO_STR(scard_con
47a0: 6e 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 20 73  n_ret), (long) s
47b0: 63 61 72 64 5f 63 6f 6e 6e 5f 72 65 74 29 3b 0a  card_conn_ret);.
47c0: 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a  ....return(-1);.
47d0: 09 09 7d 0a 0a 09 09 73 6c 6f 74 2d 3e 70 63 73  ..}....slot->pcs
47e0: 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74 65 64  c_card_connected
47f0: 20 3d 20 31 3b 0a 09 7d 0a 0a 09 2f 2a 20 54 72   = 1;..}.../* Tr
4800: 61 6e 73 6d 69 74 20 2a 2f 0a 09 78 6d 69 74 5f  ansmit */..xmit_
4810: 6c 65 6e 20 3d 20 30 3b 0a 09 78 6d 69 74 5f 62  len = 0;..xmit_b
4820: 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d  uf[xmit_len++] =
4830: 20 63 6c 61 73 73 3b 0a 09 78 6d 69 74 5f 62 75   class;..xmit_bu
4840: 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20  f[xmit_len++] = 
4850: 69 6e 73 74 72 75 63 74 69 6f 6e 3b 0a 09 78 6d  instruction;..xm
4860: 69 74 5f 62 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b  it_buf[xmit_len+
4870: 2b 5d 20 3d 20 70 31 3b 0a 09 78 6d 69 74 5f 62  +] = p1;..xmit_b
4880: 75 66 5b 78 6d 69 74 5f 6c 65 6e 2b 2b 5d 20 3d  uf[xmit_len++] =
4890: 20 70 32 3b 0a 09 69 66 20 28 64 61 74 61 29 20   p2;..if (data) 
48a0: 7b 0a 09 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69  {...xmit_buf[xmi
48b0: 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 6c 63 3b 0a 09  t_len++] = lc;..
48c0: 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69  .for (idx = 0; i
48d0: 64 78 20 3c 20 6c 63 3b 20 69 64 78 2b 2b 29 20  dx < lc; idx++) 
48e0: 7b 0a 09 09 09 78 6d 69 74 5f 62 75 66 5b 78 6d  {....xmit_buf[xm
48f0: 69 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 64 61 74 61  it_len++] = data
4900: 5b 69 64 78 5d 3b 0a 09 09 7d 0a 09 7d 0a 0a 09  [idx];...}..}...
4910: 69 66 20 28 6c 65 20 21 3d 20 30 78 30 30 29 20  if (le != 0x00) 
4920: 7b 0a 09 09 78 6d 69 74 5f 62 75 66 5b 78 6d 69  {...xmit_buf[xmi
4930: 74 5f 6c 65 6e 2b 2b 5d 20 3d 20 6c 65 3b 0a 09  t_len++] = le;..
4940: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  }...CACKEY_DEBUG
4950: 5f 50 52 49 4e 54 42 55 46 28 22 53 65 6e 64 69  _PRINTBUF("Sendi
4960: 6e 67 20 41 50 44 55 3a 22 2c 20 78 6d 69 74 5f  ng APDU:", xmit_
4970: 62 75 66 2c 20 78 6d 69 74 5f 6c 65 6e 29 3b 0a  buf, xmit_len);.
4980: 0a 09 72 65 63 76 5f 6c 65 6e 20 3d 20 73 69 7a  ..recv_len = siz
4990: 65 6f 66 28 72 65 63 76 5f 62 75 66 29 3b 0a 09  eof(recv_buf);..
49a0: 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 20 3d  scard_xmit_ret =
49b0: 20 53 43 61 72 64 54 72 61 6e 73 6d 69 74 28 73   SCardTransmit(s
49c0: 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 2c 20  lot->pcsc_card, 
49d0: 53 43 41 52 44 5f 50 43 49 5f 54 30 2c 20 78 6d  SCARD_PCI_T0, xm
49e0: 69 74 5f 62 75 66 2c 20 78 6d 69 74 5f 6c 65 6e  it_buf, xmit_len
49f0: 2c 20 53 43 41 52 44 5f 50 43 49 5f 54 31 2c 20  , SCARD_PCI_T1, 
4a00: 72 65 63 76 5f 62 75 66 2c 20 26 72 65 63 76 5f  recv_buf, &recv_
4a10: 6c 65 6e 29 3b 0a 09 69 66 20 28 73 63 61 72 64  len);..if (scard
4a20: 5f 78 6d 69 74 5f 72 65 74 20 21 3d 20 53 43 41  _xmit_ret != SCA
4a30: 52 44 5f 53 5f 53 55 43 43 45 53 53 29 20 7b 0a  RD_S_SUCCESS) {.
4a40: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
4a50: 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f  RINTF("Failed to
4a60: 20 73 65 6e 64 20 41 50 44 55 20 74 6f 20 63 61   send APDU to ca
4a70: 72 64 20 28 53 43 61 72 64 54 72 61 6e 73 6d 69  rd (SCardTransmi
4a80: 74 28 29 20 3d 20 25 73 2f 25 6c 78 29 22 2c 20  t() = %s/%lx)", 
4a90: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e  CACKEY_DEBUG_FUN
4aa0: 43 5f 53 43 41 52 44 45 52 52 5f 54 4f 5f 53 54  C_SCARDERR_TO_ST
4ab0: 52 28 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74  R(scard_xmit_ret
4ac0: 29 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  ), (unsigned lon
4ad0: 67 29 20 73 63 61 72 64 5f 78 6d 69 74 5f 72 65  g) scard_xmit_re
4ae0: 74 29 3b 0a 0a 09 09 69 66 20 28 73 63 61 72 64  t);....if (scard
4af0: 5f 78 6d 69 74 5f 72 65 74 20 3d 3d 20 53 43 41  _xmit_ret == SCA
4b00: 52 44 5f 57 5f 52 45 53 45 54 5f 43 41 52 44 29  RD_W_RESET_CARD)
4b10: 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42   {....CACKEY_DEB
4b20: 55 47 5f 50 52 49 4e 54 46 28 22 52 65 73 65 74  UG_PRINTF("Reset
4b30: 20 72 65 71 75 69 72 65 64 2c 20 70 6c 65 61 73   required, pleas
4b40: 65 20 68 6f 6c 64 2e 2e 2e 22 29 3b 0a 0a 09 09  e hold...");....
4b50: 09 73 63 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65  .scard_reconn_re
4b60: 74 20 3d 20 53 43 61 72 64 52 65 63 6f 6e 6e 65  t = SCardReconne
4b70: 63 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61  ct(slot->pcsc_ca
4b80: 72 64 2c 20 53 43 41 52 44 5f 53 48 41 52 45 5f  rd, SCARD_SHARE_
4b90: 53 48 41 52 45 44 2c 20 53 43 41 52 44 5f 50 52  SHARED, SCARD_PR
4ba0: 4f 54 4f 43 4f 4c 5f 54 30 2c 20 53 43 41 52 44  OTOCOL_T0, SCARD
4bb0: 5f 52 45 53 45 54 5f 43 41 52 44 2c 20 26 70 72  _RESET_CARD, &pr
4bc0: 6f 74 6f 63 6f 6c 29 3b 0a 09 09 09 69 66 20 28  otocol);....if (
4bd0: 73 63 61 72 64 5f 72 65 63 6f 6e 6e 5f 72 65 74  scard_reconn_ret
4be0: 20 3d 3d 20 53 43 41 52 44 5f 53 5f 53 55 43 43   == SCARD_S_SUCC
4bf0: 45 53 53 29 20 7b 0a 09 09 09 09 43 41 43 4b 45  ESS) {.....CACKE
4c00: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
4c10: 52 65 73 65 74 20 73 75 63 63 65 73 73 66 75 6c  Reset successful
4c20: 2c 20 72 65 74 72 61 6e 73 6d 69 74 74 69 6e 67  , retransmitting
4c30: 22 29 3b 0a 09 09 09 09 73 63 61 72 64 5f 78 6d  ");.....scard_xm
4c40: 69 74 5f 72 65 74 20 3d 20 53 43 61 72 64 54 72  it_ret = SCardTr
4c50: 61 6e 73 6d 69 74 28 73 6c 6f 74 2d 3e 70 63 73  ansmit(slot->pcs
4c60: 63 5f 63 61 72 64 2c 20 53 43 41 52 44 5f 50 43  c_card, SCARD_PC
4c70: 49 5f 54 30 2c 20 78 6d 69 74 5f 62 75 66 2c 20  I_T0, xmit_buf, 
4c80: 78 6d 69 74 5f 6c 65 6e 2c 20 53 43 41 52 44 5f  xmit_len, SCARD_
4c90: 50 43 49 5f 54 30 2c 20 72 65 63 76 5f 62 75 66  PCI_T0, recv_buf
4ca0: 2c 20 26 72 65 63 76 5f 6c 65 6e 29 3b 0a 0a 09  , &recv_len);...
4cb0: 09 09 09 69 66 20 28 73 63 61 72 64 5f 78 6d 69  ...if (scard_xmi
4cc0: 74 5f 72 65 74 20 21 3d 20 53 43 41 52 44 5f 53  t_ret != SCARD_S
4cd0: 5f 53 55 43 43 45 53 53 29 20 7b 0a 09 09 09 09  _SUCCESS) {.....
4ce0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
4cf0: 49 4e 54 46 28 22 52 65 74 72 61 6e 73 6d 69 74  INTF("Retransmit
4d00: 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 69   failed, returni
4d10: 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 20 61 66  ng in failure af
4d20: 74 65 72 20 64 69 73 63 6f 6e 6e 65 63 74 69 6e  ter disconnectin
4d30: 67 20 74 68 65 20 63 61 72 64 20 28 53 43 61 72  g the card (SCar
4d40: 64 54 72 61 6e 73 6d 69 74 20 3d 20 25 73 2f 25  dTransmit = %s/%
4d50: 6c 69 29 22 2c 20 43 41 43 4b 45 59 5f 44 45 42  li)", CACKEY_DEB
4d60: 55 47 5f 46 55 4e 43 5f 53 43 41 52 44 45 52 52  UG_FUNC_SCARDERR
4d70: 5f 54 4f 5f 53 54 52 28 73 63 61 72 64 5f 78 6d  _TO_STR(scard_xm
4d80: 69 74 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 20  it_ret), (long) 
4d90: 73 63 61 72 64 5f 78 6d 69 74 5f 72 65 74 29 3b  scard_xmit_ret);
4da0: 0a 0a 09 09 09 09 09 53 43 61 72 64 44 69 73 63  .......SCardDisc
4db0: 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d 3e 70 63 73  onnect(slot->pcs
4dc0: 63 5f 63 61 72 64 2c 20 53 43 41 52 44 5f 52 45  c_card, SCARD_RE
4dd0: 53 45 54 5f 43 41 52 44 29 3b 0a 09 09 09 09 09  SET_CARD);......
4de0: 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f  slot->pcsc_card_
4df0: 63 6f 6e 6e 65 63 74 65 64 20 3d 20 30 3b 0a 0a  connected = 0;..
4e00: 09 09 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b  .....return(-1);
4e10: 0a 09 09 09 09 7d 0a 09 09 09 7d 20 65 6c 73 65  .....}....} else
4e20: 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45   {.....CACKEY_DE
4e30: 42 55 47 5f 50 52 49 4e 54 46 28 22 44 69 73 63  BUG_PRINTF("Disc
4e40: 6f 6e 6e 65 63 74 69 6e 67 20 63 61 72 64 22 29  onnecting card")
4e50: 3b 0a 0a 09 09 09 09 53 43 61 72 64 44 69 73 63  ;......SCardDisc
4e60: 6f 6e 6e 65 63 74 28 73 6c 6f 74 2d 3e 70 63 73  onnect(slot->pcs
4e70: 63 5f 63 61 72 64 2c 20 53 43 41 52 44 5f 52 45  c_card, SCARD_RE
4e80: 53 45 54 5f 43 41 52 44 29 3b 0a 09 09 09 09 73  SET_CARD);.....s
4e90: 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72 64 5f 63  lot->pcsc_card_c
4ea0: 6f 6e 6e 65 63 74 65 64 20 3d 20 30 3b 0a 0a 09  onnected = 0;...
4eb0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
4ec0: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
4ed0: 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b 0a  g in failure");.
4ee0: 09 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a  ....return(-1);.
4ef0: 09 09 09 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a  ...}...} else {.
4f00: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
4f10: 50 52 49 4e 54 46 28 22 44 69 73 63 6f 6e 6e 65  PRINTF("Disconne
4f20: 63 74 69 6e 67 20 63 61 72 64 22 29 3b 0a 0a 09  cting card");...
4f30: 09 09 53 43 61 72 64 44 69 73 63 6f 6e 6e 65 63  ..SCardDisconnec
4f40: 74 28 73 6c 6f 74 2d 3e 70 63 73 63 5f 63 61 72  t(slot->pcsc_car
4f50: 64 2c 20 53 43 41 52 44 5f 52 45 53 45 54 5f 43  d, SCARD_RESET_C
4f60: 41 52 44 29 3b 0a 09 09 09 73 6c 6f 74 2d 3e 70  ARD);....slot->p
4f70: 63 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65 63 74  csc_card_connect
4f80: 65 64 20 3d 20 30 3b 0a 0a 09 09 09 43 41 43 4b  ed = 0;.....CACK
4f90: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
4fa0: 22 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61  "Returning in fa
4fb0: 69 6c 75 72 65 22 29 3b 0a 09 09 09 72 65 74 75  ilure");....retu
4fc0: 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 09 7d 0a 0a  rn(-1);...}..}..
4fd0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
4fe0: 49 4e 54 42 55 46 28 22 52 65 74 75 72 6e 65 64  INTBUF("Returned
4ff0: 20 56 61 6c 75 65 3a 22 2c 20 72 65 63 76 5f 62   Value:", recv_b
5000: 75 66 2c 20 72 65 63 76 5f 6c 65 6e 29 3b 0a 0a  uf, recv_len);..
5010: 09 69 66 20 28 72 65 63 76 5f 6c 65 6e 20 3c 20  .if (recv_len < 
5020: 32 29 20 7b 0a 09 09 2f 2a 20 4d 69 6e 69 6d 61  2) {.../* Minima
5030: 6c 20 72 65 73 70 6f 6e 73 65 20 6c 65 6e 67 74  l response lengt
5040: 68 20 69 73 20 32 20 62 79 74 65 73 2c 20 72 65  h is 2 bytes, re
5050: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75  turning in failu
5060: 72 65 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44  re */...CACKEY_D
5070: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 73  EBUG_PRINTF("Res
5080: 70 6f 6e 73 65 20 74 6f 6f 20 73 6d 61 6c 6c 2c  ponse too small,
5090: 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61   returning in fa
50a0: 69 6c 75 72 65 20 28 72 65 63 76 5f 6c 65 6e 20  ilure (recv_len 
50b0: 3d 20 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e  = %lu)", (unsign
50c0: 65 64 20 6c 6f 6e 67 29 20 72 65 63 76 5f 6c 65  ed long) recv_le
50d0: 6e 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31  n);....return(-1
50e0: 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 44 65 74 65 72  );..}.../* Deter
50f0: 6d 69 6e 65 20 72 65 73 75 6c 74 20 63 6f 64 65  mine result code
5100: 20 2a 2f 0a 09 6d 61 6a 6f 72 5f 72 63 20 3d 20   */..major_rc = 
5110: 72 65 63 76 5f 62 75 66 5b 72 65 63 76 5f 6c 65  recv_buf[recv_le
5120: 6e 20 2d 20 32 5d 3b 0a 09 6d 69 6e 6f 72 5f 72  n - 2];..minor_r
5130: 63 20 3d 20 72 65 63 76 5f 62 75 66 5b 72 65 63  c = recv_buf[rec
5140: 76 5f 6c 65 6e 20 2d 20 31 5d 3b 0a 09 69 66 20  v_len - 1];..if 
5150: 28 72 65 73 70 63 6f 64 65 29 20 7b 0a 09 09 2a  (respcode) {...*
5160: 72 65 73 70 63 6f 64 65 20 3d 20 28 6d 61 6a 6f  respcode = (majo
5170: 72 5f 72 63 20 3c 3c 20 38 29 20 7c 20 6d 69 6e  r_rc << 8) | min
5180: 6f 72 5f 72 63 3b 0a 09 7d 0a 0a 09 2f 2a 20 41  or_rc;..}.../* A
5190: 64 6a 75 73 74 20 6d 65 73 73 61 67 65 20 62 75  djust message bu
51a0: 66 66 65 72 20 2a 2f 0a 09 72 65 63 76 5f 6c 65  ffer */..recv_le
51b0: 6e 20 2d 3d 20 32 3b 0a 0a 09 2f 2a 20 41 64 64  n -= 2;.../* Add
51c0: 20 62 79 74 65 73 20 74 6f 20 72 65 74 75 72 6e   bytes to return
51d0: 20 76 61 6c 75 65 20 2a 2f 0a 09 74 6d 70 5f 72   value */..tmp_r
51e0: 65 73 70 64 61 74 61 5f 6c 65 6e 20 3d 20 30 3b  espdata_len = 0;
51f0: 0a 09 69 66 20 28 72 65 73 70 64 61 74 61 20 26  ..if (respdata &
5200: 26 20 72 65 73 70 64 61 74 61 5f 6c 65 6e 29 20  & respdata_len) 
5210: 7b 0a 09 09 74 6d 70 5f 72 65 73 70 64 61 74 61  {...tmp_respdata
5220: 5f 6c 65 6e 20 3d 20 2a 72 65 73 70 64 61 74 61  _len = *respdata
5230: 5f 6c 65 6e 3b 0a 0a 09 09 62 79 74 65 73 5f 74  _len;....bytes_t
5240: 6f 5f 63 6f 70 79 20 3d 20 2a 72 65 73 70 64 61  o_copy = *respda
5250: 74 61 5f 6c 65 6e 3b 0a 0a 09 09 69 66 20 28 72  ta_len;....if (r
5260: 65 63 76 5f 6c 65 6e 20 3c 20 62 79 74 65 73 5f  ecv_len < bytes_
5270: 74 6f 5f 63 6f 70 79 29 20 7b 0a 09 09 09 62 79  to_copy) {....by
5280: 74 65 73 5f 74 6f 5f 63 6f 70 79 20 3d 20 72 65  tes_to_copy = re
5290: 63 76 5f 6c 65 6e 3b 0a 09 09 7d 0a 0a 09 09 43  cv_len;...}....C
52a0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
52b0: 54 46 28 22 43 6f 70 79 69 6e 67 20 25 6c 75 20  TF("Copying %lu 
52c0: 62 79 74 65 73 20 74 6f 20 74 68 65 20 62 75 66  bytes to the buf
52d0: 66 65 72 22 2c 20 28 75 6e 73 69 67 6e 65 64 20  fer", (unsigned 
52e0: 6c 6f 6e 67 29 20 62 79 74 65 73 5f 74 6f 5f 63  long) bytes_to_c
52f0: 6f 70 79 29 3b 0a 0a 09 09 6d 65 6d 63 70 79 28  opy);....memcpy(
5300: 72 65 73 70 64 61 74 61 2c 20 72 65 63 76 5f 62  respdata, recv_b
5310: 75 66 2c 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70  uf, bytes_to_cop
5320: 79 29 3b 0a 09 09 72 65 73 70 64 61 74 61 20 2b  y);...respdata +
5330: 3d 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b  = bytes_to_copy;
5340: 0a 0a 09 09 2a 72 65 73 70 64 61 74 61 5f 6c 65  ....*respdata_le
5350: 6e 20 3d 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70  n = bytes_to_cop
5360: 79 3b 0a 09 09 74 6d 70 5f 72 65 73 70 64 61 74  y;...tmp_respdat
5370: 61 5f 6c 65 6e 20 2d 3d 20 62 79 74 65 73 5f 74  a_len -= bytes_t
5380: 6f 5f 63 6f 70 79 3b 0a 09 7d 20 65 6c 73 65 20  o_copy;..} else 
5390: 7b 0a 09 09 69 66 20 28 72 65 63 76 5f 6c 65 6e  {...if (recv_len
53a0: 20 21 3d 20 30 29 20 7b 0a 09 09 09 43 41 43 4b   != 0) {....CACK
53b0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
53c0: 22 54 68 72 6f 77 69 6e 67 20 61 77 61 79 20 25  "Throwing away %
53d0: 6c 75 20 62 79 74 65 73 2c 20 6e 6f 77 68 65 72  lu bytes, nowher
53e0: 65 20 74 6f 20 70 75 74 20 74 68 65 6d 21 22 2c  e to put them!",
53f0: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29   (unsigned long)
5400: 20 72 65 63 76 5f 6c 65 6e 29 3b 0a 09 09 7d 0a   recv_len);...}.
5410: 09 7d 0a 0a 09 69 66 20 28 6d 61 6a 6f 72 5f 72  .}...if (major_r
5420: 63 20 3d 3d 20 30 78 36 31 29 20 7b 0a 09 09 2f  c == 0x61) {.../
5430: 2a 20 57 65 20 6e 65 65 64 20 74 6f 20 52 45 41  * We need to REA
5440: 44 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45  D */...CACKEY_DE
5450: 42 55 47 5f 50 52 49 4e 54 46 28 22 42 75 66 66  BUG_PRINTF("Buff
5460: 65 72 20 72 65 61 64 20 72 65 71 75 69 72 65 64  er read required
5470: 22 29 3b 0a 0a 09 09 70 63 73 63 5f 67 65 74 72  ");....pcsc_getr
5480: 65 73 70 5f 72 65 74 20 3d 20 63 61 63 6b 65 79  esp_ret = cackey
5490: 5f 73 65 6e 64 5f 61 70 64 75 28 73 6c 6f 74 2c  _send_apdu(slot,
54a0: 20 47 53 43 49 53 5f 43 4c 41 53 53 5f 49 53 4f   GSCIS_CLASS_ISO
54b0: 37 38 31 36 2c 20 47 53 43 49 53 5f 49 4e 53 54  7816, GSCIS_INST
54c0: 52 5f 47 45 54 5f 52 45 53 50 4f 4e 53 45 2c 20  R_GET_RESPONSE, 
54d0: 30 78 30 30 2c 20 30 78 30 30 2c 20 30 2c 20 4e  0x00, 0x00, 0, N
54e0: 55 4c 4c 2c 20 6d 69 6e 6f 72 5f 72 63 2c 20 72  ULL, minor_rc, r
54f0: 65 73 70 63 6f 64 65 2c 20 72 65 73 70 64 61 74  espcode, respdat
5500: 61 2c 20 26 74 6d 70 5f 72 65 73 70 64 61 74 61  a, &tmp_respdata
5510: 5f 6c 65 6e 29 3b 0a 09 09 69 66 20 28 70 63 73  _len);...if (pcs
5520: 63 5f 67 65 74 72 65 73 70 5f 72 65 74 20 3c 20  c_getresp_ret < 
5530: 30 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44  0) {....CACKEY_D
5540: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 42 75 66  EBUG_PRINTF("Buf
5550: 66 65 72 20 72 65 61 64 20 66 61 69 6c 65 64 21  fer read failed!
5560: 20 20 52 65 74 75 72 6e 69 6e 67 20 69 6e 20 66    Returning in f
5570: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 09 72 65  ailure");.....re
5580: 74 75 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09  turn(-1);...}...
5590: 09 69 66 20 28 72 65 73 70 64 61 74 61 5f 6c 65  .if (respdata_le
55a0: 6e 29 20 7b 0a 09 09 09 2a 72 65 73 70 64 61 74  n) {....*respdat
55b0: 61 5f 6c 65 6e 20 2b 3d 20 74 6d 70 5f 72 65 73  a_len += tmp_res
55c0: 70 64 61 74 61 5f 6c 65 6e 3b 0a 09 09 7d 0a 0a  pdata_len;...}..
55d0: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
55e0: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
55f0: 20 69 6e 20 73 75 63 63 65 73 73 20 28 62 75 66   in success (buf
5600: 66 65 72 20 72 65 61 64 20 63 6f 6d 70 6c 65 74  fer read complet
5610: 65 29 22 29 3b 0a 09 09 72 65 74 75 72 6e 28 30  e)");...return(0
5620: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 6d 61 6a 6f  );..}...if (majo
5630: 72 5f 72 63 20 3d 3d 20 30 78 39 30 29 20 7b 0a  r_rc == 0x90) {.
5640: 09 09 2f 2a 20 53 75 63 63 65 73 73 20 2a 2f 0a  ../* Success */.
5650: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
5660: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
5670: 20 69 6e 20 73 75 63 63 65 73 73 20 28 6d 61 6a   in success (maj
5680: 6f 72 5f 72 63 20 3d 20 30 78 39 30 29 22 29 3b  or_rc = 0x90)");
5690: 0a 0a 09 09 72 65 74 75 72 6e 28 30 29 3b 0a 09  ....return(0);..
56a0: 7d 0a 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  }....CACKEY_DEBU
56b0: 47 5f 50 52 49 4e 54 46 28 22 41 50 44 55 20 52  G_PRINTF("APDU R
56c0: 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72  eturned an error
56d0: 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20 66  , returning in f
56e0: 61 69 6c 75 72 65 22 29 3b 0a 0a 09 72 65 74 75  ailure");...retu
56f0: 72 6e 28 2d 31 29 3b 0a 7d 0a 0a 73 74 61 74 69  rn(-1);.}..stati
5700: 63 20 73 73 69 7a 65 5f 74 20 63 61 63 6b 65 79  c ssize_t cackey
5710: 5f 72 65 61 64 5f 62 75 66 66 65 72 28 73 74 72  _read_buffer(str
5720: 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74 20  uct cackey_slot 
5730: 2a 73 6c 6f 74 2c 20 75 6e 73 69 67 6e 65 64 20  *slot, unsigned 
5740: 63 68 61 72 20 2a 62 75 66 66 65 72 2c 20 73 69  char *buffer, si
5750: 7a 65 5f 74 20 63 6f 75 6e 74 2c 20 75 6e 73 69  ze_t count, unsi
5760: 67 6e 65 64 20 63 68 61 72 20 74 5f 6f 72 5f 76  gned char t_or_v
5770: 2c 20 73 69 7a 65 5f 74 20 69 6e 69 74 69 61 6c  , size_t initial
5780: 5f 6f 66 66 73 65 74 29 20 7b 0a 09 73 69 7a 65  _offset) {..size
5790: 5f 74 20 6f 66 66 73 65 74 20 3d 20 30 2c 20 6d  _t offset = 0, m
57a0: 61 78 5f 6f 66 66 73 65 74 2c 20 6d 61 78 5f 63  ax_offset, max_c
57b0: 6f 75 6e 74 3b 0a 09 75 6e 73 69 67 6e 65 64 20  ount;..unsigned 
57c0: 63 68 61 72 20 63 6d 64 5b 32 5d 3b 0a 09 75 69  char cmd[2];..ui
57d0: 6e 74 31 36 5f 74 20 72 65 73 70 63 6f 64 65 3b  nt16_t respcode;
57e0: 0a 09 69 6e 74 20 73 65 6e 64 5f 72 65 74 3b 0a  ..int send_ret;.
57f0: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
5800: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 22 29 3b  RINTF("Called");
5810: 0a 0a 09 6d 61 78 5f 6f 66 66 73 65 74 20 3d 20  ...max_offset = 
5820: 63 6f 75 6e 74 3b 0a 09 6d 61 78 5f 63 6f 75 6e  count;..max_coun
5830: 74 20 3d 20 36 34 3b 0a 0a 09 63 6d 64 5b 30 5d  t = 64;...cmd[0]
5840: 20 3d 20 74 5f 6f 72 5f 76 3b 0a 0a 09 77 68 69   = t_or_v;...whi
5850: 6c 65 20 28 31 29 20 7b 0a 09 09 69 66 20 28 6f  le (1) {...if (o
5860: 66 66 73 65 74 20 3e 3d 20 6d 61 78 5f 6f 66 66  ffset >= max_off
5870: 73 65 74 29 20 7b 0a 09 09 09 43 41 43 4b 45 59  set) {....CACKEY
5880: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 42  _DEBUG_PRINTF("B
5890: 75 66 66 65 72 20 74 6f 6f 20 73 6d 61 6c 6c 2c  uffer too small,
58a0: 20 72 65 74 75 72 6e 69 6e 67 20 77 68 61 74 20   returning what 
58b0: 77 65 20 67 6f 74 2e 2e 2e 22 29 3b 0a 0a 09 09  we got...");....
58c0: 09 62 72 65 61 6b 3b 0a 09 09 7d 0a 0a 09 09 63  .break;...}....c
58d0: 6f 75 6e 74 20 3d 20 6d 61 78 5f 6f 66 66 73 65  ount = max_offse
58e0: 74 20 2d 20 6f 66 66 73 65 74 3b 0a 09 09 69 66  t - offset;...if
58f0: 20 28 63 6f 75 6e 74 20 3e 20 6d 61 78 5f 63 6f   (count > max_co
5900: 75 6e 74 29 20 7b 0a 09 09 09 63 6f 75 6e 74 20  unt) {....count 
5910: 3d 20 6d 61 78 5f 63 6f 75 6e 74 3b 0a 09 09 7d  = max_count;...}
5920: 0a 0a 09 09 63 6d 64 5b 31 5d 20 3d 20 63 6f 75  ....cmd[1] = cou
5930: 6e 74 3b 0a 0a 09 09 73 65 6e 64 5f 72 65 74 20  nt;....send_ret 
5940: 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70  = cackey_send_ap
5950: 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43  du(slot, GSCIS_C
5960: 4c 41 53 53 5f 47 4c 4f 42 41 4c 5f 50 4c 41 54  LASS_GLOBAL_PLAT
5970: 46 4f 52 4d 2c 20 47 53 43 49 53 5f 49 4e 53 54  FORM, GSCIS_INST
5980: 52 5f 52 45 41 44 5f 42 55 46 46 45 52 2c 20 28  R_READ_BUFFER, (
5990: 28 69 6e 69 74 69 61 6c 5f 6f 66 66 73 65 74 20  (initial_offset 
59a0: 2b 20 6f 66 66 73 65 74 29 20 3e 3e 20 38 29 20  + offset) >> 8) 
59b0: 26 20 30 78 66 66 2c 20 28 69 6e 69 74 69 61 6c  & 0xff, (initial
59c0: 5f 6f 66 66 73 65 74 20 2b 20 6f 66 66 73 65 74  _offset + offset
59d0: 29 20 26 20 30 78 66 66 2c 20 73 69 7a 65 6f 66  ) & 0xff, sizeof
59e0: 28 63 6d 64 29 2c 20 63 6d 64 2c 20 30 78 30 30  (cmd), cmd, 0x00
59f0: 2c 20 26 72 65 73 70 63 6f 64 65 2c 20 62 75 66  , &respcode, buf
5a00: 66 65 72 20 2b 20 6f 66 66 73 65 74 2c 20 26 63  fer + offset, &c
5a10: 6f 75 6e 74 29 3b 0a 09 09 69 66 20 28 73 65 6e  ount);...if (sen
5a20: 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 09  d_ret < 0) {....
5a30: 69 66 20 28 72 65 73 70 63 6f 64 65 20 3d 3d 20  if (respcode == 
5a40: 30 78 36 41 38 36 29 20 7b 0a 09 09 09 09 69 66  0x6A86) {.....if
5a50: 20 28 6d 61 78 5f 63 6f 75 6e 74 20 3d 3d 20 31   (max_count == 1
5a60: 29 20 7b 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a  ) {......break;.
5a70: 09 09 09 09 7d 0a 0a 09 09 09 09 6d 61 78 5f 63  ....}......max_c
5a80: 6f 75 6e 74 20 3d 20 6d 61 78 5f 63 6f 75 6e 74  ount = max_count
5a90: 20 2f 20 32 3b 0a 0a 09 09 09 09 63 6f 6e 74 69   / 2;......conti
5aa0: 6e 75 65 3b 0a 09 09 09 7d 0a 0a 09 09 09 43 41  nue;....}.....CA
5ab0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
5ac0: 46 28 22 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61  F("cackey_send_a
5ad0: 70 64 75 28 29 20 66 61 69 6c 65 64 2c 20 72 65  pdu() failed, re
5ae0: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75  turning in failu
5af0: 72 65 22 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e  re");.....return
5b00: 28 2d 31 29 3b 0a 09 09 7d 0a 0a 09 09 6f 66 66  (-1);...}....off
5b10: 73 65 74 20 2b 3d 20 63 6f 75 6e 74 3b 0a 0a 09  set += count;...
5b20: 09 69 66 20 28 63 6f 75 6e 74 20 3c 20 6d 61 78  .if (count < max
5b30: 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 09 43 41 43  _count) {....CAC
5b40: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
5b50: 28 22 53 68 6f 72 74 20 72 65 61 64 20 2d 2d 20  ("Short read -- 
5b60: 63 6f 75 6e 74 20 3d 20 25 69 2c 20 63 6d 64 5b  count = %i, cmd[
5b70: 31 5d 20 3d 20 25 69 22 2c 20 63 6f 75 6e 74 2c  1] = %i", count,
5b80: 20 63 6d 64 5b 31 5d 29 3b 0a 0a 09 09 09 62 72   cmd[1]);.....br
5b90: 65 61 6b 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 43 41  eak;...}..}...CA
5ba0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
5bb0: 46 28 22 52 65 74 75 72 6e 69 6e 67 20 69 6e 20  F("Returning in 
5bc0: 73 75 63 63 65 73 73 2c 20 72 65 61 64 20 25 6c  success, read %l
5bd0: 75 20 62 79 74 65 73 22 2c 20 28 75 6e 73 69 67  u bytes", (unsig
5be0: 6e 65 64 20 6c 6f 6e 67 29 20 6f 66 66 73 65 74  ned long) offset
5bf0: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 6f 66 66 73  );...return(offs
5c00: 65 74 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69  et);.}..static i
5c10: 6e 74 20 63 61 63 6b 65 79 5f 73 65 6c 65 63 74  nt cackey_select
5c20: 5f 61 70 70 6c 65 74 28 73 74 72 75 63 74 20 63  _applet(struct c
5c30: 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f 74  ackey_slot *slot
5c40: 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  , unsigned char 
5c50: 2a 61 69 64 2c 20 73 69 7a 65 5f 74 20 61 69 64  *aid, size_t aid
5c60: 5f 6c 65 6e 29 20 7b 0a 09 69 6e 74 20 73 65 6e  _len) {..int sen
5c70: 64 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f  d_ret;...CACKEY_
5c80: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61  DEBUG_PRINTF("Ca
5c90: 6c 6c 65 64 22 29 3b 0a 0a 09 43 41 43 4b 45 59  lled");...CACKEY
5ca0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46 28  _DEBUG_PRINTBUF(
5cb0: 22 53 65 6c 65 63 74 69 6e 67 20 61 70 70 6c 65  "Selecting apple
5cc0: 74 3a 22 2c 20 61 69 64 2c 20 61 69 64 5f 6c 65  t:", aid, aid_le
5cd0: 6e 29 3b 0a 0a 09 73 65 6e 64 5f 72 65 74 20 3d  n);...send_ret =
5ce0: 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f 61 70 64   cackey_send_apd
5cf0: 75 28 73 6c 6f 74 2c 20 47 53 43 49 53 5f 43 4c  u(slot, GSCIS_CL
5d00: 41 53 53 5f 49 53 4f 37 38 31 36 2c 20 47 53 43  ASS_ISO7816, GSC
5d10: 49 53 5f 49 4e 53 54 52 5f 53 45 4c 45 43 54 2c  IS_INSTR_SELECT,
5d20: 20 47 53 43 49 53 5f 50 41 52 41 4d 5f 53 45 4c   GSCIS_PARAM_SEL
5d30: 45 43 54 5f 41 50 50 4c 45 54 2c 20 30 78 30 43  ECT_APPLET, 0x0C
5d40: 2c 20 61 69 64 5f 6c 65 6e 2c 20 61 69 64 2c 20  , aid_len, aid, 
5d50: 30 78 30 30 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c  0x00, NULL, NULL
5d60: 2c 20 4e 55 4c 4c 29 3b 0a 09 69 66 20 28 73 65  , NULL);..if (se
5d70: 6e 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09  nd_ret < 0) {...
5d80: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
5d90: 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f 20 6f  NTF("Failed to o
5da0: 70 65 6e 20 61 70 70 6c 65 74 2c 20 72 65 74 75  pen applet, retu
5db0: 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65  rning in failure
5dc0: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 2d 31  ");....return(-1
5dd0: 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44  );..}...CACKEY_D
5de0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 53 75 63  EBUG_PRINTF("Suc
5df0: 63 65 73 73 66 75 6c 6c 79 20 73 65 6c 65 63 74  cessfully select
5e00: 65 64 20 66 69 6c 65 22 29 3b 0a 0a 09 72 65 74  ed file");...ret
5e10: 75 72 6e 28 30 29 3b 0a 7d 0a 0a 73 74 61 74 69  urn(0);.}..stati
5e20: 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 73 65 6c  c int cackey_sel
5e30: 65 63 74 5f 66 69 6c 65 28 73 74 72 75 63 74 20  ect_file(struct 
5e40: 63 61 63 6b 65 79 5f 73 6c 6f 74 20 2a 73 6c 6f  cackey_slot *slo
5e50: 74 2c 20 75 69 6e 74 31 36 5f 74 20 65 66 29 20  t, uint16_t ef) 
5e60: 7b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72  {..unsigned char
5e70: 20 66 69 64 5f 62 75 66 5b 32 5d 3b 0a 09 69 6e   fid_buf[2];..in
5e80: 74 20 73 65 6e 64 5f 72 65 74 3b 0a 0a 09 43 41  t send_ret;...CA
5e90: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
5ea0: 46 28 22 43 61 6c 6c 65 64 22 29 3b 0a 0a 09 2f  F("Called");.../
5eb0: 2a 20 4f 70 65 6e 20 74 68 65 20 65 6c 65 6d 65  * Open the eleme
5ec0: 6e 74 61 72 79 20 66 69 6c 65 20 2a 2f 0a 09 66  ntary file */..f
5ed0: 69 64 5f 62 75 66 5b 30 5d 20 3d 20 28 65 66 20  id_buf[0] = (ef 
5ee0: 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 09 66  >> 8) & 0xff;..f
5ef0: 69 64 5f 62 75 66 5b 31 5d 20 3d 20 65 66 20 26  id_buf[1] = ef &
5f00: 20 30 78 66 66 3b 0a 0a 09 73 65 6e 64 5f 72 65   0xff;...send_re
5f10: 74 20 3d 20 63 61 63 6b 65 79 5f 73 65 6e 64 5f  t = cackey_send_
5f20: 61 70 64 75 28 73 6c 6f 74 2c 20 47 53 43 49 53  apdu(slot, GSCIS
5f30: 5f 43 4c 41 53 53 5f 49 53 4f 37 38 31 36 2c 20  _CLASS_ISO7816, 
5f40: 47 53 43 49 53 5f 49 4e 53 54 52 5f 53 45 4c 45  GSCIS_INSTR_SELE
5f50: 43 54 2c 20 30 78 30 32 2c 20 30 78 30 43 2c 20  CT, 0x02, 0x0C, 
5f60: 73 69 7a 65 6f 66 28 66 69 64 5f 62 75 66 29 2c  sizeof(fid_buf),
5f70: 20 66 69 64 5f 62 75 66 2c 20 30 78 30 30 2c 20   fid_buf, 0x00, 
5f80: 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c  NULL, NULL, NULL
5f90: 29 3b 0a 09 69 66 20 28 73 65 6e 64 5f 72 65 74  );..if (send_ret
5fa0: 20 3c 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59   < 0) {...CACKEY
5fb0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 46  _DEBUG_PRINTF("F
5fc0: 61 69 6c 65 64 20 74 6f 20 6f 70 65 6e 20 66 69  ailed to open fi
5fd0: 6c 65 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e  le, returning in
5fe0: 20 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72   failure");....r
5ff0: 65 74 75 72 6e 28 2d 31 29 3b 0a 09 7d 0a 0a 09  eturn(-1);..}...
6000: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
6010: 4e 54 46 28 22 53 75 63 63 65 73 73 66 75 6c 6c  NTF("Successfull
6020: 79 20 73 65 6c 65 63 74 65 64 20 66 69 6c 65 22  y selected file"
6030: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 30 29 3b 0a  );...return(0);.
6040: 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 20 63 61  }..static int ca
6050: 63 6b 65 79 5f 72 65 61 64 5f 74 6c 76 28 73 74  ckey_read_tlv(st
6060: 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f 74  ruct cackey_slot
6070: 20 2a 73 6c 6f 74 2c 20 69 6e 74 20 66 6f 6c 6c   *slot, int foll
6080: 6f 77 5f 75 72 6c 29 20 7b 0a 09 73 74 72 75 63  ow_url) {..struc
6090: 74 20 63 61 63 6b 65 79 5f 74 6c 76 5f 65 6e 74  t cackey_tlv_ent
60a0: 69 74 79 20 63 75 72 72 5f 65 6e 74 69 74 79 3b  ity curr_entity;
60b0: 0a 09 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  ..unsigned char 
60c0: 74 6c 65 6e 5f 62 75 66 5b 32 5d 2c 20 74 76 61  tlen_buf[2], tva
60d0: 6c 5f 62 75 66 5b 31 30 32 34 5d 2c 20 2a 74 76  l_buf[1024], *tv
60e0: 61 6c 3b 0a 09 75 6e 73 69 67 6e 65 64 20 63 68  al;..unsigned ch
60f0: 61 72 20 76 6c 65 6e 5f 62 75 66 5b 32 5d 2c 20  ar vlen_buf[2], 
6100: 76 76 61 6c 5f 62 75 66 5b 38 31 39 32 5d 2c 20  vval_buf[8192], 
6110: 2a 76 76 61 6c 3b 0a 09 73 73 69 7a 65 5f 74 20  *vval;..ssize_t 
6120: 74 6c 65 6e 2c 20 76 6c 65 6e 3b 0a 09 73 73 69  tlen, vlen;..ssi
6130: 7a 65 5f 74 20 72 65 61 64 5f 72 65 74 3b 0a 09  ze_t read_ret;..
6140: 73 69 7a 65 5f 74 20 6f 66 66 73 65 74 5f 74 20  size_t offset_t 
6150: 3d 20 30 2c 20 6f 66 66 73 65 74 5f 76 20 3d 20  = 0, offset_v = 
6160: 30 3b 0a 09 69 6e 74 20 73 65 6c 65 63 74 5f 72  0;..int select_r
6170: 65 74 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  et;...CACKEY_DEB
6180: 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65  UG_PRINTF("Calle
6190: 64 22 29 3b 0a 0a 09 72 65 61 64 5f 72 65 74 20  d");...read_ret 
61a0: 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75  = cackey_read_bu
61b0: 66 66 65 72 28 73 6c 6f 74 2c 20 74 6c 65 6e 5f  ffer(slot, tlen_
61c0: 62 75 66 2c 20 73 69 7a 65 6f 66 28 74 6c 65 6e  buf, sizeof(tlen
61d0: 5f 62 75 66 29 2c 20 31 2c 20 6f 66 66 73 65 74  _buf), 1, offset
61e0: 5f 74 29 3b 0a 09 69 66 20 28 72 65 61 64 5f 72  _t);..if (read_r
61f0: 65 74 20 21 3d 20 73 69 7a 65 6f 66 28 74 6c 65  et != sizeof(tle
6200: 6e 5f 62 75 66 29 29 20 7b 0a 09 09 43 41 43 4b  n_buf)) {...CACK
6210: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
6220: 22 52 65 61 64 20 66 61 69 6c 65 64 2c 20 72 65  "Read failed, re
6230: 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75  turning in failu
6240: 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  re");....return(
6250: 30 29 3b 0a 09 7d 0a 0a 09 74 6c 65 6e 20 3d 20  0);..}...tlen = 
6260: 28 74 6c 65 6e 5f 62 75 66 5b 31 5d 20 3c 3c 20  (tlen_buf[1] << 
6270: 38 29 20 7c 20 74 6c 65 6e 5f 62 75 66 5b 30 5d  8) | tlen_buf[0]
6280: 3b 0a 0a 09 72 65 61 64 5f 72 65 74 20 3d 20 63  ;...read_ret = c
6290: 61 63 6b 65 79 5f 72 65 61 64 5f 62 75 66 66 65  ackey_read_buffe
62a0: 72 28 73 6c 6f 74 2c 20 76 6c 65 6e 5f 62 75 66  r(slot, vlen_buf
62b0: 2c 20 73 69 7a 65 6f 66 28 76 6c 65 6e 5f 62 75  , sizeof(vlen_bu
62c0: 66 29 2c 20 32 2c 20 6f 66 66 73 65 74 5f 76 29  f), 2, offset_v)
62d0: 3b 0a 09 69 66 20 28 72 65 61 64 5f 72 65 74 20  ;..if (read_ret 
62e0: 21 3d 20 73 69 7a 65 6f 66 28 76 6c 65 6e 5f 62  != sizeof(vlen_b
62f0: 75 66 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  uf)) {...CACKEY_
6300: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65  DEBUG_PRINTF("Re
6310: 61 64 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72  ad failed, retur
6320: 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22  ning in failure"
6330: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 30 29 3b  );....return(0);
6340: 0a 09 7d 0a 0a 09 76 6c 65 6e 20 3d 20 28 76 6c  ..}...vlen = (vl
6350: 65 6e 5f 62 75 66 5b 31 5d 20 3c 3c 20 38 29 20  en_buf[1] << 8) 
6360: 7c 20 76 6c 65 6e 5f 62 75 66 5b 30 5d 3b 0a 0a  | vlen_buf[0];..
6370: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
6380: 49 4e 54 46 28 22 54 61 67 20 4c 65 6e 67 74 68  INTF("Tag Length
6390: 20 3d 20 25 69 2c 20 56 61 6c 75 65 20 4c 65 6e   = %i, Value Len
63a0: 67 74 68 20 3d 20 25 69 22 2c 20 74 6c 65 6e 2c  gth = %i", tlen,
63b0: 20 76 6c 65 6e 29 3b 0a 0a 09 74 6c 65 6e 20 2d   vlen);...tlen -
63c0: 3d 20 32 3b 0a 09 6f 66 66 73 65 74 5f 74 20 2b  = 2;..offset_t +
63d0: 3d 20 32 3b 0a 0a 09 76 6c 65 6e 20 2d 3d 20 32  = 2;...vlen -= 2
63e0: 3b 0a 09 6f 66 66 73 65 74 5f 76 20 2b 3d 20 32  ;..offset_v += 2
63f0: 3b 0a 0a 09 69 66 20 28 74 6c 65 6e 20 3e 20 73  ;...if (tlen > s
6400: 69 7a 65 6f 66 28 74 76 61 6c 5f 62 75 66 29 29  izeof(tval_buf))
6410: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
6420: 47 5f 50 52 49 4e 54 46 28 22 54 61 67 20 6c 65  G_PRINTF("Tag le
6430: 6e 67 74 68 20 69 73 20 74 6f 6f 20 6c 61 72 67  ngth is too larg
6440: 65 2c 20 72 65 74 75 72 6e 69 6e 67 20 69 6e 20  e, returning in 
6450: 66 61 69 6c 75 72 65 22 29 3b 0a 0a 09 09 72 65  failure");....re
6460: 74 75 72 6e 28 30 29 3b 0a 09 7d 0a 0a 09 69 66  turn(0);..}...if
6470: 20 28 76 6c 65 6e 20 3e 20 73 69 7a 65 6f 66 28   (vlen > sizeof(
6480: 76 76 61 6c 5f 62 75 66 29 29 20 7b 0a 09 09 43  vval_buf)) {...C
6490: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
64a0: 54 46 28 22 56 61 6c 75 65 20 6c 65 6e 67 74 68  TF("Value length
64b0: 20 69 73 20 74 6f 6f 20 6c 61 72 67 65 2c 20 72   is too large, r
64c0: 65 74 75 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c  eturning in fail
64d0: 75 72 65 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  ure");....return
64e0: 28 30 29 3b 0a 09 7d 0a 0a 09 72 65 61 64 5f 72  (0);..}...read_r
64f0: 65 74 20 3d 20 63 61 63 6b 65 79 5f 72 65 61 64  et = cackey_read
6500: 5f 62 75 66 66 65 72 28 73 6c 6f 74 2c 20 74 76  _buffer(slot, tv
6510: 61 6c 5f 62 75 66 2c 20 74 6c 65 6e 2c 20 31 2c  al_buf, tlen, 1,
6520: 20 6f 66 66 73 65 74 5f 74 29 3b 0a 09 69 66 20   offset_t);..if 
6530: 28 72 65 61 64 5f 72 65 74 20 21 3d 20 74 6c 65  (read_ret != tle
6540: 6e 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45  n) {...CACKEY_DE
6550: 42 55 47 5f 50 52 49 4e 54 46 28 22 55 6e 61 62  BUG_PRINTF("Unab
6560: 6c 65 20 74 6f 20 72 65 61 64 20 65 6e 74 69 72  le to read entir
6570: 65 20 54 2d 62 75 66 66 65 72 2c 20 72 65 74 75  e T-buffer, retu
6580: 72 6e 69 6e 67 20 69 6e 20 66 61 69 6c 75 72 65  rning in failure
6590: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 30 29  ");....return(0)
65a0: 3b 0a 09 7d 0a 0a 09 72 65 61 64 5f 72 65 74 20  ;..}...read_ret 
65b0: 3d 20 63 61 63 6b 65 79 5f 72 65 61 64 5f 62 75  = cackey_read_bu
65c0: 66 66 65 72 28 73 6c 6f 74 2c 20 76 76 61 6c 5f  ffer(slot, vval_
65d0: 62 75 66 2c 20 76 6c 65 6e 2c 20 32 2c 20 6f 66  buf, vlen, 2, of
65e0: 66 73 65 74 5f 76 29 3b 0a 09 69 66 20 28 72 65  fset_v);..if (re
65f0: 61 64 5f 72 65 74 20 21 3d 20 76 6c 65 6e 29 20  ad_ret != vlen) 
6600: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
6610: 5f 50 52 49 4e 54 46 28 22 55 6e 61 62 6c 65 20  _PRINTF("Unable 
6620: 74 6f 20 72 65 61 64 20 65 6e 74 69 72 65 20 56  to read entire V
6630: 2d 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 69  -buffer, returni
6640: 6e 67 20 69 6e 20 66 61 69 6c 75 72 65 22 29 3b  ng in failure");
6650: 0a 0a 09 09 72 65 74 75 72 6e 28 30 29 3b 0a 09  ....return(0);..
6660: 7d 0a 0a 09 74 76 61 6c 20 3d 20 74 76 61 6c 5f  }...tval = tval_
6670: 62 75 66 3b 0a 09 76 76 61 6c 20 3d 20 76 76 61  buf;..vval = vva
6680: 6c 5f 62 75 66 3b 0a 09 77 68 69 6c 65 20 28 74  l_buf;..while (t
6690: 6c 65 6e 20 3e 20 30 20 26 26 20 76 6c 65 6e 20  len > 0 && vlen 
66a0: 3e 20 30 29 20 7b 0a 09 09 63 75 72 72 5f 65 6e  > 0) {...curr_en
66b0: 74 69 74 79 2e 74 61 67 20 3d 20 2a 74 76 61 6c  tity.tag = *tval
66c0: 3b 0a 09 09 74 76 61 6c 2b 2b 3b 0a 09 09 74 6c  ;...tval++;...tl
66d0: 65 6e 2d 2d 3b 0a 0a 09 09 69 66 20 28 2a 74 76  en--;....if (*tv
66e0: 61 6c 20 3d 3d 20 30 78 66 66 29 20 7b 0a 09 09  al == 0xff) {...
66f0: 09 63 75 72 72 5f 65 6e 74 69 74 79 2e 6c 65 6e  .curr_entity.len
6700: 67 74 68 20 3d 20 28 74 76 61 6c 5b 32 5d 20 3c  gth = (tval[2] <
6710: 3c 20 38 29 20 7c 20 74 76 61 6c 5b 31 5d 3b 0a  < 8) | tval[1];.
6720: 09 09 09 74 76 61 6c 20 2b 3d 20 33 3b 0a 09 09  ...tval += 3;...
6730: 09 74 6c 65 6e 20 2d 3d 20 33 3b 0a 09 09 7d 20  .tlen -= 3;...} 
6740: 65 6c 73 65 20 7b 0a 09 09 09 63 75 72 72 5f 65  else {....curr_e
6750: 6e 74 69 74 79 2e 6c 65 6e 67 74 68 20 3d 20 2a  ntity.length = *
6760: 74 76 61 6c 3b 0a 09 09 09 74 76 61 6c 2b 2b 3b  tval;....tval++;
6770: 0a 09 09 09 74 6c 65 6e 2d 2d 3b 0a 09 09 7d 0a  ....tlen--;...}.
6780: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
6790: 50 52 49 4e 54 46 28 22 54 61 67 3a 20 25 73 20  PRINTF("Tag: %s 
67a0: 28 25 30 32 78 29 22 2c 20 43 41 43 4b 45 59 5f  (%02x)", CACKEY_
67b0: 44 45 42 55 47 5f 46 55 4e 43 5f 54 41 47 5f 54  DEBUG_FUNC_TAG_T
67c0: 4f 5f 53 54 52 28 63 75 72 72 5f 65 6e 74 69 74  O_STR(curr_entit
67d0: 79 2e 74 61 67 29 2c 20 28 75 6e 73 69 67 6e 65  y.tag), (unsigne
67e0: 64 20 69 6e 74 29 20 63 75 72 72 5f 65 6e 74 69  d int) curr_enti
67f0: 74 79 2e 74 61 67 29 3b 0a 09 09 43 41 43 4b 45  ty.tag);...CACKE
6800: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46  Y_DEBUG_PRINTBUF
6810: 28 22 56 61 6c 75 65 3a 22 2c 20 76 76 61 6c 2c  ("Value:", vval,
6820: 20 63 75 72 72 5f 65 6e 74 69 74 79 2e 6c 65 6e   curr_entity.len
6830: 67 74 68 29 3b 0a 09 09 76 76 61 6c 20 2b 3d 20  gth);...vval += 
6840: 63 75 72 72 5f 65 6e 74 69 74 79 2e 6c 65 6e 67  curr_entity.leng
6850: 74 68 3b 0a 09 09 76 6c 65 6e 20 2d 3d 20 63 75  th;...vlen -= cu
6860: 72 72 5f 65 6e 74 69 74 79 2e 6c 65 6e 67 74 68  rr_entity.length
6870: 3b 0a 0a 09 09 73 77 69 74 63 68 20 28 63 75 72  ;....switch (cur
6880: 72 5f 65 6e 74 69 74 79 2e 74 61 67 29 20 7b 0a  r_entity.tag) {.
6890: 09 09 09 63 61 73 65 20 47 53 43 49 53 5f 54 41  ...case GSCIS_TA
68a0: 47 5f 43 41 52 44 55 52 4c 3a 0a 09 09 09 09 69  G_CARDURL:.....i
68b0: 66 20 28 66 6f 6c 6c 6f 77 5f 75 72 6c 29 20 7b  f (follow_url) {
68c0: 0a 09 09 09 09 09 75 6e 73 69 67 6e 65 64 20 63  ......unsigned c
68d0: 68 61 72 20 61 69 64 5b 37 5d 3b 0a 09 09 09 09  har aid[7];.....
68e0: 09 6d 65 6d 63 70 79 28 61 69 64 2c 20 76 76 61  .memcpy(aid, vva
68f0: 6c 2c 20 35 29 3b 0a 09 09 09 09 09 6d 65 6d 63  l, 5);......memc
6900: 70 79 28 61 69 64 20 2b 20 35 2c 20 76 76 61 6c  py(aid + 5, vval
6910: 20 2b 20 38 2c 20 32 29 3b 0a 0a 09 09 09 09 09   + 8, 2);.......
6920: 73 65 6c 65 63 74 5f 72 65 74 20 3d 20 63 61 63  select_ret = cac
6930: 6b 65 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c 65  key_select_apple
6940: 74 28 73 6c 6f 74 2c 20 61 69 64 2c 20 37 29 3b  t(slot, aid, 7);
6950: 0a 09 09 09 09 09 69 66 20 28 73 65 6c 65 63 74  ......if (select
6960: 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09 09 09 09  _ret < 0) {.....
6970: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
6980: 52 49 4e 54 46 28 22 46 61 69 6c 65 64 20 74 6f  RINTF("Failed to
6990: 20 73 65 6c 65 63 74 20 61 70 70 6c 65 74 22 29   select applet")
69a0: 3b 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09  ;.......break;..
69b0: 09 09 09 09 7d 0a 0a 09 09 09 09 09 63 61 63 6b  ....}.......cack
69c0: 65 79 5f 72 65 61 64 5f 74 6c 76 28 73 6c 6f 74  ey_read_tlv(slot
69d0: 2c 20 30 29 3b 0a 09 09 09 09 7d 0a 09 09 09 09  , 0);.....}.....
69e0: 62 72 65 61 6b 3b 0a 09 09 7d 0a 09 7d 0a 0a 09  break;...}..}...
69f0: 72 65 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a 2f 2a  return(0);.}../*
6a00: 20 52 65 74 75 72 6e 73 20 31 20 69 66 20 61 20   Returns 1 if a 
6a10: 74 6f 6b 65 6e 20 69 73 20 69 6e 20 74 68 65 20  token is in the 
6a20: 73 70 65 63 69 66 69 65 64 20 73 6c 6f 74 2c 20  specified slot, 
6a30: 30 20 6f 74 68 65 72 77 69 73 65 20 2a 2f 0a 73  0 otherwise */.s
6a40: 74 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79  tatic int cackey
6a50: 5f 74 6f 6b 65 6e 5f 70 72 65 73 65 6e 74 28 73  _token_present(s
6a60: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 73 6c 6f  truct cackey_slo
6a70: 74 20 2a 73 6c 6f 74 29 20 7b 0a 09 75 6e 73 69  t *slot) {..unsi
6a80: 67 6e 65 64 20 63 68 61 72 20 63 63 63 5f 61 69  gned char ccc_ai
6a90: 64 5b 5d 20 3d 20 7b 30 78 61 30 2c 20 30 78 30  d[] = {0xa0, 0x0
6aa0: 30 2c 20 30 78 30 30 2c 20 30 78 30 31 2c 20 30  0, 0x00, 0x01, 0
6ab0: 78 31 36 2c 20 30 78 64 62 2c 20 30 78 30 30 7d  x16, 0xdb, 0x00}
6ac0: 3b 0a 09 69 6e 74 20 73 65 6e 64 5f 72 65 74 3b  ;..int send_ret;
6ad0: 0a 0a 09 2f 2a 20 53 65 6c 65 63 74 20 74 68 65  .../* Select the
6ae0: 20 43 43 43 20 41 70 70 6c 65 74 20 2a 2f 0a 09   CCC Applet */..
6af0: 73 65 6e 64 5f 72 65 74 20 3d 20 63 61 63 6b 65  send_ret = cacke
6b00: 79 5f 73 65 6c 65 63 74 5f 61 70 70 6c 65 74 28  y_select_applet(
6b10: 73 6c 6f 74 2c 20 63 63 63 5f 61 69 64 2c 20 73  slot, ccc_aid, s
6b20: 69 7a 65 6f 66 28 63 63 63 5f 61 69 64 29 29 3b  izeof(ccc_aid));
6b30: 0a 09 69 66 20 28 73 65 6e 64 5f 72 65 74 20 3c  ..if (send_ret <
6b40: 20 30 29 20 7b 0a 09 09 72 65 74 75 72 6e 28 30   0) {...return(0
6b50: 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f 72  );..}...cackey_r
6b60: 65 61 64 5f 74 6c 76 28 73 6c 6f 74 2c 20 31 29  ead_tlv(slot, 1)
6b70: 3b 0a 0a 09 72 65 74 75 72 6e 28 31 29 3b 0a 7d  ;...return(1);.}
6b80: 0a 0a 2f 2a 20 52 65 74 75 72 6e 73 20 30 20 6f  ../* Returns 0 o
6b90: 6e 20 73 75 63 63 65 73 73 20 2a 2f 0a 73 74 61  n success */.sta
6ba0: 74 69 63 20 69 6e 74 20 63 61 63 6b 65 79 5f 6d  tic int cackey_m
6bb0: 75 74 65 78 5f 63 72 65 61 74 65 28 76 6f 69 64  utex_create(void
6bc0: 20 2a 2a 6d 75 74 65 78 29 20 7b 0a 09 70 74 68   **mutex) {..pth
6bd0: 72 65 61 64 5f 6d 75 74 65 78 5f 74 20 2a 70 74  read_mutex_t *pt
6be0: 68 72 65 61 64 5f 6d 75 74 65 78 3b 0a 09 69 6e  hread_mutex;..in
6bf0: 74 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c  t pthread_retval
6c00: 3b 0a 09 43 4b 5f 52 56 20 63 75 73 74 6f 6d 5f  ;..CK_RV custom_
6c10: 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59  retval;...CACKEY
6c20: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
6c30: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
6c40: 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 66 6c 61  (cackey_args.fla
6c50: 67 73 20 26 20 43 4b 46 5f 4f 53 5f 4c 4f 43 4b  gs & CKF_OS_LOCK
6c60: 49 4e 47 5f 4f 4b 29 20 3d 3d 20 43 4b 46 5f 4f  ING_OK) == CKF_O
6c70: 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 7b 0a  S_LOCKING_OK) {.
6c80: 09 09 70 74 68 72 65 61 64 5f 6d 75 74 65 78 20  ..pthread_mutex 
6c90: 3d 20 6d 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28  = malloc(sizeof(
6ca0: 2a 70 74 68 72 65 61 64 5f 6d 75 74 65 78 29 29  *pthread_mutex))
6cb0: 3b 0a 09 09 69 66 20 28 21 70 74 68 72 65 61 64  ;...if (!pthread
6cc0: 5f 6d 75 74 65 78 29 20 7b 0a 09 09 09 43 41 43  _mutex) {....CAC
6cd0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
6ce0: 28 22 46 61 69 6c 65 64 20 74 6f 20 61 6c 6c 6f  ("Failed to allo
6cf0: 63 61 74 65 20 6d 65 6d 6f 72 79 2e 22 29 3b 0a  cate memory.");.
6d00: 0a 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a  ....return(-1);.
6d10: 09 09 7d 0a 0a 09 09 70 74 68 72 65 61 64 5f 72  ..}....pthread_r
6d20: 65 74 76 61 6c 20 3d 20 70 74 68 72 65 61 64 5f  etval = pthread_
6d30: 6d 75 74 65 78 5f 69 6e 69 74 28 70 74 68 72 65  mutex_init(pthre
6d40: 61 64 5f 6d 75 74 65 78 2c 20 4e 55 4c 4c 29 3b  ad_mutex, NULL);
6d50: 0a 09 09 69 66 20 28 70 74 68 72 65 61 64 5f 72  ...if (pthread_r
6d60: 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09  etval != 0) {...
6d70: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
6d80: 49 4e 54 46 28 22 70 74 68 72 65 61 64 5f 6d 75  INTF("pthread_mu
6d90: 74 65 78 5f 69 6e 69 74 28 29 20 72 65 74 75 72  tex_init() retur
6da0: 6e 65 64 20 65 72 72 6f 72 20 28 25 69 29 2e 22  ned error (%i)."
6db0: 2c 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c  , pthread_retval
6dc0: 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31  );.....return(-1
6dd0: 29 3b 0a 09 09 7d 0a 0a 09 09 2a 6d 75 74 65 78  );...}....*mutex
6de0: 20 3d 20 70 74 68 72 65 61 64 5f 6d 75 74 65 78   = pthread_mutex
6df0: 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66  ;..} else {...if
6e00: 20 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 43 72   (cackey_args.Cr
6e10: 65 61 74 65 4d 75 74 65 78 29 20 7b 0a 09 09 09  eateMutex) {....
6e20: 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20 3d 20  custom_retval = 
6e30: 63 61 63 6b 65 79 5f 61 72 67 73 2e 43 72 65 61  cackey_args.Crea
6e40: 74 65 4d 75 74 65 78 28 6d 75 74 65 78 29 3b 0a  teMutex(mutex);.
6e50: 0a 09 09 09 69 66 20 28 63 75 73 74 6f 6d 5f 72  ....if (custom_r
6e60: 65 74 76 61 6c 20 21 3d 20 43 4b 52 5f 4f 4b 29  etval != CKR_OK)
6e70: 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45   {.....CACKEY_DE
6e80: 42 55 47 5f 50 52 49 4e 54 46 28 22 63 61 63 6b  BUG_PRINTF("cack
6e90: 65 79 5f 61 72 67 73 2e 43 72 65 61 74 65 4d 75  ey_args.CreateMu
6ea0: 74 65 78 28 29 20 72 65 74 75 72 6e 65 64 20 65  tex() returned e
6eb0: 72 72 6f 72 20 28 25 6c 69 29 2e 22 2c 20 28 6c  rror (%li).", (l
6ec0: 6f 6e 67 29 20 63 75 73 74 6f 6d 5f 72 65 74 76  ong) custom_retv
6ed0: 61 6c 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e  al);......return
6ee0: 28 2d 31 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09  (-1);....}...}..
6ef0: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  }...CACKEY_DEBUG
6f00: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69  _PRINTF("Returni
6f10: 6e 67 20 73 75 63 65 73 73 66 75 6c 6c 79 20 28  ng sucessfully (
6f20: 30 29 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 30  0)");...return(0
6f30: 29 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 73  );.}../* Returns
6f40: 20 30 20 6f 6e 20 73 75 63 63 65 73 73 20 2a 2f   0 on success */
6f50: 0a 73 74 61 74 69 63 20 69 6e 74 20 63 61 63 6b  .static int cack
6f60: 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 76 6f  ey_mutex_lock(vo
6f70: 69 64 20 2a 6d 75 74 65 78 29 20 7b 0a 09 70 74  id *mutex) {..pt
6f80: 68 72 65 61 64 5f 6d 75 74 65 78 5f 74 20 2a 70  hread_mutex_t *p
6f90: 74 68 72 65 61 64 5f 6d 75 74 65 78 3b 0a 09 69  thread_mutex;..i
6fa0: 6e 74 20 70 74 68 72 65 61 64 5f 72 65 74 76 61  nt pthread_retva
6fb0: 6c 3b 0a 09 43 4b 5f 52 56 20 63 75 73 74 6f 6d  l;..CK_RV custom
6fc0: 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45  _retval;...CACKE
6fd0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
6fe0: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20  Called.");...if 
6ff0: 28 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 66 6c  ((cackey_args.fl
7000: 61 67 73 20 26 20 43 4b 46 5f 4f 53 5f 4c 4f 43  ags & CKF_OS_LOC
7010: 4b 49 4e 47 5f 4f 4b 29 20 3d 3d 20 43 4b 46 5f  KING_OK) == CKF_
7020: 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20 7b  OS_LOCKING_OK) {
7030: 0a 09 09 70 74 68 72 65 61 64 5f 6d 75 74 65 78  ...pthread_mutex
7040: 20 3d 20 6d 75 74 65 78 3b 0a 0a 09 09 70 74 68   = mutex;....pth
7050: 72 65 61 64 5f 72 65 74 76 61 6c 20 3d 20 70 74  read_retval = pt
7060: 68 72 65 61 64 5f 6d 75 74 65 78 5f 6c 6f 63 6b  hread_mutex_lock
7070: 28 70 74 68 72 65 61 64 5f 6d 75 74 65 78 29 3b  (pthread_mutex);
7080: 0a 09 09 69 66 20 28 70 74 68 72 65 61 64 5f 72  ...if (pthread_r
7090: 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09  etval != 0) {...
70a0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
70b0: 49 4e 54 46 28 22 70 74 68 72 65 61 64 5f 6d 75  INTF("pthread_mu
70c0: 74 65 78 5f 6c 6f 63 6b 28 29 20 72 65 74 75 72  tex_lock() retur
70d0: 6e 65 64 20 65 72 72 6f 72 20 28 25 69 29 2e 22  ned error (%i)."
70e0: 2c 20 70 74 68 72 65 61 64 5f 72 65 74 76 61 6c  , pthread_retval
70f0: 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 2d 31  );.....return(-1
7100: 29 3b 0a 09 09 7d 0a 09 7d 20 65 6c 73 65 20 7b  );...}..} else {
7110: 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 61 72  ...if (cackey_ar
7120: 67 73 2e 4c 6f 63 6b 4d 75 74 65 78 29 20 7b 0a  gs.LockMutex) {.
7130: 09 09 09 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c  ...custom_retval
7140: 20 3d 20 63 61 63 6b 65 79 5f 61 72 67 73 2e 4c   = cackey_args.L
7150: 6f 63 6b 4d 75 74 65 78 28 6d 75 74 65 78 29 3b  ockMutex(mutex);
7160: 0a 0a 09 09 09 69 66 20 28 63 75 73 74 6f 6d 5f  .....if (custom_
7170: 72 65 74 76 61 6c 20 21 3d 20 43 4b 52 5f 4f 4b  retval != CKR_OK
7180: 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44  ) {.....CACKEY_D
7190: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 63 61 63  EBUG_PRINTF("cac
71a0: 6b 65 79 5f 61 72 67 73 2e 4c 6f 63 6b 4d 75 74  key_args.LockMut
71b0: 65 78 28 29 20 72 65 74 75 72 6e 65 64 20 65 72  ex() returned er
71c0: 72 6f 72 20 28 25 6c 69 29 2e 22 2c 20 28 6c 6f  ror (%li).", (lo
71d0: 6e 67 29 20 63 75 73 74 6f 6d 5f 72 65 74 76 61  ng) custom_retva
71e0: 6c 29 3b 0a 0a 09 09 09 09 72 65 74 75 72 6e 28  l);......return(
71f0: 2d 31 29 3b 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d  -1);....}...}..}
7200: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
7210: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
7220: 67 20 73 75 63 65 73 73 66 75 6c 6c 79 20 28 30  g sucessfully (0
7230: 29 22 29 3b 0a 0a 09 72 65 74 75 72 6e 28 30 29  )");...return(0)
7240: 3b 0a 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e 73 20  ;.}../* Returns 
7250: 30 20 6f 6e 20 73 75 63 63 65 73 73 20 2a 2f 0a  0 on success */.
7260: 73 74 61 74 69 63 20 69 6e 74 20 63 61 63 6b 65  static int cacke
7270: 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 76  y_mutex_unlock(v
7280: 6f 69 64 20 2a 6d 75 74 65 78 29 20 7b 0a 09 70  oid *mutex) {..p
7290: 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 74 20 2a  thread_mutex_t *
72a0: 70 74 68 72 65 61 64 5f 6d 75 74 65 78 3b 0a 09  pthread_mutex;..
72b0: 69 6e 74 20 70 74 68 72 65 61 64 5f 72 65 74 76  int pthread_retv
72c0: 61 6c 3b 0a 09 43 4b 5f 52 56 20 63 75 73 74 6f  al;..CK_RV custo
72d0: 6d 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b  m_retval;...CACK
72e0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
72f0: 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66  "Called.");...if
7300: 20 28 28 63 61 63 6b 65 79 5f 61 72 67 73 2e 66   ((cackey_args.f
7310: 6c 61 67 73 20 26 20 43 4b 46 5f 4f 53 5f 4c 4f  lags & CKF_OS_LO
7320: 43 4b 49 4e 47 5f 4f 4b 29 20 3d 3d 20 43 4b 46  CKING_OK) == CKF
7330: 5f 4f 53 5f 4c 4f 43 4b 49 4e 47 5f 4f 4b 29 20  _OS_LOCKING_OK) 
7340: 7b 0a 09 09 70 74 68 72 65 61 64 5f 6d 75 74 65  {...pthread_mute
7350: 78 20 3d 20 6d 75 74 65 78 3b 0a 0a 09 09 70 74  x = mutex;....pt
7360: 68 72 65 61 64 5f 72 65 74 76 61 6c 20 3d 20 70  hread_retval = p
7370: 74 68 72 65 61 64 5f 6d 75 74 65 78 5f 75 6e 6c  thread_mutex_unl
7380: 6f 63 6b 28 70 74 68 72 65 61 64 5f 6d 75 74 65  ock(pthread_mute
7390: 78 29 3b 0a 09 09 69 66 20 28 70 74 68 72 65 61  x);...if (pthrea
73a0: 64 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b  d_retval != 0) {
73b0: 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
73c0: 5f 50 52 49 4e 54 46 28 22 70 74 68 72 65 61 64  _PRINTF("pthread
73d0: 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 29 20  _mutex_unlock() 
73e0: 72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 28  returned error (
73f0: 25 69 29 2e 22 2c 20 70 74 68 72 65 61 64 5f 72  %i).", pthread_r
7400: 65 74 76 61 6c 29 3b 0a 0a 09 09 09 72 65 74 75  etval);.....retu
7410: 72 6e 28 2d 31 29 3b 0a 09 09 7d 0a 09 7d 20 65  rn(-1);...}..} e
7420: 6c 73 65 20 7b 0a 09 09 69 66 20 28 63 61 63 6b  lse {...if (cack
7430: 65 79 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75  ey_args.UnlockMu
7440: 74 65 78 29 20 7b 0a 09 09 09 63 75 73 74 6f 6d  tex) {....custom
7450: 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79  _retval = cackey
7460: 5f 61 72 67 73 2e 55 6e 6c 6f 63 6b 4d 75 74 65  _args.UnlockMute
7470: 78 28 6d 75 74 65 78 29 3b 0a 0a 09 09 09 69 66  x(mutex);.....if
7480: 20 28 63 75 73 74 6f 6d 5f 72 65 74 76 61 6c 20   (custom_retval 
7490: 21 3d 20 43 4b 52 5f 4f 4b 29 20 7b 0a 09 09 09  != CKR_OK) {....
74a0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
74b0: 49 4e 54 46 28 22 63 61 63 6b 65 79 5f 61 72 67  INTF("cackey_arg
74c0: 73 2e 55 6e 6c 6f 63 6b 4d 75 74 65 78 28 29 20  s.UnlockMutex() 
74d0: 72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 28  returned error (
74e0: 25 6c 69 29 2e 22 2c 20 28 6c 6f 6e 67 29 20 63  %li).", (long) c
74f0: 75 73 74 6f 6d 5f 72 65 74 76 61 6c 29 3b 0a 0a  ustom_retval);..
7500: 09 09 09 09 72 65 74 75 72 6e 28 2d 31 29 3b 0a  ....return(-1);.
7510: 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a 0a 09 43 41  ...}...}..}...CA
7520: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
7530: 46 28 22 52 65 74 75 72 6e 69 6e 67 20 73 75 63  F("Returning suc
7540: 65 73 73 66 75 6c 6c 79 20 28 30 29 22 29 3b 0a  essfully (0)");.
7550: 0a 09 72 65 74 75 72 6e 28 30 29 3b 0a 7d 0a 0a  ..return(0);.}..
7560: 73 74 61 74 69 63 20 43 4b 5f 41 54 54 52 49 42  static CK_ATTRIB
7570: 55 54 45 5f 50 54 52 20 63 61 63 6b 65 79 5f 67  UTE_PTR cackey_g
7580: 65 74 5f 61 74 74 72 69 62 75 74 65 73 28 43 4b  et_attributes(CK
7590: 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 53 20 6f 62  _OBJECT_CLASS ob
75a0: 6a 65 63 74 63 6c 61 73 73 2c 20 76 6f 69 64 20  jectclass, void 
75b0: 2a 69 64 65 6e 74 69 74 79 2c 20 75 6e 73 69 67  *identity, unsig
75c0: 6e 65 64 20 6c 6f 6e 67 20 69 64 65 6e 74 69 74  ned long identit
75d0: 79 5f 6e 75 6d 2c 20 43 4b 5f 55 4c 4f 4e 47 5f  y_num, CK_ULONG_
75e0: 50 54 52 20 70 75 6c 43 6f 75 6e 74 29 20 7b 0a  PTR pulCount) {.
75f0: 09 73 74 61 74 69 63 20 43 4b 5f 42 42 4f 4f 4c  .static CK_BBOOL
7600: 20 63 6b 5f 74 72 75 65 20 3d 20 31 3b 0a 09 73   ck_true = 1;..s
7610: 74 61 74 69 63 20 43 4b 5f 42 42 4f 4f 4c 20 63  tatic CK_BBOOL c
7620: 6b 5f 66 61 6c 73 65 20 3d 20 30 3b 0a 09 43 4b  k_false = 0;..CK
7630: 5f 55 4c 4f 4e 47 20 6e 75 6d 61 74 74 72 73 20  _ULONG numattrs 
7640: 3d 20 30 2c 20 72 65 74 76 61 6c 5f 63 6f 75 6e  = 0, retval_coun
7650: 74 3b 0a 09 43 4b 5f 41 54 54 52 49 42 55 54 45  t;..CK_ATTRIBUTE
7660: 5f 54 59 50 45 20 63 75 72 72 5f 61 74 74 72 5f  _TYPE curr_attr_
7670: 74 79 70 65 3b 0a 09 43 4b 5f 41 54 54 52 49 42  type;..CK_ATTRIB
7680: 55 54 45 20 63 75 72 72 5f 61 74 74 72 2c 20 2a  UTE curr_attr, *
7690: 72 65 74 76 61 6c 3b 0a 09 43 4b 5f 56 4f 49 44  retval;..CK_VOID
76a0: 5f 50 54 52 20 70 56 61 6c 75 65 3b 0a 09 43 4b  _PTR pValue;..CK
76b0: 5f 55 4c 4f 4e 47 20 75 6c 56 61 6c 75 65 4c 65  _ULONG ulValueLe
76c0: 6e 3b 0a 09 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c  n;..CK_OBJECT_CL
76d0: 41 53 53 20 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c  ASS ck_object_cl
76e0: 61 73 73 3b 0a 09 43 4b 5f 43 45 52 54 49 46 49  ass;..CK_CERTIFI
76f0: 43 41 54 45 5f 54 59 50 45 20 63 6b 5f 63 65 72  CATE_TYPE ck_cer
7700: 74 69 66 69 63 61 74 65 5f 74 79 70 65 3b 0a 09  tificate_type;..
7710: 43 4b 5f 4b 45 59 5f 54 59 50 45 20 63 6b 5f 6b  CK_KEY_TYPE ck_k
7720: 65 79 5f 74 79 70 65 3b 0a 09 43 4b 5f 55 54 46  ey_type;..CK_UTF
7730: 38 43 48 41 52 20 75 63 54 6d 70 42 75 66 5b 31  8CHAR ucTmpBuf[1
7740: 30 32 34 5d 3b 0a 09 75 6e 73 69 67 6e 65 64 20  024];..unsigned 
7750: 63 68 61 72 20 63 65 72 74 69 66 69 63 61 74 65  char certificate
7760: 5b 31 36 33 38 34 5d 3b 0a 09 73 73 69 7a 65 5f  [16384];..ssize_
7770: 74 20 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65  t certificate_le
7780: 6e 20 3d 20 2d 31 2c 20 78 35 30 39 5f 72 65 61  n = -1, x509_rea
7790: 64 5f 72 65 74 3b 0a 09 69 6e 74 20 70 56 61 6c  d_ret;..int pVal
77a0: 75 65 5f 66 72 65 65 3b 0a 0a 09 43 41 43 4b 45  ue_free;...CACKE
77b0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
77c0: 43 61 6c 6c 65 64 20 28 6f 62 6a 65 63 74 43 6c  Called (objectCl
77d0: 61 73 73 20 3d 20 25 6c 75 2c 20 69 64 65 6e 74  ass = %lu, ident
77e0: 69 74 79 5f 6e 75 6d 20 3d 20 25 6c 75 29 2e 22  ity_num = %lu)."
77f0: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67  , (unsigned long
7800: 29 20 6f 62 6a 65 63 74 63 6c 61 73 73 2c 20 69  ) objectclass, i
7810: 64 65 6e 74 69 74 79 5f 6e 75 6d 29 3b 0a 0a 09  dentity_num);...
7820: 69 66 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20  if (objectclass 
7830: 21 3d 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41  != CKO_CERTIFICA
7840: 54 45 20 26 26 20 6f 62 6a 65 63 74 63 6c 61 73  TE && objectclas
7850: 73 20 21 3d 20 43 4b 4f 5f 50 55 42 4c 49 43 5f  s != CKO_PUBLIC_
7860: 4b 45 59 20 26 26 20 6f 62 6a 65 63 74 63 6c 61  KEY && objectcla
7870: 73 73 20 21 3d 20 43 4b 4f 5f 50 52 49 56 41 54  ss != CKO_PRIVAT
7880: 45 5f 4b 45 59 29 20 7b 0a 09 09 43 41 43 4b 45  E_KEY) {...CACKE
7890: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
78a0: 52 65 74 75 72 6e 69 6e 67 20 30 20 6f 62 6a 65  Returning 0 obje
78b0: 63 74 73 20 28 4e 55 4c 4c 29 2c 20 69 6e 76 61  cts (NULL), inva
78c0: 6c 69 64 20 6f 62 6a 65 63 74 20 63 6c 61 73 73  lid object class
78d0: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 4e 55  ");....return(NU
78e0: 4c 4c 29 3b 0a 09 7d 0a 0a 09 72 65 74 76 61 6c  LL);..}...retval
78f0: 5f 63 6f 75 6e 74 20 3d 20 31 36 3b 0a 09 72 65  _count = 16;..re
7900: 74 76 61 6c 20 3d 20 6d 61 6c 6c 6f 63 28 72 65  tval = malloc(re
7910: 74 76 61 6c 5f 63 6f 75 6e 74 20 2a 20 73 69 7a  tval_count * siz
7920: 65 6f 66 28 2a 72 65 74 76 61 6c 29 29 3b 0a 0a  eof(*retval));..
7930: 09 2f 2a 20 58 58 58 3a 20 47 65 74 20 43 65 72  ./* XXX: Get Cer
7940: 74 20 2a 2f 0a 09 63 65 72 74 69 66 69 63 61 74  t */..certificat
7950: 65 5f 6c 65 6e 20 3d 20 2d 31 3b 0a 0a 09 69 66  e_len = -1;...if
7960: 20 28 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65   (certificate_le
7970: 6e 20 3d 3d 20 2d 31 29 20 7b 0a 09 09 43 41 43  n == -1) {...CAC
7980: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
7990: 28 22 52 65 74 75 72 6e 69 6e 67 20 30 20 6f 62  ("Returning 0 ob
79a0: 6a 65 63 74 73 20 28 4e 55 4c 4c 29 2c 20 74 68  jects (NULL), th
79b0: 69 73 20 69 64 65 6e 74 69 74 79 20 64 6f 65 73  is identity does
79c0: 20 6e 6f 74 20 68 61 76 65 20 61 6e 20 58 2e 35   not have an X.5
79d0: 30 39 20 63 65 72 74 69 66 69 63 61 74 65 20 61  09 certificate a
79e0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 69  ssociated with i
79f0: 74 20 61 6e 64 20 77 69 6c 6c 20 6e 6f 74 20 77  t and will not w
7a00: 6f 72 6b 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  ork");....return
7a10: 28 4e 55 4c 4c 29 3b 0a 09 7d 0a 0a 09 66 6f 72  (NULL);..}...for
7a20: 20 28 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65   (curr_attr_type
7a30: 20 3d 20 30 3b 20 63 75 72 72 5f 61 74 74 72 5f   = 0; curr_attr_
7a40: 74 79 70 65 20 3c 20 30 78 63 65 35 33 36 33 35  type < 0xce53635
7a50: 66 3b 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70  f; curr_attr_typ
7a60: 65 2b 2b 29 20 7b 0a 09 09 69 66 20 28 63 75 72  e++) {...if (cur
7a70: 72 5f 61 74 74 72 5f 74 79 70 65 20 3d 3d 20 30  r_attr_type == 0
7a80: 78 38 30 30 29 20 7b 0a 09 09 09 63 75 72 72 5f  x800) {....curr_
7a90: 61 74 74 72 5f 74 79 70 65 20 3d 20 30 78 63 65  attr_type = 0xce
7aa0: 35 33 36 33 30 30 3b 0a 09 09 7d 0a 0a 09 09 70  536300;...}....p
7ab0: 56 61 6c 75 65 5f 66 72 65 65 20 3d 20 30 3b 0a  Value_free = 0;.
7ac0: 09 09 70 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b  ..pValue = NULL;
7ad0: 0a 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20  ...ulValueLen = 
7ae0: 28 43 4b 5f 4c 4f 4e 47 29 20 2d 31 3b 0a 0a 09  (CK_LONG) -1;...
7af0: 09 73 77 69 74 63 68 20 28 63 75 72 72 5f 61 74  .switch (curr_at
7b00: 74 72 5f 74 79 70 65 29 20 7b 0a 09 09 09 63 61  tr_type) {....ca
7b10: 73 65 20 43 4b 41 5f 43 4c 41 53 53 3a 0a 09 09  se CKA_CLASS:...
7b20: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
7b30: 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e  RINTF("Requestin
7b40: 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f  g attribute CKA_
7b50: 43 4c 41 53 53 20 28 30 78 25 30 38 6c 78 29 20  CLASS (0x%08lx) 
7b60: 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20  ...", (unsigned 
7b70: 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f  long) curr_attr_
7b80: 74 79 70 65 29 3b 0a 0a 09 09 09 09 63 6b 5f 6f  type);......ck_o
7b90: 62 6a 65 63 74 5f 63 6c 61 73 73 20 3d 20 6f 62  bject_class = ob
7ba0: 6a 65 63 74 63 6c 61 73 73 3b 0a 0a 09 09 09 09  jectclass;......
7bb0: 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 6f 62 6a  pValue = &ck_obj
7bc0: 65 63 74 5f 63 6c 61 73 73 3b 0a 09 09 09 09 75  ect_class;.....u
7bd0: 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a 65  lValueLen = size
7be0: 6f 66 28 63 6b 5f 6f 62 6a 65 63 74 5f 63 6c 61  of(ck_object_cla
7bf0: 73 73 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59  ss);......CACKEY
7c00: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20  _DEBUG_PRINTF(" 
7c10: 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c  ... returning %l
7c20: 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e  u (%p/%lu)", (un
7c30: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28  signed long) *((
7c40: 43 4b 5f 4f 42 4a 45 43 54 5f 43 4c 41 53 53 20  CK_OBJECT_CLASS 
7c50: 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c  *) pValue), pVal
7c60: 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f  ue, (unsigned lo
7c70: 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b  ng) ulValueLen);
7c80: 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ......break;....
7c90: 63 61 73 65 20 43 4b 41 5f 54 4f 4b 45 4e 3a 0a  case CKA_TOKEN:.
7ca0: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
7cb0: 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74  _PRINTF("Request
7cc0: 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b  ing attribute CK
7cd0: 41 5f 54 4f 4b 45 4e 20 28 30 78 25 30 38 6c 78  A_TOKEN (0x%08lx
7ce0: 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65  ) ...", (unsigne
7cf0: 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74  d long) curr_att
7d00: 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 70 56  r_type);......pV
7d10: 61 6c 75 65 20 3d 20 26 63 6b 5f 74 72 75 65 3b  alue = &ck_true;
7d20: 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20  .....ulValueLen 
7d30: 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65  = sizeof(ck_true
7d40: 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44  );......CACKEY_D
7d50: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e  EBUG_PRINTF(" ..
7d60: 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 6c 75 20  . returning %lu 
7d70: 28 25 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69  (%p/%lu)", (unsi
7d80: 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b  gned long) *((CK
7d90: 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65  _BBOOL *) pValue
7da0: 29 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69  ), pValue, (unsi
7db0: 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c  gned long) ulVal
7dc0: 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65  ueLen);......bre
7dd0: 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f  ak;....case CKA_
7de0: 4d 4f 44 49 46 49 41 42 4c 45 3a 0a 09 09 09 09  MODIFIABLE:.....
7df0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
7e00: 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67 20  NTF("Requesting 
7e10: 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 4d 4f  attribute CKA_MO
7e20: 44 49 46 49 41 42 4c 45 20 28 30 78 25 30 38 6c  DIFIABLE (0x%08l
7e30: 78 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e  x) ...", (unsign
7e40: 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74  ed long) curr_at
7e50: 74 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 70  tr_type);......p
7e60: 56 61 6c 75 65 20 3d 20 26 63 6b 5f 66 61 6c 73  Value = &ck_fals
7e70: 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65  e;.....ulValueLe
7e80: 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b 5f 66 61  n = sizeof(ck_fa
7e90: 6c 73 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45  lse);......CACKE
7ea0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
7eb0: 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25   ... returning %
7ec0: 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20 28 75  lu (%p/%lu)", (u
7ed0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 2a 28  nsigned long) *(
7ee0: 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70 56 61  (CK_BBOOL *) pVa
7ef0: 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28 75  lue), pValue, (u
7f00: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c  nsigned long) ul
7f10: 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09  ValueLen);......
7f20: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43  break;....case C
7f30: 4b 41 5f 4c 41 42 45 4c 3a 0a 09 09 09 09 43 41  KA_LABEL:.....CA
7f40: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
7f50: 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74  F("Requesting at
7f60: 74 72 69 62 75 74 65 20 43 4b 41 5f 4c 41 42 45  tribute CKA_LABE
7f70: 4c 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22  L (0x%08lx) ..."
7f80: 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67  , (unsigned long
7f90: 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65  ) curr_attr_type
7fa0: 29 3b 0a 0a 09 09 09 09 2f 2a 20 58 58 58 3a 20  );....../* XXX: 
7fb0: 44 65 74 65 72 6d 69 6e 65 20 6e 61 6d 65 20 2a  Determine name *
7fc0: 2f 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45  /......CACKEY_DE
7fd0: 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e  BUG_PRINTF(" ...
7fe0: 20 72 65 74 75 72 6e 69 6e 67 20 25 73 20 28 25   returning %s (%
7ff0: 70 2f 25 6c 75 29 22 2c 20 28 63 68 61 72 20 2a  p/%lu)", (char *
8000: 29 20 28 28 43 4b 5f 55 54 46 38 43 48 41 52 20  ) ((CK_UTF8CHAR 
8010: 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c  *) pValue), pVal
8020: 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f  ue, (unsigned lo
8030: 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b  ng) ulValueLen);
8040: 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ......break;....
8050: 63 61 73 65 20 43 4b 41 5f 56 41 4c 55 45 3a 0a  case CKA_VALUE:.
8060: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
8070: 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74  _PRINTF("Request
8080: 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b  ing attribute CK
8090: 41 5f 56 41 4c 55 45 20 28 30 78 25 30 38 6c 78  A_VALUE (0x%08lx
80a0: 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65  ) ...", (unsigne
80b0: 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74  d long) curr_att
80c0: 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 73 77  r_type);......sw
80d0: 69 74 63 68 20 28 6f 62 6a 65 63 74 63 6c 61 73  itch (objectclas
80e0: 73 29 20 7b 0a 09 09 09 09 09 63 61 73 65 20 43  s) {......case C
80f0: 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59 3a 0a  KO_PRIVATE_KEY:.
8100: 09 09 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42  ......CACKEY_DEB
8110: 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20  UG_PRINTF(" ... 
8120: 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e 67 20  but not getting 
8130: 69 74 20 62 65 63 61 75 73 65 20 77 65 20 61 72  it because we ar
8140: 65 20 61 20 70 72 69 76 61 74 65 20 6b 65 79 2e  e a private key.
8150: 22 29 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 6b  ");........break
8160: 3b 0a 09 09 09 09 09 63 61 73 65 20 43 4b 4f 5f  ;......case CKO_
8170: 50 55 42 4c 49 43 5f 4b 45 59 3a 0a 09 09 09 09  PUBLIC_KEY:.....
8180: 09 09 2f 2a 20 58 58 58 3a 20 54 4f 44 4f 20 2a  ../* XXX: TODO *
8190: 2f 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0a  /........break;.
81a0: 09 09 09 09 09 63 61 73 65 20 43 4b 4f 5f 43 45  .....case CKO_CE
81b0: 52 54 49 46 49 43 41 54 45 3a 0a 09 09 09 09 09  RTIFICATE:......
81c0: 09 70 56 61 6c 75 65 20 3d 20 63 65 72 74 69 66  .pValue = certif
81d0: 69 63 61 74 65 3b 0a 09 09 09 09 09 09 75 6c 56  icate;.......ulV
81e0: 61 6c 75 65 4c 65 6e 20 3d 20 63 65 72 74 69 66  alueLen = certif
81f0: 69 63 61 74 65 5f 6c 65 6e 3b 0a 0a 09 09 09 09  icate_len;......
8200: 09 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a  ..break;.....}..
8210: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
8220: 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65  _PRINTF(" ... re
8230: 74 75 72 6e 69 6e 67 20 25 70 2f 25 6c 75 22 2c  turning %p/%lu",
8240: 20 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e   pValue, (unsign
8250: 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65  ed long) ulValue
8260: 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b  Len);......break
8270: 3b 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 49 53  ;....case CKA_IS
8280: 53 55 45 52 3a 0a 09 09 09 09 43 41 43 4b 45 59  SUER:.....CACKEY
8290: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52  _DEBUG_PRINTF("R
82a0: 65 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62  equesting attrib
82b0: 75 74 65 20 43 4b 41 5f 49 53 53 55 45 52 20 28  ute CKA_ISSUER (
82c0: 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28  0x%08lx) ...", (
82d0: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63  unsigned long) c
82e0: 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a  urr_attr_type);.
82f0: 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63  .....if (objectc
8300: 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 43 45 52 54  lass != CKO_CERT
8310: 49 46 49 43 41 54 45 29 20 7b 0a 09 09 09 09 09  IFICATE) {......
8320: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
8330: 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f  NTF(" ... but no
8340: 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 63  t getting it bec
8350: 61 75 73 65 20 77 65 20 61 72 65 20 6e 6f 74 20  ause we are not 
8360: 61 20 63 65 72 74 69 66 69 63 61 74 65 2e 22 29  a certificate.")
8370: 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a 09  ;.......break;..
8380: 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 63 65  ...}......if (ce
8390: 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3e 3d  rtificate_len >=
83a0: 20 30 29 20 7b 0a 09 09 09 09 09 78 35 30 39 5f   0) {......x509_
83b0: 72 65 61 64 5f 72 65 74 20 3d 20 78 35 30 39 5f  read_ret = x509_
83c0: 74 6f 5f 69 73 73 75 65 72 28 63 65 72 74 69 66  to_issuer(certif
83d0: 69 63 61 74 65 2c 20 63 65 72 74 69 66 69 63 61  icate, certifica
83e0: 74 65 5f 6c 65 6e 2c 20 26 70 56 61 6c 75 65 29  te_len, &pValue)
83f0: 3b 0a 09 09 09 09 09 69 66 20 28 78 35 30 39 5f  ;......if (x509_
8400: 72 65 61 64 5f 72 65 74 20 3c 20 30 29 20 7b 0a  read_ret < 0) {.
8410: 09 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20 4e  ......pValue = N
8420: 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 6c 73 65  ULL;......} else
8430: 20 7b 0a 09 09 09 09 09 09 75 6c 56 61 6c 75 65   {.......ulValue
8440: 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 64 5f  Len = x509_read_
8450: 72 65 74 3b 0a 09 09 09 09 09 7d 0a 09 09 09 09  ret;......}.....
8460: 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45  }......CACKEY_DE
8470: 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e  BUG_PRINTF(" ...
8480: 20 72 65 74 75 72 6e 69 6e 67 20 25 70 2f 25 6c   returning %p/%l
8490: 75 22 2c 20 70 56 61 6c 75 65 2c 20 28 75 6e 73  u", pValue, (uns
84a0: 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c 56 61  igned long) ulVa
84b0: 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09 62 72  lueLen);......br
84c0: 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43 4b 41  eak;....case CKA
84d0: 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 52 3a 0a  _SERIAL_NUMBER:.
84e0: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
84f0: 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74  _PRINTF("Request
8500: 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b  ing attribute CK
8510: 41 5f 53 45 52 49 41 4c 5f 4e 55 4d 42 45 52 20  A_SERIAL_NUMBER 
8520: 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20  (0x%08lx) ...", 
8530: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20  (unsigned long) 
8540: 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b  curr_attr_type);
8550: 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74  ......if (object
8560: 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 43 45 52  class != CKO_CER
8570: 54 49 46 49 43 41 54 45 29 20 7b 0a 09 09 09 09  TIFICATE) {.....
8580: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
8590: 49 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e  INTF(" ... but n
85a0: 6f 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 65  ot getting it be
85b0: 63 61 75 73 65 20 77 65 20 61 72 65 20 6e 6f 74  cause we are not
85c0: 20 61 20 63 65 72 74 69 66 69 63 61 74 65 2e 22   a certificate."
85d0: 29 3b 0a 0a 09 09 09 09 09 62 72 65 61 6b 3b 0a  );.......break;.
85e0: 09 09 09 09 7d 0a 0a 09 09 09 09 69 66 20 28 63  ....}......if (c
85f0: 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 20 3e  ertificate_len >
8600: 3d 20 30 29 20 7b 0a 09 09 09 09 09 78 35 30 39  = 0) {......x509
8610: 5f 72 65 61 64 5f 72 65 74 20 3d 20 78 35 30 39  _read_ret = x509
8620: 5f 74 6f 5f 73 65 72 69 61 6c 28 63 65 72 74 69  _to_serial(certi
8630: 66 69 63 61 74 65 2c 20 63 65 72 74 69 66 69 63  ficate, certific
8640: 61 74 65 5f 6c 65 6e 2c 20 26 70 56 61 6c 75 65  ate_len, &pValue
8650: 29 3b 0a 09 09 09 09 09 69 66 20 28 78 35 30 39  );......if (x509
8660: 5f 72 65 61 64 5f 72 65 74 20 3c 20 30 29 20 7b  _read_ret < 0) {
8670: 0a 09 09 09 09 09 09 70 56 61 6c 75 65 20 3d 20  .......pValue = 
8680: 4e 55 4c 4c 3b 0a 09 09 09 09 09 7d 20 65 6c 73  NULL;......} els
8690: 65 20 7b 0a 09 09 09 09 09 09 75 6c 56 61 6c 75  e {.......ulValu
86a0: 65 4c 65 6e 20 3d 20 78 35 30 39 5f 72 65 61 64  eLen = x509_read
86b0: 5f 72 65 74 3b 0a 09 09 09 09 09 7d 0a 09 09 09  _ret;......}....
86c0: 09 7d 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44  .}......CACKEY_D
86d0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e  EBUG_PRINTF(" ..
86e0: 2e 20 72 65 74 75 72 6e 69 6e 67 20 28 25 70 2f  . returning (%p/
86f0: 25 6c 75 29 22 2c 20 70 56 61 6c 75 65 2c 20 28  %lu)", pValue, (
8700: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75  unsigned long) u
8710: 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09  lValueLen);.....
8720: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
8730: 43 4b 41 5f 53 55 42 4a 45 43 54 3a 0a 09 09 09  CKA_SUBJECT:....
8740: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
8750: 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e 67  INTF("Requesting
8760: 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f 53   attribute CKA_S
8770: 55 42 4a 45 43 54 20 28 30 78 25 30 38 6c 78 29  UBJECT (0x%08lx)
8780: 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64   ...", (unsigned
8790: 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72   long) curr_attr
87a0: 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66 20  _type);......if 
87b0: 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d 20  (objectclass != 
87c0: 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45 29  CKO_CERTIFICATE)
87d0: 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f 44   {......CACKEY_D
87e0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e  EBUG_PRINTF(" ..
87f0: 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69 6e  . but not gettin
8800: 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65 20  g it because we 
8810: 61 72 65 20 6e 6f 74 20 61 20 63 65 72 74 69 66  are not a certif
8820: 69 63 61 74 65 2e 22 29 3b 0a 0a 09 09 09 09 09  icate.");.......
8830: 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09  break;.....}....
8840: 09 09 69 66 20 28 63 65 72 74 69 66 69 63 61 74  ..if (certificat
8850: 65 5f 6c 65 6e 20 3e 3d 20 30 29 20 7b 0a 09 09  e_len >= 0) {...
8860: 09 09 09 78 35 30 39 5f 72 65 61 64 5f 72 65 74  ...x509_read_ret
8870: 20 3d 20 78 35 30 39 5f 74 6f 5f 73 75 62 6a 65   = x509_to_subje
8880: 63 74 28 63 65 72 74 69 66 69 63 61 74 65 2c 20  ct(certificate, 
8890: 63 65 72 74 69 66 69 63 61 74 65 5f 6c 65 6e 2c  certificate_len,
88a0: 20 26 70 56 61 6c 75 65 29 3b 0a 09 09 09 09 09   &pValue);......
88b0: 69 66 20 28 78 35 30 39 5f 72 65 61 64 5f 72 65  if (x509_read_re
88c0: 74 20 3c 20 30 29 20 7b 0a 09 09 09 09 09 09 70  t < 0) {.......p
88d0: 56 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09  Value = NULL;...
88e0: 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09  ...} else {.....
88f0: 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 78  ..ulValueLen = x
8900: 35 30 39 5f 72 65 61 64 5f 72 65 74 3b 0a 09 09  509_read_ret;...
8910: 09 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09  ...}.....}......
8920: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
8930: 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e  NTF(" ... return
8940: 69 6e 67 20 25 70 2f 25 6c 75 22 2c 20 70 56 61  ing %p/%lu", pVa
8950: 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c  lue, (unsigned l
8960: 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29  ong) ulValueLen)
8970: 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09  ;......break;...
8980: 09 63 61 73 65 20 43 4b 41 5f 49 44 3a 0a 09 09  .case CKA_ID:...
8990: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
89a0: 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e  RINTF("Requestin
89b0: 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f  g attribute CKA_
89c0: 49 44 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e  ID (0x%08lx) ...
89d0: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  ", (unsigned lon
89e0: 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70  g) curr_attr_typ
89f0: 65 29 3b 0a 0a 09 09 09 09 75 63 54 6d 70 42 75  e);......ucTmpBu
8a00: 66 5b 30 5d 20 3d 20 28 28 69 64 65 6e 74 69 74  f[0] = ((identit
8a10: 79 5f 6e 75 6d 20 2b 20 31 29 20 3e 3e 20 38 29  y_num + 1) >> 8)
8a20: 20 26 20 30 78 66 66 3b 0a 09 09 09 09 75 63 54   & 0xff;.....ucT
8a30: 6d 70 42 75 66 5b 31 5d 20 3d 20 20 28 69 64 65  mpBuf[1] =  (ide
8a40: 6e 74 69 74 79 5f 6e 75 6d 20 2b 20 31 29 20 26  ntity_num + 1) &
8a50: 20 30 78 66 66 3b 0a 0a 09 09 09 09 70 56 61 6c   0xff;......pVal
8a60: 75 65 20 3d 20 26 75 63 54 6d 70 42 75 66 3b 0a  ue = &ucTmpBuf;.
8a70: 09 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d  ....ulValueLen =
8a80: 20 32 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f   2;......CACKEY_
8a90: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e  DEBUG_PRINTF(" .
8aa0: 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 25 70 2f  .. returning %p/
8ab0: 25 6c 75 22 2c 20 70 56 61 6c 75 65 2c 20 28 75  %lu", pValue, (u
8ac0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75 6c  nsigned long) ul
8ad0: 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 09  ValueLen);......
8ae0: 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20 43  break;....case C
8af0: 4b 41 5f 43 45 52 54 49 46 49 43 41 54 45 5f 54  KA_CERTIFICATE_T
8b00: 59 50 45 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f  YPE:.....CACKEY_
8b10: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65  DEBUG_PRINTF("Re
8b20: 71 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75  questing attribu
8b30: 74 65 20 43 4b 41 5f 43 45 52 54 49 46 49 43 41  te CKA_CERTIFICA
8b40: 54 45 5f 54 59 50 45 20 28 30 78 25 30 38 6c 78  TE_TYPE (0x%08lx
8b50: 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65  ) ...", (unsigne
8b60: 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74  d long) curr_att
8b70: 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66  r_type);......if
8b80: 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 21 3d   (objectclass !=
8b90: 20 43 4b 4f 5f 43 45 52 54 49 46 49 43 41 54 45   CKO_CERTIFICATE
8ba0: 29 20 7b 0a 09 09 09 09 09 43 41 43 4b 45 59 5f  ) {......CACKEY_
8bb0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e  DEBUG_PRINTF(" .
8bc0: 2e 2e 20 62 75 74 20 6e 6f 74 20 67 65 74 74 69  .. but not getti
8bd0: 6e 67 20 69 74 20 62 65 63 61 75 73 65 20 77 65  ng it because we
8be0: 20 61 72 65 20 6e 6f 74 20 61 20 63 65 72 74 69   are not a certi
8bf0: 66 69 63 61 74 65 2e 22 29 3b 0a 0a 09 09 09 09  ficate.");......
8c00: 09 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09  .break;.....}...
8c10: 09 09 09 2f 2a 20 57 65 20 6f 6e 6c 79 20 73 75  .../* We only su
8c20: 70 70 6f 72 74 20 6f 6e 65 20 63 65 72 74 69 66  pport one certif
8c30: 69 63 61 74 65 20 74 79 70 65 20 2a 2f 0a 09 09  icate type */...
8c40: 09 09 63 6b 5f 63 65 72 74 69 66 69 63 61 74 65  ..ck_certificate
8c50: 5f 74 79 70 65 20 3d 20 43 4b 43 5f 58 5f 35 30  _type = CKC_X_50
8c60: 39 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20 3d  9;......pValue =
8c70: 20 26 63 6b 5f 63 65 72 74 69 66 69 63 61 74 65   &ck_certificate
8c80: 5f 74 79 70 65 3b 0a 09 09 09 09 75 6c 56 61 6c  _type;.....ulVal
8c90: 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63  ueLen = sizeof(c
8ca0: 6b 5f 63 65 72 74 69 66 69 63 61 74 65 5f 74 79  k_certificate_ty
8cb0: 70 65 29 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59  pe);......CACKEY
8cc0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 20  _DEBUG_PRINTF(" 
8cd0: 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67 20 43 4b  ... returning CK
8ce0: 43 5f 58 5f 35 30 39 20 28 25 6c 75 29 20 28 25  C_X_509 (%lu) (%
8cf0: 70 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e  p/%lu)", (unsign
8d00: 65 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 43  ed long) *((CK_C
8d10: 45 52 54 49 46 49 43 41 54 45 5f 54 59 50 45 20  ERTIFICATE_TYPE 
8d20: 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56 61 6c  *) pValue), pVal
8d30: 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f  ue, (unsigned lo
8d40: 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e 29 3b  ng) ulValueLen);
8d50: 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ......break;....
8d60: 63 61 73 65 20 43 4b 41 5f 4b 45 59 5f 54 59 50  case CKA_KEY_TYP
8d70: 45 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45  E:.....CACKEY_DE
8d80: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71 75  BUG_PRINTF("Requ
8d90: 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74 65  esting attribute
8da0: 20 43 4b 41 5f 4b 45 59 5f 54 59 50 45 20 28 30   CKA_KEY_TYPE (0
8db0: 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75  x%08lx) ...", (u
8dc0: 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75  nsigned long) cu
8dd0: 72 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a  rr_attr_type);..
8de0: 09 09 09 09 69 66 20 28 6f 62 6a 65 63 74 63 6c  ....if (objectcl
8df0: 61 73 73 20 21 3d 20 43 4b 4f 5f 50 52 49 56 41  ass != CKO_PRIVA
8e00: 54 45 5f 4b 45 59 20 26 26 20 6f 62 6a 65 63 74  TE_KEY && object
8e10: 63 6c 61 73 73 20 21 3d 20 43 4b 4f 5f 50 55 42  class != CKO_PUB
8e20: 4c 49 43 5f 4b 45 59 29 20 7b 0a 09 09 09 09 09  LIC_KEY) {......
8e30: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
8e40: 4e 54 46 28 22 20 2e 2e 2e 20 62 75 74 20 6e 6f  NTF(" ... but no
8e50: 74 20 67 65 74 74 69 6e 67 20 69 74 20 62 65 63  t getting it bec
8e60: 61 75 73 65 20 77 65 20 61 72 65 20 6e 6f 74 20  ause we are not 
8e70: 61 20 6b 65 79 2e 22 29 3b 0a 0a 09 09 09 09 09  a key.");.......
8e80: 62 72 65 61 6b 3b 0a 09 09 09 09 7d 0a 0a 09 09  break;.....}....
8e90: 09 09 2f 2a 20 57 65 20 6f 6e 6c 79 20 73 75 70  ../* We only sup
8ea0: 70 6f 72 74 20 6f 6e 65 20 6b 65 79 20 74 79 70  port one key typ
8eb0: 65 20 2a 2f 0a 09 09 09 09 63 6b 5f 6b 65 79 5f  e */.....ck_key_
8ec0: 74 79 70 65 20 3d 20 43 4b 4b 5f 52 53 41 3b 0a  type = CKK_RSA;.
8ed0: 0a 09 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63  .....pValue = &c
8ee0: 6b 5f 6b 65 79 5f 74 79 70 65 3b 0a 09 09 09 09  k_key_type;.....
8ef0: 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a  ulValueLen = siz
8f00: 65 6f 66 28 63 6b 5f 6b 65 79 5f 74 79 70 65 29  eof(ck_key_type)
8f10: 3b 0a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45  ;......CACKEY_DE
8f20: 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e  BUG_PRINTF(" ...
8f30: 20 72 65 74 75 72 6e 69 6e 67 20 43 4b 4b 5f 52   returning CKK_R
8f40: 53 41 20 28 25 6c 75 29 20 28 25 70 2f 25 6c 75  SA (%lu) (%p/%lu
8f50: 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f  )", (unsigned lo
8f60: 6e 67 29 20 2a 28 28 43 4b 5f 43 45 52 54 49 46  ng) *((CK_CERTIF
8f70: 49 43 41 54 45 5f 54 59 50 45 20 2a 29 20 70 56  ICATE_TYPE *) pV
8f80: 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20 28  alue), pValue, (
8f90: 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 75  unsigned long) u
8fa0: 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09  lValueLen);.....
8fb0: 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65 20  .break;....case 
8fc0: 43 4b 41 5f 53 49 47 4e 3a 0a 09 09 09 09 43 41  CKA_SIGN:.....CA
8fd0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
8fe0: 46 28 22 52 65 71 75 65 73 74 69 6e 67 20 61 74  F("Requesting at
8ff0: 74 72 69 62 75 74 65 20 43 4b 41 5f 53 49 47 4e  tribute CKA_SIGN
9000: 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e 22 2c   (0x%08lx) ...",
9010: 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29   (unsigned long)
9020: 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70 65 29   curr_attr_type)
9030: 3b 0a 0a 09 09 09 09 69 66 20 28 6f 62 6a 65 63  ;......if (objec
9040: 74 63 6c 61 73 73 20 3d 3d 20 43 4b 4f 5f 50 52  tclass == CKO_PR
9050: 49 56 41 54 45 5f 4b 45 59 29 20 7b 0a 09 09 09  IVATE_KEY) {....
9060: 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 74  ..pValue = &ck_t
9070: 72 75 65 3b 0a 09 09 09 09 09 75 6c 56 61 6c 75  rue;......ulValu
9080: 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b  eLen = sizeof(ck
9090: 5f 74 72 75 65 29 3b 0a 09 09 09 09 7d 20 65 6c  _true);.....} el
90a0: 73 65 20 7b 0a 09 09 09 09 09 70 56 61 6c 75 65  se {......pValue
90b0: 20 3d 20 26 63 6b 5f 66 61 6c 73 65 3b 0a 09 09   = &ck_false;...
90c0: 09 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20  ...ulValueLen = 
90d0: 73 69 7a 65 6f 66 28 63 6b 5f 66 61 6c 73 65 29  sizeof(ck_false)
90e0: 3b 0a 09 09 09 09 7d 0a 0a 09 09 09 09 43 41 43  ;.....}......CAC
90f0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
9100: 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67  (" ... returning
9110: 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20   %lu (%p/%lu)", 
9120: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20  (unsigned long) 
9130: 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70  *((CK_BBOOL *) p
9140: 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20  Value), pValue, 
9150: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20  (unsigned long) 
9160: 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09  ulValueLen);....
9170: 09 09 62 72 65 61 6b 3b 0a 09 09 09 63 61 73 65  ..break;....case
9180: 20 43 4b 41 5f 44 45 43 52 59 50 54 3a 0a 09 09   CKA_DECRYPT:...
9190: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
91a0: 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69 6e  RINTF("Requestin
91b0: 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41 5f  g attribute CKA_
91c0: 44 45 43 52 59 50 54 20 28 30 78 25 30 38 6c 78  DECRYPT (0x%08lx
91d0: 29 20 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65  ) ...", (unsigne
91e0: 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74  d long) curr_att
91f0: 72 5f 74 79 70 65 29 3b 0a 0a 09 09 09 09 69 66  r_type);......if
9200: 20 28 6f 62 6a 65 63 74 63 6c 61 73 73 20 3d 3d   (objectclass ==
9210: 20 43 4b 4f 5f 50 52 49 56 41 54 45 5f 4b 45 59   CKO_PRIVATE_KEY
9220: 20 7c 7c 20 6f 62 6a 65 63 74 63 6c 61 73 73 20   || objectclass 
9230: 3d 3d 20 43 4b 4f 5f 50 55 42 4c 49 43 5f 4b 45  == CKO_PUBLIC_KE
9240: 59 29 20 7b 0a 09 09 09 09 09 70 56 61 6c 75 65  Y) {......pValue
9250: 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09   = &ck_true;....
9260: 09 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73  ..ulValueLen = s
9270: 69 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a  izeof(ck_true);.
9280: 09 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
9290: 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f 66  ..pValue = &ck_f
92a0: 61 6c 73 65 3b 0a 09 09 09 09 09 75 6c 56 61 6c  alse;......ulVal
92b0: 75 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63  ueLen = sizeof(c
92c0: 6b 5f 66 61 6c 73 65 29 3b 0a 09 09 09 09 7d 0a  k_false);.....}.
92d0: 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55  .....CACKEY_DEBU
92e0: 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72  G_PRINTF(" ... r
92f0: 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70  eturning %lu (%p
9300: 2f 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65  /%lu)", (unsigne
9310: 64 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42  d long) *((CK_BB
9320: 4f 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20  OOL *) pValue), 
9330: 70 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65  pValue, (unsigne
9340: 64 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c  d long) ulValueL
9350: 65 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b  en);......break;
9360: 0a 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55  ....case CKA_TRU
9370: 53 54 5f 53 45 52 56 45 52 5f 41 55 54 48 3a 0a  ST_SERVER_AUTH:.
9380: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
9390: 5f 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74  _PRINTF("Request
93a0: 69 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b  ing attribute CK
93b0: 41 5f 54 52 55 53 54 5f 53 45 52 56 45 52 5f 41  A_TRUST_SERVER_A
93c0: 55 54 48 20 28 30 78 25 30 38 6c 78 29 20 2e 2e  UTH (0x%08lx) ..
93d0: 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f  .", (unsigned lo
93e0: 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79  ng) curr_attr_ty
93f0: 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65  pe);......pValue
9400: 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09   = &ck_true;....
9410: 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69  .ulValueLen = si
9420: 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a 0a  zeof(ck_true);..
9430: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
9440: 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65  _PRINTF(" ... re
9450: 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f  turning %lu (%p/
9460: 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64  %lu)", (unsigned
9470: 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f   long) *((CK_BBO
9480: 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70  OL *) pValue), p
9490: 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64  Value, (unsigned
94a0: 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65   long) ulValueLe
94b0: 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a  n);......break;.
94c0: 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53  ...case CKA_TRUS
94d0: 54 5f 43 4c 49 45 4e 54 5f 41 55 54 48 3a 0a 09  T_CLIENT_AUTH:..
94e0: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
94f0: 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69  PRINTF("Requesti
9500: 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41  ng attribute CKA
9510: 5f 54 52 55 53 54 5f 43 4c 49 45 4e 54 5f 41 55  _TRUST_CLIENT_AU
9520: 54 48 20 28 30 78 25 30 38 6c 78 29 20 2e 2e 2e  TH (0x%08lx) ...
9530: 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  ", (unsigned lon
9540: 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79 70  g) curr_attr_typ
9550: 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65 20  e);......pValue 
9560: 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09 09  = &ck_true;.....
9570: 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69 7a  ulValueLen = siz
9580: 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a 0a 09  eof(ck_true);...
9590: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
95a0: 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65 74  PRINTF(" ... ret
95b0: 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f 25  urning %lu (%p/%
95c0: 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64 20  lu)", (unsigned 
95d0: 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f 4f  long) *((CK_BBOO
95e0: 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70 56  L *) pValue), pV
95f0: 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64 20  alue, (unsigned 
9600: 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65 6e  long) ulValueLen
9610: 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09  );......break;..
9620: 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53 54  ..case CKA_TRUST
9630: 5f 43 4f 44 45 5f 53 49 47 4e 49 4e 47 3a 0a 09  _CODE_SIGNING:..
9640: 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
9650: 50 52 49 4e 54 46 28 22 52 65 71 75 65 73 74 69  PRINTF("Requesti
9660: 6e 67 20 61 74 74 72 69 62 75 74 65 20 43 4b 41  ng attribute CKA
9670: 5f 54 52 55 53 54 5f 43 4f 44 45 5f 53 49 47 4e  _TRUST_CODE_SIGN
9680: 49 4e 47 20 28 30 78 25 30 38 6c 78 29 20 2e 2e  ING (0x%08lx) ..
9690: 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f  .", (unsigned lo
96a0: 6e 67 29 20 63 75 72 72 5f 61 74 74 72 5f 74 79  ng) curr_attr_ty
96b0: 70 65 29 3b 0a 0a 09 09 09 09 70 56 61 6c 75 65  pe);......pValue
96c0: 20 3d 20 26 63 6b 5f 74 72 75 65 3b 0a 09 09 09   = &ck_true;....
96d0: 09 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 73 69  .ulValueLen = si
96e0: 7a 65 6f 66 28 63 6b 5f 74 72 75 65 29 3b 0a 0a  zeof(ck_true);..
96f0: 09 09 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
9700: 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e 20 72 65  _PRINTF(" ... re
9710: 74 75 72 6e 69 6e 67 20 25 6c 75 20 28 25 70 2f  turning %lu (%p/
9720: 25 6c 75 29 22 2c 20 28 75 6e 73 69 67 6e 65 64  %lu)", (unsigned
9730: 20 6c 6f 6e 67 29 20 2a 28 28 43 4b 5f 42 42 4f   long) *((CK_BBO
9740: 4f 4c 20 2a 29 20 70 56 61 6c 75 65 29 2c 20 70  OL *) pValue), p
9750: 56 61 6c 75 65 2c 20 28 75 6e 73 69 67 6e 65 64  Value, (unsigned
9760: 20 6c 6f 6e 67 29 20 75 6c 56 61 6c 75 65 4c 65   long) ulValueLe
9770: 6e 29 3b 0a 0a 09 09 09 09 62 72 65 61 6b 3b 0a  n);......break;.
9780: 09 09 09 63 61 73 65 20 43 4b 41 5f 54 52 55 53  ...case CKA_TRUS
9790: 54 5f 45 4d 41 49 4c 5f 50 52 4f 54 45 43 54 49  T_EMAIL_PROTECTI
97a0: 4f 4e 3a 0a 09 09 09 09 43 41 43 4b 45 59 5f 44  ON:.....CACKEY_D
97b0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 71  EBUG_PRINTF("Req
97c0: 75 65 73 74 69 6e 67 20 61 74 74 72 69 62 75 74  uesting attribut
97d0: 65 20 43 4b 41 5f 54 52 55 53 54 5f 45 4d 41 49  e CKA_TRUST_EMAI
97e0: 4c 5f 50 52 4f 54 45 43 54 49 4f 4e 20 28 30 78  L_PROTECTION (0x
97f0: 25 30 38 6c 78 29 20 2e 2e 2e 22 2c 20 28 75 6e  %08lx) ...", (un
9800: 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20 63 75 72  signed long) cur
9810: 72 5f 61 74 74 72 5f 74 79 70 65 29 3b 0a 0a 09  r_attr_type);...
9820: 09 09 09 70 56 61 6c 75 65 20 3d 20 26 63 6b 5f  ...pValue = &ck_
9830: 74 72 75 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75  true;.....ulValu
9840: 65 4c 65 6e 20 3d 20 73 69 7a 65 6f 66 28 63 6b  eLen = sizeof(ck
9850: 5f 74 72 75 65 29 3b 0a 0a 09 09 09 09 43 41 43  _true);......CAC
9860: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
9870: 28 22 20 2e 2e 2e 20 72 65 74 75 72 6e 69 6e 67  (" ... returning
9880: 20 25 6c 75 20 28 25 70 2f 25 6c 75 29 22 2c 20   %lu (%p/%lu)", 
9890: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20  (unsigned long) 
98a0: 2a 28 28 43 4b 5f 42 42 4f 4f 4c 20 2a 29 20 70  *((CK_BBOOL *) p
98b0: 56 61 6c 75 65 29 2c 20 70 56 61 6c 75 65 2c 20  Value), pValue, 
98c0: 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67 29 20  (unsigned long) 
98d0: 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09  ulValueLen);....
98e0: 09 09 62 72 65 61 6b 3b 0a 09 09 09 64 65 66 61  ..break;....defa
98f0: 75 6c 74 3a 0a 09 09 09 09 70 56 61 6c 75 65 20  ult:.....pValue 
9900: 3d 20 4e 55 4c 4c 3b 0a 09 09 09 09 75 6c 56 61  = NULL;.....ulVa
9910: 6c 75 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f 4e  lueLen = (CK_LON
9920: 47 29 20 2d 31 3b 0a 09 09 09 09 62 72 65 61 6b  G) -1;.....break
9930: 3b 0a 09 09 7d 0a 0a 09 09 69 66 20 28 28 28 43  ;...}....if (((C
9940: 4b 5f 4c 4f 4e 47 29 20 75 6c 56 61 6c 75 65 4c  K_LONG) ulValueL
9950: 65 6e 29 20 21 3d 20 28 28 43 4b 5f 4c 4f 4e 47  en) != ((CK_LONG
9960: 29 20 2d 31 29 29 20 7b 0a 09 09 09 2f 2a 20 50  ) -1)) {..../* P
9970: 75 73 68 20 63 75 72 72 5f 61 74 74 72 20 6f 6e  ush curr_attr on
9980: 74 6f 20 74 68 65 20 73 74 61 63 6b 20 2a 2f 0a  to the stack */.
9990: 09 09 09 63 75 72 72 5f 61 74 74 72 2e 74 79 70  ...curr_attr.typ
99a0: 65 20 3d 20 63 75 72 72 5f 61 74 74 72 5f 74 79  e = curr_attr_ty
99b0: 70 65 3b 0a 09 09 09 63 75 72 72 5f 61 74 74 72  pe;....curr_attr
99c0: 2e 75 6c 56 61 6c 75 65 4c 65 6e 20 3d 20 75 6c  .ulValueLen = ul
99d0: 56 61 6c 75 65 4c 65 6e 3b 0a 0a 09 09 09 63 75  ValueLen;.....cu
99e0: 72 72 5f 61 74 74 72 2e 70 56 61 6c 75 65 20 3d  rr_attr.pValue =
99f0: 20 6d 61 6c 6c 6f 63 28 63 75 72 72 5f 61 74 74   malloc(curr_att
9a00: 72 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 3b 0a 09  r.ulValueLen);..
9a10: 09 09 6d 65 6d 63 70 79 28 63 75 72 72 5f 61 74  ..memcpy(curr_at
9a20: 74 72 2e 70 56 61 6c 75 65 2c 20 70 56 61 6c 75  tr.pValue, pValu
9a30: 65 2c 20 63 75 72 72 5f 61 74 74 72 2e 75 6c 56  e, curr_attr.ulV
9a40: 61 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 69 66  alueLen);.....if
9a50: 20 28 70 56 61 6c 75 65 5f 66 72 65 65 20 26 26   (pValue_free &&
9a60: 20 70 56 61 6c 75 65 29 20 7b 0a 09 09 09 09 66   pValue) {.....f
9a70: 72 65 65 28 70 56 61 6c 75 65 29 3b 0a 09 09 09  ree(pValue);....
9a80: 7d 0a 0a 09 09 09 69 66 20 28 6e 75 6d 61 74 74  }.....if (numatt
9a90: 72 73 20 3e 3d 20 72 65 74 76 61 6c 5f 63 6f 75  rs >= retval_cou
9aa0: 6e 74 29 20 7b 0a 09 09 09 09 72 65 74 76 61 6c  nt) {.....retval
9ab0: 5f 63 6f 75 6e 74 20 2a 3d 20 32 3b 0a 09 09 09  _count *= 2;....
9ac0: 09 72 65 74 76 61 6c 20 3d 20 72 65 61 6c 6c 6f  .retval = reallo
9ad0: 63 28 72 65 74 76 61 6c 2c 20 72 65 74 76 61 6c  c(retval, retval
9ae0: 5f 63 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 28  _count * sizeof(
9af0: 2a 72 65 74 76 61 6c 29 29 3b 0a 09 09 09 7d 0a  *retval));....}.
9b00: 0a 09 09 09 6d 65 6d 63 70 79 28 26 72 65 74 76  ....memcpy(&retv
9b10: 61 6c 5b 6e 75 6d 61 74 74 72 73 5d 2c 20 26 63  al[numattrs], &c
9b20: 75 72 72 5f 61 74 74 72 2c 20 73 69 7a 65 6f 66  urr_attr, sizeof
9b30: 28 63 75 72 72 5f 61 74 74 72 29 29 3b 0a 09 09  (curr_attr));...
9b40: 09 6e 75 6d 61 74 74 72 73 2b 2b 3b 0a 09 09 7d  .numattrs++;...}
9b50: 0a 09 7d 0a 0a 09 69 66 20 28 6e 75 6d 61 74 74  ..}...if (numatt
9b60: 72 73 20 21 3d 20 30 29 20 7b 0a 09 09 72 65 74  rs != 0) {...ret
9b70: 76 61 6c 5f 63 6f 75 6e 74 20 3d 20 6e 75 6d 61  val_count = numa
9b80: 74 74 72 73 3b 0a 09 09 72 65 74 76 61 6c 20 3d  ttrs;...retval =
9b90: 20 72 65 61 6c 6c 6f 63 28 72 65 74 76 61 6c 2c   realloc(retval,
9ba0: 20 72 65 74 76 61 6c 5f 63 6f 75 6e 74 20 2a 20   retval_count * 
9bb0: 73 69 7a 65 6f 66 28 2a 72 65 74 76 61 6c 29 29  sizeof(*retval))
9bc0: 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 66 72  ;..} else {...fr
9bd0: 65 65 28 72 65 74 76 61 6c 29 3b 0a 0a 09 09 72  ee(retval);....r
9be0: 65 74 76 61 6c 20 3d 20 4e 55 4c 4c 3b 0a 09 7d  etval = NULL;..}
9bf0: 0a 0a 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 6e  ...*pulCount = n
9c00: 75 6d 61 74 74 72 73 3b 0a 0a 09 43 41 43 4b 45  umattrs;...CACKE
9c10: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
9c20: 52 65 74 75 72 6e 69 6e 67 20 25 6c 75 20 6f 62  Returning %lu ob
9c30: 6a 65 63 74 73 20 28 25 70 29 2e 22 2c 20 6e 75  jects (%p).", nu
9c40: 6d 61 74 74 72 73 2c 20 72 65 74 76 61 6c 29 3b  mattrs, retval);
9c50: 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76 61 6c  ...return(retval
9c60: 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f  );.}..CK_DEFINE_
9c70: 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20  FUNCTION(CK_RV, 
9c80: 43 5f 49 6e 69 74 69 61 6c 69 7a 65 29 28 43 4b  C_Initialize)(CK
9c90: 5f 56 4f 49 44 5f 50 54 52 20 70 49 6e 69 74 41  _VOID_PTR pInitA
9ca0: 72 67 73 29 20 7b 0a 09 43 4b 5f 43 5f 49 4e 49  rgs) {..CK_C_INI
9cb0: 54 49 41 4c 49 5a 45 5f 41 52 47 53 20 43 4b 5f  TIALIZE_ARGS CK_
9cc0: 50 54 52 20 61 72 67 73 3b 0a 09 75 69 6e 74 33  PTR args;..uint3
9cd0: 32 5f 74 20 69 64 78 3b 0a 09 69 6e 74 20 6d 75  2_t idx;..int mu
9ce0: 74 65 78 5f 69 6e 69 74 5f 72 65 74 3b 0a 0a 09  tex_init_ret;...
9cf0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
9d00: 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a  NTF("Called.");.
9d10: 0a 09 69 66 20 28 70 49 6e 69 74 41 72 67 73 20  ..if (pInitArgs 
9d20: 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 61 72 67  != NULL) {...arg
9d30: 73 20 3d 20 70 49 6e 69 74 41 72 67 73 3b 0a 09  s = pInitArgs;..
9d40: 09 6d 65 6d 63 70 79 28 26 63 61 63 6b 65 79 5f  .memcpy(&cackey_
9d50: 61 72 67 73 2c 20 61 72 67 73 2c 20 73 69 7a 65  args, args, size
9d60: 6f 66 28 63 61 63 6b 65 79 5f 61 72 67 73 29 29  of(cackey_args))
9d70: 3b 0a 0a 09 09 69 66 20 28 61 72 67 73 2d 3e 43  ;....if (args->C
9d80: 72 65 61 74 65 4d 75 74 65 78 20 3d 3d 20 4e 55  reateMutex == NU
9d90: 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 44 65 73 74  LL || args->Dest
9da0: 72 6f 79 4d 75 74 65 78 20 3d 3d 20 4e 55 4c 4c  royMutex == NULL
9db0: 20 7c 7c 20 61 72 67 73 2d 3e 4c 6f 63 6b 4d 75   || args->LockMu
9dc0: 74 65 78 20 3d 3d 20 4e 55 4c 4c 20 7c 7c 20 61  tex == NULL || a
9dd0: 72 67 73 2d 3e 55 6e 6c 6f 63 6b 4d 75 74 65 78  rgs->UnlockMutex
9de0: 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 69   == NULL) {....i
9df0: 66 20 28 61 72 67 73 2d 3e 43 72 65 61 74 65 4d  f (args->CreateM
9e00: 75 74 65 78 20 21 3d 20 4e 55 4c 4c 20 7c 7c 20  utex != NULL || 
9e10: 61 72 67 73 2d 3e 44 65 73 74 72 6f 79 4d 75 74  args->DestroyMut
9e20: 65 78 20 21 3d 20 4e 55 4c 4c 20 7c 7c 20 61 72  ex != NULL || ar
9e30: 67 73 2d 3e 4c 6f 63 6b 4d 75 74 65 78 20 21 3d  gs->LockMutex !=
9e40: 20 4e 55 4c 4c 20 7c 7c 20 61 72 67 73 2d 3e 55   NULL || args->U
9e50: 6e 6c 6f 63 6b 4d 75 74 65 78 20 21 3d 20 4e 55  nlockMutex != NU
9e60: 4c 4c 29 20 7b 0a 09 09 09 09 43 41 43 4b 45 59  LL) {.....CACKEY
9e70: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
9e80: 72 72 6f 72 2e 20 53 6f 6d 65 2c 20 62 75 74 20  rror. Some, but 
9e90: 6e 6f 74 20 41 6c 6c 20 74 68 72 65 61 64 69 6e  not All threadin
9ea0: 67 20 70 72 69 6d 69 74 69 76 65 73 20 70 72 6f  g primitives pro
9eb0: 76 69 64 65 64 2e 22 29 3b 0a 0a 09 09 09 09 72  vided.");......r
9ec0: 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45  eturn(CKR_ARGUME
9ed0: 4e 54 53 5f 42 41 44 29 3b 0a 09 09 09 7d 0a 09  NTS_BAD);....}..
9ee0: 09 7d 0a 0a 09 09 69 66 20 28 61 72 67 73 2d 3e  .}....if (args->
9ef0: 70 52 65 73 65 72 76 65 64 20 21 3d 20 4e 55 4c  pReserved != NUL
9f00: 4c 29 20 7b 0a 09 09 09 43 41 43 4b 45 59 5f 44  L) {....CACKEY_D
9f10: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
9f20: 6f 72 2e 20 70 52 65 73 65 72 76 65 64 20 69 73  or. pReserved is
9f30: 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09   not NULL.");...
9f40: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47  ..return(CKR_ARG
9f50: 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 09 7d  UMENTS_BAD);...}
9f60: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 63 61 63  ..} else {...cac
9f70: 6b 65 79 5f 61 72 67 73 2e 43 72 65 61 74 65 4d  key_args.CreateM
9f80: 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a 09 09 63  utex = NULL;...c
9f90: 61 63 6b 65 79 5f 61 72 67 73 2e 44 65 73 74 72  ackey_args.Destr
9fa0: 6f 79 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a  oyMutex = NULL;.
9fb0: 09 09 63 61 63 6b 65 79 5f 61 72 67 73 2e 4c 6f  ..cackey_args.Lo
9fc0: 63 6b 4d 75 74 65 78 20 3d 20 4e 55 4c 4c 3b 0a  ckMutex = NULL;.
9fd0: 09 09 63 61 63 6b 65 79 5f 61 72 67 73 2e 55 6e  ..cackey_args.Un
9fe0: 6c 6f 63 6b 4d 75 74 65 78 20 3d 20 4e 55 4c 4c  lockMutex = NULL
9ff0: 3b 0a 09 09 63 61 63 6b 65 79 5f 61 72 67 73 2e  ;...cackey_args.
a000: 66 6c 61 67 73 20 3d 20 30 3b 0a 09 7d 0a 0a 09  flags = 0;..}...
a010: 69 66 20 28 63 61 63 6b 65 79 5f 69 6e 69 74 69  if (cackey_initi
a020: 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b  alized) {...CACK
a030: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
a040: 22 45 72 72 6f 72 2e 20 20 41 6c 72 65 61 64 79  "Error.  Already
a050: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b   initialized.");
a060: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43  ....return(CKR_C
a070: 52 59 50 54 4f 4b 49 5f 41 4c 52 45 41 44 59 5f  RYPTOKI_ALREADY_
a080: 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d  INITIALIZED);..}
a090: 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b  ...for (idx = 0;
a0a0: 20 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63   idx < (sizeof(c
a0b0: 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20  ackey_sessions) 
a0c0: 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f  / sizeof(cackey_
a0d0: 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 3b 20 69  sessions[0])); i
a0e0: 64 78 2b 2b 29 20 7b 0a 09 09 63 61 63 6b 65 79  dx++) {...cackey
a0f0: 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 61  _sessions[idx].a
a100: 63 74 69 76 65 20 3d 20 30 3b 0a 09 7d 0a 0a 09  ctive = 0;..}...
a110: 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20 69 64  for (idx = 0; id
a120: 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61 63 6b  x < (sizeof(cack
a130: 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65  ey_slots) / size
a140: 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b  of(cackey_slots[
a150: 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b 0a 09  0])); idx++) {..
a160: 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64  .cackey_slots[id
a170: 78 5d 2e 61 63 74 69 76 65 20 3d 20 30 3b 0a 09  x].active = 0;..
a180: 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64  .cackey_slots[id
a190: 78 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 20 3d  x].pcsc_reader =
a1a0: 20 4e 55 4c 4c 3b 0a 09 7d 0a 0a 09 63 61 63 6b   NULL;..}...cack
a1b0: 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d  ey_initialized =
a1c0: 20 31 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65   1;...if (!cacke
a1d0: 79 5f 62 69 67 6c 6f 63 6b 5f 69 6e 69 74 29 20  y_biglock_init) 
a1e0: 7b 0a 09 09 6d 75 74 65 78 5f 69 6e 69 74 5f 72  {...mutex_init_r
a1f0: 65 74 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65  et = cackey_mute
a200: 78 5f 63 72 65 61 74 65 28 26 63 61 63 6b 65 79  x_create(&cackey
a210: 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 69 66  _biglock);....if
a220: 20 28 6d 75 74 65 78 5f 69 6e 69 74 5f 72 65 74   (mutex_init_ret
a230: 20 21 3d 20 30 29 20 7b 0a 09 09 09 43 41 43 4b   != 0) {....CACK
a240: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
a250: 22 45 72 72 6f 72 2e 20 20 4d 75 74 65 78 20 69  "Error.  Mutex i
a260: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 66 61  nitialization fa
a270: 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 09 72 65 74  iled.");.....ret
a280: 75 72 6e 28 43 4b 52 5f 43 41 4e 54 5f 4c 4f 43  urn(CKR_CANT_LOC
a290: 4b 29 3b 0a 09 09 7d 0a 0a 09 09 63 61 63 6b 65  K);...}....cacke
a2a0: 79 5f 62 69 67 6c 6f 63 6b 5f 69 6e 69 74 20 3d  y_biglock_init =
a2b0: 20 31 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f   1;..}...CACKEY_
a2c0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65  DEBUG_PRINTF("Re
a2d0: 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28  turning CKR_OK (
a2e0: 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a  %i)", CKR_OK);..
a2f0: 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b  .return(CKR_OK);
a300: 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55  .}..CK_DEFINE_FU
a310: 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f  NCTION(CK_RV, C_
a320: 46 69 6e 61 6c 69 7a 65 29 28 43 4b 5f 56 4f 49  Finalize)(CK_VOI
a330: 44 5f 50 54 52 20 70 52 65 73 65 72 76 65 64 29  D_PTR pReserved)
a340: 20 7b 0a 09 75 69 6e 74 33 32 5f 74 20 69 64 78   {..uint32_t idx
a350: 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ;...CACKEY_DEBUG
a360: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e  _PRINTF("Called.
a370: 22 29 3b 0a 0a 09 69 66 20 28 70 52 65 73 65 72  ");...if (pReser
a380: 76 65 64 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09  ved != NULL) {..
a390: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
a3a0: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 52 65  INTF("Error. pRe
a3b0: 73 65 72 76 65 64 20 69 73 20 6e 6f 74 20 4e 55  served is not NU
a3c0: 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  LL.");....return
a3d0: 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42  (CKR_ARGUMENTS_B
a3e0: 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63  AD);..}...if (!c
a3f0: 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65  ackey_initialize
a400: 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45  d) {...CACKEY_DE
a410: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
a420: 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69  r.  Not initiali
a430: 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72  zed.");....retur
a440: 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e  n(CKR_CRYPTOKI_N
a450: 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b  OT_INITIALIZED);
a460: 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d  ..}...for (idx =
a470: 20 30 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f   0; idx < (sizeo
a480: 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  f(cackey_session
a490: 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b  s) / sizeof(cack
a4a0: 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29  ey_sessions[0]))
a4b0: 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20  ; idx++) {...if 
a4c0: 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  (cackey_sessions
a4d0: 5b 69 64 78 5d 2e 61 63 74 69 76 65 29 20 7b 0a  [idx].active) {.
a4e0: 09 09 09 43 5f 43 6c 6f 73 65 53 65 73 73 69 6f  ...C_CloseSessio
a4f0: 6e 28 69 64 78 29 3b 0a 09 09 7d 0a 09 7d 0a 0a  n(idx);...}..}..
a500: 09 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5f 64 69  .cackey_slots_di
a510: 73 63 6f 6e 6e 65 63 74 5f 61 6c 6c 28 29 3b 0a  sconnect_all();.
a520: 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20  ..for (idx = 0; 
a530: 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61  idx < (sizeof(ca
a540: 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69  ckey_slots) / si
a550: 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74  zeof(cackey_slot
a560: 73 5b 30 5d 29 29 3b 20 69 64 78 2b 2b 29 20 7b  s[0])); idx++) {
a570: 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f 73 6c  ...if (cackey_sl
a580: 6f 74 73 5b 69 64 78 5d 2e 70 63 73 63 5f 72 65  ots[idx].pcsc_re
a590: 61 64 65 72 29 20 7b 0a 09 09 09 66 72 65 65 28  ader) {....free(
a5a0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 69 64 78  cackey_slots[idx
a5b0: 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 29 3b 0a  ].pcsc_reader);.
a5c0: 09 09 7d 0a 09 7d 0a 0a 09 63 61 63 6b 65 79 5f  ..}..}...cackey_
a5d0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 3d 20 30 3b  initialized = 0;
a5e0: 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
a5f0: 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
a600: 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20  g CKR_OK (%i)", 
a610: 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72  CKR_OK);...retur
a620: 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b  n(CKR_OK);.}..CK
a630: 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e  _DEFINE_FUNCTION
a640: 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 49 6e 66  (CK_RV, C_GetInf
a650: 6f 29 28 43 4b 5f 49 4e 46 4f 5f 50 54 52 20 70  o)(CK_INFO_PTR p
a660: 49 6e 66 6f 29 20 7b 0a 09 73 74 61 74 69 63 20  Info) {..static 
a670: 43 4b 5f 55 54 46 38 43 48 41 52 20 6d 61 6e 75  CK_UTF8CHAR manu
a680: 66 61 63 74 75 72 65 72 49 44 5b 5d 20 3d 20 22  facturerID[] = "
a690: 55 2e 53 2e 20 47 6f 76 65 72 6e 6d 65 6e 74 22  U.S. Government"
a6a0: 3b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55 54 46  ;..static CK_UTF
a6b0: 38 43 48 41 52 20 6c 69 62 72 61 72 79 44 65 73  8CHAR libraryDes
a6c0: 63 72 69 70 74 69 6f 6e 5b 5d 20 3d 20 22 43 41  cription[] = "CA
a6d0: 43 4b 65 79 22 3b 0a 0a 09 43 41 43 4b 45 59 5f  CKey";...CACKEY_
a6e0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61  DEBUG_PRINTF("Ca
a6f0: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70  lled.");...if (p
a700: 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  Info == NULL) {.
a710: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
a720: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 49  RINTF("Error. pI
a730: 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a  nfo is NULL.");.
a740: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52  ...return(CKR_AR
a750: 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d  GUMENTS_BAD);..}
a760: 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69  ...if (!cackey_i
a770: 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09  nitialized) {...
a780: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
a790: 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74  NTF("Error.  Not
a7a0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b   initialized.");
a7b0: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43  ....return(CKR_C
a7c0: 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54  RYPTOKI_NOT_INIT
a7d0: 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 70  IALIZED);..}...p
a7e0: 49 6e 66 6f 2d 3e 63 72 79 70 74 6f 6b 69 56 65  Info->cryptokiVe
a7f0: 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 28  rsion.major = ((
a800: 43 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b 49 5f  CACKEY_CRYPTOKI_
a810: 56 45 52 53 49 4f 4e 5f 43 4f 44 45 29 20 3e 3e  VERSION_CODE) >>
a820: 20 31 36 29 20 26 20 30 78 66 66 3b 0a 09 70 49   16) & 0xff;..pI
a830: 6e 66 6f 2d 3e 63 72 79 70 74 6f 6b 69 56 65 72  nfo->cryptokiVer
a840: 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 28 43  sion.minor = ((C
a850: 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b 49 5f 56  ACKEY_CRYPTOKI_V
a860: 45 52 53 49 4f 4e 5f 43 4f 44 45 29 20 3e 3e 20  ERSION_CODE) >> 
a870: 38 29 20 26 20 30 78 66 66 3b 0a 0a 09 6d 65 6d  8) & 0xff;...mem
a880: 73 65 74 28 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66  set(pInfo->manuf
a890: 61 63 74 75 72 65 72 49 44 2c 20 27 20 27 2c 20  acturerID, ' ', 
a8a0: 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 61  sizeof(pInfo->ma
a8b0: 6e 75 66 61 63 74 75 72 65 72 49 44 29 29 3b 0a  nufacturerID));.
a8c0: 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6d  .memcpy(pInfo->m
a8d0: 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 6d  anufacturerID, m
a8e0: 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c 20 73  anufacturerID, s
a8f0: 69 7a 65 6f 66 28 6d 61 6e 75 66 61 63 74 75 72  izeof(manufactur
a900: 65 72 49 44 29 20 2d 20 31 29 3b 0a 0a 09 70 49  erID) - 1);...pI
a910: 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 30 78 30  nfo->flags = 0x0
a920: 30 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66  0;...memset(pInf
a930: 6f 2d 3e 6c 69 62 72 61 72 79 44 65 73 63 72 69  o->libraryDescri
a940: 70 74 69 6f 6e 2c 20 27 20 27 2c 20 73 69 7a 65  ption, ' ', size
a950: 6f 66 28 70 49 6e 66 6f 2d 3e 6c 69 62 72 61 72  of(pInfo->librar
a960: 79 44 65 73 63 72 69 70 74 69 6f 6e 29 29 3b 0a  yDescription));.
a970: 09 6d 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 6c  .memcpy(pInfo->l
a980: 69 62 72 61 72 79 44 65 73 63 72 69 70 74 69 6f  ibraryDescriptio
a990: 6e 2c 20 6c 69 62 72 61 72 79 44 65 73 63 72 69  n, libraryDescri
a9a0: 70 74 69 6f 6e 2c 20 73 69 7a 65 6f 66 28 6c 69  ption, sizeof(li
a9b0: 62 72 61 72 79 44 65 73 63 72 69 70 74 69 6f 6e  braryDescription
a9c0: 29 20 2d 20 31 29 3b 0a 0a 09 70 49 6e 66 6f 2d  ) - 1);...pInfo-
a9d0: 3e 6c 69 62 72 61 72 79 56 65 72 73 69 6f 6e 2e  >libraryVersion.
a9e0: 6d 61 6a 6f 72 20 3d 20 28 63 61 63 6b 65 79 5f  major = (cackey_
a9f0: 67 65 74 76 65 72 73 69 6f 6e 28 29 20 3e 3e 20  getversion() >> 
aa00: 31 36 29 20 26 20 30 78 66 66 3b 0a 09 70 49 6e  16) & 0xff;..pIn
aa10: 66 6f 2d 3e 6c 69 62 72 61 72 79 56 65 72 73 69  fo->libraryVersi
aa20: 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28 63 61 63 6b  on.minor = (cack
aa30: 65 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 20  ey_getversion() 
aa40: 3e 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 0a 09  >> 8) & 0xff;...
aa50: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
aa60: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43  NTF("Returning C
aa70: 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52  KR_OK (%i)", CKR
aa80: 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  _OK);...return(C
aa90: 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 2f 2a 0a 20 2a  KR_OK);.}../*. *
aaa0: 20 50 72 6f 63 65 73 73 20 6c 69 73 74 20 6f 66   Process list of
aab0: 20 72 65 61 64 65 72 73 2c 20 61 6e 64 20 63 72   readers, and cr
aac0: 65 61 74 65 20 6d 61 70 70 69 6e 67 20 62 65 74  eate mapping bet
aad0: 77 65 65 6e 20 72 65 61 64 65 72 20 6e 61 6d 65  ween reader name
aae0: 20 61 6e 64 20 73 6c 6f 74 20 49 44 0a 20 2a 2f   and slot ID. */
aaf0: 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54  .CK_DEFINE_FUNCT
ab00: 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74  ION(CK_RV, C_Get
ab10: 53 6c 6f 74 4c 69 73 74 29 28 43 4b 5f 42 42 4f  SlotList)(CK_BBO
ab20: 4f 4c 20 74 6f 6b 65 6e 50 72 65 73 65 6e 74 2c  OL tokenPresent,
ab30: 20 43 4b 5f 53 4c 4f 54 5f 49 44 5f 50 54 52 20   CK_SLOT_ID_PTR 
ab40: 70 53 6c 6f 74 4c 69 73 74 2c 20 43 4b 5f 55 4c  pSlotList, CK_UL
ab50: 4f 4e 47 5f 50 54 52 20 70 75 6c 43 6f 75 6e 74  ONG_PTR pulCount
ab60: 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72  ) {..int mutex_r
ab70: 65 74 76 61 6c 3b 0a 09 69 6e 74 20 70 63 73 63  etval;..int pcsc
ab80: 5f 63 6f 6e 6e 65 63 74 5f 72 65 74 3b 0a 09 43  _connect_ret;..C
ab90: 4b 5f 55 4c 4f 4e 47 20 63 6f 75 6e 74 2c 20 73  K_ULONG count, s
aba0: 6c 6f 74 5f 63 6f 75 6e 74 20 3d 20 30 2c 20 63  lot_count = 0, c
abb0: 75 72 72 73 6c 6f 74 3b 0a 09 63 68 61 72 20 2a  urrslot;..char *
abc0: 70 63 73 63 5f 72 65 61 64 65 72 73 2c 20 2a 70  pcsc_readers, *p
abd0: 63 73 63 5f 72 65 61 64 65 72 73 5f 73 2c 20 2a  csc_readers_s, *
abe0: 70 63 73 63 5f 72 65 61 64 65 72 73 5f 65 3b 0a  pcsc_readers_e;.
abf0: 09 44 57 4f 52 44 20 70 63 73 63 5f 72 65 61 64  .DWORD pcsc_read
ac00: 65 72 73 5f 6c 65 6e 3b 0a 09 4c 4f 4e 47 20 73  ers_len;..LONG s
ac10: 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73  card_listreaders
ac20: 5f 72 65 74 3b 0a 09 73 69 7a 65 5f 74 20 63 75  _ret;..size_t cu
ac30: 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e 3b 0a 0a  rr_reader_len;..
ac40: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
ac50: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b  INTF("Called.");
ac60: 0a 0a 09 69 66 20 28 70 75 6c 43 6f 75 6e 74 20  ...if (pulCount 
ac70: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43  == NULL) {...CAC
ac80: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
ac90: 28 22 45 72 72 6f 72 2e 20 70 75 6c 43 6f 75 6e  ("Error. pulCoun
aca0: 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09  t is NULL.");...
acb0: 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55  .return(CKR_ARGU
acc0: 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a  MENTS_BAD);..}..
acd0: 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69  .if (!cackey_ini
ace0: 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41  tialized) {...CA
acf0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
ad00: 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69  F("Error.  Not i
ad10: 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a  nitialized.");..
ad20: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59  ..return(CKR_CRY
ad30: 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41  PTOKI_NOT_INITIA
ad40: 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74  LIZED);..}...mut
ad50: 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b  ex_retval = cack
ad60: 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61  ey_mutex_lock(ca
ad70: 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09  ckey_biglock);..
ad80: 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c  if (mutex_retval
ad90: 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45   != 0) {...CACKE
ada0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
adb0: 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20  Error.  Locking 
adc0: 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65  failed.");....re
add0: 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c  turn(CKR_GENERAL
ade0: 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 2f 2a  _ERROR);..}.../*
adf0: 20 43 6c 65 61 72 20 6c 69 73 74 20 6f 66 20 73   Clear list of s
ae00: 6c 6f 74 73 20 2a 2f 0a 09 69 66 20 28 70 53 6c  lots */..if (pSl
ae10: 6f 74 4c 69 73 74 29 20 7b 0a 09 09 2f 2a 20 4f  otList) {.../* O
ae20: 6e 6c 79 20 75 70 64 61 74 65 20 74 68 65 20 6c  nly update the l
ae30: 69 73 74 20 6f 66 20 73 6c 6f 74 73 20 69 66 20  ist of slots if 
ae40: 77 65 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20  we are actually 
ae50: 62 65 69 6e 67 20 73 75 70 70 6c 79 20 74 68 65  being supply the
ae60: 20 73 6c 6f 74 20 69 6e 66 6f 72 6d 61 74 69 6f   slot informatio
ae70: 6e 20 2a 2f 0a 09 09 63 61 63 6b 65 79 5f 73 6c  n */...cackey_sl
ae80: 6f 74 73 5f 64 69 73 63 6f 6e 6e 65 63 74 5f 61  ots_disconnect_a
ae90: 6c 6c 28 29 3b 0a 0a 09 09 66 6f 72 20 28 63 75  ll();....for (cu
aea0: 72 72 73 6c 6f 74 20 3d 20 30 3b 20 63 75 72 72  rrslot = 0; curr
aeb0: 73 6c 6f 74 20 3c 20 28 73 69 7a 65 6f 66 28 63  slot < (sizeof(c
aec0: 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73  ackey_slots) / s
aed0: 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f  izeof(cackey_slo
aee0: 74 73 5b 30 5d 29 29 3b 20 63 75 72 72 73 6c 6f  ts[0])); currslo
aef0: 74 2b 2b 29 20 7b 0a 09 09 09 69 66 20 28 63 61  t++) {....if (ca
af00: 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73  ckey_slots[currs
af10: 6c 6f 74 5d 2e 70 63 73 63 5f 72 65 61 64 65 72  lot].pcsc_reader
af20: 29 20 7b 0a 09 09 09 09 66 72 65 65 28 63 61 63  ) {.....free(cac
af30: 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c  key_slots[currsl
af40: 6f 74 5d 2e 70 63 73 63 5f 72 65 61 64 65 72 29  ot].pcsc_reader)
af50: 3b 0a 0a 09 09 09 09 63 61 63 6b 65 79 5f 73 6c  ;......cackey_sl
af60: 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e 70 63  ots[currslot].pc
af70: 73 63 5f 72 65 61 64 65 72 20 3d 20 4e 55 4c 4c  sc_reader = NULL
af80: 3b 0a 09 09 09 7d 0a 0a 09 09 09 63 61 63 6b 65  ;....}.....cacke
af90: 79 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74  y_slots[currslot
afa0: 5d 2e 61 63 74 69 76 65 20 3d 20 30 3b 0a 09 09  ].active = 0;...
afb0: 7d 0a 09 7d 0a 0a 09 2f 2a 20 44 65 74 65 72 6d  }..}.../* Determ
afc0: 69 6e 65 20 6c 69 73 74 20 6f 66 20 72 65 61 64  ine list of read
afd0: 65 72 73 20 2a 2f 0a 09 70 63 73 63 5f 63 6f 6e  ers */..pcsc_con
afe0: 6e 65 63 74 5f 72 65 74 20 3d 20 63 61 63 6b 65  nect_ret = cacke
aff0: 79 5f 70 63 73 63 5f 63 6f 6e 6e 65 63 74 28 29  y_pcsc_connect()
b000: 3b 0a 09 69 66 20 28 70 63 73 63 5f 63 6f 6e 6e  ;..if (pcsc_conn
b010: 65 63 74 5f 72 65 74 20 3c 20 30 29 20 7b 0a 09  ect_ret < 0) {..
b020: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
b030: 49 4e 54 46 28 22 43 6f 6e 6e 65 63 74 69 6f 6e  INTF("Connection
b040: 20 74 6f 20 50 43 2f 53 43 20 66 61 69 6c 65 64   to PC/SC failed
b050: 2c 20 61 73 73 75 6d 69 6e 67 20 6e 6f 20 73 6c  , assuming no sl
b060: 6f 74 73 22 29 3b 0a 0a 09 09 73 6c 6f 74 5f 63  ots");....slot_c
b070: 6f 75 6e 74 20 3d 20 30 3b 0a 09 7d 20 65 6c 73  ount = 0;..} els
b080: 65 20 7b 0a 09 09 70 63 73 63 5f 72 65 61 64 65  e {...pcsc_reade
b090: 72 73 5f 6c 65 6e 20 3d 20 30 3b 0a 0a 09 09 73  rs_len = 0;....s
b0a0: 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73  card_listreaders
b0b0: 5f 72 65 74 20 3d 20 53 43 61 72 64 4c 69 73 74  _ret = SCardList
b0c0: 52 65 61 64 65 72 73 28 2a 63 61 63 6b 65 79 5f  Readers(*cackey_
b0d0: 70 63 73 63 5f 68 61 6e 64 6c 65 2c 20 4e 55 4c  pcsc_handle, NUL
b0e0: 4c 2c 20 4e 55 4c 4c 2c 20 26 70 63 73 63 5f 72  L, NULL, &pcsc_r
b0f0: 65 61 64 65 72 73 5f 6c 65 6e 29 3b 0a 09 09 69  eaders_len);...i
b100: 66 20 28 73 63 61 72 64 5f 6c 69 73 74 72 65 61  f (scard_listrea
b110: 64 65 72 73 5f 72 65 74 20 3d 3d 20 53 43 41 52  ders_ret == SCAR
b120: 44 5f 53 5f 53 55 43 43 45 53 53 20 26 26 20 70  D_S_SUCCESS && p
b130: 63 73 63 5f 72 65 61 64 65 72 73 5f 6c 65 6e 20  csc_readers_len 
b140: 21 3d 20 30 29 20 7b 0a 09 09 09 70 63 73 63 5f  != 0) {....pcsc_
b150: 72 65 61 64 65 72 73 20 3d 20 6d 61 6c 6c 6f 63  readers = malloc
b160: 28 70 63 73 63 5f 72 65 61 64 65 72 73 5f 6c 65  (pcsc_readers_le
b170: 6e 29 3b 0a 09 09 09 70 63 73 63 5f 72 65 61 64  n);....pcsc_read
b180: 65 72 73 5f 73 20 3d 20 70 63 73 63 5f 72 65 61  ers_s = pcsc_rea
b190: 64 65 72 73 3b 0a 0a 09 09 09 73 63 61 72 64 5f  ders;.....scard_
b1a0: 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65 74 20  listreaders_ret 
b1b0: 3d 20 53 43 61 72 64 4c 69 73 74 52 65 61 64 65  = SCardListReade
b1c0: 72 73 28 2a 63 61 63 6b 65 79 5f 70 63 73 63 5f  rs(*cackey_pcsc_
b1d0: 68 61 6e 64 6c 65 2c 20 4e 55 4c 4c 2c 20 70 63  handle, NULL, pc
b1e0: 73 63 5f 72 65 61 64 65 72 73 2c 20 26 70 63 73  sc_readers, &pcs
b1f0: 63 5f 72 65 61 64 65 72 73 5f 6c 65 6e 29 3b 0a  c_readers_len);.
b200: 09 09 09 69 66 20 28 73 63 61 72 64 5f 6c 69 73  ...if (scard_lis
b210: 74 72 65 61 64 65 72 73 5f 72 65 74 20 3d 3d 20  treaders_ret == 
b220: 53 43 41 52 44 5f 53 5f 53 55 43 43 45 53 53 29  SCARD_S_SUCCESS)
b230: 20 7b 0a 09 09 09 09 70 63 73 63 5f 72 65 61 64   {.....pcsc_read
b240: 65 72 73 5f 65 20 3d 20 70 63 73 63 5f 72 65 61  ers_e = pcsc_rea
b250: 64 65 72 73 20 2b 20 70 63 73 63 5f 72 65 61 64  ders + pcsc_read
b260: 65 72 73 5f 6c 65 6e 3b 0a 0a 09 09 09 09 63 75  ers_len;......cu
b270: 72 72 73 6c 6f 74 20 3d 20 30 3b 0a 09 09 09 09  rrslot = 0;.....
b280: 77 68 69 6c 65 20 28 70 63 73 63 5f 72 65 61 64  while (pcsc_read
b290: 65 72 73 20 3c 20 70 63 73 63 5f 72 65 61 64 65  ers < pcsc_reade
b2a0: 72 73 5f 65 29 20 7b 0a 09 09 09 09 09 63 75 72  rs_e) {......cur
b2b0: 72 5f 72 65 61 64 65 72 5f 6c 65 6e 20 3d 20 73  r_reader_len = s
b2c0: 74 72 6c 65 6e 28 70 63 73 63 5f 72 65 61 64 65  trlen(pcsc_reade
b2d0: 72 73 29 3b 0a 0a 09 09 09 09 09 69 66 20 28 28  rs);.......if ((
b2e0: 70 63 73 63 5f 72 65 61 64 65 72 73 20 2b 20 63  pcsc_readers + c
b2f0: 75 72 72 5f 72 65 61 64 65 72 5f 6c 65 6e 29 20  urr_reader_len) 
b300: 3e 20 70 63 73 63 5f 72 65 61 64 65 72 73 5f 65  > pcsc_readers_e
b310: 29 20 7b 0a 09 09 09 09 09 09 62 72 65 61 6b 3b  ) {.......break;
b320: 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 69 66  ......}.......if
b330: 20 28 63 75 72 72 5f 72 65 61 64 65 72 5f 6c 65   (curr_reader_le
b340: 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 09 09 09 09  n == 0) {.......
b350: 62 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a 0a 09  break;......}...
b360: 09 09 09 09 69 66 20 28 63 75 72 72 73 6c 6f 74  ....if (currslot
b370: 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b   >= (sizeof(cack
b380: 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73 69 7a 65  ey_slots) / size
b390: 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b  of(cackey_slots[
b3a0: 30 5d 29 29 29 20 7b 0a 09 09 09 09 09 09 43 41  0]))) {.......CA
b3b0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
b3c0: 46 28 22 46 6f 75 6e 64 20 6d 6f 72 65 20 72 65  F("Found more re
b3d0: 61 64 65 72 73 20 74 68 61 6e 20 73 6c 6f 74 73  aders than slots
b3e0: 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 21 22   are available!"
b3f0: 29 3b 0a 0a 09 09 09 09 09 09 62 72 65 61 6b 3b  );........break;
b400: 0a 09 09 09 09 09 7d 0a 0a 09 09 09 09 09 43 41  ......}.......CA
b410: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
b420: 46 28 22 46 6f 75 6e 64 20 72 65 61 64 65 72 3a  F("Found reader:
b430: 20 25 73 22 2c 20 70 63 73 63 5f 72 65 61 64 65   %s", pcsc_reade
b440: 72 73 29 3b 0a 0a 09 09 09 09 09 2f 2a 20 4f 6e  rs);......./* On
b450: 6c 79 20 75 70 64 61 74 65 20 74 68 65 20 6c 69  ly update the li
b460: 73 74 20 6f 66 20 73 6c 6f 74 73 20 69 66 20 77  st of slots if w
b470: 65 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 62  e are actually b
b480: 65 69 6e 67 20 73 75 70 70 6c 79 20 74 68 65 20  eing supply the 
b490: 73 6c 6f 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  slot information
b4a0: 20 2a 2f 0a 09 09 09 09 09 69 66 20 28 70 53 6c   */......if (pSl
b4b0: 6f 74 4c 69 73 74 29 20 7b 0a 09 09 09 09 09 09  otList) {.......
b4c0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 63 75 72  cackey_slots[cur
b4d0: 72 73 6c 6f 74 5d 2e 61 63 74 69 76 65 20 3d 20  rslot].active = 
b4e0: 31 3b 0a 09 09 09 09 09 09 63 61 63 6b 65 79 5f  1;.......cackey_
b4f0: 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d 2e  slots[currslot].
b500: 70 63 73 63 5f 72 65 61 64 65 72 20 3d 20 73 74  pcsc_reader = st
b510: 72 64 75 70 28 70 63 73 63 5f 72 65 61 64 65 72  rdup(pcsc_reader
b520: 73 29 3b 0a 09 09 09 09 09 09 63 61 63 6b 65 79  s);.......cackey
b530: 5f 73 6c 6f 74 73 5b 63 75 72 72 73 6c 6f 74 5d  _slots[currslot]
b540: 2e 70 63 73 63 5f 63 61 72 64 5f 63 6f 6e 6e 65  .pcsc_card_conne
b550: 63 74 65 64 20 3d 20 30 3b 0a 09 09 09 09 09 7d  cted = 0;......}
b560: 0a 09 09 09 09 09 63 75 72 72 73 6c 6f 74 2b 2b  ......currslot++
b570: 3b 0a 0a 09 09 09 09 09 70 63 73 63 5f 72 65 61  ;.......pcsc_rea
b580: 64 65 72 73 20 2b 3d 20 63 75 72 72 5f 72 65 61  ders += curr_rea
b590: 64 65 72 5f 6c 65 6e 20 2b 20 31 3b 0a 09 09 09  der_len + 1;....
b5a0: 09 7d 0a 0a 09 09 09 09 69 66 20 28 63 75 72 72  .}......if (curr
b5b0: 73 6c 6f 74 20 3e 20 30 29 20 7b 0a 09 09 09 09  slot > 0) {.....
b5c0: 09 73 6c 6f 74 5f 63 6f 75 6e 74 20 3d 20 63 75  .slot_count = cu
b5d0: 72 72 73 6c 6f 74 3b 0a 09 09 09 09 7d 0a 09 09  rrslot;.....}...
b5e0: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 43 41  .} else {.....CA
b5f0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
b600: 46 28 22 53 65 63 6f 6e 64 20 63 61 6c 6c 20 74  F("Second call t
b610: 6f 20 53 43 61 72 64 4c 69 73 74 52 65 61 64 65  o SCardListReade
b620: 72 73 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72  rs failed, retur
b630: 6e 20 25 73 2f 25 6c 69 22 2c 20 43 41 43 4b 45  n %s/%li", CACKE
b640: 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53 43 41  Y_DEBUG_FUNC_SCA
b650: 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73 63 61  RDERR_TO_STR(sca
b660: 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72  rd_listreaders_r
b670: 65 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63 61 72  et), (long) scar
b680: 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f 72 65  d_listreaders_re
b690: 74 29 3b 0a 09 09 09 7d 0a 0a 09 09 09 66 72 65  t);....}.....fre
b6a0: 65 28 70 63 73 63 5f 72 65 61 64 65 72 73 5f 73  e(pcsc_readers_s
b6b0: 29 3b 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09  );...} else {...
b6c0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
b6d0: 49 4e 54 46 28 22 46 69 72 73 74 20 63 61 6c 6c  INTF("First call
b6e0: 20 74 6f 20 53 43 61 72 64 4c 69 73 74 52 65 61   to SCardListRea
b6f0: 64 65 72 73 20 66 61 69 6c 65 64 2c 20 72 65 74  ders failed, ret
b700: 75 72 6e 20 25 73 2f 25 6c 69 22 2c 20 43 41 43  urn %s/%li", CAC
b710: 4b 45 59 5f 44 45 42 55 47 5f 46 55 4e 43 5f 53  KEY_DEBUG_FUNC_S
b720: 43 41 52 44 45 52 52 5f 54 4f 5f 53 54 52 28 73  CARDERR_TO_STR(s
b730: 63 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73  card_listreaders
b740: 5f 72 65 74 29 2c 20 28 6c 6f 6e 67 29 20 73 63  _ret), (long) sc
b750: 61 72 64 5f 6c 69 73 74 72 65 61 64 65 72 73 5f  ard_listreaders_
b760: 72 65 74 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 6d  ret);...}..}...m
b770: 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61  utex_retval = ca
b780: 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63  ckey_mutex_unloc
b790: 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b  k(cackey_biglock
b7a0: 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65  );..if (mutex_re
b7b0: 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43  tval != 0) {...C
b7c0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
b7d0: 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f  TF("Error.  Unlo
b7e0: 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b  cking failed.");
b7f0: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47  ....return(CKR_G
b800: 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09  ENERAL_ERROR);..
b810: 7d 0a 0a 09 69 66 20 28 70 53 6c 6f 74 4c 69 73  }...if (pSlotLis
b820: 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 2a  t == NULL) {...*
b830: 70 75 6c 43 6f 75 6e 74 20 3d 20 73 6c 6f 74 5f  pulCount = slot_
b840: 63 6f 75 6e 74 3b 0a 0a 09 09 43 41 43 4b 45 59  count;....CACKEY
b850: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52  _DEBUG_PRINTF("R
b860: 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20  eturning CKR_OK 
b870: 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a  (%i)", CKR_OK);.
b880: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b  ...return(CKR_OK
b890: 29 3b 0a 09 7d 0a 0a 09 63 6f 75 6e 74 20 3d 20  );..}...count = 
b8a0: 2a 70 75 6c 43 6f 75 6e 74 3b 0a 09 69 66 20 28  *pulCount;..if (
b8b0: 63 6f 75 6e 74 20 3c 20 73 6c 6f 74 5f 63 6f 75  count < slot_cou
b8c0: 6e 74 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  nt) {...CACKEY_D
b8d0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
b8e0: 6f 72 2e 20 55 73 65 72 20 61 6c 6c 6f 63 61 74  or. User allocat
b8f0: 65 64 20 25 6c 75 20 65 6e 74 72 69 65 73 2c 20  ed %lu entries, 
b900: 62 75 74 20 77 65 20 68 61 76 65 20 25 6c 75 20  but we have %lu 
b910: 65 6e 74 72 69 65 73 2e 22 2c 20 63 6f 75 6e 74  entries.", count
b920: 2c 20 73 6c 6f 74 5f 63 6f 75 6e 74 29 3b 0a 0a  , slot_count);..
b930: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 42 55 46  ..return(CKR_BUF
b940: 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 29 3b 09  FER_TOO_SMALL);.
b950: 0a 09 7d 0a 0a 09 66 6f 72 20 28 63 75 72 72 73  ..}...for (currs
b960: 6c 6f 74 20 3d 20 30 3b 20 63 75 72 72 73 6c 6f  lot = 0; currslo
b970: 74 20 3c 20 73 6c 6f 74 5f 63 6f 75 6e 74 3b 20  t < slot_count; 
b980: 63 75 72 72 73 6c 6f 74 2b 2b 29 20 7b 0a 09 09  currslot++) {...
b990: 70 53 6c 6f 74 4c 69 73 74 5b 63 75 72 72 73 6c  pSlotList[currsl
b9a0: 6f 74 5d 20 3d 20 63 75 72 72 73 6c 6f 74 3b 0a  ot] = currslot;.
b9b0: 09 7d 0a 0a 09 2a 70 75 6c 43 6f 75 6e 74 20 3d  .}...*pulCount =
b9c0: 20 73 6c 6f 74 5f 63 6f 75 6e 74 3b 0a 0a 09 43   slot_count;...C
b9d0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
b9e0: 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b  TF("Returning CK
b9f0: 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f  R_OK (%i)", CKR_
ba00: 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b  OK);...return(CK
ba10: 52 5f 4f 4b 29 3b 0a 0a 09 74 6f 6b 65 6e 50 72  R_OK);...tokenPr
ba20: 65 73 65 6e 74 20 3d 20 74 6f 6b 65 6e 50 72 65  esent = tokenPre
ba30: 73 65 6e 74 3b 20 2f 2a 20 53 75 70 72 65 73 73  sent; /* Supress
ba40: 20 75 6e 75 73 65 64 20 76 61 72 69 61 62 6c 65   unused variable
ba50: 20 77 61 72 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 43   warning */.}..C
ba60: 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f  K_DEFINE_FUNCTIO
ba70: 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 53 6c  N(CK_RV, C_GetSl
ba80: 6f 74 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f  otInfo)(CK_SLOT_
ba90: 49 44 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 53 4c  ID slotID, CK_SL
baa0: 4f 54 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66  OT_INFO_PTR pInf
bab0: 6f 29 20 7b 0a 09 73 74 61 74 69 63 20 43 4b 5f  o) {..static CK_
bac0: 55 54 46 38 43 48 41 52 20 73 6c 6f 74 44 65 73  UTF8CHAR slotDes
bad0: 63 72 69 70 74 69 6f 6e 5b 5d 20 3d 20 22 43 41  cription[] = "CA
bae0: 43 4b 65 79 20 53 6c 6f 74 22 3b 0a 09 69 6e 74  CKey Slot";..int
baf0: 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79 3b 0a   bytes_to_copy;.
bb00: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
bb10: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29  RINTF("Called.")
bb20: 3b 0a 0a 09 69 66 20 28 70 49 6e 66 6f 20 3d 3d  ;...if (pInfo ==
bb30: 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45   NULL) {...CACKE
bb40: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
bb50: 45 72 72 6f 72 2e 20 70 49 6e 66 6f 20 69 73 20  Error. pInfo is 
bb60: 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75  NULL.");....retu
bb70: 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53  rn(CKR_ARGUMENTS
bb80: 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28  _BAD);..}...if (
bb90: 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c  slotID < 0 || sl
bba0: 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28  otID >= (sizeof(
bbb0: 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20  cackey_slots) / 
bbc0: 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c  sizeof(cackey_sl
bbd0: 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41  ots[0]))) {...CA
bbe0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
bbf0: 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c 69  F("Error. Invali
bc00: 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64  d slot requested
bc10: 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 20   (%lu), outside 
bc20: 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22 2c  of valid range",
bc30: 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74   slotID);....ret
bc40: 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f  urn(CKR_SLOT_ID_
bc50: 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69  INVALID);..}...i
bc60: 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b  f (cackey_slots[
bc70: 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 3d  slotID].active =
bc80: 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  = 0) {...CACKEY_
bc90: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
bca0: 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f  ror. Invalid slo
bcb0: 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75  t requested (%lu
bcc0: 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 72  ), slot not curr
bcd0: 65 6e 74 6c 79 20 61 63 74 69 76 65 22 2c 20 73  ently active", s
bce0: 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 72  lotID);....retur
bcf0: 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e  n(CKR_SLOT_ID_IN
bd00: 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20  VALID);..}...if 
bd10: 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c  (!cackey_initial
bd20: 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59  ized) {...CACKEY
bd30: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
bd40: 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69  rror.  Not initi
bd50: 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65  alized.");....re
bd60: 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b  turn(CKR_CRYPTOK
bd70: 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45  I_NOT_INITIALIZE
bd80: 44 29 3b 0a 09 7d 0a 0a 09 6d 65 6d 73 65 74 28  D);..}...memset(
bd90: 70 49 6e 66 6f 2d 3e 73 6c 6f 74 44 65 73 63 72  pInfo->slotDescr
bda0: 69 70 74 69 6f 6e 2c 20 27 20 27 2c 20 73 69 7a  iption, ' ', siz
bdb0: 65 6f 66 28 70 49 6e 66 6f 2d 3e 73 6c 6f 74 44  eof(pInfo->slotD
bdc0: 65 73 63 72 69 70 74 69 6f 6e 29 29 3b 0a 09 6d  escription));..m
bdd0: 65 6d 63 70 79 28 70 49 6e 66 6f 2d 3e 73 6c 6f  emcpy(pInfo->slo
bde0: 74 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 73 6c  tDescription, sl
bdf0: 6f 74 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 73  otDescription, s
be00: 69 7a 65 6f 66 28 73 6c 6f 74 44 65 73 63 72 69  izeof(slotDescri
be10: 70 74 69 6f 6e 29 20 2d 20 31 29 3b 0a 0a 09 6d  ption) - 1);...m
be20: 65 6d 73 65 74 28 70 49 6e 66 6f 2d 3e 6d 61 6e  emset(pInfo->man
be30: 75 66 61 63 74 75 72 65 72 49 44 2c 20 27 20 27  ufacturerID, ' '
be40: 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e  , sizeof(pInfo->
be50: 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 29 29  manufacturerID))
be60: 3b 0a 0a 09 62 79 74 65 73 5f 74 6f 5f 63 6f 70  ;...bytes_to_cop
be70: 79 20 3d 20 73 74 72 6c 65 6e 28 63 61 63 6b 65  y = strlen(cacke
be80: 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e  y_slots[slotID].
be90: 70 63 73 63 5f 72 65 61 64 65 72 29 3b 0a 09 69  pcsc_reader);..i
bea0: 66 20 28 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d  f (sizeof(pInfo-
beb0: 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 29  >manufacturerID)
bec0: 20 3c 20 62 79 74 65 73 5f 74 6f 5f 63 6f 70 79   < bytes_to_copy
bed0: 29 20 7b 0a 09 09 62 79 74 65 73 5f 74 6f 5f 63  ) {...bytes_to_c
bee0: 6f 70 79 20 3d 20 73 69 7a 65 6f 66 28 70 49 6e  opy = sizeof(pIn
bef0: 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72  fo->manufacturer
bf00: 49 44 29 3b 0a 09 7d 0a 09 6d 65 6d 63 70 79 28  ID);..}..memcpy(
bf10: 70 49 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75  pInfo->manufactu
bf20: 72 65 72 49 44 2c 20 63 61 63 6b 65 79 5f 73 6c  rerID, cackey_sl
bf30: 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 70 63 73 63  ots[slotID].pcsc
bf40: 5f 72 65 61 64 65 72 2c 20 62 79 74 65 73 5f 74  _reader, bytes_t
bf50: 6f 5f 63 6f 70 79 29 3b 0a 0a 09 70 49 6e 66 6f  o_copy);...pInfo
bf60: 2d 3e 66 6c 61 67 73 20 3d 20 30 3b 0a 0a 09 69  ->flags = 0;...i
bf70: 66 20 28 63 61 63 6b 65 79 5f 74 6f 6b 65 6e 5f  f (cackey_token_
bf80: 70 72 65 73 65 6e 74 28 26 63 61 63 6b 65 79 5f  present(&cackey_
bf90: 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 29 29 20  slots[slotID])) 
bfa0: 7b 0a 09 09 70 49 6e 66 6f 2d 3e 66 6c 61 67 73  {...pInfo->flags
bfb0: 20 7c 3d 20 43 4b 46 5f 54 4f 4b 45 4e 5f 50 52   |= CKF_TOKEN_PR
bfc0: 45 53 45 4e 54 3b 0a 09 7d 0a 0a 09 70 49 6e 66  ESENT;..}...pInf
bfd0: 6f 2d 3e 68 61 72 64 77 61 72 65 56 65 72 73 69  o->hardwareVersi
bfe0: 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28 63 61 63 6b  on.major = (cack
bff0: 65 79 5f 67 65 74 76 65 72 73 69 6f 6e 28 29 20  ey_getversion() 
c000: 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b 0a 09  >> 16) & 0xff;..
c010: 70 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72 65 56  pInfo->hardwareV
c020: 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28  ersion.minor = (
c030: 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 6f  cackey_getversio
c040: 6e 28 29 20 3e 3e 20 38 29 20 26 20 30 78 66 66  n() >> 8) & 0xff
c050: 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 66 69 72 6d 77  ;...pInfo->firmw
c060: 61 72 65 56 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72  areVersion.major
c070: 20 3d 20 30 78 30 30 3b 0a 09 70 49 6e 66 6f 2d   = 0x00;..pInfo-
c080: 3e 66 69 72 6d 77 61 72 65 56 65 72 73 69 6f 6e  >firmwareVersion
c090: 2e 6d 69 6e 6f 72 20 3d 20 30 78 30 30 3b 0a 0a  .minor = 0x00;..
c0a0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
c0b0: 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20  INTF("Returning 
c0c0: 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b  CKR_OK (%i)", CK
c0d0: 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28  R_OK);...return(
c0e0: 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44  CKR_OK);.}..CK_D
c0f0: 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43  EFINE_FUNCTION(C
c100: 4b 5f 52 56 2c 20 43 5f 47 65 74 54 6f 6b 65 6e  K_RV, C_GetToken
c110: 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f 49 44  Info)(CK_SLOT_ID
c120: 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 54 4f 4b 45   slotID, CK_TOKE
c130: 4e 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f  N_INFO_PTR pInfo
c140: 29 20 7b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55  ) {..static CK_U
c150: 54 46 38 43 48 41 52 20 6d 61 6e 75 66 61 63 74  TF8CHAR manufact
c160: 75 72 65 72 49 44 5b 5d 20 3d 20 22 55 2e 53 2e  urerID[] = "U.S.
c170: 20 47 6f 76 65 72 6e 6d 65 6e 74 22 3b 0a 09 73   Government";..s
c180: 74 61 74 69 63 20 43 4b 5f 55 54 46 38 43 48 41  tatic CK_UTF8CHA
c190: 52 20 64 65 66 61 75 6c 74 4c 61 62 65 6c 5b 5d  R defaultLabel[]
c1a0: 20 3d 20 22 55 6e 6b 6e 6f 77 6e 20 54 6f 6b 65   = "Unknown Toke
c1b0: 6e 22 3b 0a 09 73 74 61 74 69 63 20 43 4b 5f 55  n";..static CK_U
c1c0: 54 46 38 43 48 41 52 20 6d 6f 64 65 6c 5b 5d 20  TF8CHAR model[] 
c1d0: 3d 20 22 43 41 43 20 54 6f 6b 65 6e 22 3b 0a 0a  = "CAC Token";..
c1e0: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
c1f0: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b  INTF("Called.");
c200: 0a 0a 09 69 66 20 28 70 49 6e 66 6f 20 3d 3d 20  ...if (pInfo == 
c210: 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59  NULL) {...CACKEY
c220: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
c230: 72 72 6f 72 2e 20 70 49 6e 66 6f 20 69 73 20 4e  rror. pInfo is N
c240: 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72  ULL.");....retur
c250: 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53 5f  n(CKR_ARGUMENTS_
c260: 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 73  BAD);..}...if (s
c270: 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73 6c 6f  lotID < 0 || slo
c280: 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63  tID >= (sizeof(c
c290: 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f 20 73  ackey_slots) / s
c2a0: 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c 6f  izeof(cackey_slo
c2b0: 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43  ts[0]))) {...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 49 6e 76 61 6c 69 64  ("Error. Invalid
c2e0: 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65 64 20   slot requested 
c2f0: 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65 20 6f  (%lu), outside o
c300: 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22 2c 20  f valid range", 
c310: 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75  slotID);....retu
c320: 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49  rn(CKR_SLOT_ID_I
c330: 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66  NVALID);..}...if
c340: 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 73   (cackey_slots[s
c350: 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 20 3d 3d  lotID].active ==
c360: 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44   0) {...CACKEY_D
c370: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
c380: 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74  or. Invalid slot
c390: 20 72 65 71 75 65 73 74 65 64 20 28 25 6c 75 29   requested (%lu)
c3a0: 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72 72 65  , slot not curre
c3b0: 6e 74 6c 79 20 61 63 74 69 76 65 22 2c 20 73 6c  ntly active", sl
c3c0: 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75 72 6e  otID);....return
c3d0: 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49 4e 56  (CKR_SLOT_ID_INV
c3e0: 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28  ALID);..}...if (
c3f0: 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69  !cackey_initiali
c400: 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  zed) {...CACKEY_
c410: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
c420: 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61  ror.  Not initia
c430: 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  lized.");....ret
c440: 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49  urn(CKR_CRYPTOKI
c450: 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
c460: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63  );..}...if (!cac
c470: 6b 65 79 5f 74 6f 6b 65 6e 5f 70 72 65 73 65 6e  key_token_presen
c480: 74 28 26 63 61 63 6b 65 79 5f 73 6c 6f 74 73 5b  t(&cackey_slots[
c490: 73 6c 6f 74 49 44 5d 29 29 20 7b 0a 09 09 43 41  slotID])) {...CA
c4a0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
c4b0: 46 28 22 4e 6f 20 74 6f 6b 65 6e 20 69 73 20 70  F("No token is p
c4c0: 72 65 73 65 6e 74 20 69 6e 20 73 6c 6f 74 49 44  resent in slotID
c4d0: 20 3d 20 25 6c 75 22 2c 20 73 6c 6f 74 49 44 29   = %lu", slotID)
c4e0: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  ;....return(CKR_
c4f0: 54 4f 4b 45 4e 5f 4e 4f 54 5f 50 52 45 53 45 4e  TOKEN_NOT_PRESEN
c500: 54 29 3b 0a 09 7d 0a 0a 09 6d 65 6d 73 65 74 28  T);..}...memset(
c510: 70 49 6e 66 6f 2d 3e 6c 61 62 65 6c 2c 20 27 20  pInfo->label, ' 
c520: 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66 6f 2d  ', sizeof(pInfo-
c530: 3e 6c 61 62 65 6c 29 29 3b 0a 09 69 66 20 28 31  >label));..if (1
c540: 29 20 7b 0a 09 09 6d 65 6d 63 70 79 28 70 49 6e  ) {...memcpy(pIn
c550: 66 6f 2d 3e 6c 61 62 65 6c 2c 20 64 65 66 61 75  fo->label, defau
c560: 6c 74 4c 61 62 65 6c 2c 20 73 69 7a 65 6f 66 28  ltLabel, sizeof(
c570: 64 65 66 61 75 6c 74 4c 61 62 65 6c 29 20 2d 20  defaultLabel) - 
c580: 31 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 7d  1);..} else {..}
c590: 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f 2d  ...memset(pInfo-
c5a0: 3e 6d 61 6e 75 66 61 63 74 75 72 65 72 49 44 2c  >manufacturerID,
c5b0: 20 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e   ' ', sizeof(pIn
c5c0: 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65 72  fo->manufacturer
c5d0: 49 44 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49  ID));..memcpy(pI
c5e0: 6e 66 6f 2d 3e 6d 61 6e 75 66 61 63 74 75 72 65  nfo->manufacture
c5f0: 72 49 44 2c 20 6d 61 6e 75 66 61 63 74 75 72 65  rID, manufacture
c600: 72 49 44 2c 20 73 69 7a 65 6f 66 28 6d 61 6e 75  rID, sizeof(manu
c610: 66 61 63 74 75 72 65 72 49 44 29 20 2d 20 31 29  facturerID) - 1)
c620: 3b 0a 0a 09 6d 65 6d 73 65 74 28 70 49 6e 66 6f  ;...memset(pInfo
c630: 2d 3e 6d 6f 64 65 6c 2c 20 27 20 27 2c 20 73 69  ->model, ' ', si
c640: 7a 65 6f 66 28 70 49 6e 66 6f 2d 3e 6d 6f 64 65  zeof(pInfo->mode
c650: 6c 29 29 3b 0a 09 6d 65 6d 63 70 79 28 70 49 6e  l));..memcpy(pIn
c660: 66 6f 2d 3e 6d 6f 64 65 6c 2c 20 6d 6f 64 65 6c  fo->model, model
c670: 2c 20 73 69 7a 65 6f 66 28 6d 6f 64 65 6c 29 20  , sizeof(model) 
c680: 2d 20 31 29 3b 0a 0a 09 6d 65 6d 73 65 74 28 70  - 1);...memset(p
c690: 49 6e 66 6f 2d 3e 73 65 72 69 61 6c 4e 75 6d 62  Info->serialNumb
c6a0: 65 72 2c 20 27 20 27 2c 20 73 69 7a 65 6f 66 28  er, ' ', sizeof(
c6b0: 70 49 6e 66 6f 2d 3e 73 65 72 69 61 6c 4e 75 6d  pInfo->serialNum
c6c0: 62 65 72 29 29 3b 0a 0a 09 6d 65 6d 73 65 74 28  ber));...memset(
c6d0: 70 49 6e 66 6f 2d 3e 75 74 63 54 69 6d 65 2c 20  pInfo->utcTime, 
c6e0: 27 20 27 2c 20 73 69 7a 65 6f 66 28 70 49 6e 66  ' ', sizeof(pInf
c6f0: 6f 2d 3e 75 74 63 54 69 6d 65 29 29 3b 0a 0a 09  o->utcTime));...
c700: 70 49 6e 66 6f 2d 3e 68 61 72 64 77 61 72 65 56  pInfo->hardwareV
c710: 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20 28  ersion.major = (
c720: 63 61 63 6b 65 79 5f 67 65 74 76 65 72 73 69 6f  cackey_getversio
c730: 6e 28 29 20 3e 3e 20 31 36 29 20 26 20 30 78 66  n() >> 16) & 0xf
c740: 66 3b 0a 09 70 49 6e 66 6f 2d 3e 68 61 72 64 77  f;..pInfo->hardw
c750: 61 72 65 56 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72  areVersion.minor
c760: 20 3d 20 28 63 61 63 6b 65 79 5f 67 65 74 76 65   = (cackey_getve
c770: 72 73 69 6f 6e 28 29 20 3e 3e 20 38 29 20 26 20  rsion() >> 8) & 
c780: 30 78 66 66 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 66  0xff;...pInfo->f
c790: 69 72 6d 77 61 72 65 56 65 72 73 69 6f 6e 2e 6d  irmwareVersion.m
c7a0: 61 6a 6f 72 20 3d 20 30 78 30 30 3b 0a 09 70 49  ajor = 0x00;..pI
c7b0: 6e 66 6f 2d 3e 66 69 72 6d 77 61 72 65 56 65 72  nfo->firmwareVer
c7c0: 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 30 78 30  sion.minor = 0x0
c7d0: 30 3b 0a 0a 09 70 49 6e 66 6f 2d 3e 66 6c 61 67  0;...pInfo->flag
c7e0: 73 20 3d 20 43 4b 46 5f 57 52 49 54 45 5f 50 52  s = CKF_WRITE_PR
c7f0: 4f 54 45 43 54 45 44 20 7c 20 43 4b 46 5f 55 53  OTECTED | CKF_US
c800: 45 52 5f 50 49 4e 5f 49 4e 49 54 49 41 4c 49 5a  ER_PIN_INITIALIZ
c810: 45 44 20 7c 20 43 4b 46 5f 54 4f 4b 45 4e 5f 49  ED | CKF_TOKEN_I
c820: 4e 49 54 49 41 4c 49 5a 45 44 3b 0a 0a 09 70 49  NITIALIZED;...pI
c830: 6e 66 6f 2d 3e 75 6c 4d 61 78 53 65 73 73 69 6f  nfo->ulMaxSessio
c840: 6e 43 6f 75 6e 74 20 3d 20 28 73 69 7a 65 6f 66  nCount = (sizeof
c850: 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  (cackey_sessions
c860: 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65  ) / sizeof(cacke
c870: 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 20  y_sessions[0])) 
c880: 2d 20 31 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 53  - 1;..pInfo->ulS
c890: 65 73 73 69 6f 6e 43 6f 75 6e 74 20 3d 20 43 4b  essionCount = CK
c8a0: 5f 55 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e 46  _UNAVAILABLE_INF
c8b0: 4f 52 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f  ORMATION;..pInfo
c8c0: 2d 3e 75 6c 4d 61 78 52 77 53 65 73 73 69 6f 6e  ->ulMaxRwSession
c8d0: 43 6f 75 6e 74 20 3d 20 30 3b 0a 09 70 49 6e 66  Count = 0;..pInf
c8e0: 6f 2d 3e 75 6c 52 77 53 65 73 73 69 6f 6e 43 6f  o->ulRwSessionCo
c8f0: 75 6e 74 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c  unt = CK_UNAVAIL
c900: 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e  ABLE_INFORMATION
c910: 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 50  ;..pInfo->ulMaxP
c920: 69 6e 4c 65 6e 20 3d 20 31 32 38 3b 0a 09 70 49  inLen = 128;..pI
c930: 6e 66 6f 2d 3e 75 6c 4d 69 6e 50 69 6e 4c 65 6e  nfo->ulMinPinLen
c940: 20 3d 20 30 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c   = 0;..pInfo->ul
c950: 54 6f 74 61 6c 50 75 62 6c 69 63 4d 65 6d 6f 72  TotalPublicMemor
c960: 79 20 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42  y = CK_UNAVAILAB
c970: 4c 45 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a  LE_INFORMATION;.
c980: 09 70 49 6e 66 6f 2d 3e 75 6c 46 72 65 65 50 75  .pInfo->ulFreePu
c990: 62 6c 69 63 4d 65 6d 6f 72 79 20 3d 20 43 4b 5f  blicMemory = CK_
c9a0: 55 4e 41 56 41 49 4c 41 42 4c 45 5f 49 4e 46 4f  UNAVAILABLE_INFO
c9b0: 52 4d 41 54 49 4f 4e 3b 0a 09 70 49 6e 66 6f 2d  RMATION;..pInfo-
c9c0: 3e 75 6c 54 6f 74 61 6c 50 72 69 76 61 74 65 4d  >ulTotalPrivateM
c9d0: 65 6d 6f 72 79 20 3d 20 43 4b 5f 55 4e 41 56 41  emory = CK_UNAVA
c9e0: 49 4c 41 42 4c 45 5f 49 4e 46 4f 52 4d 41 54 49  ILABLE_INFORMATI
c9f0: 4f 4e 3b 0a 09 70 49 6e 66 6f 2d 3e 75 6c 46 72  ON;..pInfo->ulFr
ca00: 65 65 50 72 69 76 61 74 65 4d 65 6d 6f 72 79 20  eePrivateMemory 
ca10: 3d 20 43 4b 5f 55 4e 41 56 41 49 4c 41 42 4c 45  = CK_UNAVAILABLE
ca20: 5f 49 4e 46 4f 52 4d 41 54 49 4f 4e 3b 0a 0a 09  _INFORMATION;...
ca30: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
ca40: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43  NTF("Returning C
ca50: 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52  KR_OK (%i)", CKR
ca60: 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  _OK);...return(C
ca70: 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45  KR_OK);.}..CK_DE
ca80: 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b  FINE_FUNCTION(CK
ca90: 5f 52 56 2c 20 43 5f 57 61 69 74 46 6f 72 53 6c  _RV, C_WaitForSl
caa0: 6f 74 45 76 65 6e 74 29 28 43 4b 5f 46 4c 41 47  otEvent)(CK_FLAG
cab0: 53 20 66 6c 61 67 73 2c 20 43 4b 5f 53 4c 4f 54  S flags, CK_SLOT
cac0: 5f 49 44 5f 50 54 52 20 70 53 6c 6f 74 49 44 2c  _ID_PTR pSlotID,
cad0: 20 43 4b 5f 56 4f 49 44 5f 50 54 52 20 70 52 65   CK_VOID_PTR pRe
cae0: 73 65 72 76 65 64 29 20 7b 0a 09 43 41 43 4b 45  served) {..CACKE
caf0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
cb00: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20  Called.");...if 
cb10: 28 70 52 65 73 65 72 76 65 64 20 21 3d 20 4e 55  (pReserved != NU
cb20: 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  LL) {...CACKEY_D
cb30: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
cb40: 6f 72 2e 20 70 52 65 73 65 72 76 65 64 20 69 73  or. pReserved is
cb50: 20 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09   not NULL.");...
cb60: 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55  .return(CKR_ARGU
cb70: 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a  MENTS_BAD);..}..
cb80: 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69  .if (!cackey_ini
cb90: 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41  tialized) {...CA
cba0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
cbb0: 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69  F("Error.  Not i
cbc0: 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a  nitialized.");..
cbd0: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59  ..return(CKR_CRY
cbe0: 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41  PTOKI_NOT_INITIA
cbf0: 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43  LIZED);..}...CAC
cc00: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
cc10: 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f  ("Returning CKR_
cc20: 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
cc30: 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b  PORTED (%i)", CK
cc40: 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53  R_FUNCTION_NOT_S
cc50: 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74  UPPORTED);...ret
cc60: 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  urn(CKR_FUNCTION
cc70: 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b  _NOT_SUPPORTED);
cc80: 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55  .}..CK_DEFINE_FU
cc90: 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f  NCTION(CK_RV, C_
cca0: 47 65 74 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74  GetMechanismList
ccb0: 29 28 43 4b 5f 53 4c 4f 54 5f 49 44 20 73 6c 6f  )(CK_SLOT_ID slo
ccc0: 74 49 44 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53  tID, CK_MECHANIS
ccd0: 4d 5f 54 59 50 45 5f 50 54 52 20 70 4d 65 63 68  M_TYPE_PTR pMech
cce0: 61 6e 69 73 6d 4c 69 73 74 2c 20 43 4b 5f 55 4c  anismList, CK_UL
ccf0: 4f 4e 47 5f 50 54 52 20 70 75 6c 43 6f 75 6e 74  ONG_PTR pulCount
cd00: 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  ) {..CACKEY_DEBU
cd10: 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64  G_PRINTF("Called
cd20: 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b  .");...if (!cack
cd30: 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20  ey_initialized) 
cd40: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
cd50: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
cd60: 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64   Not initialized
cd70: 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  .");....return(C
cd80: 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f  KR_CRYPTOKI_NOT_
cd90: 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d  INITIALIZED);..}
cda0: 0a 0a 09 69 66 20 28 70 75 6c 43 6f 75 6e 74 20  ...if (pulCount 
cdb0: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43  == NULL) {...CAC
cdc0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
cdd0: 28 22 45 72 72 6f 72 2e 20 20 70 75 6c 43 6f 75  ("Error.  pulCou
cde0: 6e 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a  nt is NULL.");..
cdf0: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47  ..return(CKR_ARG
ce00: 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a  UMENTS_BAD);..}.
ce10: 0a 09 69 66 20 28 70 4d 65 63 68 61 6e 69 73 6d  ..if (pMechanism
ce20: 4c 69 73 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  List == NULL) {.
ce30: 09 09 2a 70 75 6c 43 6f 75 6e 74 20 3d 20 33 3b  ..*pulCount = 3;
ce40: 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
ce50: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69  _PRINTF("Returni
ce60: 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c  ng CKR_OK (%i)",
ce70: 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74   CKR_OK);....ret
ce80: 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a  urn(CKR_OK);..}.
ce90: 0a 09 69 66 20 28 2a 70 75 6c 43 6f 75 6e 74 20  ..if (*pulCount 
cea0: 3c 20 33 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  < 3) {...CACKEY_
ceb0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
cec0: 72 6f 72 2e 20 20 42 75 66 66 65 72 20 74 6f 6f  ror.  Buffer too
ced0: 20 73 6d 61 6c 6c 2e 22 29 3b 0a 0a 09 09 72 65   small.");....re
cee0: 74 75 72 6e 28 43 4b 52 5f 42 55 46 46 45 52 5f  turn(CKR_BUFFER_
cef0: 54 4f 4f 5f 53 4d 41 4c 4c 29 3b 0a 09 7d 0a 0a  TOO_SMALL);..}..
cf00: 09 70 4d 65 63 68 61 6e 69 73 6d 4c 69 73 74 5b  .pMechanismList[
cf10: 30 5d 20 3d 20 43 4b 4d 5f 52 53 41 5f 50 4b 43  0] = CKM_RSA_PKC
cf20: 53 3b 0a 09 70 4d 65 63 68 61 6e 69 73 6d 4c 69  S;..pMechanismLi
cf30: 73 74 5b 31 5d 20 3d 20 43 4b 4d 5f 53 48 41 31  st[1] = CKM_SHA1
cf40: 5f 52 53 41 5f 50 4b 43 53 3b 0a 09 2a 70 75 6c  _RSA_PKCS;..*pul
cf50: 43 6f 75 6e 74 20 3d 20 32 3b 0a 0a 09 43 41 43  Count = 2;...CAC
cf60: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
cf70: 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f  ("Returning CKR_
cf80: 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b  OK (%i)", CKR_OK
cf90: 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f  );...return(CKR_
cfa0: 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e  OK);.}..CK_DEFIN
cfb0: 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56  E_FUNCTION(CK_RV
cfc0: 2c 20 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 6d  , C_GetMechanism
cfd0: 49 6e 66 6f 29 28 43 4b 5f 53 4c 4f 54 5f 49 44  Info)(CK_SLOT_ID
cfe0: 20 73 6c 6f 74 49 44 2c 20 43 4b 5f 4d 45 43 48   slotID, CK_MECH
cff0: 41 4e 49 53 4d 5f 54 59 50 45 20 74 79 70 65 2c  ANISM_TYPE type,
d000: 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 49 4e   CK_MECHANISM_IN
d010: 46 4f 5f 50 54 52 20 70 49 6e 66 6f 29 20 7b 0a  FO_PTR pInfo) {.
d020: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
d030: 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b  INTF("Called.");
d040: 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 3c 20  ...if (slotID < 
d050: 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20 28  0 || slotID >= (
d060: 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 6c  sizeof(cackey_sl
d070: 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61  ots) / sizeof(ca
d080: 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29 29  ckey_slots[0])))
d090: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
d0a0: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
d0b0: 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72 65   Invalid slot re
d0c0: 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20 6f  quested (%lu), o
d0d0: 75 74 73 69 64 65 20 6f 66 20 76 61 6c 69 64 20  utside of valid 
d0e0: 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29 3b  range", slotID);
d0f0: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53  ....return(CKR_S
d100: 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b  LOT_ID_INVALID);
d110: 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65 79  ..}...if (cackey
d120: 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e 61  _slots[slotID].a
d130: 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a 09 09  ctive == 0) {...
d140: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
d150: 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61  NTF("Error. Inva
d160: 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74  lid slot request
d170: 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 20 6e  ed (%lu), slot n
d180: 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74  ot currently act
d190: 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a  ive", slotID);..
d1a0: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c 4f  ..return(CKR_SLO
d1b0: 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a 09  T_ID_INVALID);..
d1c0: 7d 0a 0a 09 69 66 20 28 70 49 6e 66 6f 20 3d 3d  }...if (pInfo ==
d1d0: 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45   NULL) {...CACKE
d1e0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
d1f0: 45 72 72 6f 72 2e 20 70 49 6e 66 6f 20 69 73 20  Error. pInfo is 
d200: 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65 74 75  NULL.");....retu
d210: 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54 53  rn(CKR_ARGUMENTS
d220: 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28  _BAD);..}...if (
d230: 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69  !cackey_initiali
d240: 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  zed) {...CACKEY_
d250: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
d260: 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61  ror.  Not initia
d270: 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  lized.");....ret
d280: 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49  urn(CKR_CRYPTOKI
d290: 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
d2a0: 29 3b 0a 09 7d 0a 0a 09 2f 2a 20 58 58 58 3a 20  );..}.../* XXX: 
d2b0: 54 68 69 73 20 69 73 20 75 6e 74 65 73 74 65 64  This is untested
d2c0: 2c 20 61 6e 64 20 66 75 72 74 68 65 72 20 49 27  , and further I'
d2d0: 6d 20 6e 6f 74 20 72 65 61 6c 6c 79 20 73 75 72  m not really sur
d2e0: 65 20 69 66 20 74 68 69 73 20 69 73 20 63 6f 72  e if this is cor
d2f0: 72 65 63 74 2e 20 2a 2f 0a 09 73 77 69 74 63 68  rect. */..switch
d300: 20 28 74 79 70 65 29 20 7b 0a 09 09 63 61 73 65   (type) {...case
d310: 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 3a 0a 09   CKM_RSA_PKCS:..
d320: 09 09 70 49 6e 66 6f 2d 3e 75 6c 4d 69 6e 4b 65  ..pInfo->ulMinKe
d330: 79 53 69 7a 65 20 3d 20 35 31 32 3b 0a 09 09 09  ySize = 512;....
d340: 70 49 6e 66 6f 2d 3e 75 6c 4d 61 78 4b 65 79 53  pInfo->ulMaxKeyS
d350: 69 7a 65 20 3d 20 38 31 39 32 3b 0a 09 09 09 70  ize = 8192;....p
d360: 49 6e 66 6f 2d 3e 66 6c 61 67 73 20 3d 20 43 4b  Info->flags = CK
d370: 46 5f 48 57 20 7c 20 43 4b 46 5f 45 4e 43 52 59  F_HW | CKF_ENCRY
d380: 50 54 20 7c 20 43 4b 46 5f 44 45 43 52 59 50 54  PT | CKF_DECRYPT
d390: 20 7c 20 43 4b 46 5f 53 49 47 4e 20 7c 20 43 4b   | CKF_SIGN | CK
d3a0: 46 5f 56 45 52 49 46 59 3b 0a 09 09 09 62 72 65  F_VERIFY;....bre
d3b0: 61 6b 3b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52  ak;...case CKM_R
d3c0: 53 41 5f 58 5f 35 30 39 3a 0a 09 09 09 70 49 6e  SA_X_509:....pIn
d3d0: 66 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 53 69 7a 65  fo->ulMinKeySize
d3e0: 20 3d 20 35 31 32 3b 0a 09 09 09 70 49 6e 66 6f   = 512;....pInfo
d3f0: 2d 3e 75 6c 4d 61 78 4b 65 79 53 69 7a 65 20 3d  ->ulMaxKeySize =
d400: 20 38 31 39 32 3b 0a 09 09 09 70 49 6e 66 6f 2d   8192;....pInfo-
d410: 3e 66 6c 61 67 73 20 3d 20 43 4b 46 5f 48 57 20  >flags = CKF_HW 
d420: 7c 20 43 4b 46 5f 45 4e 43 52 59 50 54 20 7c 20  | CKF_ENCRYPT | 
d430: 43 4b 46 5f 44 45 43 52 59 50 54 20 7c 20 43 4b  CKF_DECRYPT | CK
d440: 46 5f 53 49 47 4e 20 7c 20 43 4b 46 5f 56 45 52  F_SIGN | CKF_VER
d450: 49 46 59 3b 0a 09 09 09 62 72 65 61 6b 3b 0a 09  IFY;....break;..
d460: 09 63 61 73 65 20 43 4b 4d 5f 53 48 41 31 5f 52  .case CKM_SHA1_R
d470: 53 41 5f 50 4b 43 53 3a 0a 09 09 09 70 49 6e 66  SA_PKCS:....pInf
d480: 6f 2d 3e 75 6c 4d 69 6e 4b 65 79 53 69 7a 65 20  o->ulMinKeySize 
d490: 3d 20 35 31 32 3b 0a 09 09 09 70 49 6e 66 6f 2d  = 512;....pInfo-
d4a0: 3e 75 6c 4d 61 78 4b 65 79 53 69 7a 65 20 3d 20  >ulMaxKeySize = 
d4b0: 38 31 39 32 3b 0a 09 09 09 70 49 6e 66 6f 2d 3e  8192;....pInfo->
d4c0: 66 6c 61 67 73 20 3d 20 43 4b 46 5f 48 57 20 7c  flags = CKF_HW |
d4d0: 20 43 4b 46 5f 53 49 47 4e 20 7c 20 43 4b 46 5f   CKF_SIGN | CKF_
d4e0: 56 45 52 49 46 59 3b 0a 09 09 09 62 72 65 61 6b  VERIFY;....break
d4f0: 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45  ;..}...CACKEY_DE
d500: 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75  BUG_PRINTF("Retu
d510: 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69  rning CKR_OK (%i
d520: 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72  )", CKR_OK);...r
d530: 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d  eturn(CKR_OK);.}
d540: 0a 0a 2f 2a 20 57 65 20 64 6f 6e 27 74 20 73 75  ../* We don't su
d550: 70 70 6f 72 74 20 74 68 69 73 20 6d 65 74 68 6f  pport this metho
d560: 64 2e 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f  d. */.CK_DEFINE_
d570: 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20  FUNCTION(CK_RV, 
d580: 43 5f 49 6e 69 74 54 6f 6b 65 6e 29 28 43 4b 5f  C_InitToken)(CK_
d590: 53 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20  SLOT_ID slotID, 
d5a0: 43 4b 5f 55 54 46 38 43 48 41 52 5f 50 54 52 20  CK_UTF8CHAR_PTR 
d5b0: 70 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75  pPin, CK_ULONG u
d5c0: 6c 50 69 6e 4c 65 6e 2c 20 43 4b 5f 55 54 46 38  lPinLen, CK_UTF8
d5d0: 43 48 41 52 5f 50 54 52 20 70 4c 61 62 65 6c 29  CHAR_PTR pLabel)
d5e0: 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47   {..CACKEY_DEBUG
d5f0: 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e  _PRINTF("Called.
d600: 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ");...if (!cacke
d610: 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b  y_initialized) {
d620: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
d630: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
d640: 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  Not initialized.
d650: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
d660: 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49  R_CRYPTOKI_NOT_I
d670: 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a  NITIALIZED);..}.
d680: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
d690: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
d6a0: 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 49 54 45   CKR_TOKEN_WRITE
d6b0: 5f 50 52 4f 54 45 43 54 45 44 20 28 25 69 29 22  _PROTECTED (%i)"
d6c0: 2c 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52 49 54  , CKR_TOKEN_WRIT
d6d0: 45 5f 50 52 4f 54 45 43 54 45 44 29 3b 0a 0a 09  E_PROTECTED);...
d6e0: 72 65 74 75 72 6e 28 43 4b 52 5f 54 4f 4b 45 4e  return(CKR_TOKEN
d6f0: 5f 57 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44  _WRITE_PROTECTED
d700: 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 20 64 6f 6e 27  );.}../* We don'
d710: 74 20 73 75 70 70 6f 72 74 20 74 68 69 73 20 6d  t support this m
d720: 65 74 68 6f 64 2e 20 2a 2f 0a 43 4b 5f 44 45 46  ethod. */.CK_DEF
d730: 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f  INE_FUNCTION(CK_
d740: 52 56 2c 20 43 5f 49 6e 69 74 50 49 4e 29 28 43  RV, C_InitPIN)(C
d750: 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45  K_SESSION_HANDLE
d760: 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 55 54   hSession, CK_UT
d770: 46 38 43 48 41 52 5f 50 54 52 20 70 50 69 6e 2c  F8CHAR_PTR pPin,
d780: 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 69 6e 4c   CK_ULONG ulPinL
d790: 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45  en) {..CACKEY_DE
d7a0: 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c  BUG_PRINTF("Call
d7b0: 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61  ed.");...if (!ca
d7c0: 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64  ckey_initialized
d7d0: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  ) {...CACKEY_DEB
d7e0: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
d7f0: 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  .  Not initializ
d800: 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  ed.");....return
d810: 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f  (CKR_CRYPTOKI_NO
d820: 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a  T_INITIALIZED);.
d830: 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  .}...CACKEY_DEBU
d840: 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e  G_PRINTF("Return
d850: 69 6e 67 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57 52  ing CKR_TOKEN_WR
d860: 49 54 45 5f 50 52 4f 54 45 43 54 45 44 20 28 25  ITE_PROTECTED (%
d870: 69 29 22 2c 20 43 4b 52 5f 54 4f 4b 45 4e 5f 57  i)", CKR_TOKEN_W
d880: 52 49 54 45 5f 50 52 4f 54 45 43 54 45 44 29 3b  RITE_PROTECTED);
d890: 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 54 4f  ...return(CKR_TO
d8a0: 4b 45 4e 5f 57 52 49 54 45 5f 50 52 4f 54 45 43  KEN_WRITE_PROTEC
d8b0: 54 45 44 29 3b 0a 7d 0a 0a 2f 2a 20 57 65 20 64  TED);.}../* We d
d8c0: 6f 6e 27 74 20 73 75 70 70 6f 72 74 20 74 68 69  on't support thi
d8d0: 73 20 6d 65 74 68 6f 64 2e 20 2a 2f 0a 43 4b 5f  s method. */.CK_
d8e0: 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28  DEFINE_FUNCTION(
d8f0: 43 4b 5f 52 56 2c 20 43 5f 53 65 74 50 49 4e 29  CK_RV, C_SetPIN)
d900: 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44  (CK_SESSION_HAND
d910: 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f  LE hSession, CK_
d920: 55 54 46 38 43 48 41 52 5f 50 54 52 20 70 4f 6c  UTF8CHAR_PTR pOl
d930: 64 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75  dPin, CK_ULONG u
d940: 6c 4f 6c 64 50 69 6e 4c 65 6e 2c 20 43 4b 5f 55  lOldPinLen, CK_U
d950: 54 46 38 43 48 41 52 5f 50 54 52 20 70 4e 65 77  TF8CHAR_PTR pNew
d960: 50 69 6e 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c  Pin, CK_ULONG ul
d970: 4e 65 77 50 69 6e 4c 65 6e 29 20 7b 0a 09 43 41  NewPinLen) {..CA
d980: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
d990: 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09  F("Called.");...
d9a0: 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74  if (!cackey_init
d9b0: 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43  ialized) {...CAC
d9c0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
d9d0: 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e  ("Error.  Not in
d9e0: 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09  itialized.");...
d9f0: 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50  .return(CKR_CRYP
da00: 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c  TOKI_NOT_INITIAL
da10: 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b  IZED);..}...CACK
da20: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
da30: 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46  "Returning CKR_F
da40: 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50  UNCTION_NOT_SUPP
da50: 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52  ORTED (%i)", CKR
da60: 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55  _FUNCTION_NOT_SU
da70: 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75  PPORTED);...retu
da80: 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  rn(CKR_FUNCTION_
da90: 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a  NOT_SUPPORTED);.
daa0: 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e  }..CK_DEFINE_FUN
dab0: 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 4f  CTION(CK_RV, C_O
dac0: 70 65 6e 53 65 73 73 69 6f 6e 29 28 43 4b 5f 53  penSession)(CK_S
dad0: 4c 4f 54 5f 49 44 20 73 6c 6f 74 49 44 2c 20 43  LOT_ID slotID, C
dae0: 4b 5f 46 4c 41 47 53 20 66 6c 61 67 73 2c 20 43  K_FLAGS flags, C
daf0: 4b 5f 56 4f 49 44 5f 50 54 52 20 70 41 70 70 6c  K_VOID_PTR pAppl
db00: 69 63 61 74 69 6f 6e 2c 20 43 4b 5f 4e 4f 54 49  ication, CK_NOTI
db10: 46 59 20 6e 6f 74 69 66 79 2c 20 43 4b 5f 53 45  FY notify, CK_SE
db20: 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 50 54 52  SSION_HANDLE_PTR
db30: 20 70 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09 73   phSession) {..s
db40: 74 72 75 63 74 20 63 61 63 6b 65 79 5f 69 64 65  truct cackey_ide
db50: 6e 74 69 74 79 20 2a 69 64 65 6e 74 69 74 69 65  ntity *identitie
db60: 73 3b 0a 09 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  s;..unsigned lon
db70: 67 20 69 64 78 2c 20 6e 75 6d 5f 69 64 73 2c 20  g idx, num_ids, 
db80: 69 64 5f 69 64 78 2c 20 63 75 72 72 5f 69 64 5f  id_idx, curr_id_
db90: 74 79 70 65 3b 0a 23 69 66 20 30 0a 09 43 4b 5f  type;.#if 0..CK_
dba0: 42 59 54 45 20 73 69 67 62 75 66 5b 31 30 32 34  BYTE sigbuf[1024
dbb0: 5d 3b 0a 09 73 73 69 7a 65 5f 74 20 73 69 67 62  ];..ssize_t sigb
dbc0: 75 66 6c 65 6e 3b 0a 23 65 6e 64 69 66 0a 09 69  uflen;.#endif..i
dbd0: 6e 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b  nt mutex_retval;
dbe0: 0a 09 69 6e 74 20 66 6f 75 6e 64 5f 73 65 73 73  ..int found_sess
dbf0: 69 6f 6e 20 3d 20 30 3b 0a 0a 09 43 41 43 4b 45  ion = 0;...CACKE
dc00: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
dc10: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20  Called.");...if 
dc20: 28 73 6c 6f 74 49 44 20 3c 20 30 20 7c 7c 20 73  (slotID < 0 || s
dc30: 6c 6f 74 49 44 20 3e 3d 20 28 73 69 7a 65 6f 66  lotID >= (sizeof
dc40: 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73 29 20 2f  (cackey_slots) /
dc50: 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73   sizeof(cackey_s
dc60: 6c 6f 74 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43  lots[0]))) {...C
dc70: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
dc80: 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76 61 6c  TF("Error. Inval
dc90: 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73 74 65  id slot requeste
dca0: 64 20 28 25 6c 75 29 2c 20 6f 75 74 73 69 64 65  d (%lu), outside
dcb0: 20 6f 66 20 76 61 6c 69 64 20 72 61 6e 67 65 22   of valid range"
dcc0: 2c 20 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65  , slotID);....re
dcd0: 74 75 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44  turn(CKR_SLOT_ID
dce0: 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09  _INVALID);..}...
dcf0: 69 66 20 28 63 61 63 6b 65 79 5f 73 6c 6f 74 73  if (cackey_slots
dd00: 5b 73 6c 6f 74 49 44 5d 2e 61 63 74 69 76 65 20  [slotID].active 
dd10: 3d 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59  == 0) {...CACKEY
dd20: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
dd30: 72 72 6f 72 2e 20 49 6e 76 61 6c 69 64 20 73 6c  rror. Invalid sl
dd40: 6f 74 20 72 65 71 75 65 73 74 65 64 20 28 25 6c  ot requested (%l
dd50: 75 29 2c 20 73 6c 6f 74 20 6e 6f 74 20 63 75 72  u), slot not cur
dd60: 72 65 6e 74 6c 79 20 61 63 74 69 76 65 22 2c 20  rently active", 
dd70: 73 6c 6f 74 49 44 29 3b 0a 0a 09 09 72 65 74 75  slotID);....retu
dd80: 72 6e 28 43 4b 52 5f 53 4c 4f 54 5f 49 44 5f 49  rn(CKR_SLOT_ID_I
dd90: 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66  NVALID);..}...if
dda0: 20 28 28 66 6c 61 67 73 20 26 20 43 4b 46 5f 53   ((flags & CKF_S
ddb0: 45 52 49 41 4c 5f 53 45 53 53 49 4f 4e 29 20 21  ERIAL_SESSION) !
ddc0: 3d 20 43 4b 46 5f 53 45 52 49 41 4c 5f 53 45 53  = CKF_SERIAL_SES
ddd0: 53 49 4f 4e 29 20 7b 0a 09 09 72 65 74 75 72 6e  SION) {...return
dde0: 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 50 41 52  (CKR_SESSION_PAR
ddf0: 41 4c 4c 45 4c 5f 4e 4f 54 5f 53 55 50 50 4f 52  ALLEL_NOT_SUPPOR
de00: 54 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21  TED);..}...if (!
de10: 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a  cackey_initializ
de20: 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  ed) {...CACKEY_D
de30: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
de40: 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c  or.  Not initial
de50: 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75  ized.");....retu
de60: 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f  rn(CKR_CRYPTOKI_
de70: 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29  NOT_INITIALIZED)
de80: 3b 0a 09 7d 0a 0a 09 2f 2a 20 56 65 72 69 66 79  ;..}.../* Verify
de90: 20 74 68 61 74 20 74 68 65 20 63 61 72 64 20 69   that the card i
dea0: 73 20 61 63 74 75 61 6c 6c 79 20 69 6e 20 74 68  s actually in th
deb0: 65 20 73 6c 6f 74 2e 20 2a 2f 0a 09 2f 2a 20 58  e slot. */../* X
dec0: 58 58 3a 20 54 61 6c 6b 20 74 6f 20 63 61 72 64  XX: Talk to card
ded0: 20 2a 2f 0a 09 69 66 20 28 30 29 20 7b 0a 09 09   */..if (0) {...
dee0: 69 66 20 28 30 29 20 7b 0a 09 09 09 43 41 43 4b  if (0) {....CACK
def0: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
df00: 22 45 72 72 6f 72 2e 20 20 43 61 72 64 20 6e 6f  "Error.  Card no
df10: 74 20 70 72 65 73 65 6e 74 2e 20 20 52 65 74 75  t present.  Retu
df20: 72 6e 69 6e 67 20 43 4b 52 5f 44 45 56 49 43 45  rning CKR_DEVICE
df30: 5f 52 45 4d 4f 56 45 44 22 29 3b 0a 0a 09 09 09  _REMOVED");.....
df40: 72 65 74 75 72 6e 28 43 4b 52 5f 44 45 56 49 43  return(CKR_DEVIC
df50: 45 5f 52 45 4d 4f 56 45 44 29 3b 0a 09 09 7d 0a  E_REMOVED);...}.
df60: 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61  .}...mutex_retva
df70: 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78  l = cackey_mutex
df80: 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67  _lock(cackey_big
df90: 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65  lock);..if (mute
dfa0: 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b  x_retval != 0) {
dfb0: 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
dfc0: 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
dfd0: 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22  Locking failed."
dfe0: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
dff0: 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b  _GENERAL_ERROR);
e000: 0a 09 7d 0a 0a 09 66 6f 72 20 28 69 64 78 20 3d  ..}...for (idx =
e010: 20 31 3b 20 69 64 78 20 3c 20 28 73 69 7a 65 6f   1; idx < (sizeo
e020: 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  f(cackey_session
e030: 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b  s) / sizeof(cack
e040: 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29  ey_sessions[0]))
e050: 3b 20 69 64 78 2b 2b 29 20 7b 0a 09 09 69 66 20  ; idx++) {...if 
e060: 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  (!cackey_session
e070: 73 5b 69 64 78 5d 2e 61 63 74 69 76 65 29 20 7b  s[idx].active) {
e080: 0a 09 09 09 66 6f 75 6e 64 5f 73 65 73 73 69 6f  ....found_sessio
e090: 6e 20 3d 20 31 3b 0a 0a 09 09 09 2a 70 68 53 65  n = 1;.....*phSe
e0a0: 73 73 69 6f 6e 20 3d 20 69 64 78 3b 0a 0a 09 09  ssion = idx;....
e0b0: 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  .cackey_sessions
e0c0: 5b 69 64 78 5d 2e 61 63 74 69 76 65 20 3d 20 31  [idx].active = 1
e0d0: 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73  ;....cackey_sess
e0e0: 69 6f 6e 73 5b 69 64 78 5d 2e 73 6c 6f 74 49 44  ions[idx].slotID
e0f0: 20 3d 20 73 6c 6f 74 49 44 3b 0a 09 09 09 63 61   = slotID;....ca
e100: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64  ckey_sessions[id
e110: 78 5d 2e 73 74 61 74 65 20 3d 20 43 4b 53 5f 52  x].state = CKS_R
e120: 4f 5f 50 55 42 4c 49 43 5f 53 45 53 53 49 4f 4e  O_PUBLIC_SESSION
e130: 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73  ;....cackey_sess
e140: 69 6f 6e 73 5b 69 64 78 5d 2e 66 6c 61 67 73 20  ions[idx].flags 
e150: 3d 20 66 6c 61 67 73 3b 0a 09 09 09 63 61 63 6b  = flags;....cack
e160: 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d  ey_sessions[idx]
e170: 2e 75 6c 44 65 76 69 63 65 45 72 72 6f 72 20 3d  .ulDeviceError =
e180: 20 30 3b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65   0;....cackey_se
e190: 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 70 41 70 70  ssions[idx].pApp
e1a0: 6c 69 63 61 74 69 6f 6e 20 3d 20 70 41 70 70 6c  lication = pAppl
e1b0: 69 63 61 74 69 6f 6e 3b 0a 09 09 09 63 61 63 6b  ication;....cack
e1c0: 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d  ey_sessions[idx]
e1d0: 2e 4e 6f 74 69 66 79 20 3d 20 6e 6f 74 69 66 79  .Notify = notify
e1e0: 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73  ;.....cackey_ses
e1f0: 73 69 6f 6e 73 5b 69 64 78 5d 2e 69 64 65 6e 74  sions[idx].ident
e200: 69 74 69 65 73 20 3d 20 4e 55 4c 4c 3b 0a 09 09  ities = NULL;...
e210: 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  .cackey_sessions
e220: 5b 69 64 78 5d 2e 69 64 65 6e 74 69 74 69 65 73  [idx].identities
e230: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 0a 09 09 09  _count = 0;.....
e240: 69 66 20 28 30 29 20 7b 0a 09 09 09 09 6e 75 6d  if (0) {.....num
e250: 5f 69 64 73 20 3d 20 30 3b 0a 09 09 09 09 2f 2a  _ids = 0;...../*
e260: 20 58 58 58 3a 20 44 65 74 65 72 6d 69 6e 65 20   XXX: Determine 
e270: 6e 75 6d 62 65 72 20 6f 66 20 49 44 73 20 2a 2f  number of IDs */
e280: 0a 0a 09 09 09 09 2f 2a 20 43 6f 6e 76 65 72 74  ....../* Convert
e290: 20 6e 75 6d 62 65 72 20 6f 66 20 49 44 73 20 74   number of IDs t
e2a0: 6f 20 6e 75 6d 62 65 72 20 6f 66 20 6f 62 6a 65  o number of obje
e2b0: 63 74 73 20 2a 2f 0a 09 09 09 09 6e 75 6d 5f 69  cts */.....num_i
e2c0: 64 73 20 3d 20 28 43 4b 4f 5f 50 52 49 56 41 54  ds = (CKO_PRIVAT
e2d0: 45 5f 4b 45 59 20 2d 20 43 4b 4f 5f 43 45 52 54  E_KEY - CKO_CERT
e2e0: 49 46 49 43 41 54 45 20 2b 20 31 29 20 2a 20 6e  IFICATE + 1) * n
e2f0: 75 6d 5f 69 64 73 3b 0a 0a 09 09 09 09 69 64 65  um_ids;......ide
e300: 6e 74 69 74 69 65 73 20 3d 20 6d 61 6c 6c 6f 63  ntities = malloc
e310: 28 6e 75 6d 5f 69 64 73 20 2a 20 73 69 7a 65 6f  (num_ids * sizeo
e320: 66 28 2a 69 64 65 6e 74 69 74 69 65 73 29 29 3b  f(*identities));
e330: 0a 0a 09 09 09 09 69 64 5f 69 64 78 20 3d 20 30  ......id_idx = 0
e340: 3b 0a 09 09 09 09 66 6f 72 20 28 3b 3b 29 20 7b  ;.....for (;;) {
e350: 0a 09 09 09 09 09 66 6f 72 20 28 63 75 72 72 5f  ......for (curr_
e360: 69 64 5f 74 79 70 65 20 3d 20 43 4b 4f 5f 43 45  id_type = CKO_CE
e370: 52 54 49 46 49 43 41 54 45 3b 20 63 75 72 72 5f  RTIFICATE; curr_
e380: 69 64 5f 74 79 70 65 20 3c 3d 20 43 4b 4f 5f 50  id_type <= CKO_P
e390: 52 49 56 41 54 45 5f 4b 45 59 3b 20 63 75 72 72  RIVATE_KEY; curr
e3a0: 5f 69 64 5f 74 79 70 65 2b 2b 29 20 7b 0a 09 09  _id_type++) {...
e3b0: 09 09 09 09 2f 2a 20 58 58 58 3a 20 44 65 74 65  ..../* XXX: Dete
e3c0: 72 6d 69 6e 65 20 62 61 73 65 20 69 6e 64 65 78  rmine base index
e3d0: 20 2a 2f 0a 0a 09 09 09 09 09 09 69 64 65 6e 74   */........ident
e3e0: 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74  ities[id_idx].at
e3f0: 74 72 69 62 75 74 65 73 20 3d 20 63 61 63 6b 65  tributes = cacke
e400: 79 5f 67 65 74 5f 61 74 74 72 69 62 75 74 65 73  y_get_attributes
e410: 28 63 75 72 72 5f 69 64 5f 74 79 70 65 2c 20 4e  (curr_id_type, N
e420: 55 4c 4c 2c 20 2d 31 2c 20 26 69 64 65 6e 74 69  ULL, -1, &identi
e430: 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74  ties[id_idx].att
e440: 72 69 62 75 74 65 73 5f 63 6f 75 6e 74 29 3b 0a  ributes_count);.
e450: 0a 09 09 09 09 09 09 69 66 20 28 69 64 65 6e 74  .......if (ident
e460: 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74  ities[id_idx].at
e470: 74 72 69 62 75 74 65 73 20 3d 3d 20 4e 55 4c 4c  tributes == NULL
e480: 29 20 7b 0a 09 09 09 09 09 09 09 69 64 65 6e 74  ) {........ident
e490: 69 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74  ities[id_idx].at
e4a0: 74 72 69 62 75 74 65 73 5f 63 6f 75 6e 74 20 3d  tributes_count =
e4b0: 20 30 3b 0a 09 09 09 09 09 09 7d 0a 0a 09 09 09   0;.......}.....
e4c0: 09 09 09 69 64 5f 69 64 78 2b 2b 3b 0a 09 09 09  ...id_idx++;....
e4d0: 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 63  ..}.....}......c
e4e0: 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69  ackey_sessions[i
e4f0: 64 78 5d 2e 69 64 65 6e 74 69 74 69 65 73 20 3d  dx].identities =
e500: 20 69 64 65 6e 74 69 74 69 65 73 3b 0a 09 09 09   identities;....
e510: 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  .cackey_sessions
e520: 5b 69 64 78 5d 2e 69 64 65 6e 74 69 74 69 65 73  [idx].identities
e530: 5f 63 6f 75 6e 74 20 3d 20 6e 75 6d 5f 69 64 73  _count = num_ids
e540: 3b 0a 09 09 09 7d 0a 0a 09 09 09 63 61 63 6b 65  ;....}.....cacke
e550: 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e  y_sessions[idx].
e560: 73 65 61 72 63 68 5f 61 63 74 69 76 65 20 3d 20  search_active = 
e570: 30 3b 0a 0a 09 09 09 63 61 63 6b 65 79 5f 73 65  0;.....cackey_se
e580: 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 73 69 67 6e  ssions[idx].sign
e590: 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a 0a 09 09  _active = 0;....
e5a0: 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  .cackey_sessions
e5b0: 5b 69 64 78 5d 2e 64 65 63 72 79 70 74 5f 61 63  [idx].decrypt_ac
e5c0: 74 69 76 65 20 3d 20 30 3b 0a 0a 09 09 09 62 72  tive = 0;.....br
e5d0: 65 61 6b 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 6d 75  eak;...}..}...mu
e5e0: 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63  tex_retval = cac
e5f0: 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b  key_mutex_unlock
e600: 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29  (cackey_biglock)
e610: 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74  ;..if (mutex_ret
e620: 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41  val != 0) {...CA
e630: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
e640: 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63  F("Error.  Unloc
e650: 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a  king failed.");.
e660: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45  ...return(CKR_GE
e670: 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  NERAL_ERROR);..}
e680: 0a 0a 09 69 66 20 28 21 66 6f 75 6e 64 5f 73 65  ...if (!found_se
e690: 73 73 69 6f 6e 29 20 7b 0a 09 09 43 41 43 4b 45  ssion) {...CACKE
e6a0: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
e6b0: 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 53 45  Returning CKR_SE
e6c0: 53 53 49 4f 4e 5f 43 4f 55 4e 54 20 28 25 69 29  SSION_COUNT (%i)
e6d0: 22 2c 20 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 43  ", CKR_SESSION_C
e6e0: 4f 55 4e 54 29 3b 0a 0a 09 09 72 65 74 75 72 6e  OUNT);....return
e6f0: 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 43 4f 55  (CKR_SESSION_COU
e700: 4e 54 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59  NT);..}...CACKEY
e710: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52  _DEBUG_PRINTF("R
e720: 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20  eturning CKR_OK 
e730: 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a  (%i)", CKR_OK);.
e740: 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29  ..return(CKR_OK)
e750: 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46  ;.}..CK_DEFINE_F
e760: 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43  UNCTION(CK_RV, C
e770: 5f 43 6c 6f 73 65 53 65 73 73 69 6f 6e 29 28 43  _CloseSession)(C
e780: 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45  K_SESSION_HANDLE
e790: 20 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09 43 4b   hSession) {..CK
e7a0: 5f 41 54 54 52 49 42 55 54 45 20 2a 63 75 72 72  _ATTRIBUTE *curr
e7b0: 5f 61 74 74 72 3b 0a 09 75 6e 73 69 67 6e 65 64  _attr;..unsigned
e7c0: 20 6c 6f 6e 67 20 69 64 5f 69 64 78 2c 20 61 74   long id_idx, at
e7d0: 74 72 5f 69 64 78 3b 0a 09 69 6e 74 20 6d 75 74  tr_idx;..int mut
e7e0: 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43  ex_retval;...CAC
e7f0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
e800: 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69  ("Called.");...i
e810: 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69  f (!cackey_initi
e820: 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b  alized) {...CACK
e830: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
e840: 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69  "Error.  Not ini
e850: 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09  tialized.");....
e860: 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54  return(CKR_CRYPT
e870: 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49  OKI_NOT_INITIALI
e880: 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68  ZED);..}...if (h
e890: 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20  Session == 0 || 
e8a0: 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a  hSession >= (siz
e8b0: 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69  eof(cackey_sessi
e8c0: 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63 61  ons) / sizeof(ca
e8d0: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d  ckey_sessions[0]
e8e0: 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  ))) {...CACKEY_D
e8f0: 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
e900: 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75 74  or.  Session out
e910: 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09   of range.");...
e920: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45  ...return(CKR_SE
e930: 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56  SSION_HANDLE_INV
e940: 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65  ALID);..}...mute
e950: 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65  x_retval = cacke
e960: 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61 63  y_mutex_lock(cac
e970: 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69  key_biglock);..i
e980: 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20  f (mutex_retval 
e990: 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59  != 0) {...CACKEY
e9a0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
e9b0: 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20 66  rror.  Locking f
e9c0: 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  ailed.");....ret
e9d0: 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f  urn(CKR_GENERAL_
e9e0: 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66 20  ERROR);..}...if 
e9f0: 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  (!cackey_session
ea00: 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69  s[hSession].acti
ea10: 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d  ve) {...cackey_m
ea20: 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b  utex_unlock(cack
ea30: 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09  ey_biglock);....
ea40: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
ea50: 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73  NTF("Error.  Ses
ea60: 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e  sion not active.
ea70: 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28  ");......return(
ea80: 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44  CKR_SESSION_HAND
ea90: 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a  LE_INVALID);..}.
eaa0: 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  ..cackey_session
eab0: 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74 69  s[hSession].acti
eac0: 76 65 20 3d 20 30 3b 0a 09 69 66 20 28 63 61 63  ve = 0;..if (cac
ead0: 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65  key_sessions[hSe
eae0: 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65  ssion].identitie
eaf0: 73 29 20 7b 0a 09 09 66 6f 72 20 28 69 64 5f 69  s) {...for (id_i
eb00: 64 78 20 3d 20 30 3b 20 69 64 5f 69 64 78 20 3c  dx = 0; id_idx <
eb10: 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73   cackey_sessions
eb20: 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74  [hSession].ident
eb30: 69 74 69 65 73 5f 63 6f 75 6e 74 3b 20 69 64 5f  ities_count; id_
eb40: 69 64 78 2b 2b 29 20 7b 0a 09 09 09 69 66 20 28  idx++) {....if (
eb50: 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b  cackey_sessions[
eb60: 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69  hSession].identi
eb70: 74 69 65 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74  ties[id_idx].att
eb80: 72 69 62 75 74 65 73 29 20 7b 0a 09 09 09 09 66  ributes) {.....f
eb90: 6f 72 20 28 61 74 74 72 5f 69 64 78 20 3d 20 30  or (attr_idx = 0
eba0: 3b 20 61 74 74 72 5f 69 64 78 20 3c 20 63 61 63  ; attr_idx < cac
ebb0: 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65  key_sessions[hSe
ebc0: 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65  ssion].identitie
ebd0: 73 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 62  s[id_idx].attrib
ebe0: 75 74 65 73 5f 63 6f 75 6e 74 3b 20 61 74 74 72  utes_count; attr
ebf0: 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09 09 09 63  _idx++) {......c
ec00: 75 72 72 5f 61 74 74 72 20 3d 20 26 63 61 63 6b  urr_attr = &cack
ec10: 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
ec20: 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73  sion].identities
ec30: 5b 69 64 5f 69 64 78 5d 2e 61 74 74 72 69 62 75  [id_idx].attribu
ec40: 74 65 73 5b 61 74 74 72 5f 69 64 78 5d 3b 0a 0a  tes[attr_idx];..
ec50: 09 09 09 09 09 69 66 20 28 63 75 72 72 5f 61 74  .....if (curr_at
ec60: 74 72 2d 3e 70 56 61 6c 75 65 29 20 7b 0a 09 09  tr->pValue) {...
ec70: 09 09 09 09 66 72 65 65 28 63 75 72 72 5f 61 74  ....free(curr_at
ec80: 74 72 2d 3e 70 56 61 6c 75 65 29 3b 0a 09 09 09  tr->pValue);....
ec90: 09 09 7d 0a 09 09 09 09 7d 0a 0a 09 09 09 09 66  ..}.....}......f
eca0: 72 65 65 28 63 61 63 6b 65 79 5f 73 65 73 73 69  ree(cackey_sessi
ecb0: 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64  ons[hSession].id
ecc0: 65 6e 74 69 74 69 65 73 5b 69 64 5f 69 64 78 5d  entities[id_idx]
ecd0: 2e 61 74 74 72 69 62 75 74 65 73 29 3b 0a 09 09  .attributes);...
ece0: 09 7d 0a 09 09 7d 0a 0a 09 09 66 72 65 65 28 63  .}...}....free(c
ecf0: 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68  ackey_sessions[h
ed00: 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74 69 74  Session].identit
ed10: 69 65 73 29 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78  ies);..}...mutex
ed20: 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79  _retval = cackey
ed30: 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61  _mutex_unlock(ca
ed40: 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09  ckey_biglock);..
ed50: 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c  if (mutex_retval
ed60: 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45   != 0) {...CACKE
ed70: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
ed80: 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e  Error.  Unlockin
ed90: 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09  g failed.");....
eda0: 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52  return(CKR_GENER
edb0: 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09  AL_ERROR);..}...
edc0: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
edd0: 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43  NTF("Returning C
ede0: 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52  KR_OK (%i)", CKR
edf0: 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  _OK);...return(C
ee00: 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45  KR_OK);.}..CK_DE
ee10: 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b  FINE_FUNCTION(CK
ee20: 5f 52 56 2c 20 43 5f 43 6c 6f 73 65 41 6c 6c 53  _RV, C_CloseAllS
ee30: 65 73 73 69 6f 6e 73 29 28 43 4b 5f 53 4c 4f 54  essions)(CK_SLOT
ee40: 5f 49 44 20 73 6c 6f 74 49 44 29 20 7b 0a 09 75  _ID slotID) {..u
ee50: 69 6e 74 33 32 5f 74 20 69 64 78 3b 0a 09 69 6e  int32_t idx;..in
ee60: 74 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a  t mutex_retval;.
ee70: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
ee80: 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29  RINTF("Called.")
ee90: 3b 0a 0a 09 69 66 20 28 73 6c 6f 74 49 44 20 3c  ;...if (slotID <
eea0: 20 30 20 7c 7c 20 73 6c 6f 74 49 44 20 3e 3d 20   0 || slotID >= 
eeb0: 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73  (sizeof(cackey_s
eec0: 6c 6f 74 73 29 20 2f 20 73 69 7a 65 6f 66 28 63  lots) / sizeof(c
eed0: 61 63 6b 65 79 5f 73 6c 6f 74 73 5b 30 5d 29 29  ackey_slots[0]))
eee0: 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  ) {...CACKEY_DEB
eef0: 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
ef00: 2e 20 49 6e 76 61 6c 69 64 20 73 6c 6f 74 20 72  . Invalid slot r
ef10: 65 71 75 65 73 74 65 64 20 28 25 6c 75 29 2c 20  equested (%lu), 
ef20: 6f 75 74 73 69 64 65 20 6f 66 20 76 61 6c 69 64  outside of valid
ef30: 20 72 61 6e 67 65 22 2c 20 73 6c 6f 74 49 44 29   range", slotID)
ef40: 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  ;....return(CKR_
ef50: 53 4c 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29  SLOT_ID_INVALID)
ef60: 3b 0a 09 7d 0a 0a 09 69 66 20 28 63 61 63 6b 65  ;..}...if (cacke
ef70: 79 5f 73 6c 6f 74 73 5b 73 6c 6f 74 49 44 5d 2e  y_slots[slotID].
ef80: 61 63 74 69 76 65 20 3d 3d 20 30 29 20 7b 0a 09  active == 0) {..
ef90: 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
efa0: 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 49 6e 76  INTF("Error. Inv
efb0: 61 6c 69 64 20 73 6c 6f 74 20 72 65 71 75 65 73  alid slot reques
efc0: 74 65 64 20 28 25 6c 75 29 2c 20 73 6c 6f 74 20  ted (%lu), slot 
efd0: 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 61 63  not currently ac
efe0: 74 69 76 65 22 2c 20 73 6c 6f 74 49 44 29 3b 0a  tive", slotID);.
eff0: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 4c  ...return(CKR_SL
f000: 4f 54 5f 49 44 5f 49 4e 56 41 4c 49 44 29 3b 0a  OT_ID_INVALID);.
f010: 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79  .}...if (!cackey
f020: 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a  _initialized) {.
f030: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
f040: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e  RINTF("Error.  N
f050: 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22  ot initialized."
f060: 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
f070: 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e  _CRYPTOKI_NOT_IN
f080: 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a  ITIALIZED);..}..
f090: 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20  .mutex_retval = 
f0a0: 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63  cackey_mutex_loc
f0b0: 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b  k(cackey_biglock
f0c0: 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65  );..if (mutex_re
f0d0: 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43  tval != 0) {...C
f0e0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
f0f0: 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b  TF("Error.  Lock
f100: 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a  ing failed.");..
f110: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e  ..return(CKR_GEN
f120: 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a  ERAL_ERROR);..}.
f130: 0a 09 66 6f 72 20 28 69 64 78 20 3d 20 30 3b 20  ..for (idx = 0; 
f140: 69 64 78 20 3c 20 28 73 69 7a 65 6f 66 28 63 61  idx < (sizeof(ca
f150: 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f  ckey_sessions) /
f160: 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73   sizeof(cackey_s
f170: 65 73 73 69 6f 6e 73 5b 30 5d 29 29 3b 20 69 64  essions[0])); id
f180: 78 2b 2b 29 20 7b 0a 09 09 69 66 20 28 63 61 63  x++) {...if (cac
f190: 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 69 64 78  key_sessions[idx
f1a0: 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 09 69  ].active) {....i
f1b0: 66 20 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f  f (cackey_sessio
f1c0: 6e 73 5b 69 64 78 5d 2e 73 6c 6f 74 49 44 20 21  ns[idx].slotID !
f1d0: 3d 20 73 6c 6f 74 49 44 29 20 7b 0a 09 09 09 09  = slotID) {.....
f1e0: 63 6f 6e 74 69 6e 75 65 3b 0a 09 09 09 7d 0a 0a  continue;....}..
f1f0: 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f  ...cackey_mutex_
f200: 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69  unlock(cackey_bi
f210: 67 6c 6f 63 6b 29 3b 0a 09 09 09 43 5f 43 6c 6f  glock);....C_Clo
f220: 73 65 53 65 73 73 69 6f 6e 28 69 64 78 29 3b 0a  seSession(idx);.
f230: 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f  ...cackey_mutex_
f240: 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c  lock(cackey_bigl
f250: 6f 63 6b 29 3b 0a 09 09 7d 0a 09 7d 0a 0a 09 6d  ock);...}..}...m
f260: 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61  utex_retval = ca
f270: 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63  ckey_mutex_unloc
f280: 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b  k(cackey_biglock
f290: 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65  );..if (mutex_re
f2a0: 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43  tval != 0) {...C
f2b0: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
f2c0: 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f  TF("Error.  Unlo
f2d0: 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b  cking failed.");
f2e0: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47  ....return(CKR_G
f2f0: 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09  ENERAL_ERROR);..
f300: 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  }...CACKEY_DEBUG
f310: 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69  _PRINTF("Returni
f320: 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c  ng CKR_OK (%i)",
f330: 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75   CKR_OK);...retu
f340: 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43  rn(CKR_OK);.}..C
f350: 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f  K_DEFINE_FUNCTIO
f360: 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 74 53 65  N(CK_RV, C_GetSe
f370: 73 73 69 6f 6e 49 6e 66 6f 29 28 43 4b 5f 53 45  ssionInfo)(CK_SE
f380: 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65  SSION_HANDLE hSe
f390: 73 73 69 6f 6e 2c 20 43 4b 5f 53 45 53 53 49 4f  ssion, CK_SESSIO
f3a0: 4e 5f 49 4e 46 4f 5f 50 54 52 20 70 49 6e 66 6f  N_INFO_PTR pInfo
f3b0: 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72  ) {..int mutex_r
f3c0: 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f  etval;...CACKEY_
f3d0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61  DEBUG_PRINTF("Ca
f3e0: 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 70  lled.");...if (p
f3f0: 49 6e 66 6f 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  Info == NULL) {.
f400: 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
f410: 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 49  RINTF("Error. pI
f420: 6e 66 6f 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a  nfo is NULL.");.
f430: 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52  ...return(CKR_AR
f440: 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d  GUMENTS_BAD);..}
f450: 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69  ...if (!cackey_i
f460: 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09  nitialized) {...
f470: 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
f480: 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74  NTF("Error.  Not
f490: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b   initialized.");
f4a0: 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43  ....return(CKR_C
f4b0: 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54  RYPTOKI_NOT_INIT
f4c0: 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69  IALIZED);..}...i
f4d0: 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30  f (hSession == 0
f4e0: 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20   || hSession >= 
f4f0: 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73  (sizeof(cackey_s
f500: 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f  essions) / sizeo
f510: 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  f(cackey_session
f520: 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b  s[0]))) {...CACK
f530: 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
f540: 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e  "Error.  Session
f550: 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29   out of range.")
f560: 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b  ;......return(CK
f570: 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45  R_SESSION_HANDLE
f580: 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09  _INVALID);..}...
f590: 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63  mutex_retval = c
f5a0: 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b  ackey_mutex_lock
f5b0: 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29  (cackey_biglock)
f5c0: 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74  ;..if (mutex_ret
f5d0: 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41  val != 0) {...CA
f5e0: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
f5f0: 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69  F("Error.  Locki
f600: 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09  ng failed.");...
f610: 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45  .return(CKR_GENE
f620: 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  RAL_ERROR);..}..
f630: 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73  .if (!cackey_ses
f640: 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e  sions[hSession].
f650: 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b  active) {...cack
f660: 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28  ey_mutex_unlock(
f670: 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b  cackey_biglock);
f680: 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
f690: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
f6a0: 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74   Session not act
f6b0: 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74  ive.");......ret
f6c0: 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f  urn(CKR_SESSION_
f6d0: 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b  HANDLE_INVALID);
f6e0: 0a 09 7d 0a 0a 09 70 49 6e 66 6f 2d 3e 73 6c 6f  ..}...pInfo->slo
f6f0: 74 49 44 20 3d 20 63 61 63 6b 65 79 5f 73 65 73  tID = cackey_ses
f700: 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e  sions[hSession].
f710: 73 6c 6f 74 49 44 3b 0a 09 70 49 6e 66 6f 2d 3e  slotID;..pInfo->
f720: 73 74 61 74 65 20 3d 20 63 61 63 6b 65 79 5f 73  state = cackey_s
f730: 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e  essions[hSession
f740: 5d 2e 73 74 61 74 65 3b 0a 09 70 49 6e 66 6f 2d  ].state;..pInfo-
f750: 3e 66 6c 61 67 73 20 3d 20 63 61 63 6b 65 79 5f  >flags = cackey_
f760: 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
f770: 6e 5d 2e 66 6c 61 67 73 3b 0a 09 70 49 6e 66 6f  n].flags;..pInfo
f780: 2d 3e 75 6c 44 65 76 69 63 65 45 72 72 6f 72 20  ->ulDeviceError 
f790: 3d 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  = cackey_session
f7a0: 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 75 6c 44 65  s[hSession].ulDe
f7b0: 76 69 63 65 45 72 72 6f 72 3b 0a 0a 09 6d 75 74  viceError;...mut
f7c0: 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b  ex_retval = cack
f7d0: 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28  ey_mutex_unlock(
f7e0: 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b  cackey_biglock);
f7f0: 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76  ..if (mutex_retv
f800: 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43  al != 0) {...CAC
f810: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
f820: 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b  ("Error.  Unlock
f830: 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a  ing failed.");..
f840: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e  ..return(CKR_GEN
f850: 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a  ERAL_ERROR);..}.
f860: 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
f870: 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
f880: 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43   CKR_OK (%i)", C
f890: 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e  KR_OK);...return
f8a0: 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f  (CKR_OK);.}..CK_
f8b0: 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28  DEFINE_FUNCTION(
f8c0: 43 4b 5f 52 56 2c 20 43 5f 47 65 74 4f 70 65 72  CK_RV, C_GetOper
f8d0: 61 74 69 6f 6e 53 74 61 74 65 29 28 43 4b 5f 53  ationState)(CK_S
f8e0: 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53  ESSION_HANDLE hS
f8f0: 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f  ession, CK_BYTE_
f900: 50 54 52 20 70 4f 70 65 72 61 74 69 6f 6e 53 74  PTR pOperationSt
f910: 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54  ate, CK_ULONG_PT
f920: 52 20 70 75 6c 4f 70 65 72 61 74 69 6f 6e 53 74  R pulOperationSt
f930: 61 74 65 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45  ateLen) {..CACKE
f940: 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
f950: 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20  Called.");...if 
f960: 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c  (!cackey_initial
f970: 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59  ized) {...CACKEY
f980: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
f990: 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69  rror.  Not initi
f9a0: 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65  alized.");....re
f9b0: 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b  turn(CKR_CRYPTOK
f9c0: 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45  I_NOT_INITIALIZE
f9d0: 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f  D);..}...CACKEY_
f9e0: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65  DEBUG_PRINTF("Re
f9f0: 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43  turning CKR_FUNC
fa00: 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54  TION_NOT_SUPPORT
fa10: 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55  ED (%i)", CKR_FU
fa20: 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
fa30: 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28  RTED);...return(
fa40: 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54  CKR_FUNCTION_NOT
fa50: 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a  _SUPPORTED);.}..
fa60: 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49  CK_DEFINE_FUNCTI
fa70: 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 74 4f  ON(CK_RV, C_SetO
fa80: 70 65 72 61 74 69 6f 6e 53 74 61 74 65 29 28 43  perationState)(C
fa90: 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45  K_SESSION_HANDLE
faa0: 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59   hSession, CK_BY
fab0: 54 45 5f 50 54 52 20 70 4f 70 65 72 61 74 69 6f  TE_PTR pOperatio
fac0: 6e 53 74 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47  nState, CK_ULONG
fad0: 20 75 6c 4f 70 65 72 61 74 69 6f 6e 53 74 61 74   ulOperationStat
fae0: 65 4c 65 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f  eLen, CK_OBJECT_
faf0: 48 41 4e 44 4c 45 20 68 45 6e 63 72 79 70 74 69  HANDLE hEncrypti
fb00: 6f 6e 4b 65 79 2c 20 43 4b 5f 4f 42 4a 45 43 54  onKey, CK_OBJECT
fb10: 5f 48 41 4e 44 4c 45 20 68 41 75 74 68 65 6e 74  _HANDLE hAuthent
fb20: 69 63 61 74 69 6f 6e 4b 65 79 29 20 7b 0a 09 43  icationKey) {..C
fb30: 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
fb40: 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a  TF("Called.");..
fb50: 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69  .if (!cackey_ini
fb60: 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41  tialized) {...CA
fb70: 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
fb80: 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69  F("Error.  Not i
fb90: 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a  nitialized.");..
fba0: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59  ..return(CKR_CRY
fbb0: 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41  PTOKI_NOT_INITIA
fbc0: 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43  LIZED);..}...CAC
fbd0: 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
fbe0: 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f  ("Returning CKR_
fbf0: 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
fc00: 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b  PORTED (%i)", CK
fc10: 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53  R_FUNCTION_NOT_S
fc20: 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74  UPPORTED);...ret
fc30: 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  urn(CKR_FUNCTION
fc40: 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b  _NOT_SUPPORTED);
fc50: 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55  .}..CK_DEFINE_FU
fc60: 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f  NCTION(CK_RV, C_
fc70: 4c 6f 67 69 6e 29 28 43 4b 5f 53 45 53 53 49 4f  Login)(CK_SESSIO
fc80: 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f  N_HANDLE hSessio
fc90: 6e 2c 20 43 4b 5f 55 53 45 52 5f 54 59 50 45 20  n, CK_USER_TYPE 
fca0: 75 73 65 72 54 79 70 65 2c 20 43 4b 5f 55 54 46  userType, CK_UTF
fcb0: 38 43 48 41 52 5f 50 54 52 20 70 50 69 6e 2c 20  8CHAR_PTR pPin, 
fcc0: 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 69 6e 4c 65  CK_ULONG ulPinLe
fcd0: 6e 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f  n) {..int mutex_
fce0: 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59  retval;...CACKEY
fcf0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
fd00: 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
fd10: 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69  !cackey_initiali
fd20: 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  zed) {...CACKEY_
fd30: 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
fd40: 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61  ror.  Not initia
fd50: 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  lized.");....ret
fd60: 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49  urn(CKR_CRYPTOKI
fd70: 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
fd80: 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68 53 65 73  );..}...if (hSes
fd90: 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65  sion == 0 || hSe
fda0: 73 73 69 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66  ssion >= (sizeof
fdb0: 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  (cackey_sessions
fdc0: 29 20 2f 20 73 69 7a 65 6f 66 28 63 61 63 6b 65  ) / sizeof(cacke
fdd0: 79 5f 73 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29  y_sessions[0])))
fde0: 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
fdf0: 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
fe00: 20 20 53 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66    Session out of
fe10: 20 72 61 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09   range.");......
fe20: 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49  return(CKR_SESSI
fe30: 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49  ON_HANDLE_INVALI
fe40: 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 75 73 65  D);..}...if (use
fe50: 72 54 79 70 65 20 21 3d 20 43 4b 55 5f 55 53 45  rType != CKU_USE
fe60: 52 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45  R) {...CACKEY_DE
fe70: 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
fe80: 72 2e 20 20 57 65 20 6f 6e 6c 79 20 73 75 70 70  r.  We only supp
fe90: 6f 72 74 20 55 53 45 52 20 6d 6f 64 65 2c 20 61  ort USER mode, a
fea0: 73 6b 65 64 20 66 6f 72 20 25 6c 75 20 6d 6f 64  sked for %lu mod
feb0: 65 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c  e.", (unsigned l
fec0: 6f 6e 67 29 20 75 73 65 72 54 79 70 65 29 0a 0a  ong) userType)..
fed0: 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 55 53 45  ..return(CKR_USE
fee0: 52 5f 54 59 50 45 5f 49 4e 56 41 4c 49 44 29 3b  R_TYPE_INVALID);
fef0: 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76  ..}...mutex_retv
ff00: 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65  al = cackey_mute
ff10: 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69  x_lock(cackey_bi
ff20: 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74  glock);..if (mut
ff30: 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20  ex_retval != 0) 
ff40: 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
ff50: 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
ff60: 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e   Locking failed.
ff70: 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
ff80: 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29  R_GENERAL_ERROR)
ff90: 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b  ;..}...if (!cack
ffa0: 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
ffb0: 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a  sion].active) {.
ffc0: 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75  ..cackey_mutex_u
ffd0: 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67  nlock(cackey_big
ffe0: 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59  lock);....CACKEY
fff0: 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
10000 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e  rror.  Session n
10010 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09  ot active.");...
10020 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45  ...return(CKR_SE
10030 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56  SSION_HANDLE_INV
10040 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b  ALID);..}...cack
10050 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
10060 73 69 6f 6e 5d 2e 73 74 61 74 65 20 3d 20 43 4b  sion].state = CK
10070 53 5f 52 4f 5f 55 53 45 52 5f 46 55 4e 43 54 49  S_RO_USER_FUNCTI
10080 4f 4e 53 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74  ONS;...mutex_ret
10090 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74  val = cackey_mut
100a0 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79  ex_unlock(cackey
100b0 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28  _biglock);..if (
100c0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20  mutex_retval != 
100d0 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45  0) {...CACKEY_DE
100e0 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
100f0 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61  r.  Unlocking fa
10100 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75  iled.");....retu
10110 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45  rn(CKR_GENERAL_E
10120 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b  RROR);..}...CACK
10130 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
10140 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f  "Returning CKR_O
10150 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29  K (%i)", CKR_OK)
10160 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f  ;...return(CKR_O
10170 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45  K);.}..CK_DEFINE
10180 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c  _FUNCTION(CK_RV,
10190 20 43 5f 4c 6f 67 6f 75 74 29 28 43 4b 5f 53 45   C_Logout)(CK_SE
101a0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65  SSION_HANDLE hSe
101b0 73 73 69 6f 6e 29 20 7b 0a 09 69 6e 74 20 6d 75  ssion) {..int mu
101c0 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41  tex_retval;...CA
101d0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
101e0 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09  F("Called.");...
101f0 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74  if (!cackey_init
10200 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43  ialized) {...CAC
10210 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
10220 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e  ("Error.  Not in
10230 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09  itialized.");...
10240 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50  .return(CKR_CRYP
10250 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c  TOKI_NOT_INITIAL
10260 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28  IZED);..}...if (
10270 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c  hSession == 0 ||
10280 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69   hSession >= (si
10290 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73  zeof(cackey_sess
102a0 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63  ions) / sizeof(c
102b0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30  ackey_sessions[0
102c0 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  ]))) {...CACKEY_
102d0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
102e0 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75  ror.  Session ou
102f0 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09  t of range.");..
10300 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53  ....return(CKR_S
10310 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e  ESSION_HANDLE_IN
10320 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d 75 74  VALID);..}...mut
10330 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b  ex_retval = cack
10340 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63 61  ey_mutex_lock(ca
10350 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09  ckey_biglock);..
10360 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c  if (mutex_retval
10370 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45   != 0) {...CACKE
10380 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
10390 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67 20  Error.  Locking 
103a0 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65  failed.");....re
103b0 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c  turn(CKR_GENERAL
103c0 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69 66  _ERROR);..}...if
103d0 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69 6f   (!cackey_sessio
103e0 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63 74  ns[hSession].act
103f0 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f  ive) {...cackey_
10400 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63  mutex_unlock(cac
10410 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09  key_biglock);...
10420 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
10430 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65  INTF("Error.  Se
10440 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76 65  ssion not active
10450 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e  .");......return
10460 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e  (CKR_SESSION_HAN
10470 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d  DLE_INVALID);..}
10480 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f  ...cackey_sessio
10490 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 74 61  ns[hSession].sta
104a0 74 65 20 3d 20 43 4b 53 5f 52 4f 5f 50 55 42 4c  te = CKS_RO_PUBL
104b0 49 43 5f 53 45 53 53 49 4f 4e 3b 0a 0a 09 6d 75  IC_SESSION;...mu
104c0 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63  tex_retval = cac
104d0 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b  key_mutex_unlock
104e0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29  (cackey_biglock)
104f0 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74  ;..if (mutex_ret
10500 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41  val != 0) {...CA
10510 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
10520 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63  F("Error.  Unloc
10530 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a  king failed.");.
10540 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45  ...return(CKR_GE
10550 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  NERAL_ERROR);..}
10560 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
10570 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
10580 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20  g CKR_OK (%i)", 
10590 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72  CKR_OK);...retur
105a0 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b  n(CKR_OK);.}..CK
105b0 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e  _DEFINE_FUNCTION
105c0 28 43 4b 5f 52 56 2c 20 43 5f 43 72 65 61 74 65  (CK_RV, C_Create
105d0 4f 62 6a 65 63 74 29 28 43 4b 5f 53 45 53 53 49  Object)(CK_SESSI
105e0 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69  ON_HANDLE hSessi
105f0 6f 6e 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45  on, CK_ATTRIBUTE
10600 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20  _PTR pTemplate, 
10610 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74  CK_ULONG ulCount
10620 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44  , CK_OBJECT_HAND
10630 4c 45 5f 50 54 52 20 70 68 4f 62 6a 65 63 74 29  LE_PTR phObject)
10640 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47   {..CACKEY_DEBUG
10650 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e  _PRINTF("Called.
10660 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ");...if (!cacke
10670 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b  y_initialized) {
10680 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
10690 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
106a0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  Not initialized.
106b0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
106c0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49  R_CRYPTOKI_NOT_I
106d0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a  NITIALIZED);..}.
106e0 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
106f0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
10700 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f   CKR_FUNCTION_NO
10710 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29  T_SUPPORTED (%i)
10720 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  ", CKR_FUNCTION_
10730 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a  NOT_SUPPORTED);.
10740 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e  ..return(CKR_FUN
10750 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
10760 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49  TED);.}..CK_DEFI
10770 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52  NE_FUNCTION(CK_R
10780 56 2c 20 43 5f 43 6f 70 79 4f 62 6a 65 63 74 29  V, C_CopyObject)
10790 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44  (CK_SESSION_HAND
107a0 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f  LE hSession, CK_
107b0 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4f  OBJECT_HANDLE hO
107c0 62 6a 65 63 74 2c 20 43 4b 5f 41 54 54 52 49 42  bject, CK_ATTRIB
107d0 55 54 45 5f 50 54 52 20 70 54 65 6d 70 6c 61 74  UTE_PTR pTemplat
107e0 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 43 6f  e, CK_ULONG ulCo
107f0 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48  unt, CK_OBJECT_H
10800 41 4e 44 4c 45 5f 50 54 52 20 70 68 4e 65 77 4f  ANDLE_PTR phNewO
10810 62 6a 65 63 74 29 20 7b 0a 09 43 41 43 4b 45 59  bject) {..CACKEY
10820 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
10830 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
10840 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69  !cackey_initiali
10850 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  zed) {...CACKEY_
10860 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
10870 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61  ror.  Not initia
10880 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  lized.");....ret
10890 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49  urn(CKR_CRYPTOKI
108a0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
108b0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44  );..}...CACKEY_D
108c0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
108d0 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54  urning CKR_FUNCT
108e0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
108f0 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e  D (%i)", CKR_FUN
10900 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
10910 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  TED);...return(C
10920 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
10930 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43  SUPPORTED);.}..C
10940 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f  K_DEFINE_FUNCTIO
10950 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 73 74 72  N(CK_RV, C_Destr
10960 6f 79 4f 62 6a 65 63 74 29 28 43 4b 5f 53 45 53  oyObject)(CK_SES
10970 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73  SION_HANDLE hSes
10980 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f  sion, CK_OBJECT_
10990 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 74 29 20  HANDLE hObject) 
109a0 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  {..CACKEY_DEBUG_
109b0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22  PRINTF("Called."
109c0 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79  );...if (!cackey
109d0 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a  _initialized) {.
109e0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
109f0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e  RINTF("Error.  N
10a00 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22  ot initialized."
10a10 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
10a20 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e  _CRYPTOKI_NOT_IN
10a30 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a  ITIALIZED);..}..
10a40 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
10a50 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20  INTF("Returning 
10a60 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54  CKR_FUNCTION_NOT
10a70 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22  _SUPPORTED (%i)"
10a80 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  , CKR_FUNCTION_N
10a90 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a  OT_SUPPORTED);..
10aa0 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43  .return(CKR_FUNC
10ab0 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54  TION_NOT_SUPPORT
10ac0 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e  ED);.}..CK_DEFIN
10ad0 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56  E_FUNCTION(CK_RV
10ae0 2c 20 43 5f 47 65 74 4f 62 6a 65 63 74 53 69 7a  , C_GetObjectSiz
10af0 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41  e)(CK_SESSION_HA
10b00 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43  NDLE hSession, C
10b10 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20  K_OBJECT_HANDLE 
10b20 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 55 4c 4f 4e  hObject, CK_ULON
10b30 47 5f 50 54 52 20 70 75 6c 53 69 7a 65 29 20 7b  G_PTR pulSize) {
10b40 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
10b50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29  RINTF("Called.")
10b60 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f  ;...if (!cackey_
10b70 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09  initialized) {..
10b80 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
10b90 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f  INTF("Error.  No
10ba0 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29  t initialized.")
10bb0 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  ;....return(CKR_
10bc0 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49  CRYPTOKI_NOT_INI
10bd0 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09  TIALIZED);..}...
10be0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
10bf0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43  NTF("Returning C
10c00 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
10c10 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c  SUPPORTED (%i)",
10c20 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f   CKR_FUNCTION_NO
10c30 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09  T_SUPPORTED);...
10c40 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54  return(CKR_FUNCT
10c50 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
10c60 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45  D);.}..CK_DEFINE
10c70 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c  _FUNCTION(CK_RV,
10c80 20 43 5f 47 65 74 41 74 74 72 69 62 75 74 65 56   C_GetAttributeV
10c90 61 6c 75 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e  alue)(CK_SESSION
10ca0 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e  _HANDLE hSession
10cb0 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44  , CK_OBJECT_HAND
10cc0 4c 45 20 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 41  LE hObject, CK_A
10cd0 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 54 65  TTRIBUTE_PTR pTe
10ce0 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47  mplate, CK_ULONG
10cf0 20 75 6c 43 6f 75 6e 74 29 20 7b 0a 09 43 4b 5f   ulCount) {..CK_
10d00 41 54 54 52 49 42 55 54 45 20 2a 63 75 72 72 5f  ATTRIBUTE *curr_
10d10 61 74 74 72 3b 0a 09 73 74 72 75 63 74 20 63 61  attr;..struct ca
10d20 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 2a 69  ckey_identity *i
10d30 64 65 6e 74 69 74 79 3b 0a 09 75 6e 73 69 67 6e  dentity;..unsign
10d40 65 64 20 6c 6f 6e 67 20 69 64 65 6e 74 69 74 79  ed long identity
10d50 5f 69 64 78 2c 20 61 74 74 72 5f 69 64 78 2c 20  _idx, attr_idx, 
10d60 73 65 73 73 5f 61 74 74 72 5f 69 64 78 2c 20 6e  sess_attr_idx, n
10d70 75 6d 5f 69 64 73 3b 0a 09 69 6e 74 20 6d 75 74  um_ids;..int mut
10d80 65 78 5f 72 65 74 76 61 6c 3b 0a 09 43 4b 5f 52  ex_retval;..CK_R
10d90 56 20 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 4f  V retval = CKR_O
10da0 4b 3b 0a 09 43 4b 5f 56 4f 49 44 5f 50 54 52 20  K;..CK_VOID_PTR 
10db0 70 56 61 6c 75 65 3b 0a 09 43 4b 5f 55 4c 4f 4e  pValue;..CK_ULON
10dc0 47 20 75 6c 56 61 6c 75 65 4c 65 6e 3b 0a 0a 09  G ulValueLen;...
10dd0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
10de0 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a  NTF("Called.");.
10df0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e  ..if (!cackey_in
10e00 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43  itialized) {...C
10e10 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
10e20 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20  TF("Error.  Not 
10e30 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a  initialized.");.
10e40 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52  ...return(CKR_CR
10e50 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49  YPTOKI_NOT_INITI
10e60 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66  ALIZED);..}...if
10e70 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20   (hSession == 0 
10e80 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28  || hSession >= (
10e90 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65  sizeof(cackey_se
10ea0 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66  ssions) / sizeof
10eb0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  (cackey_sessions
10ec0 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45  [0]))) {...CACKE
10ed0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
10ee0 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20  Error.  Session 
10ef0 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b  out of range.");
10f00 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  ......return(CKR
10f10 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f  _SESSION_HANDLE_
10f20 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69  INVALID);..}...i
10f30 66 20 28 68 4f 62 6a 65 63 74 20 3d 3d 20 30 29  f (hObject == 0)
10f40 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
10f50 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
10f60 20 20 4f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20    Object handle 
10f70 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b  out of range.");
10f80 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  ......return(CKR
10f90 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 49  _OBJECT_HANDLE_I
10fa0 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66  NVALID);..}...if
10fb0 20 28 75 6c 43 6f 75 6e 74 20 3d 3d 20 30 29 20   (ulCount == 0) 
10fc0 7b 0a 09 09 2f 2a 20 53 68 6f 72 74 20 63 69 72  {.../* Short cir
10fd0 63 75 69 74 2c 20 69 66 20 7a 65 72 6f 20 6f 62  cuit, if zero ob
10fe0 6a 65 63 74 73 20 77 65 72 65 20 73 70 65 63 69  jects were speci
10ff0 66 69 65 64 20 72 65 74 75 72 6e 20 7a 65 72 6f  fied return zero
11000 20 69 74 65 6d 73 20 69 6d 6d 65 64 69 61 74 65   items immediate
11010 6c 79 20 2a 2f 0a 09 09 43 41 43 4b 45 59 5f 44  ly */...CACKEY_D
11020 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
11030 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25  urning CKR_OK (%
11040 69 29 20 28 73 68 6f 72 74 20 63 69 72 63 75 69  i) (short circui
11050 74 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09  t)", CKR_OK);...
11060 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b  .return(CKR_OK);
11070 0a 09 7d 0a 0a 09 69 66 20 28 70 54 65 6d 70 6c  ..}...if (pTempl
11080 61 74 65 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09  ate == NULL) {..
11090 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
110a0 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 70 54  INTF("Error.  pT
110b0 65 6d 70 6c 61 74 65 20 69 73 20 4e 55 4c 4c 2e  emplate is NULL.
110c0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
110d0 52 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29  R_ARGUMENTS_BAD)
110e0 3b 0a 09 7d 0a 0a 09 69 64 65 6e 74 69 74 79 5f  ;..}...identity_
110f0 69 64 78 20 3d 20 68 4f 62 6a 65 63 74 20 2d 20  idx = hObject - 
11100 31 3b 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61  1;...mutex_retva
11110 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78  l = cackey_mutex
11120 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67  _lock(cackey_big
11130 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65  lock);..if (mute
11140 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b  x_retval != 0) {
11150 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
11160 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
11170 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22  Locking failed."
11180 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
11190 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b  _GENERAL_ERROR);
111a0 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ..}...if (!cacke
111b0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73  y_sessions[hSess
111c0 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09  ion].active) {..
111d0 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e  .cackey_mutex_un
111e0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c  lock(cackey_bigl
111f0 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f  ock);....CACKEY_
11200 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
11210 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f  ror.  Session no
11220 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a  t active.");....
11230 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53  ..return(CKR_SES
11240 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41  SION_HANDLE_INVA
11250 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6e 75 6d 5f 69  LID);..}...num_i
11260 64 73 20 3d 20 63 61 63 6b 65 79 5f 73 65 73 73  ds = cackey_sess
11270 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69  ions[hSession].i
11280 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74 3b  dentities_count;
11290 0a 0a 09 69 66 20 28 69 64 65 6e 74 69 74 79 5f  ...if (identity_
112a0 69 64 78 20 3e 3d 20 6e 75 6d 5f 69 64 73 29 20  idx >= num_ids) 
112b0 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78  {...cackey_mutex
112c0 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62  _unlock(cackey_b
112d0 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b  iglock);....CACK
112e0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
112f0 22 45 72 72 6f 72 2e 20 20 4f 62 6a 65 63 74 20  "Error.  Object 
11300 68 61 6e 64 6c 65 20 6f 75 74 20 6f 66 20 72 61  handle out of ra
11310 6e 67 65 2e 20 20 69 64 65 6e 74 69 74 79 5f 69  nge.  identity_i
11320 64 78 20 3d 20 25 6c 75 2c 20 6e 75 6d 5f 69 64  dx = %lu, num_id
11330 73 20 3d 20 25 6c 75 2e 22 2c 20 28 75 6e 73 69  s = %lu.", (unsi
11340 67 6e 65 64 20 6c 6f 6e 67 29 20 69 64 65 6e 74  gned long) ident
11350 69 74 79 5f 69 64 78 2c 20 28 75 6e 73 69 67 6e  ity_idx, (unsign
11360 65 64 20 6c 6f 6e 67 29 20 6e 75 6d 5f 69 64 73  ed long) num_ids
11370 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
11380 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 49  _OBJECT_HANDLE_I
11390 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 64  NVALID);..}...id
113a0 65 6e 74 69 74 79 20 3d 20 26 63 61 63 6b 65 79  entity = &cackey
113b0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69  _sessions[hSessi
113c0 6f 6e 5d 2e 69 64 65 6e 74 69 74 69 65 73 5b 69  on].identities[i
113d0 64 65 6e 74 69 74 79 5f 69 64 78 5d 3b 0a 0a 09  dentity_idx];...
113e0 66 6f 72 20 28 61 74 74 72 5f 69 64 78 20 3d 20  for (attr_idx = 
113f0 30 3b 20 61 74 74 72 5f 69 64 78 20 3c 20 75 6c  0; attr_idx < ul
11400 43 6f 75 6e 74 3b 20 61 74 74 72 5f 69 64 78 2b  Count; attr_idx+
11410 2b 29 20 7b 0a 09 09 63 75 72 72 5f 61 74 74 72  +) {...curr_attr
11420 20 3d 20 26 70 54 65 6d 70 6c 61 74 65 5b 61 74   = &pTemplate[at
11430 74 72 5f 69 64 78 5d 3b 0a 0a 09 09 70 56 61 6c  tr_idx];....pVal
11440 75 65 20 3d 20 4e 55 4c 4c 3b 0a 09 09 75 6c 56  ue = NULL;...ulV
11450 61 6c 75 65 4c 65 6e 20 3d 20 28 43 4b 5f 4c 4f  alueLen = (CK_LO
11460 4e 47 29 20 2d 31 3b 0a 0a 09 09 43 41 43 4b 45  NG) -1;....CACKE
11470 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
11480 4c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 74 74 72  Looking for attr
11490 69 62 75 74 65 20 30 78 25 30 38 6c 78 20 28 69  ibute 0x%08lx (i
114a0 64 65 6e 74 69 74 79 3a 25 6c 75 29 20 2e 2e 2e  dentity:%lu) ...
114b0 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  ", (unsigned lon
114c0 67 29 20 63 75 72 72 5f 61 74 74 72 2d 3e 74 79  g) curr_attr->ty
114d0 70 65 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f  pe, (unsigned lo
114e0 6e 67 29 20 69 64 65 6e 74 69 74 79 5f 69 64 78  ng) identity_idx
114f0 29 3b 0a 0a 09 09 66 6f 72 20 28 73 65 73 73 5f  );....for (sess_
11500 61 74 74 72 5f 69 64 78 20 3d 20 30 3b 20 73 65  attr_idx = 0; se
11510 73 73 5f 61 74 74 72 5f 69 64 78 20 3c 20 69 64  ss_attr_idx < id
11520 65 6e 74 69 74 79 2d 3e 61 74 74 72 69 62 75 74  entity->attribut
11530 65 73 5f 63 6f 75 6e 74 3b 20 73 65 73 73 5f 61  es_count; sess_a
11540 74 74 72 5f 69 64 78 2b 2b 29 20 7b 0a 09 09 09  ttr_idx++) {....
11550 69 66 20 28 69 64 65 6e 74 69 74 79 2d 3e 61 74  if (identity->at
11560 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74  tributes[sess_at
11570 74 72 5f 69 64 78 5d 2e 74 79 70 65 20 3d 3d 20  tr_idx].type == 
11580 63 75 72 72 5f 61 74 74 72 2d 3e 74 79 70 65 29  curr_attr->type)
11590 20 7b 0a 09 09 09 09 43 41 43 4b 45 59 5f 44 45   {.....CACKEY_DE
115a0 42 55 47 5f 50 52 49 4e 54 46 28 22 20 2e 2e 2e  BUG_PRINTF(" ...
115b0 20 66 6f 75 6e 64 20 69 74 2c 20 70 56 61 6c 75   found it, pValu
115c0 65 20 3d 20 25 70 2c 20 75 6c 56 61 6c 75 65 4c  e = %p, ulValueL
115d0 65 6e 20 3d 20 25 6c 75 22 2c 20 69 64 65 6e 74  en = %lu", ident
115e0 69 74 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5b  ity->attributes[
115f0 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 70  sess_attr_idx].p
11600 56 61 6c 75 65 2c 20 69 64 65 6e 74 69 74 79 2d  Value, identity-
11610 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 73  >attributes[sess
11620 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c 56 61 6c  _attr_idx].ulVal
11630 75 65 4c 65 6e 29 3b 0a 09 09 09 09 0a 09 09 09  ueLen);.........
11640 09 70 56 61 6c 75 65 20 3d 20 69 64 65 6e 74 69  .pValue = identi
11650 74 79 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73  ty->attributes[s
11660 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 70 56  ess_attr_idx].pV
11670 61 6c 75 65 3b 0a 09 09 09 09 75 6c 56 61 6c 75  alue;.....ulValu
11680 65 4c 65 6e 20 3d 20 69 64 65 6e 74 69 74 79 2d  eLen = identity-
11690 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 73  >attributes[sess
116a0 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c 56 61 6c  _attr_idx].ulVal
116b0 75 65 4c 65 6e 3b 0a 09 09 09 7d 0a 09 09 7d 0a  ueLen;....}...}.
116c0 0a 09 09 69 66 20 28 63 75 72 72 5f 61 74 74 72  ...if (curr_attr
116d0 2d 3e 70 56 61 6c 75 65 20 26 26 20 70 56 61 6c  ->pValue && pVal
116e0 75 65 29 20 7b 0a 09 09 09 69 66 20 28 63 75 72  ue) {....if (cur
116f0 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75 65 4c  r_attr->ulValueL
11700 65 6e 20 3e 3d 20 75 6c 56 61 6c 75 65 4c 65 6e  en >= ulValueLen
11710 29 20 7b 0a 09 09 09 09 6d 65 6d 63 70 79 28 63  ) {.....memcpy(c
11720 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65  urr_attr->pValue
11730 2c 20 70 56 61 6c 75 65 2c 20 75 6c 56 61 6c 75  , pValue, ulValu
11740 65 4c 65 6e 29 3b 0a 09 09 09 7d 20 65 6c 73 65  eLen);....} else
11750 20 7b 0a 09 09 09 09 75 6c 56 61 6c 75 65 4c 65   {.....ulValueLe
11760 6e 20 3d 20 28 43 4b 5f 4c 4f 4e 47 29 20 2d 31  n = (CK_LONG) -1
11770 3b 0a 0a 09 09 09 09 72 65 74 76 61 6c 20 3d 20  ;......retval = 
11780 43 4b 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53  CKR_BUFFER_TOO_S
11790 4d 41 4c 4c 3b 0a 09 09 09 7d 0a 09 09 7d 0a 0a  MALL;....}...}..
117a0 09 09 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56  ..curr_attr->ulV
117b0 61 6c 75 65 4c 65 6e 20 3d 20 75 6c 56 61 6c 75  alueLen = ulValu
117c0 65 4c 65 6e 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78  eLen;..}...mutex
117d0 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79  _retval = cackey
117e0 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61  _mutex_unlock(ca
117f0 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09  ckey_biglock);..
11800 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c  if (mutex_retval
11810 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45   != 0) {...CACKE
11820 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
11830 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e  Error.  Unlockin
11840 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09  g failed.");....
11850 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52  return(CKR_GENER
11860 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09  AL_ERROR);..}...
11870 69 66 20 28 72 65 74 76 61 6c 20 3d 3d 20 43 4b  if (retval == CK
11880 52 5f 41 54 54 52 49 42 55 54 45 5f 54 59 50 45  R_ATTRIBUTE_TYPE
11890 5f 49 4e 56 41 4c 49 44 29 20 7b 0a 09 09 43 41  _INVALID) {...CA
118a0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
118b0 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52  F("Returning CKR
118c0 5f 41 54 54 52 49 42 55 54 45 5f 54 59 50 45 5f  _ATTRIBUTE_TYPE_
118d0 49 4e 56 41 4c 49 44 20 28 25 69 29 22 2c 20 28  INVALID (%i)", (
118e0 69 6e 74 29 20 72 65 74 76 61 6c 29 3b 0a 09 7d  int) retval);..}
118f0 20 65 6c 73 65 20 69 66 20 28 72 65 74 76 61 6c   else if (retval
11900 20 3d 3d 20 43 4b 52 5f 42 55 46 46 45 52 5f 54   == CKR_BUFFER_T
11910 4f 4f 5f 53 4d 41 4c 4c 29 20 7b 0a 09 09 43 41  OO_SMALL) {...CA
11920 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
11930 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52  F("Returning CKR
11940 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c  _BUFFER_TOO_SMAL
11950 4c 20 28 25 69 29 22 2c 20 28 69 6e 74 29 20 72  L (%i)", (int) r
11960 65 74 76 61 6c 29 3b 0a 09 7d 20 65 6c 73 65 20  etval);..} else 
11970 69 66 20 28 72 65 74 76 61 6c 20 3d 3d 20 43 4b  if (retval == CK
11980 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59  R_OK) {...CACKEY
11990 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52  _DEBUG_PRINTF("R
119a0 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20  eturning CKR_OK 
119b0 28 25 69 29 22 2c 20 28 69 6e 74 29 20 72 65 74  (%i)", (int) ret
119c0 76 61 6c 29 3b 0a 09 7d 20 65 6c 73 65 20 7b 0a  val);..} else {.
119d0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
119e0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
119f0 20 25 69 22 2c 20 28 69 6e 74 29 20 72 65 74 76   %i", (int) retv
11a00 61 6c 29 3b 0a 09 7d 0a 0a 09 72 65 74 75 72 6e  al);..}...return
11a10 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a 43 4b 5f  (retval);.}..CK_
11a20 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28  DEFINE_FUNCTION(
11a30 43 4b 5f 52 56 2c 20 43 5f 53 65 74 41 74 74 72  CK_RV, C_SetAttr
11a40 69 62 75 74 65 56 61 6c 75 65 29 28 43 4b 5f 53  ibuteValue)(CK_S
11a50 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53  ESSION_HANDLE hS
11a60 65 73 73 69 6f 6e 2c 20 43 4b 5f 4f 42 4a 45 43  ession, CK_OBJEC
11a70 54 5f 48 41 4e 44 4c 45 20 68 4f 62 6a 65 63 74  T_HANDLE hObject
11a80 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50  , CK_ATTRIBUTE_P
11a90 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b  TR pTemplate, CK
11aa0 5f 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 29 20  _ULONG ulCount) 
11ab0 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  {..CACKEY_DEBUG_
11ac0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22  PRINTF("Called."
11ad0 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79  );...if (!cackey
11ae0 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a  _initialized) {.
11af0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
11b00 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e  RINTF("Error.  N
11b10 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22  ot initialized."
11b20 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
11b30 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e  _CRYPTOKI_NOT_IN
11b40 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a  ITIALIZED);..}..
11b50 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
11b60 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20  INTF("Returning 
11b70 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54  CKR_FUNCTION_NOT
11b80 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22  _SUPPORTED (%i)"
11b90 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  , CKR_FUNCTION_N
11ba0 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a  OT_SUPPORTED);..
11bb0 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43  .return(CKR_FUNC
11bc0 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54  TION_NOT_SUPPORT
11bd0 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e  ED);.}..CK_DEFIN
11be0 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56  E_FUNCTION(CK_RV
11bf0 2c 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 49  , C_FindObjectsI
11c00 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f  nit)(CK_SESSION_
11c10 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c  HANDLE hSession,
11c20 20 43 4b 5f 41 54 54 52 49 42 55 54 45 5f 50 54   CK_ATTRIBUTE_PT
11c30 52 20 70 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f  R pTemplate, CK_
11c40 55 4c 4f 4e 47 20 75 6c 43 6f 75 6e 74 29 20 7b  ULONG ulCount) {
11c50 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72 65 74 76  ..int mutex_retv
11c60 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  al;...CACKEY_DEB
11c70 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65  UG_PRINTF("Calle
11c80 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63  d.");...if (!cac
11c90 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29  key_initialized)
11ca0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
11cb0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
11cc0 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65    Not initialize
11cd0 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  d.");....return(
11ce0 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54  CKR_CRYPTOKI_NOT
11cf0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09  _INITIALIZED);..
11d00 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e  }...if (hSession
11d10 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f   == 0 || hSessio
11d20 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63  n >= (sizeof(cac
11d30 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20  key_sessions) / 
11d40 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65  sizeof(cackey_se
11d50 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09  ssions[0]))) {..
11d60 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
11d70 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65  INTF("Error.  Se
11d80 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e  ssion out of ran
11d90 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75  ge.");......retu
11da0 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48  rn(CKR_SESSION_H
11db0 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a  ANDLE_INVALID);.
11dc0 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61  .}...mutex_retva
11dd0 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78  l = cackey_mutex
11de0 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67  _lock(cackey_big
11df0 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65  lock);..if (mute
11e00 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b  x_retval != 0) {
11e10 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
11e20 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
11e30 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22  Locking failed."
11e40 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
11e50 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b  _GENERAL_ERROR);
11e60 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ..}...if (!cacke
11e70 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73  y_sessions[hSess
11e80 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09  ion].active) {..
11e90 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e  .cackey_mutex_un
11ea0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c  lock(cackey_bigl
11eb0 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f  ock);....CACKEY_
11ec0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
11ed0 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f  ror.  Session no
11ee0 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a  t active.");....
11ef0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53  ..return(CKR_SES
11f00 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41  SION_HANDLE_INVA
11f10 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 63  LID);..}...if (c
11f20 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68  ackey_sessions[h
11f30 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f  Session].search_
11f40 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b  active) {...cack
11f50 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28  ey_mutex_unlock(
11f60 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b  cackey_biglock);
11f70 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
11f80 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
11f90 20 53 65 61 72 63 68 20 61 6c 72 65 61 64 79 20   Search already 
11fa0 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09  active.");......
11fb0 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45 52 41  return(CKR_OPERA
11fc0 54 49 4f 4e 5f 41 43 54 49 56 45 29 3b 0a 09 7d  TION_ACTIVE);..}
11fd0 0a 0a 09 69 66 20 28 70 54 65 6d 70 6c 61 74 65  ...if (pTemplate
11fe0 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 69 66   != NULL) {...if
11ff0 20 28 75 6c 43 6f 75 6e 74 20 21 3d 20 30 29 20   (ulCount != 0) 
12000 7b 0a 09 09 09 63 61 63 6b 65 79 5f 73 65 73 73  {....cackey_sess
12010 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73  ions[hSession].s
12020 65 61 72 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e  earch_query_coun
12030 74 20 3d 20 75 6c 43 6f 75 6e 74 3b 0a 09 09 09  t = ulCount;....
12040 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b  cackey_sessions[
12050 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68  hSession].search
12060 5f 71 75 65 72 79 20 3d 20 6d 61 6c 6c 6f 63 28  _query = malloc(
12070 75 6c 43 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66  ulCount * sizeof
12080 28 2a 70 54 65 6d 70 6c 61 74 65 29 29 3b 0a 0a  (*pTemplate));..
12090 09 09 09 6d 65 6d 63 70 79 28 63 61 63 6b 65 79  ...memcpy(cackey
120a0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69  _sessions[hSessi
120b0 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79  on].search_query
120c0 2c 20 70 54 65 6d 70 6c 61 74 65 2c 20 75 6c 43  , pTemplate, ulC
120d0 6f 75 6e 74 20 2a 20 73 69 7a 65 6f 66 28 2a 70  ount * sizeof(*p
120e0 54 65 6d 70 6c 61 74 65 29 29 3b 0a 09 09 7d 20  Template));...} 
120f0 65 6c 73 65 20 7b 0a 09 09 09 63 61 63 6b 65 79  else {....cackey
12100 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69  _sessions[hSessi
12110 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79  on].search_query
12120 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 09 09 09 63  _count = 0;....c
12130 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68  ackey_sessions[h
12140 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f  Session].search_
12150 71 75 65 72 79 20 3d 20 4e 55 4c 4c 3b 0a 09 09  query = NULL;...
12160 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 69 66  }..} else {...if
12170 20 28 75 6c 43 6f 75 6e 74 20 21 3d 20 30 29 20   (ulCount != 0) 
12180 7b 0a 09 09 09 63 61 63 6b 65 79 5f 6d 75 74 65  {....cackey_mute
12190 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f  x_unlock(cackey_
121a0 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 09 43 41  biglock);.....CA
121b0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
121c0 46 28 22 45 72 72 6f 72 2e 20 20 53 65 61 72 63  F("Error.  Searc
121d0 68 20 71 75 65 72 79 20 73 70 65 63 69 66 69 65  h query specifie
121e0 64 20 61 73 20 4e 55 4c 4c 2c 20 62 75 74 20 6e  d as NULL, but n
121f0 75 6d 62 65 72 20 6f 66 20 71 75 65 72 79 20 74  umber of query t
12200 65 72 6d 73 20 6e 6f 74 20 73 70 65 63 69 66 69  erms not specifi
12210 65 64 20 61 73 20 30 2e 22 29 3b 0a 0a 09 09 09  ed as 0.");.....
12220 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d  return(CKR_ARGUM
12230 45 4e 54 53 5f 42 41 44 29 3b 0a 09 09 7d 0a 0a  ENTS_BAD);...}..
12240 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  ..cackey_session
12250 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72  s[hSession].sear
12260 63 68 5f 71 75 65 72 79 5f 63 6f 75 6e 74 20 3d  ch_query_count =
12270 20 30 3b 0a 09 09 63 61 63 6b 65 79 5f 73 65 73   0;...cackey_ses
12280 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e  sions[hSession].
12290 73 65 61 72 63 68 5f 71 75 65 72 79 20 3d 20 4e  search_query = N
122a0 55 4c 4c 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79  ULL;..}...cackey
122b0 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69  _sessions[hSessi
122c0 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 74 69 76  on].search_activ
122d0 65 20 3d 20 31 3b 0a 09 63 61 63 6b 65 79 5f 73  e = 1;..cackey_s
122e0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e  essions[hSession
122f0 5d 2e 73 65 61 72 63 68 5f 63 75 72 72 5f 69 64  ].search_curr_id
12300 20 3d 20 30 3b 0a 0a 09 6d 75 74 65 78 5f 72 65   = 0;...mutex_re
12310 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75  tval = cackey_mu
12320 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65  tex_unlock(cacke
12330 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20  y_biglock);..if 
12340 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 21 3d  (mutex_retval !=
12350 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44   0) {...CACKEY_D
12360 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
12370 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66  or.  Unlocking f
12380 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  ailed.");....ret
12390 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f  urn(CKR_GENERAL_
123a0 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43  ERROR);..}...CAC
123b0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
123c0 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f  ("Returning CKR_
123d0 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b  OK (%i)", CKR_OK
123e0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f  );...return(CKR_
123f0 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e  OK);.}..CK_DEFIN
12400 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56  E_FUNCTION(CK_RV
12410 2c 20 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 29  , C_FindObjects)
12420 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44  (CK_SESSION_HAND
12430 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f  LE hSession, CK_
12440 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54  OBJECT_HANDLE_PT
12450 52 20 70 68 4f 62 6a 65 63 74 2c 20 43 4b 5f 55  R phObject, CK_U
12460 4c 4f 4e 47 20 75 6c 4d 61 78 4f 62 6a 65 63 74  LONG ulMaxObject
12470 43 6f 75 6e 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f  Count, CK_ULONG_
12480 50 54 52 20 70 75 6c 4f 62 6a 65 63 74 43 6f 75  PTR pulObjectCou
12490 6e 74 29 20 7b 0a 09 73 74 72 75 63 74 20 63 61  nt) {..struct ca
124a0 63 6b 65 79 5f 69 64 65 6e 74 69 74 79 20 2a 63  ckey_identity *c
124b0 75 72 72 5f 69 64 3b 0a 09 43 4b 5f 41 54 54 52  urr_id;..CK_ATTR
124c0 49 42 55 54 45 20 2a 63 75 72 72 5f 61 74 74 72  IBUTE *curr_attr
124d0 3b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 63 75 72 72  ;..CK_ULONG curr
124e0 5f 69 64 5f 69 64 78 2c 20 63 75 72 72 5f 6f 75  _id_idx, curr_ou
124f0 74 5f 69 64 5f 69 64 78 2c 20 63 75 72 72 5f 61  t_id_idx, curr_a
12500 74 74 72 5f 69 64 78 2c 20 73 65 73 73 5f 61 74  ttr_idx, sess_at
12510 74 72 5f 69 64 78 3b 0a 09 43 4b 5f 55 4c 4f 4e  tr_idx;..CK_ULON
12520 47 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 2c  G matched_count,
12530 20 70 72 65 76 5f 6d 61 74 63 68 65 64 5f 63 6f   prev_matched_co
12540 75 6e 74 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f  unt;..int mutex_
12550 72 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59  retval;...CACKEY
12560 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
12570 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
12580 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69  !cackey_initiali
12590 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  zed) {...CACKEY_
125a0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
125b0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61  ror.  Not initia
125c0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  lized.");....ret
125d0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49  urn(CKR_CRYPTOKI
125e0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
125f0 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 75 6c 4f  );..}...if (pulO
12600 62 6a 65 63 74 43 6f 75 6e 74 20 3d 3d 20 4e 55  bjectCount == NU
12610 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  LL) {...CACKEY_D
12620 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
12630 6f 72 2e 20 20 70 75 6c 4f 62 6a 65 63 74 43 6f  or.  pulObjectCo
12640 75 6e 74 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a  unt is NULL.");.
12650 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52  ...return(CKR_AR
12660 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d  GUMENTS_BAD);..}
12670 0a 0a 09 69 66 20 28 70 68 4f 62 6a 65 63 74 20  ...if (phObject 
12680 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c 4d 61 78  == NULL && ulMax
12690 4f 62 6a 65 63 74 43 6f 75 6e 74 20 3d 3d 20 30  ObjectCount == 0
126a0 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 74 20 63  ) {.../* Short c
126b0 69 72 63 75 69 74 2c 20 69 66 20 7a 65 72 6f 20  ircuit, if zero 
126c0 6f 62 6a 65 63 74 73 20 77 65 72 65 20 73 70 65  objects were spe
126d0 63 69 66 69 65 64 20 72 65 74 75 72 6e 20 7a 65  cified return ze
126e0 72 6f 20 69 74 65 6d 73 20 69 6d 6d 65 64 69 61  ro items immedia
126f0 74 65 6c 79 20 2a 2f 0a 09 09 2a 70 75 6c 4f 62  tely */...*pulOb
12700 6a 65 63 74 43 6f 75 6e 74 20 3d 20 30 3b 0a 0a  jectCount = 0;..
12710 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
12720 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
12730 20 43 4b 52 5f 4f 4b 20 28 25 69 29 20 28 73 68   CKR_OK (%i) (sh
12740 6f 72 74 20 63 69 72 63 75 69 74 29 22 2c 20 43  ort circuit)", C
12750 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72  KR_OK);....retur
12760 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09  n(CKR_OK);..}...
12770 69 66 20 28 70 68 4f 62 6a 65 63 74 20 3d 3d 20  if (phObject == 
12780 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59  NULL) {...CACKEY
12790 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
127a0 72 72 6f 72 2e 20 20 70 68 4f 62 6a 65 63 74 20  rror.  phObject 
127b0 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72  is NULL.");....r
127c0 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45  eturn(CKR_ARGUME
127d0 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69  NTS_BAD);..}...i
127e0 66 20 28 75 6c 4d 61 78 4f 62 6a 65 63 74 43 6f  f (ulMaxObjectCo
127f0 75 6e 74 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41  unt == 0) {...CA
12800 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
12810 46 28 22 45 72 72 6f 72 2e 20 20 4d 61 78 69 6d  F("Error.  Maxim
12820 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 6f 62 6a  um number of obj
12830 65 63 74 73 20 73 70 65 63 69 66 69 65 64 20 61  ects specified a
12840 73 20 7a 65 72 6f 2e 22 29 3b 0a 0a 09 09 72 65  s zero.");....re
12850 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e  turn(CKR_ARGUMEN
12860 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66  TS_BAD);..}...if
12870 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20   (hSession == 0 
12880 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28  || hSession >= (
12890 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65  sizeof(cackey_se
128a0 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66  ssions) / sizeof
128b0 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  (cackey_sessions
128c0 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45  [0]))) {...CACKE
128d0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
128e0 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20  Error.  Session 
128f0 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b  out of range.");
12900 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  ......return(CKR
12910 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f  _SESSION_HANDLE_
12920 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 6d  INVALID);..}...m
12930 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61  utex_retval = ca
12940 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28  ckey_mutex_lock(
12950 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b  cackey_biglock);
12960 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76  ..if (mutex_retv
12970 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43  al != 0) {...CAC
12980 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
12990 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e  ("Error.  Lockin
129a0 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09  g failed.");....
129b0 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52  return(CKR_GENER
129c0 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09  AL_ERROR);..}...
129d0 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73  if (!cackey_sess
129e0 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61  ions[hSession].a
129f0 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65  ctive) {...cacke
12a00 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63  y_mutex_unlock(c
12a10 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a  ackey_biglock);.
12a20 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
12a30 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
12a40 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69  Session not acti
12a50 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75  ve.");......retu
12a60 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48  rn(CKR_SESSION_H
12a70 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a  ANDLE_INVALID);.
12a80 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79  .}...if (!cackey
12a90 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69  _sessions[hSessi
12aa0 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 74 69 76  on].search_activ
12ab0 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75  e) {...cackey_mu
12ac0 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65  tex_unlock(cacke
12ad0 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43  y_biglock);....C
12ae0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
12af0 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 61 72  TF("Error.  Sear
12b00 63 68 20 6e 6f 74 20 61 63 74 69 76 65 2e 22 29  ch not active.")
12b10 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b  ;......return(CK
12b20 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54 5f  R_OPERATION_NOT_
12b30 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d  INITIALIZED);..}
12b40 0a 0a 09 63 75 72 72 5f 69 64 5f 69 64 78 20 3d  ...curr_id_idx =
12b50 20 30 3b 0a 09 63 75 72 72 5f 6f 75 74 5f 69 64   0;..curr_out_id
12b60 5f 69 64 78 20 3d 20 30 3b 0a 09 66 6f 72 20 28  _idx = 0;..for (
12b70 63 75 72 72 5f 69 64 5f 69 64 78 20 3d 20 63 61  curr_id_idx = ca
12b80 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53  ckey_sessions[hS
12b90 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 63  ession].search_c
12ba0 75 72 72 5f 69 64 3b 20 63 75 72 72 5f 69 64 5f  urr_id; curr_id_
12bb0 69 64 78 20 3c 20 63 61 63 6b 65 79 5f 73 65 73  idx < cackey_ses
12bc0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e  sions[hSession].
12bd0 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e 74  identities_count
12be0 20 26 26 20 75 6c 4d 61 78 4f 62 6a 65 63 74 43   && ulMaxObjectC
12bf0 6f 75 6e 74 3b 20 63 75 72 72 5f 69 64 5f 69 64  ount; curr_id_id
12c00 78 2b 2b 29 20 7b 0a 09 09 63 75 72 72 5f 69 64  x++) {...curr_id
12c10 20 3d 20 26 63 61 63 6b 65 79 5f 73 65 73 73 69   = &cackey_sessi
12c20 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64  ons[hSession].id
12c30 65 6e 74 69 74 69 65 73 5b 63 75 72 72 5f 69 64  entities[curr_id
12c40 5f 69 64 78 5d 3b 0a 0a 09 09 43 41 43 4b 45 59  _idx];....CACKEY
12c50 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 50  _DEBUG_PRINTF("P
12c60 72 6f 63 65 73 73 69 6e 67 20 69 64 65 6e 74 69  rocessing identi
12c70 74 79 3a 25 6c 75 22 2c 20 28 75 6e 73 69 67 6e  ty:%lu", (unsign
12c80 65 64 20 6c 6f 6e 67 29 20 63 75 72 72 5f 69 64  ed long) curr_id
12c90 5f 69 64 78 29 3b 0a 0a 09 09 6d 61 74 63 68 65  _idx);....matche
12ca0 64 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 0a 09 09  d_count = 0;....
12cb0 66 6f 72 20 28 63 75 72 72 5f 61 74 74 72 5f 69  for (curr_attr_i
12cc0 64 78 20 3d 20 30 3b 20 63 75 72 72 5f 61 74 74  dx = 0; curr_att
12cd0 72 5f 69 64 78 20 3c 20 63 61 63 6b 65 79 5f 73  r_idx < cackey_s
12ce0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e  essions[hSession
12cf0 5d 2e 73 65 61 72 63 68 5f 71 75 65 72 79 5f 63  ].search_query_c
12d00 6f 75 6e 74 3b 20 63 75 72 72 5f 61 74 74 72 5f  ount; curr_attr_
12d10 69 64 78 2b 2b 29 20 7b 0a 09 09 09 70 72 65 76  idx++) {....prev
12d20 5f 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 20 3d  _matched_count =
12d30 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 3b 0a   matched_count;.
12d40 0a 09 09 09 63 75 72 72 5f 61 74 74 72 20 3d 20  ....curr_attr = 
12d50 26 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73  &cackey_sessions
12d60 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63  [hSession].searc
12d70 68 5f 71 75 65 72 79 5b 63 75 72 72 5f 61 74 74  h_query[curr_att
12d80 72 5f 69 64 78 5d 3b 0a 0a 09 09 09 43 41 43 4b  r_idx];.....CACK
12d90 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
12da0 22 20 20 43 68 65 63 6b 69 6e 67 20 66 6f 72 20  "  Checking for 
12db0 61 74 74 72 69 62 75 74 65 20 30 78 25 30 38 6c  attribute 0x%08l
12dc0 78 20 69 6e 20 69 64 65 6e 74 69 74 79 3a 25 69  x in identity:%i
12dd0 2e 2e 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20  ...", (unsigned 
12de0 6c 6f 6e 67 29 20 63 75 72 72 5f 61 74 74 72 2d  long) curr_attr-
12df0 3e 74 79 70 65 2c 20 28 69 6e 74 29 20 63 75 72  >type, (int) cur
12e00 72 5f 69 64 5f 69 64 78 29 3b 0a 09 09 09 43 41  r_id_idx);....CA
12e10 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
12e20 42 55 46 28 22 20 20 20 20 56 61 6c 75 65 20 6c  BUF("    Value l
12e30 6f 6f 6b 69 6e 67 20 66 6f 72 3a 22 2c 20 63 75  ooking for:", cu
12e40 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 2c  rr_attr->pValue,
12e50 20 63 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61   curr_attr->ulVa
12e60 6c 75 65 4c 65 6e 29 3b 0a 0a 09 09 09 66 6f 72  lueLen);.....for
12e70 20 28 73 65 73 73 5f 61 74 74 72 5f 69 64 78 20   (sess_attr_idx 
12e80 3d 20 30 3b 20 73 65 73 73 5f 61 74 74 72 5f 69  = 0; sess_attr_i
12e90 64 78 20 3c 20 63 75 72 72 5f 69 64 2d 3e 61 74  dx < curr_id->at
12ea0 74 72 69 62 75 74 65 73 5f 63 6f 75 6e 74 3b 20  tributes_count; 
12eb0 73 65 73 73 5f 61 74 74 72 5f 69 64 78 2b 2b 29  sess_attr_idx++)
12ec0 20 7b 0a 09 09 09 09 69 66 20 28 63 75 72 72 5f   {.....if (curr_
12ed0 69 64 2d 3e 61 74 74 72 69 62 75 74 65 73 5b 73  id->attributes[s
12ee0 65 73 73 5f 61 74 74 72 5f 69 64 78 5d 2e 74 79  ess_attr_idx].ty
12ef0 70 65 20 3d 3d 20 63 75 72 72 5f 61 74 74 72 2d  pe == curr_attr-
12f00 3e 74 79 70 65 29 20 7b 0a 09 09 09 09 09 43 41  >type) {......CA
12f10 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
12f20 46 28 22 20 20 20 20 2e 2e 2e 20 66 6f 75 6e 64  F("    ... found
12f30 20 6d 61 74 63 68 69 6e 67 20 74 79 70 65 20 2e   matching type .
12f40 2e 2e 22 29 3b 0a 09 09 09 09 09 43 41 43 4b 45  ..");......CACKE
12f50 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 42 55 46  Y_DEBUG_PRINTBUF
12f60 28 22 20 20 20 20 2e 2e 2e 20 6f 75 72 20 76 61  ("    ... our va
12f70 6c 75 65 3a 22 2c 20 63 75 72 72 5f 69 64 2d 3e  lue:", curr_id->
12f80 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 73 5f  attributes[sess_
12f90 61 74 74 72 5f 69 64 78 5d 2e 70 56 61 6c 75 65  attr_idx].pValue
12fa0 2c 20 63 75 72 72 5f 69 64 2d 3e 61 74 74 72 69  , curr_id->attri
12fb0 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72 5f  butes[sess_attr_
12fc0 69 64 78 5d 2e 75 6c 56 61 6c 75 65 4c 65 6e 29  idx].ulValueLen)
12fd0 3b 0a 0a 09 09 09 09 09 69 66 20 28 63 75 72 72  ;.......if (curr
12fe0 5f 61 74 74 72 2d 3e 70 56 61 6c 75 65 20 3d 3d  _attr->pValue ==
12ff0 20 4e 55 4c 4c 29 20 7b 0a 09 09 09 09 09 09 43   NULL) {.......C
13000 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
13010 54 46 28 22 20 20 20 20 20 20 20 2e 2e 2e 20 66  TF("       ... f
13020 6f 75 6e 64 20 77 69 6c 64 63 61 72 64 20 6d 61  ound wildcard ma
13030 74 63 68 22 29 3b 0a 0a 09 09 09 09 09 09 6d 61  tch");........ma
13040 74 63 68 65 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 0a  tched_count++;..
13050 09 09 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09  ......break;....
13060 09 09 7d 0a 0a 20 09 09 09 09 09 69 66 20 28 63  ..}.. .....if (c
13070 75 72 72 5f 61 74 74 72 2d 3e 75 6c 56 61 6c 75  urr_attr->ulValu
13080 65 4c 65 6e 20 3d 3d 20 63 75 72 72 5f 69 64 2d  eLen == curr_id-
13090 3e 61 74 74 72 69 62 75 74 65 73 5b 73 65 73 73  >attributes[sess
130a0 5f 61 74 74 72 5f 69 64 78 5d 2e 75 6c 56 61 6c  _attr_idx].ulVal
130b0 75 65 4c 65 6e 20 26 26 20 6d 65 6d 63 6d 70 28  ueLen && memcmp(
130c0 63 75 72 72 5f 61 74 74 72 2d 3e 70 56 61 6c 75  curr_attr->pValu
130d0 65 2c 20 63 75 72 72 5f 69 64 2d 3e 61 74 74 72  e, curr_id->attr
130e0 69 62 75 74 65 73 5b 73 65 73 73 5f 61 74 74 72  ibutes[sess_attr
130f0 5f 69 64 78 5d 2e 70 56 61 6c 75 65 2c 20 63 75  _idx].pValue, cu
13100 72 72 5f 69 64 2d 3e 61 74 74 72 69 62 75 74 65  rr_id->attribute
13110 73 5b 73 65 73 73 5f 61 74 74 72 5f 69 64 78 5d  s[sess_attr_idx]
13120 2e 75 6c 56 61 6c 75 65 4c 65 6e 29 20 3d 3d 20  .ulValueLen) == 
13130 30 29 20 7b 0a 09 09 09 09 09 09 43 41 43 4b 45  0) {.......CACKE
13140 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
13150 20 20 20 20 20 20 20 2e 2e 2e 20 66 6f 75 6e 64         ... found
13160 20 65 78 61 63 74 20 6d 61 74 63 68 22 29 3b 0a   exact match");.
13170 0a 09 09 09 09 09 09 6d 61 74 63 68 65 64 5f 63  .......matched_c
13180 6f 75 6e 74 2b 2b 3b 0a 0a 09 09 09 09 09 09 62  ount++;........b
13190 72 65 61 6b 3b 0a 09 09 09 09 09 7d 0a 09 09 09  reak;......}....
131a0 09 7d 0a 09 09 09 7d 0a 0a 09 09 09 2f 2a 20 49  .}....}...../* I
131b0 66 20 74 68 65 20 61 74 74 72 69 62 75 74 65 20  f the attribute 
131c0 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 6d 61 74  could not be mat
131d0 63 68 65 64 2c 20 64 6f 20 6e 6f 74 20 74 72 79  ched, do not try
131e0 20 74 6f 20 6d 61 74 63 68 20 61 64 64 69 74 69   to match additi
131f0 6f 6e 61 6c 20 61 74 74 72 69 62 75 74 65 73 20  onal attributes 
13200 2a 2f 0a 09 09 09 69 66 20 28 70 72 65 76 5f 6d  */....if (prev_m
13210 61 74 63 68 65 64 5f 63 6f 75 6e 74 20 3d 3d 20  atched_count == 
13220 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74 29 20 7b  matched_count) {
13230 0a 09 09 09 09 62 72 65 61 6b 3b 0a 09 09 09 7d  .....break;....}
13240 0a 09 09 7d 0a 0a 09 09 69 66 20 28 6d 61 74 63  ...}....if (matc
13250 68 65 64 5f 63 6f 75 6e 74 20 3d 3d 20 63 61 63  hed_count == cac
13260 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65  key_sessions[hSe
13270 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75  ssion].search_qu
13280 65 72 79 5f 63 6f 75 6e 74 29 20 7b 0a 09 09 09  ery_count) {....
13290 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
132a0 4e 54 46 28 22 20 20 2e 2e 2e 20 41 6c 6c 20 25  NTF("  ... All %
132b0 69 20 61 74 74 72 69 62 75 74 65 73 20 63 68 65  i attributes che
132c0 63 6b 65 64 20 66 6f 72 20 66 6f 75 6e 64 2c 20  cked for found, 
132d0 61 64 64 69 6e 67 20 69 64 65 6e 74 69 74 79 3a  adding identity:
132e0 25 69 20 74 6f 20 72 65 74 75 72 6e 65 64 20 6c  %i to returned l
132f0 69 73 74 22 2c 20 28 69 6e 74 29 20 63 61 63 6b  ist", (int) cack
13300 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
13310 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 71 75 65  sion].search_que
13320 72 79 5f 63 6f 75 6e 74 2c 20 28 69 6e 74 29 20  ry_count, (int) 
13330 63 75 72 72 5f 69 64 5f 69 64 78 29 3b 0a 0a 09  curr_id_idx);...
13340 09 09 70 68 4f 62 6a 65 63 74 5b 63 75 72 72 5f  ..phObject[curr_
13350 6f 75 74 5f 69 64 5f 69 64 78 5d 20 3d 20 63 75  out_id_idx] = cu
13360 72 72 5f 69 64 5f 69 64 78 20 2b 20 31 3b 0a 0a  rr_id_idx + 1;..
13370 09 09 09 75 6c 4d 61 78 4f 62 6a 65 63 74 43 6f  ...ulMaxObjectCo
13380 75 6e 74 2d 2d 3b 0a 0a 09 09 09 63 75 72 72 5f  unt--;.....curr_
13390 6f 75 74 5f 69 64 5f 69 64 78 2b 2b 3b 0a 09 09  out_id_idx++;...
133a0 7d 20 65 6c 73 65 20 7b 0a 09 09 09 43 41 43 4b  } else {....CACK
133b0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
133c0 22 20 20 2e 2e 2e 20 4e 6f 74 20 61 6c 6c 20 25  "  ... Not all %
133d0 69 20 28 6f 6e 6c 79 20 66 6f 75 6e 64 20 25 69  i (only found %i
133e0 29 20 61 74 74 72 69 62 75 74 65 73 20 63 68 65  ) attributes che
133f0 63 6b 65 64 20 66 6f 72 20 66 6f 75 6e 64 2c 20  cked for found, 
13400 6e 6f 74 20 61 64 64 69 6e 67 20 69 64 65 6e 74  not adding ident
13410 69 74 79 3a 25 69 22 2c 20 28 69 6e 74 29 20 63  ity:%i", (int) c
13420 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68  ackey_sessions[h
13430 53 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f  Session].search_
13440 71 75 65 72 79 5f 63 6f 75 6e 74 2c 20 28 69 6e  query_count, (in
13450 74 29 20 6d 61 74 63 68 65 64 5f 63 6f 75 6e 74  t) matched_count
13460 2c 20 28 69 6e 74 29 20 63 75 72 72 5f 69 64 5f  , (int) curr_id_
13470 69 64 78 29 3b 0a 09 09 7d 0a 09 7d 0a 09 63 61  idx);...}..}..ca
13480 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53  ckey_sessions[hS
13490 65 73 73 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 63  ession].search_c
134a0 75 72 72 5f 69 64 20 3d 20 63 75 72 72 5f 69 64  urr_id = curr_id
134b0 5f 69 64 78 3b 0a 09 2a 70 75 6c 4f 62 6a 65 63  _idx;..*pulObjec
134c0 74 43 6f 75 6e 74 20 3d 20 63 75 72 72 5f 6f 75  tCount = curr_ou
134d0 74 5f 69 64 5f 69 64 78 3b 0a 0a 09 6d 75 74 65  t_id_idx;...mute
134e0 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65  x_retval = cacke
134f0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63  y_mutex_unlock(c
13500 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a  ackey_biglock);.
13510 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61  .if (mutex_retva
13520 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b  l != 0) {...CACK
13530 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
13540 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69  "Error.  Unlocki
13550 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09  ng failed.");...
13560 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45  .return(CKR_GENE
13570 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  RAL_ERROR);..}..
13580 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
13590 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20  INTF("Returning 
135a0 43 4b 52 5f 4f 4b 20 28 25 69 29 2c 20 6e 75 6d  CKR_OK (%i), num
135b0 20 6f 62 6a 65 63 74 73 20 3d 20 25 6c 75 22 2c   objects = %lu",
135c0 20 43 4b 52 5f 4f 4b 2c 20 2a 70 75 6c 4f 62 6a   CKR_OK, *pulObj
135d0 65 63 74 43 6f 75 6e 74 29 3b 0a 0a 09 72 65 74  ectCount);...ret
135e0 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a  urn(CKR_OK);.}..
135f0 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49  CK_DEFINE_FUNCTI
13600 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 46 69 6e 64  ON(CK_RV, C_Find
13610 4f 62 6a 65 63 74 73 46 69 6e 61 6c 29 28 43 4b  ObjectsFinal)(CK
13620 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20  _SESSION_HANDLE 
13630 68 53 65 73 73 69 6f 6e 29 20 7b 0a 09 69 6e 74  hSession) {..int
13640 20 6d 75 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a   mutex_retval;..
13650 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
13660 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b  INTF("Called.");
13670 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69  ...if (!cackey_i
13680 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09  nitialized) {...
13690 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
136a0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74  NTF("Error.  Not
136b0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b   initialized.");
136c0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43  ....return(CKR_C
136d0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54  RYPTOKI_NOT_INIT
136e0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69  IALIZED);..}...i
136f0 66 20 28 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30  f (hSession == 0
13700 20 7c 7c 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20   || hSession >= 
13710 28 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73  (sizeof(cackey_s
13720 65 73 73 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f  essions) / sizeo
13730 66 28 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  f(cackey_session
13740 73 5b 30 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b  s[0]))) {...CACK
13750 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
13760 22 45 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e  "Error.  Session
13770 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29   out of range.")
13780 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43 4b  ;......return(CK
13790 52 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45  R_SESSION_HANDLE
137a0 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09  _INVALID);..}...
137b0 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63  mutex_retval = c
137c0 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b  ackey_mutex_lock
137d0 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29  (cackey_biglock)
137e0 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74  ;..if (mutex_ret
137f0 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41  val != 0) {...CA
13800 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
13810 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69  F("Error.  Locki
13820 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09  ng failed.");...
13830 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45  .return(CKR_GENE
13840 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  RAL_ERROR);..}..
13850 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73  .if (!cackey_ses
13860 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e  sions[hSession].
13870 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b  active) {...cack
13880 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28  ey_mutex_unlock(
13890 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b  cackey_biglock);
138a0 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  ....CACKEY_DEBUG
138b0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
138c0 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74   Session not act
138d0 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74  ive.");......ret
138e0 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f  urn(CKR_SESSION_
138f0 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b  HANDLE_INVALID);
13900 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ..}...if (!cacke
13910 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73  y_sessions[hSess
13920 69 6f 6e 5d 2e 73 65 61 72 63 68 5f 61 63 74 69  ion].search_acti
13930 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d  ve) {...cackey_m
13940 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b  utex_unlock(cack
13950 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09  ey_biglock);....
13960 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
13970 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 61  NTF("Error.  Sea
13980 72 63 68 20 6e 6f 74 20 61 63 74 69 76 65 2e 22  rch not active."
13990 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43  );......return(C
139a0 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54  KR_OPERATION_NOT
139b0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09  _INITIALIZED);..
139c0 7d 0a 0a 09 63 61 63 6b 65 79 5f 73 65 73 73 69  }...cackey_sessi
139d0 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 65  ons[hSession].se
139e0 61 72 63 68 5f 61 63 74 69 76 65 20 3d 20 30 3b  arch_active = 0;
139f0 0a 09 69 66 20 28 63 61 63 6b 65 79 5f 73 65 73  ..if (cackey_ses
13a00 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e  sions[hSession].
13a10 73 65 61 72 63 68 5f 71 75 65 72 79 29 20 7b 0a  search_query) {.
13a20 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f 73 65  ..free(cackey_se
13a30 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d  ssions[hSession]
13a40 2e 73 65 61 72 63 68 5f 71 75 65 72 79 29 3b 0a  .search_query);.
13a50 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61  .}...mutex_retva
13a60 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78  l = cackey_mutex
13a70 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62  _unlock(cackey_b
13a80 69 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75  iglock);..if (mu
13a90 74 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29  tex_retval != 0)
13aa0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
13ab0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
13ac0 20 20 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c    Unlocking fail
13ad0 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  ed.");....return
13ae0 28 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52  (CKR_GENERAL_ERR
13af0 4f 52 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59  OR);..}...CACKEY
13b00 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52  _DEBUG_PRINTF("R
13b10 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 4f 4b 20  eturning CKR_OK 
13b20 28 25 69 29 22 2c 20 43 4b 52 5f 4f 4b 29 3b 0a  (%i)", CKR_OK);.
13b30 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 4b 29  ..return(CKR_OK)
13b40 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46  ;.}..CK_DEFINE_F
13b50 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43  UNCTION(CK_RV, C
13b60 5f 45 6e 63 72 79 70 74 49 6e 69 74 29 28 43 4b  _EncryptInit)(CK
13b70 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20  _SESSION_HANDLE 
13b80 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43  hSession, CK_MEC
13b90 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68  HANISM_PTR pMech
13ba0 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54  anism, CK_OBJECT
13bb0 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b 0a  _HANDLE hKey) {.
13bc0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
13bd0 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b  INTF("Called.");
13be0 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69  ...if (!cackey_i
13bf0 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09  nitialized) {...
13c00 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
13c10 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74  NTF("Error.  Not
13c20 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b   initialized.");
13c30 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43  ....return(CKR_C
13c40 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54  RYPTOKI_NOT_INIT
13c50 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43  IALIZED);..}...C
13c60 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
13c70 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b  TF("Returning CK
13c80 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53  R_FUNCTION_NOT_S
13c90 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20  UPPORTED (%i)", 
13ca0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54  CKR_FUNCTION_NOT
13cb0 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72  _SUPPORTED);...r
13cc0 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49  eturn(CKR_FUNCTI
13cd0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44  ON_NOT_SUPPORTED
13ce0 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f  );.}..CK_DEFINE_
13cf0 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20  FUNCTION(CK_RV, 
13d00 43 5f 45 6e 63 72 79 70 74 29 28 43 4b 5f 53 45  C_Encrypt)(CK_SE
13d10 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65  SSION_HANDLE hSe
13d20 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50  ssion, CK_BYTE_P
13d30 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f  TR pData, CK_ULO
13d40 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c 20 43 4b  NG ulDataLen, CK
13d50 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79  _BYTE_PTR pEncry
13d60 70 74 65 64 44 61 74 61 2c 20 43 4b 5f 55 4c 4f  ptedData, CK_ULO
13d70 4e 47 5f 50 54 52 20 70 75 6c 45 6e 63 72 79 70  NG_PTR pulEncryp
13d80 74 65 64 44 61 74 61 4c 65 6e 29 20 7b 0a 09 43  tedDataLen) {..C
13d90 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
13da0 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a  TF("Called.");..
13db0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69  .if (!cackey_ini
13dc0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41  tialized) {...CA
13dd0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
13de0 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69  F("Error.  Not i
13df0 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a  nitialized.");..
13e00 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59  ..return(CKR_CRY
13e10 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41  PTOKI_NOT_INITIA
13e20 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43  LIZED);..}...CAC
13e30 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
13e40 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f  ("Returning CKR_
13e50 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
13e60 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b  PORTED (%i)", CK
13e70 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53  R_FUNCTION_NOT_S
13e80 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74  UPPORTED);...ret
13e90 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  urn(CKR_FUNCTION
13ea0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b  _NOT_SUPPORTED);
13eb0 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55  .}..CK_DEFINE_FU
13ec0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f  NCTION(CK_RV, C_
13ed0 45 6e 63 72 79 70 74 55 70 64 61 74 65 29 28 43  EncryptUpdate)(C
13ee0 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45  K_SESSION_HANDLE
13ef0 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59   hSession, CK_BY
13f00 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b  TE_PTR pPart, CK
13f10 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74 4c 65 6e  _ULONG ulPartLen
13f20 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45  , CK_BYTE_PTR pE
13f30 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 43 4b  ncryptedPart, CK
13f40 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 45 6e  _ULONG_PTR pulEn
13f50 63 72 79 70 74 65 64 50 61 72 74 4c 65 6e 29 20  cryptedPartLen) 
13f60 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  {..CACKEY_DEBUG_
13f70 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22  PRINTF("Called."
13f80 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79  );...if (!cackey
13f90 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a  _initialized) {.
13fa0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
13fb0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e  RINTF("Error.  N
13fc0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22  ot initialized."
13fd0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
13fe0 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e  _CRYPTOKI_NOT_IN
13ff0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a  ITIALIZED);..}..
14000 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
14010 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20  INTF("Returning 
14020 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54  CKR_FUNCTION_NOT
14030 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22  _SUPPORTED (%i)"
14040 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  , CKR_FUNCTION_N
14050 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a  OT_SUPPORTED);..
14060 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43  .return(CKR_FUNC
14070 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54  TION_NOT_SUPPORT
14080 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e  ED);.}..CK_DEFIN
14090 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56  E_FUNCTION(CK_RV
140a0 2c 20 43 5f 45 6e 63 72 79 70 74 46 69 6e 61 6c  , C_EncryptFinal
140b0 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e  )(CK_SESSION_HAN
140c0 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b  DLE hSession, CK
140d0 5f 42 59 54 45 5f 50 54 52 20 70 4c 61 73 74 45  _BYTE_PTR pLastE
140e0 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 43 4b  ncryptedPart, CK
140f0 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 4c 61  _ULONG_PTR pulLa
14100 73 74 45 6e 63 72 79 70 74 65 64 50 61 72 74 4c  stEncryptedPartL
14110 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45  en) {..CACKEY_DE
14120 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c  BUG_PRINTF("Call
14130 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61  ed.");...if (!ca
14140 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64  ckey_initialized
14150 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  ) {...CACKEY_DEB
14160 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
14170 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  .  Not initializ
14180 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  ed.");....return
14190 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f  (CKR_CRYPTOKI_NO
141a0 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a  T_INITIALIZED);.
141b0 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  .}...CACKEY_DEBU
141c0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e  G_PRINTF("Return
141d0 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  ing CKR_FUNCTION
141e0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28  _NOT_SUPPORTED (
141f0 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49  %i)", CKR_FUNCTI
14200 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44  ON_NOT_SUPPORTED
14210 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f  );...return(CKR_
14220 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
14230 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44  PORTED);.}..CK_D
14240 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43  EFINE_FUNCTION(C
14250 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 74 49  K_RV, C_DecryptI
14260 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f  nit)(CK_SESSION_
14270 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c  HANDLE hSession,
14280 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54   CK_MECHANISM_PT
14290 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b  R pMechanism, CK
142a0 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68  _OBJECT_HANDLE h
142b0 4b 65 79 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65  Key) {..int mute
142c0 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 68 4b 65 79  x_retval;...hKey
142d0 2d 2d 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  --;...CACKEY_DEB
142e0 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65  UG_PRINTF("Calle
142f0 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63  d.");...if (!cac
14300 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29  key_initialized)
14310 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
14320 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
14330 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65    Not initialize
14340 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  d.");....return(
14350 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54  CKR_CRYPTOKI_NOT
14360 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09  _INITIALIZED);..
14370 7d 0a 0a 09 69 66 20 28 70 4d 65 63 68 61 6e 69  }...if (pMechani
14380 73 6d 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09  sm == NULL) {...
14390 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
143a0 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 4d 65 63  NTF("Error. pMec
143b0 68 61 6e 69 73 6d 20 69 73 20 4e 55 4c 4c 2e 22  hanism is NULL."
143c0 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
143d0 5f 41 52 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b  _ARGUMENTS_BAD);
143e0 0a 09 7d 0a 0a 09 69 66 20 28 70 4d 65 63 68 61  ..}...if (pMecha
143f0 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 20  nism->mechanism 
14400 21 3d 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 29  != CKM_RSA_PKCS)
14410 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
14420 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
14430 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63   pMechanism->mec
14440 68 61 6e 69 73 6d 20 6e 6f 74 20 73 70 65 63 69  hanism not speci
14450 66 69 65 64 20 61 73 20 43 4b 4d 5f 52 53 41 5f  fied as CKM_RSA_
14460 50 4b 43 53 22 29 3b 0a 0a 09 09 72 65 74 75 72  PKCS");....retur
14470 6e 28 43 4b 52 5f 4d 45 43 48 41 4e 49 53 4d 5f  n(CKR_MECHANISM_
14480 50 41 52 41 4d 5f 49 4e 56 41 4c 49 44 29 3b 0a  PARAM_INVALID);.
14490 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f  .}...if (hSessio
144a0 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69  n == 0 || hSessi
144b0 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61  on >= (sizeof(ca
144c0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f  ckey_sessions) /
144d0 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73   sizeof(cackey_s
144e0 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a  essions[0]))) {.
144f0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
14500 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53  RINTF("Error.  S
14510 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61  ession out of ra
14520 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74  nge.");......ret
14530 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f  urn(CKR_SESSION_
14540 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b  HANDLE_INVALID);
14550 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76  ..}...mutex_retv
14560 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65  al = cackey_mute
14570 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69  x_lock(cackey_bi
14580 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74  glock);..if (mut
14590 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20  ex_retval != 0) 
145a0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
145b0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
145c0 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e   Locking failed.
145d0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
145e0 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29  R_GENERAL_ERROR)
145f0 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b  ;..}...if (!cack
14600 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
14610 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a  sion].active) {.
14620 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75  ..cackey_mutex_u
14630 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67  nlock(cackey_big
14640 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59  lock);....CACKEY
14650 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
14660 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e  rror.  Session n
14670 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09  ot active.");...
14680 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45  ...return(CKR_SE
14690 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56  SSION_HANDLE_INV
146a0 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28  ALID);..}...if (
146b0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b  cackey_sessions[
146c0 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70  hSession].decryp
146d0 74 5f 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61  t_active) {...ca
146e0 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63  ckey_mutex_unloc
146f0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b  k(cackey_biglock
14700 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  );....CACKEY_DEB
14710 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
14720 2e 20 20 44 65 63 72 79 70 74 20 61 6c 72 65 61  .  Decrypt alrea
14730 64 79 20 69 6e 20 70 72 6f 67 72 65 73 73 2e 22  dy in progress."
14740 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43  );......return(C
14750 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 41 43 54  KR_OPERATION_ACT
14760 49 56 45 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 68  IVE);..}...if (h
14770 4b 65 79 20 3e 3d 20 63 61 63 6b 65 79 5f 73 65  Key >= cackey_se
14780 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d  ssions[hSession]
14790 2e 69 64 65 6e 74 69 74 69 65 73 5f 63 6f 75 6e  .identities_coun
147a0 74 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75  t) {...cackey_mu
147b0 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65  tex_unlock(cacke
147c0 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43  y_biglock);....C
147d0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
147e0 54 46 28 22 45 72 72 6f 72 2e 20 20 4b 65 79 20  TF("Error.  Key 
147f0 68 61 6e 64 6c 65 20 6f 75 74 20 6f 66 20 72 61  handle out of ra
14800 6e 67 65 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72  nge.");....retur
14810 6e 28 43 4b 52 5f 4b 45 59 5f 48 41 4e 44 4c 45  n(CKR_KEY_HANDLE
14820 5f 49 4e 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09  _INVALID);..}...
14830 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b  cackey_sessions[
14840 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70  hSession].decryp
14850 74 5f 61 63 74 69 76 65 20 3d 20 31 3b 0a 0a 09  t_active = 1;...
14860 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b  cackey_sessions[
14870 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70  hSession].decryp
14880 74 5f 6d 65 63 68 61 6e 69 73 6d 20 3d 20 70 4d  t_mechanism = pM
14890 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e  echanism->mechan
148a0 69 73 6d 3b 0a 09 63 61 63 6b 65 79 5f 73 65 73  ism;..cackey_ses
148b0 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e  sions[hSession].
148c0 64 65 63 72 79 70 74 5f 6d 65 63 68 5f 70 61 72  decrypt_mech_par
148d0 6d 20 3d 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e  m = pMechanism->
148e0 70 50 61 72 61 6d 65 74 65 72 3b 0a 09 63 61 63  pParameter;..cac
148f0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65  key_sessions[hSe
14900 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 6d  ssion].decrypt_m
14910 65 63 68 5f 70 61 72 6d 6c 65 6e 20 3d 20 70 4d  ech_parmlen = pM
14920 65 63 68 61 6e 69 73 6d 2d 3e 75 6c 50 61 72 61  echanism->ulPara
14930 6d 65 74 65 72 4c 65 6e 3b 0a 0a 09 6d 75 74 65  meterLen;...mute
14940 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65  x_retval = cacke
14950 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63  y_mutex_unlock(c
14960 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a  ackey_biglock);.
14970 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61  .if (mutex_retva
14980 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b  l != 0) {...CACK
14990 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
149a0 22 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69  "Error.  Unlocki
149b0 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09  ng failed.");...
149c0 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45  .return(CKR_GENE
149d0 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a  RAL_ERROR);..}..
149e0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
149f0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20  INTF("Returning 
14a00 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b  CKR_OK (%i)", CK
14a10 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28  R_OK);...return(
14a20 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44  CKR_OK);.}..CK_D
14a30 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43  EFINE_FUNCTION(C
14a40 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 74 29  K_RV, C_Decrypt)
14a50 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44  (CK_SESSION_HAND
14a60 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f  LE hSession, CK_
14a70 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70  BYTE_PTR pEncryp
14a80 74 65 64 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e  tedData, CK_ULON
14a90 47 20 75 6c 45 6e 63 72 79 70 74 65 64 44 61 74  G ulEncryptedDat
14aa0 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54  aLen, CK_BYTE_PT
14ab0 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c 4f 4e  R pData, CK_ULON
14ac0 47 5f 50 54 52 20 70 75 6c 44 61 74 61 4c 65 6e  G_PTR pulDataLen
14ad0 29 20 7b 0a 09 43 4b 5f 55 4c 4f 4e 47 20 64 61  ) {..CK_ULONG da
14ae0 74 61 6c 65 6e 5f 75 70 64 61 74 65 2c 20 64 61  talen_update, da
14af0 74 61 6c 65 6e 5f 66 69 6e 61 6c 3b 0a 09 43 4b  talen_final;..CK
14b00 5f 52 56 20 64 65 63 72 79 70 74 5f 72 65 74 3b  _RV decrypt_ret;
14b10 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
14b20 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22  PRINTF("Called."
14b30 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79  );...if (!cackey
14b40 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a  _initialized) {.
14b50 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
14b60 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e  RINTF("Error.  N
14b70 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22  ot initialized."
14b80 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
14b90 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e  _CRYPTOKI_NOT_IN
14ba0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a  ITIALIZED);..}..
14bb0 09 69 66 20 28 70 75 6c 44 61 74 61 4c 65 6e 20  .if (pulDataLen 
14bc0 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43  == NULL) {...CAC
14bd0 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
14be0 28 22 45 72 72 6f 72 2e 20 70 75 6c 44 61 74 61  ("Error. pulData
14bf0 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a  Len is NULL.");.
14c00 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52  ...return(CKR_AR
14c10 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d  GUMENTS_BAD);..}
14c20 0a 0a 09 64 61 74 61 6c 65 6e 5f 75 70 64 61 74  ...datalen_updat
14c30 65 20 3d 20 2a 70 75 6c 44 61 74 61 4c 65 6e 3b  e = *pulDataLen;
14c40 0a 0a 09 64 65 63 72 79 70 74 5f 72 65 74 20 3d  ...decrypt_ret =
14c50 20 43 5f 44 65 63 72 79 70 74 55 70 64 61 74 65   C_DecryptUpdate
14c60 28 68 53 65 73 73 69 6f 6e 2c 20 70 45 6e 63 72  (hSession, pEncr
14c70 79 70 74 65 64 44 61 74 61 2c 20 75 6c 45 6e 63  yptedData, ulEnc
14c80 72 79 70 74 65 64 44 61 74 61 4c 65 6e 2c 20 70  ryptedDataLen, p
14c90 44 61 74 61 2c 20 26 64 61 74 61 6c 65 6e 5f 75  Data, &datalen_u
14ca0 70 64 61 74 65 29 3b 0a 09 69 66 20 28 64 65 63  pdate);..if (dec
14cb0 72 79 70 74 5f 72 65 74 20 21 3d 20 43 4b 52 5f  rypt_ret != CKR_
14cc0 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  OK) {...CACKEY_D
14cd0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
14ce0 6f 72 2e 20 20 44 65 63 72 79 70 74 55 70 64 61  or.  DecryptUpda
14cf0 74 65 28 29 20 72 65 74 75 72 6e 65 64 20 66 61  te() returned fa
14d00 69 6c 75 72 65 20 28 72 76 20 3d 20 25 6c 75 29  ilure (rv = %lu)
14d10 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f  .", (unsigned lo
14d20 6e 67 29 20 64 65 63 72 79 70 74 5f 72 65 74 29  ng) decrypt_ret)
14d30 3b 0a 0a 09 09 72 65 74 75 72 6e 28 64 65 63 72  ;....return(decr
14d40 79 70 74 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09 69  ypt_ret);..}...i
14d50 66 20 28 70 44 61 74 61 29 20 7b 0a 09 09 70 44  f (pData) {...pD
14d60 61 74 61 20 2b 3d 20 64 61 74 61 6c 65 6e 5f 75  ata += datalen_u
14d70 70 64 61 74 65 3b 0a 09 7d 0a 09 64 61 74 61 6c  pdate;..}..datal
14d80 65 6e 5f 66 69 6e 61 6c 20 3d 20 2a 70 75 6c 44  en_final = *pulD
14d90 61 74 61 4c 65 6e 20 2d 20 64 61 74 61 6c 65 6e  ataLen - datalen
14da0 5f 75 70 64 61 74 65 3b 0a 0a 09 64 65 63 72 79  _update;...decry
14db0 70 74 5f 72 65 74 20 3d 20 43 5f 44 65 63 72 79  pt_ret = C_Decry
14dc0 70 74 46 69 6e 61 6c 28 68 53 65 73 73 69 6f 6e  ptFinal(hSession
14dd0 2c 20 70 44 61 74 61 2c 20 26 64 61 74 61 6c 65  , pData, &datale
14de0 6e 5f 66 69 6e 61 6c 29 3b 0a 09 69 66 20 28 64  n_final);..if (d
14df0 65 63 72 79 70 74 5f 72 65 74 20 21 3d 20 43 4b  ecrypt_ret != CK
14e00 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59  R_OK) {...CACKEY
14e10 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
14e20 72 72 6f 72 2e 20 20 44 65 63 72 79 70 74 46 69  rror.  DecryptFi
14e30 6e 61 6c 28 29 20 72 65 74 75 72 6e 65 64 20 66  nal() returned f
14e40 61 69 6c 75 72 65 20 28 72 76 20 3d 20 25 6c 75  ailure (rv = %lu
14e50 29 2e 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c  ).", (unsigned l
14e60 6f 6e 67 29 20 64 65 63 72 79 70 74 5f 72 65 74  ong) decrypt_ret
14e70 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 64 65 63  );....return(dec
14e80 72 79 70 74 5f 72 65 74 29 3b 0a 09 7d 0a 0a 09  rypt_ret);..}...
14e90 2a 70 75 6c 44 61 74 61 4c 65 6e 20 3d 20 64 61  *pulDataLen = da
14ea0 74 61 6c 65 6e 5f 75 70 64 61 74 65 20 2b 20 64  talen_update + d
14eb0 61 74 61 6c 65 6e 5f 66 69 6e 61 6c 3b 0a 0a 09  atalen_final;...
14ec0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
14ed0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43  NTF("Returning C
14ee0 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52  KR_OK (%i)", CKR
14ef0 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  _OK);...return(C
14f00 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45  KR_OK);.}..CK_DE
14f10 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b  FINE_FUNCTION(CK
14f20 5f 52 56 2c 20 43 5f 44 65 63 72 79 70 74 55 70  _RV, C_DecryptUp
14f30 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e  date)(CK_SESSION
14f40 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e  _HANDLE hSession
14f50 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 45  , CK_BYTE_PTR pE
14f60 6e 63 72 79 70 74 65 64 50 61 72 74 2c 20 43 4b  ncryptedPart, CK
14f70 5f 55 4c 4f 4e 47 20 75 6c 45 6e 63 72 79 70 74  _ULONG ulEncrypt
14f80 65 64 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59  edPartLen, CK_BY
14f90 54 45 5f 50 54 52 20 70 50 61 72 74 2c 20 43 4b  TE_PTR pPart, CK
14fa0 5f 55 4c 4f 4e 47 5f 50 54 52 20 70 75 6c 50 61  _ULONG_PTR pulPa
14fb0 72 74 4c 65 6e 29 20 7b 0a 09 73 74 61 74 69 63  rtLen) {..static
14fc0 20 43 4b 5f 42 59 54 45 20 62 75 66 5b 31 36 33   CK_BYTE buf[163
14fd0 38 34 5d 3b 0a 09 73 73 69 7a 65 5f 74 20 62 75  84];..ssize_t bu
14fe0 66 6c 65 6e 3b 0a 09 43 4b 5f 52 56 20 72 65 74  flen;..CK_RV ret
14ff0 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e 45 52 41  val = CKR_GENERA
15000 4c 5f 45 52 52 4f 52 3b 0a 09 69 6e 74 20 6d 75  L_ERROR;..int mu
15010 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41  tex_retval;...CA
15020 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
15030 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09  F("Called.");...
15040 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74  if (!cackey_init
15050 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43  ialized) {...CAC
15060 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
15070 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e  ("Error.  Not in
15080 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09  itialized.");...
15090 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50  .return(CKR_CRYP
150a0 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c  TOKI_NOT_INITIAL
150b0 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28  IZED);..}...if (
150c0 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c  hSession == 0 ||
150d0 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69   hSession >= (si
150e0 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73  zeof(cackey_sess
150f0 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63  ions) / sizeof(c
15100 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30  ackey_sessions[0
15110 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  ]))) {...CACKEY_
15120 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
15130 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75  ror.  Session ou
15140 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09  t of range.");..
15150 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53  ....return(CKR_S
15160 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e  ESSION_HANDLE_IN
15170 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20  VALID);..}...if 
15180 28 70 45 6e 63 72 79 70 74 65 64 50 61 72 74 20  (pEncryptedPart 
15190 3d 3d 20 4e 55 4c 4c 20 26 26 20 75 6c 45 6e 63  == NULL && ulEnc
151a0 72 79 70 74 65 64 50 61 72 74 4c 65 6e 20 3d 3d  ryptedPartLen ==
151b0 20 30 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 74   0) {.../* Short
151c0 20 63 69 72 63 75 69 74 20 69 66 20 77 65 20 61   circuit if we a
151d0 72 65 20 61 73 6b 65 64 20 74 6f 20 64 65 63 72  re asked to decr
151e0 79 70 74 20 6e 6f 74 68 69 6e 67 2e 2e 2e 20 2a  ypt nothing... *
151f0 2f 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  /...CACKEY_DEBUG
15200 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69  _PRINTF("Returni
15210 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 20 28  ng CKR_OK (%i) (
15220 73 68 6f 72 74 20 63 69 72 63 75 69 74 29 22 2c  short circuit)",
15230 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 09 72 65 74   CKR_OK);....ret
15240 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a  urn(CKR_OK);..}.
15250 0a 09 69 66 20 28 70 45 6e 63 72 79 70 74 65 64  ..if (pEncrypted
15260 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a  Part == NULL) {.
15270 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
15280 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 45  RINTF("Error. pE
15290 6e 63 72 79 70 74 65 64 50 61 72 74 20 69 73 20  ncryptedPart is 
152a0 4e 55 4c 4c 2c 20 62 75 74 20 75 6c 45 6e 63 72  NULL, but ulEncr
152b0 79 70 74 65 64 50 61 72 74 4c 65 6e 20 69 73 20  yptedPartLen is 
152c0 6e 6f 74 20 30 2e 22 29 3b 0a 0a 09 09 72 65 74  not 0.");....ret
152d0 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54  urn(CKR_ARGUMENT
152e0 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20  S_BAD);..}...if 
152f0 28 75 6c 45 6e 63 72 79 70 74 65 64 50 61 72 74  (ulEncryptedPart
15300 4c 65 6e 20 3d 3d 20 30 29 20 7b 0a 09 09 43 41  Len == 0) {...CA
15310 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
15320 46 28 22 45 72 72 6f 72 2e 20 75 6c 45 6e 63 72  F("Error. ulEncr
15330 79 70 74 65 64 50 61 72 74 4c 65 6e 20 69 73 20  yptedPartLen is 
15340 30 2c 20 62 75 74 20 70 50 61 72 74 20 69 73 20  0, but pPart is 
15350 6e 6f 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09  not NULL.");....
15360 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d  return(CKR_ARGUM
15370 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09  ENTS_BAD);..}...
15380 69 66 20 28 70 75 6c 50 61 72 74 4c 65 6e 20 3d  if (pulPartLen =
15390 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43 4b  = NULL) {...CACK
153a0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
153b0 22 45 72 72 6f 72 2e 20 70 75 6c 50 61 72 74 4c  "Error. pulPartL
153c0 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a  en is NULL.");..
153d0 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52 47  ..return(CKR_ARG
153e0 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a  UMENTS_BAD);..}.
153f0 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d  ..mutex_retval =
15400 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f   cackey_mutex_lo
15410 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63  ck(cackey_bigloc
15420 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72  k);..if (mutex_r
15430 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09  etval != 0) {...
15440 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
15450 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c 6f 63  NTF("Error.  Loc
15460 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a  king failed.");.
15470 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 47 45  ...return(CKR_GE
15480 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d  NERAL_ERROR);..}
15490 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 73  ...if (!cackey_s
154a0 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e  essions[hSession
154b0 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09 63 61  ].active) {...ca
154c0 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63  ckey_mutex_unloc
154d0 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b  k(cackey_biglock
154e0 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  );....CACKEY_DEB
154f0 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
15500 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74 20 61  .  Session not a
15510 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72  ctive.");......r
15520 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f  eturn(CKR_SESSIO
15530 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44  N_HANDLE_INVALID
15540 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63  );..}...if (!cac
15550 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65  key_sessions[hSe
15560 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 61  ssion].decrypt_a
15570 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65  ctive) {...cacke
15580 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63  y_mutex_unlock(c
15590 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a  ackey_biglock);.
155a0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
155b0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
155c0 44 65 63 72 79 70 74 20 6e 6f 74 20 61 63 74 69  Decrypt not acti
155d0 76 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75  ve.");......retu
155e0 72 6e 28 43 4b 52 5f 4f 50 45 52 41 54 49 4f 4e  rn(CKR_OPERATION
155f0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
15600 29 3b 0a 09 7d 0a 0a 09 73 77 69 74 63 68 20 28  );..}...switch (
15610 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b  cackey_sessions[
15620 68 53 65 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70  hSession].decryp
15630 74 5f 6d 65 63 68 61 6e 69 73 6d 29 20 7b 0a 09  t_mechanism) {..
15640 09 63 61 73 65 20 43 4b 4d 5f 52 53 41 5f 50 4b  .case CKM_RSA_PK
15650 43 53 3a 0a 09 09 09 62 75 66 6c 65 6e 20 3d 20  CS:....buflen = 
15660 2d 31 3b 0a 0a 09 09 09 2f 2a 20 58 58 58 3a 20  -1;...../* XXX: 
15670 41 73 6b 20 63 61 72 64 20 74 6f 20 64 65 63 72  Ask card to decr
15680 79 70 74 20 2a 2f 0a 0a 09 09 09 69 66 20 28 62  ypt */.....if (b
15690 75 66 6c 65 6e 20 3c 20 30 29 20 7b 0a 09 09 09  uflen < 0) {....
156a0 09 2f 2a 20 44 65 63 72 79 70 74 69 6f 6e 20 66  ./* Decryption f
156b0 61 69 6c 65 64 2e 20 2a 2f 0a 09 09 09 09 72 65  ailed. */.....re
156c0 74 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e 45 52  tval = CKR_GENER
156d0 41 4c 5f 45 52 52 4f 52 3b 0a 09 09 09 7d 20 65  AL_ERROR;....} e
156e0 6c 73 65 20 69 66 20 28 28 28 75 6e 73 69 67 6e  lse if (((unsign
156f0 65 64 20 6c 6f 6e 67 29 20 62 75 66 6c 65 6e 29  ed long) buflen)
15700 20 3e 20 2a 70 75 6c 50 61 72 74 4c 65 6e 20 26   > *pulPartLen &
15710 26 20 70 50 61 72 74 29 20 7b 0a 09 09 09 09 2f  & pPart) {...../
15720 2a 20 44 65 63 72 79 70 74 65 64 20 64 61 74 61  * Decrypted data
15730 20 74 6f 6f 20 6c 61 72 67 65 20 2a 2f 0a 09 09   too large */...
15740 09 09 72 65 74 76 61 6c 20 3d 20 43 4b 52 5f 42  ..retval = CKR_B
15750 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41 4c 4c 3b  UFFER_TOO_SMALL;
15760 0a 09 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 09  ....} else {....
15770 09 69 66 20 28 70 50 61 72 74 29 20 7b 0a 09 09  .if (pPart) {...
15780 09 09 09 6d 65 6d 63 70 79 28 70 50 61 72 74 2c  ...memcpy(pPart,
15790 20 62 75 66 2c 20 62 75 66 6c 65 6e 29 3b 0a 09   buf, buflen);..
157a0 09 09 09 7d 0a 0a 09 09 09 09 2a 70 75 6c 50 61  ...}......*pulPa
157b0 72 74 4c 65 6e 20 3d 20 62 75 66 6c 65 6e 3b 0a  rtLen = buflen;.
157c0 0a 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b  .....retval = CK
157d0 52 5f 4f 4b 3b 0a 09 09 09 7d 0a 0a 09 09 09 62  R_OK;....}.....b
157e0 72 65 61 6b 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78  reak;..}...mutex
157f0 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79  _retval = cackey
15800 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61  _mutex_unlock(ca
15810 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09  ckey_biglock);..
15820 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c  if (mutex_retval
15830 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45   != 0) {...CACKE
15840 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
15850 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e  Error.  Unlockin
15860 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09  g failed.");....
15870 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52  return(CKR_GENER
15880 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09  AL_ERROR);..}...
15890 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
158a0 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 25  NTF("Returning %
158b0 69 22 2c 20 28 69 6e 74 29 20 72 65 74 76 61 6c  i", (int) retval
158c0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 72 65 74 76  );...return(retv
158d0 61 6c 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e  al);.}..CK_DEFIN
158e0 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56  E_FUNCTION(CK_RV
158f0 2c 20 43 5f 44 65 63 72 79 70 74 46 69 6e 61 6c  , C_DecryptFinal
15900 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e  )(CK_SESSION_HAN
15910 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b  DLE hSession, CK
15920 5f 42 59 54 45 5f 50 54 52 20 70 4c 61 73 74 50  _BYTE_PTR pLastP
15930 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54  art, CK_ULONG_PT
15940 52 20 70 75 6c 4c 61 73 74 50 61 72 74 4c 65 6e  R pulLastPartLen
15950 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72  ) {..int mutex_r
15960 65 74 76 61 6c 3b 0a 09 69 6e 74 20 74 65 72 6d  etval;..int term
15970 69 6e 61 74 65 5f 64 65 63 72 79 70 74 20 3d 20  inate_decrypt = 
15980 31 3b 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  1;...CACKEY_DEBU
15990 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64  G_PRINTF("Called
159a0 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b  .");...if (!cack
159b0 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20  ey_initialized) 
159c0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
159d0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
159e0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64   Not initialized
159f0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  .");....return(C
15a00 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f  KR_CRYPTOKI_NOT_
15a10 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d  INITIALIZED);..}
15a20 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20  ...if (hSession 
15a30 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e  == 0 || hSession
15a40 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b   >= (sizeof(cack
15a50 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73  ey_sessions) / s
15a60 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73  izeof(cackey_ses
15a70 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09  sions[0]))) {...
15a80 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
15a90 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73  NTF("Error.  Ses
15aa0 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67  sion out of rang
15ab0 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72  e.");......retur
15ac0 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41  n(CKR_SESSION_HA
15ad0 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09  NDLE_INVALID);..
15ae0 7d 0a 0a 09 69 66 20 28 70 75 6c 4c 61 73 74 50  }...if (pulLastP
15af0 61 72 74 4c 65 6e 20 3d 3d 20 4e 55 4c 4c 29 20  artLen == NULL) 
15b00 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
15b10 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
15b20 70 75 6c 4c 61 73 74 50 61 72 74 4c 65 6e 20 69  pulLastPartLen i
15b30 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65  s NULL.");....re
15b40 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e  turn(CKR_ARGUMEN
15b50 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 6d 75  TS_BAD);..}...mu
15b60 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63  tex_retval = cac
15b70 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63  key_mutex_lock(c
15b80 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a  ackey_biglock);.
15b90 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61  .if (mutex_retva
15ba0 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b  l != 0) {...CACK
15bb0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
15bc0 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67  "Error.  Locking
15bd0 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72   failed.");....r
15be0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41  eturn(CKR_GENERA
15bf0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69  L_ERROR);..}...i
15c00 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69  f (!cackey_sessi
15c10 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63  ons[hSession].ac
15c20 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79  tive) {...cackey
15c30 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61  _mutex_unlock(ca
15c40 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a  ckey_biglock);..
15c50 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
15c60 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53  RINTF("Error.  S
15c70 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76  ession not activ
15c80 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72  e.");......retur
15c90 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41  n(CKR_SESSION_HA
15ca0 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09  NDLE_INVALID);..
15cb0 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f  }...if (!cackey_
15cc0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
15cd0 6e 5d 2e 64 65 63 72 79 70 74 5f 61 63 74 69 76  n].decrypt_activ
15ce0 65 29 20 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75  e) {...cackey_mu
15cf0 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65  tex_unlock(cacke
15d00 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43  y_biglock);....C
15d10 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
15d20 54 46 28 22 45 72 72 6f 72 2e 20 20 44 65 63 72  TF("Error.  Decr
15d30 79 70 74 20 6e 6f 74 20 61 63 74 69 76 65 2e 22  ypt not active."
15d40 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43  );......return(C
15d50 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54  KR_OPERATION_NOT
15d60 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09  _INITIALIZED);..
15d70 7d 0a 0a 09 2a 70 75 6c 4c 61 73 74 50 61 72 74  }...*pulLastPart
15d80 4c 65 6e 20 3d 20 30 3b 0a 0a 09 69 66 20 28 70  Len = 0;...if (p
15d90 4c 61 73 74 50 61 72 74 20 3d 3d 20 4e 55 4c 4c  LastPart == NULL
15da0 29 20 7b 0a 09 09 74 65 72 6d 69 6e 61 74 65 5f  ) {...terminate_
15db0 64 65 63 72 79 70 74 20 3d 20 30 3b 0a 09 7d 0a  decrypt = 0;..}.
15dc0 0a 09 69 66 20 28 74 65 72 6d 69 6e 61 74 65 5f  ..if (terminate_
15dd0 64 65 63 72 79 70 74 29 20 7b 0a 09 09 63 61 63  decrypt) {...cac
15de0 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65  key_sessions[hSe
15df0 73 73 69 6f 6e 5d 2e 64 65 63 72 79 70 74 5f 61  ssion].decrypt_a
15e00 63 74 69 76 65 20 3d 20 30 3b 0a 09 7d 0a 0a 09  ctive = 0;..}...
15e10 6d 75 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63  mutex_retval = c
15e20 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f  ackey_mutex_unlo
15e30 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63  ck(cackey_bigloc
15e40 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78 5f 72  k);..if (mutex_r
15e50 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a 09 09  etval != 0) {...
15e60 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
15e70 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 55 6e 6c  NTF("Error.  Unl
15e80 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29  ocking failed.")
15e90 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  ;....return(CKR_
15ea0 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a  GENERAL_ERROR);.
15eb0 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  .}...CACKEY_DEBU
15ec0 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e  G_PRINTF("Return
15ed0 69 6e 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22  ing CKR_OK (%i)"
15ee0 2c 20 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74  , CKR_OK);...ret
15ef0 75 72 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a  urn(CKR_OK);.}..
15f00 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49  CK_DEFINE_FUNCTI
15f10 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65  ON(CK_RV, C_Dige
15f20 73 74 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49  stInit)(CK_SESSI
15f30 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69  ON_HANDLE hSessi
15f40 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d  on, CK_MECHANISM
15f50 5f 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 29  _PTR pMechanism)
15f60 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47   {..CACKEY_DEBUG
15f70 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e  _PRINTF("Called.
15f80 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ");...if (!cacke
15f90 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b  y_initialized) {
15fa0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
15fb0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
15fc0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  Not initialized.
15fd0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
15fe0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49  R_CRYPTOKI_NOT_I
15ff0 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a  NITIALIZED);..}.
16000 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
16010 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
16020 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f   CKR_FUNCTION_NO
16030 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29  T_SUPPORTED (%i)
16040 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  ", CKR_FUNCTION_
16050 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a  NOT_SUPPORTED);.
16060 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e  ..return(CKR_FUN
16070 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
16080 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49  TED);.}..CK_DEFI
16090 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52  NE_FUNCTION(CK_R
160a0 56 2c 20 43 5f 44 69 67 65 73 74 29 28 43 4b 5f  V, C_Digest)(CK_
160b0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68  SESSION_HANDLE h
160c0 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45  Session, CK_BYTE
160d0 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55  _PTR pData, CK_U
160e0 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c 20  LONG ulDataLen, 
160f0 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 69 67  CK_BYTE_PTR pDig
16100 65 73 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54  est, CK_ULONG_PT
16110 52 20 70 75 6c 44 69 67 65 73 74 4c 65 6e 29 20  R pulDigestLen) 
16120 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  {..CACKEY_DEBUG_
16130 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22  PRINTF("Called."
16140 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79  );...if (!cackey
16150 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a  _initialized) {.
16160 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
16170 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e  RINTF("Error.  N
16180 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22  ot initialized."
16190 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
161a0 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e  _CRYPTOKI_NOT_IN
161b0 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a  ITIALIZED);..}..
161c0 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
161d0 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20  INTF("Returning 
161e0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54  CKR_FUNCTION_NOT
161f0 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29 22  _SUPPORTED (%i)"
16200 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  , CKR_FUNCTION_N
16210 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a  OT_SUPPORTED);..
16220 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43  .return(CKR_FUNC
16230 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54  TION_NOT_SUPPORT
16240 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e  ED);.}..CK_DEFIN
16250 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56  E_FUNCTION(CK_RV
16260 2c 20 43 5f 44 69 67 65 73 74 55 70 64 61 74 65  , C_DigestUpdate
16270 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e  )(CK_SESSION_HAN
16280 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b  DLE hSession, CK
16290 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72 74 2c  _BYTE_PTR pPart,
162a0 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61 72 74   CK_ULONG ulPart
162b0 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44  Len) {..CACKEY_D
162c0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c  EBUG_PRINTF("Cal
162d0 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63  led.");...if (!c
162e0 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65  ackey_initialize
162f0 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45  d) {...CACKEY_DE
16300 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f  BUG_PRINTF("Erro
16310 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69  r.  Not initiali
16320 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72  zed.");....retur
16330 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e  n(CKR_CRYPTOKI_N
16340 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b  OT_INITIALIZED);
16350 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42  ..}...CACKEY_DEB
16360 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72  UG_PRINTF("Retur
16370 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f  ning CKR_FUNCTIO
16380 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20  N_NOT_SUPPORTED 
16390 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54  (%i)", CKR_FUNCT
163a0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
163b0 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52  D);...return(CKR
163c0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55  _FUNCTION_NOT_SU
163d0 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f  PPORTED);.}..CK_
163e0 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28  DEFINE_FUNCTION(
163f0 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73 74 4b  CK_RV, C_DigestK
16400 65 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48  ey)(CK_SESSION_H
16410 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20  ANDLE hSession, 
16420 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45  CK_OBJECT_HANDLE
16430 20 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59   hKey) {..CACKEY
16440 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
16450 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
16460 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69  !cackey_initiali
16470 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  zed) {...CACKEY_
16480 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
16490 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61  ror.  Not initia
164a0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  lized.");....ret
164b0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49  urn(CKR_CRYPTOKI
164c0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
164d0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44  );..}...CACKEY_D
164e0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
164f0 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54  urning CKR_FUNCT
16500 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
16510 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e  D (%i)", CKR_FUN
16520 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
16530 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  TED);...return(C
16540 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
16550 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43  SUPPORTED);.}..C
16560 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f  K_DEFINE_FUNCTIO
16570 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 69 67 65 73  N(CK_RV, C_Diges
16580 74 46 69 6e 61 6c 29 28 43 4b 5f 53 45 53 53 49  tFinal)(CK_SESSI
16590 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69  ON_HANDLE hSessi
165a0 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20  on, CK_BYTE_PTR 
165b0 70 44 69 67 65 73 74 2c 20 43 4b 5f 55 4c 4f 4e  pDigest, CK_ULON
165c0 47 5f 50 54 52 20 70 75 6c 44 69 67 65 73 74 4c  G_PTR pulDigestL
165d0 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45  en) {..CACKEY_DE
165e0 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c  BUG_PRINTF("Call
165f0 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61  ed.");...if (!ca
16600 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64  ckey_initialized
16610 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42  ) {...CACKEY_DEB
16620 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72  UG_PRINTF("Error
16630 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  .  Not initializ
16640 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e  ed.");....return
16650 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f  (CKR_CRYPTOKI_NO
16660 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a  T_INITIALIZED);.
16670 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  .}...CACKEY_DEBU
16680 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e  G_PRINTF("Return
16690 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  ing CKR_FUNCTION
166a0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28  _NOT_SUPPORTED (
166b0 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49  %i)", CKR_FUNCTI
166c0 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44  ON_NOT_SUPPORTED
166d0 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f  );...return(CKR_
166e0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
166f0 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44  PORTED);.}..CK_D
16700 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43  EFINE_FUNCTION(C
16710 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 49 6e 69 74  K_RV, C_SignInit
16720 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e  )(CK_SESSION_HAN
16730 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b  DLE hSession, CK
16740 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70  _MECHANISM_PTR p
16750 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42  Mechanism, CK_OB
16760 4a 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79  JECT_HANDLE hKey
16770 29 20 7b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72  ) {..int mutex_r
16780 65 74 76 61 6c 3b 0a 0a 09 68 4b 65 79 2d 2d 3b  etval;...hKey--;
16790 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
167a0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22  PRINTF("Called."
167b0 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79  );...if (!cackey
167c0 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a  _initialized) {.
167d0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
167e0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e  RINTF("Error.  N
167f0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22  ot initialized."
16800 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52  );....return(CKR
16810 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e  _CRYPTOKI_NOT_IN
16820 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a  ITIALIZED);..}..
16830 09 69 66 20 28 70 4d 65 63 68 61 6e 69 73 6d 20  .if (pMechanism 
16840 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 09 09 43 41 43  == NULL) {...CAC
16850 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
16860 28 22 45 72 72 6f 72 2e 20 70 4d 65 63 68 61 6e  ("Error. pMechan
16870 69 73 6d 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a  ism is NULL.");.
16880 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52  ...return(CKR_AR
16890 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d  GUMENTS_BAD);..}
168a0 0a 0a 09 69 66 20 28 70 4d 65 63 68 61 6e 69 73  ...if (pMechanis
168b0 6d 2d 3e 6d 65 63 68 61 6e 69 73 6d 20 21 3d 20  m->mechanism != 
168c0 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 20 26 26 20  CKM_RSA_PKCS && 
168d0 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65 63 68  pMechanism->mech
168e0 61 6e 69 73 6d 20 21 3d 20 43 4b 4d 5f 53 48 41  anism != CKM_SHA
168f0 31 5f 52 53 41 5f 50 4b 43 53 29 20 7b 0a 09 09  1_RSA_PKCS) {...
16900 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
16910 4e 54 46 28 22 45 72 72 6f 72 2e 20 70 4d 65 63  NTF("Error. pMec
16920 68 61 6e 69 73 6d 2d 3e 6d 65 63 68 61 6e 69 73  hanism->mechanis
16930 6d 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  m not specified 
16940 61 73 20 43 4b 4d 5f 52 53 41 5f 50 4b 43 53 20  as CKM_RSA_PKCS 
16950 6f 72 20 43 4b 4d 5f 53 48 41 31 5f 52 53 41 5f  or CKM_SHA1_RSA_
16960 50 4b 43 53 22 29 3b 0a 0a 09 09 72 65 74 75 72  PKCS");....retur
16970 6e 28 43 4b 52 5f 4d 45 43 48 41 4e 49 53 4d 5f  n(CKR_MECHANISM_
16980 50 41 52 41 4d 5f 49 4e 56 41 4c 49 44 29 3b 0a  PARAM_INVALID);.
16990 09 7d 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f  .}...if (hSessio
169a0 6e 20 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69  n == 0 || hSessi
169b0 6f 6e 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61  on >= (sizeof(ca
169c0 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f  ckey_sessions) /
169d0 20 73 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73   sizeof(cackey_s
169e0 65 73 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a  essions[0]))) {.
169f0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
16a00 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53  RINTF("Error.  S
16a10 65 73 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61  ession out of ra
16a20 6e 67 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74  nge.");......ret
16a30 75 72 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f  urn(CKR_SESSION_
16a40 48 41 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b  HANDLE_INVALID);
16a50 0a 09 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76  ..}...mutex_retv
16a60 61 6c 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65  al = cackey_mute
16a70 78 5f 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69  x_lock(cackey_bi
16a80 67 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74  glock);..if (mut
16a90 65 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20  ex_retval != 0) 
16aa0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
16ab0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
16ac0 20 4c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e   Locking failed.
16ad0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
16ae0 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29  R_GENERAL_ERROR)
16af0 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b  ;..}...if (!cack
16b00 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
16b10 73 69 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a  sion].active) {.
16b20 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75  ..cackey_mutex_u
16b30 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67  nlock(cackey_big
16b40 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59  lock);....CACKEY
16b50 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
16b60 72 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e  rror.  Session n
16b70 6f 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09  ot active.");...
16b80 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45  ...return(CKR_SE
16b90 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56  SSION_HANDLE_INV
16ba0 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28  ALID);..}...if (
16bb0 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b  cackey_sessions[
16bc0 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61  hSession].sign_a
16bd0 63 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65  ctive) {...cacke
16be0 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63  y_mutex_unlock(c
16bf0 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a  ackey_biglock);.
16c00 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
16c10 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
16c20 53 69 67 6e 20 61 6c 72 65 61 64 79 20 69 6e 20  Sign already in 
16c30 70 72 6f 67 72 65 73 73 2e 22 29 3b 0a 09 09 0a  progress.");....
16c40 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45  ..return(CKR_OPE
16c50 52 41 54 49 4f 4e 5f 41 43 54 49 56 45 29 3b 0a  RATION_ACTIVE);.
16c60 09 7d 0a 0a 09 69 66 20 28 68 4b 65 79 20 3e 3d  .}...if (hKey >=
16c70 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73   cackey_sessions
16c80 5b 68 53 65 73 73 69 6f 6e 5d 2e 69 64 65 6e 74  [hSession].ident
16c90 69 74 69 65 73 5f 63 6f 75 6e 74 29 20 7b 0a 09  ities_count) {..
16ca0 09 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e  .cackey_mutex_un
16cb0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c  lock(cackey_bigl
16cc0 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f  ock);....CACKEY_
16cd0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
16ce0 72 6f 72 2e 20 20 4b 65 79 20 68 61 6e 64 6c 65  ror.  Key handle
16cf0 20 6f 75 74 20 6f 66 20 72 61 6e 67 65 2e 22 29   out of range.")
16d00 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  ;....return(CKR_
16d10 4b 45 59 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c  KEY_HANDLE_INVAL
16d20 49 44 29 3b 0a 09 7d 0a 0a 09 63 61 63 6b 65 79  ID);..}...cackey
16d30 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69  _sessions[hSessi
16d40 6f 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76 65 20  on].sign_active 
16d50 3d 20 31 3b 0a 0a 09 63 61 63 6b 65 79 5f 73 65  = 1;...cackey_se
16d60 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d  ssions[hSession]
16d70 2e 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 6d 20  .sign_mechanism 
16d80 3d 20 70 4d 65 63 68 61 6e 69 73 6d 2d 3e 6d 65  = pMechanism->me
16d90 63 68 61 6e 69 73 6d 3b 0a 0a 09 63 61 63 6b 65  chanism;...cacke
16da0 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73  y_sessions[hSess
16db0 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 6c 65 6e  ion].sign_buflen
16dc0 20 3d 20 31 32 38 3b 0a 09 63 61 63 6b 65 79 5f   = 128;..cackey_
16dd0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
16de0 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73 65 64 20  n].sign_bufused 
16df0 3d 20 30 3b 0a 09 63 61 63 6b 65 79 5f 73 65 73  = 0;..cackey_ses
16e00 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e  sions[hSession].
16e10 73 69 67 6e 5f 62 75 66 20 3d 20 6d 61 6c 6c 6f  sign_buf = mallo
16e20 63 28 73 69 7a 65 6f 66 28 2a 63 61 63 6b 65 79  c(sizeof(*cackey
16e30 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69  _sessions[hSessi
16e40 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20 2a 20  on].sign_buf) * 
16e50 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b  cackey_sessions[
16e60 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62  hSession].sign_b
16e70 75 66 6c 65 6e 29 3b 0a 0a 09 6d 75 74 65 78 5f  uflen);...mutex_
16e80 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79 5f  retval = cackey_
16e90 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61 63  mutex_unlock(cac
16ea0 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09 69  key_biglock);..i
16eb0 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c 20  f (mutex_retval 
16ec0 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45 59  != 0) {...CACKEY
16ed0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
16ee0 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e 67  rror.  Unlocking
16ef0 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72   failed.");....r
16f00 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41  eturn(CKR_GENERA
16f10 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 43  L_ERROR);..}...C
16f20 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
16f30 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b  TF("Returning CK
16f40 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52 5f  R_OK (%i)", CKR_
16f50 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b  OK);...return(CK
16f60 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46  R_OK);.}..CK_DEF
16f70 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f  INE_FUNCTION(CK_
16f80 52 56 2c 20 43 5f 53 69 67 6e 29 28 43 4b 5f 53  RV, C_Sign)(CK_S
16f90 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53  ESSION_HANDLE hS
16fa0 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f  ession, CK_BYTE_
16fb0 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f 55 4c  PTR pData, CK_UL
16fc0 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c 20 43  ONG ulDataLen, C
16fd0 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69 67 6e  K_BYTE_PTR pSign
16fe0 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 5f  ature, CK_ULONG_
16ff0 50 54 52 20 70 75 6c 53 69 67 6e 61 74 75 72 65  PTR pulSignature
17000 4c 65 6e 29 20 7b 0a 09 43 4b 5f 52 56 20 73 69  Len) {..CK_RV si
17010 67 6e 5f 72 65 74 3b 0a 0a 09 43 41 43 4b 45 59  gn_ret;...CACKEY
17020 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
17030 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
17040 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69  !cackey_initiali
17050 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  zed) {...CACKEY_
17060 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
17070 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61  ror.  Not initia
17080 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  lized.");....ret
17090 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49  urn(CKR_CRYPTOKI
170a0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
170b0 29 3b 0a 09 7d 0a 0a 09 73 69 67 6e 5f 72 65 74  );..}...sign_ret
170c0 20 3d 20 43 5f 53 69 67 6e 55 70 64 61 74 65 28   = C_SignUpdate(
170d0 68 53 65 73 73 69 6f 6e 2c 20 70 44 61 74 61 2c  hSession, pData,
170e0 20 75 6c 44 61 74 61 4c 65 6e 29 3b 0a 09 69 66   ulDataLen);..if
170f0 20 28 73 69 67 6e 5f 72 65 74 20 21 3d 20 43 4b   (sign_ret != CK
17100 52 5f 4f 4b 29 20 7b 0a 09 09 43 41 43 4b 45 59  R_OK) {...CACKEY
17110 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45  _DEBUG_PRINTF("E
17120 72 72 6f 72 2e 20 20 53 69 67 6e 55 70 64 61 74  rror.  SignUpdat
17130 65 28 29 20 72 65 74 75 72 6e 65 64 20 66 61 69  e() returned fai
17140 6c 75 72 65 20 28 72 76 20 3d 20 25 6c 75 29 2e  lure (rv = %lu).
17150 22 2c 20 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e  ", (unsigned lon
17160 67 29 20 73 69 67 6e 5f 72 65 74 29 3b 0a 0a 09  g) sign_ret);...
17170 09 72 65 74 75 72 6e 28 73 69 67 6e 5f 72 65 74  .return(sign_ret
17180 29 3b 0a 09 7d 0a 0a 09 73 69 67 6e 5f 72 65 74  );..}...sign_ret
17190 20 3d 20 43 5f 53 69 67 6e 46 69 6e 61 6c 28 68   = C_SignFinal(h
171a0 53 65 73 73 69 6f 6e 2c 20 70 53 69 67 6e 61 74  Session, pSignat
171b0 75 72 65 2c 20 70 75 6c 53 69 67 6e 61 74 75 72  ure, pulSignatur
171c0 65 4c 65 6e 29 3b 0a 09 69 66 20 28 73 69 67 6e  eLen);..if (sign
171d0 5f 72 65 74 20 21 3d 20 43 4b 52 5f 4f 4b 29 20  _ret != CKR_OK) 
171e0 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
171f0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
17200 20 53 69 67 6e 46 69 6e 61 6c 28 29 20 72 65 74   SignFinal() ret
17210 75 72 6e 65 64 20 66 61 69 6c 75 72 65 20 28 72  urned failure (r
17220 76 20 3d 20 25 6c 75 29 2e 22 2c 20 28 75 6e 73  v = %lu).", (uns
17230 69 67 6e 65 64 20 6c 6f 6e 67 29 20 73 69 67 6e  igned long) sign
17240 5f 72 65 74 29 3b 0a 0a 09 09 72 65 74 75 72 6e  _ret);....return
17250 28 73 69 67 6e 5f 72 65 74 29 3b 0a 09 7d 0a 0a  (sign_ret);..}..
17260 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
17270 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20  INTF("Returning 
17280 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b  CKR_OK (%i)", CK
17290 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28  R_OK);...return(
172a0 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44  CKR_OK);.}..CK_D
172b0 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43  EFINE_FUNCTION(C
172c0 4b 5f 52 56 2c 20 43 5f 53 69 67 6e 55 70 64 61  K_RV, C_SignUpda
172d0 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48  te)(CK_SESSION_H
172e0 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20  ANDLE hSession, 
172f0 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50 61 72  CK_BYTE_PTR pPar
17300 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50 61  t, CK_ULONG ulPa
17310 72 74 4c 65 6e 29 20 7b 0a 09 69 6e 74 20 6d 75  rtLen) {..int mu
17320 74 65 78 5f 72 65 74 76 61 6c 3b 0a 0a 09 43 41  tex_retval;...CA
17330 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
17340 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09  F("Called.");...
17350 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74  if (!cackey_init
17360 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43  ialized) {...CAC
17370 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
17380 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e  ("Error.  Not in
17390 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09  itialized.");...
173a0 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50  .return(CKR_CRYP
173b0 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c  TOKI_NOT_INITIAL
173c0 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28  IZED);..}...if (
173d0 68 53 65 73 73 69 6f 6e 20 3d 3d 20 30 20 7c 7c  hSession == 0 ||
173e0 20 68 53 65 73 73 69 6f 6e 20 3e 3d 20 28 73 69   hSession >= (si
173f0 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73 73  zeof(cackey_sess
17400 69 6f 6e 73 29 20 2f 20 73 69 7a 65 6f 66 28 63  ions) / sizeof(c
17410 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 30  ackey_sessions[0
17420 5d 29 29 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  ]))) {...CACKEY_
17430 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
17440 72 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6f 75  ror.  Session ou
17450 74 20 6f 66 20 72 61 6e 67 65 2e 22 29 3b 0a 09  t of range.");..
17460 09 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 53  ....return(CKR_S
17470 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e  ESSION_HANDLE_IN
17480 56 41 4c 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20  VALID);..}...if 
17490 28 70 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 20 26  (pPart == NULL &
174a0 26 20 75 6c 50 61 72 74 4c 65 6e 20 3d 3d 20 30  & ulPartLen == 0
174b0 29 20 7b 0a 09 09 2f 2a 20 53 68 6f 72 74 20 63  ) {.../* Short c
174c0 69 72 63 75 69 74 20 69 66 20 77 65 20 61 72 65  ircuit if we are
174d0 20 61 73 6b 65 64 20 74 6f 20 73 69 67 6e 20 6e   asked to sign n
174e0 6f 74 68 69 6e 67 2e 2e 2e 20 2a 2f 0a 09 09 43  othing... */...C
174f0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
17500 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b  TF("Returning CK
17510 52 5f 4f 4b 20 28 25 69 29 20 28 73 68 6f 72 74  R_OK (%i) (short
17520 20 63 69 72 63 75 69 74 29 22 2c 20 43 4b 52 5f   circuit)", CKR_
17530 4f 4b 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  OK);....return(C
17540 4b 52 5f 4f 4b 29 3b 0a 09 7d 0a 0a 09 69 66 20  KR_OK);..}...if 
17550 28 70 50 61 72 74 20 3d 3d 20 4e 55 4c 4c 29 20  (pPart == NULL) 
17560 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
17570 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
17580 70 50 61 72 74 20 69 73 20 4e 55 4c 4c 2c 20 62  pPart is NULL, b
17590 75 74 20 75 6c 50 61 72 74 4c 65 6e 20 69 73 20  ut ulPartLen is 
175a0 6e 6f 74 20 30 2e 22 29 3b 0a 0a 09 09 72 65 74  not 0.");....ret
175b0 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e 54  urn(CKR_ARGUMENT
175c0 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 69 66 20  S_BAD);..}...if 
175d0 28 75 6c 50 61 72 74 4c 65 6e 20 3d 3d 20 30 29  (ulPartLen == 0)
175e0 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
175f0 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
17600 20 75 6c 50 61 72 74 4c 65 6e 20 69 73 20 30 2c   ulPartLen is 0,
17610 20 62 75 74 20 70 50 61 72 74 20 69 73 20 6e 6f   but pPart is no
17620 74 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72 65  t NULL.");....re
17630 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45 4e  turn(CKR_ARGUMEN
17640 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 6d 75  TS_BAD);..}...mu
17650 74 65 78 5f 72 65 74 76 61 6c 20 3d 20 63 61 63  tex_retval = cac
17660 6b 65 79 5f 6d 75 74 65 78 5f 6c 6f 63 6b 28 63  key_mutex_lock(c
17670 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a  ackey_biglock);.
17680 09 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61  .if (mutex_retva
17690 6c 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b  l != 0) {...CACK
176a0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
176b0 22 45 72 72 6f 72 2e 20 20 4c 6f 63 6b 69 6e 67  "Error.  Locking
176c0 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09 72   failed.");....r
176d0 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52 41  eturn(CKR_GENERA
176e0 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09 69  L_ERROR);..}...i
176f0 66 20 28 21 63 61 63 6b 65 79 5f 73 65 73 73 69  f (!cackey_sessi
17700 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 61 63  ons[hSession].ac
17710 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79  tive) {...cackey
17720 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61  _mutex_unlock(ca
17730 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a  ckey_biglock);..
17740 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
17750 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53  RINTF("Error.  S
17760 65 73 73 69 6f 6e 20 6e 6f 74 20 61 63 74 69 76  ession not activ
17770 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72  e.");......retur
17780 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41  n(CKR_SESSION_HA
17790 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09  NDLE_INVALID);..
177a0 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f  }...if (!cackey_
177b0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
177c0 6e 5d 2e 73 69 67 6e 5f 61 63 74 69 76 65 29 20  n].sign_active) 
177d0 7b 0a 09 09 63 61 63 6b 65 79 5f 6d 75 74 65 78  {...cackey_mutex
177e0 5f 75 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62  _unlock(cackey_b
177f0 69 67 6c 6f 63 6b 29 3b 0a 0a 09 09 43 41 43 4b  iglock);....CACK
17800 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
17810 22 45 72 72 6f 72 2e 20 20 53 69 67 6e 20 6e 6f  "Error.  Sign no
17820 74 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a  t active.");....
17830 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 4f 50 45  ..return(CKR_OPE
17840 52 41 54 49 4f 4e 5f 4e 4f 54 5f 49 4e 49 54 49  RATION_NOT_INITI
17850 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 73 77  ALIZED);..}...sw
17860 69 74 63 68 20 28 63 61 63 6b 65 79 5f 73 65 73  itch (cackey_ses
17870 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e  sions[hSession].
17880 73 69 67 6e 5f 6d 65 63 68 61 6e 69 73 6d 29 20  sign_mechanism) 
17890 7b 0a 09 09 63 61 73 65 20 43 4b 4d 5f 52 53 41  {...case CKM_RSA
178a0 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 63 63  _PKCS:..../* Acc
178b0 75 6d 75 6c 61 74 65 20 64 69 72 65 63 74 6c 79  umulate directly
178c0 20 2a 2f 0a 09 09 09 69 66 20 28 28 63 61 63 6b   */....if ((cack
178d0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
178e0 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73  sion].sign_bufus
178f0 65 64 20 2b 20 75 6c 50 61 72 74 4c 65 6e 29 20  ed + ulPartLen) 
17900 3e 20 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e  > cackey_session
17910 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e  s[hSession].sign
17920 5f 62 75 66 6c 65 6e 29 20 7b 0a 09 09 09 09 63  _buflen) {.....c
17930 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68  ackey_sessions[h
17940 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75  Session].sign_bu
17950 66 6c 65 6e 20 2a 3d 20 32 3b 0a 0a 09 09 09 09  flen *= 2;......
17960 63 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b  cackey_sessions[
17970 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62  hSession].sign_b
17980 75 66 20 3d 20 72 65 61 6c 6c 6f 63 28 63 61 63  uf = realloc(cac
17990 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65  key_sessions[hSe
179a0 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 2c  ssion].sign_buf,
179b0 20 73 69 7a 65 6f 66 28 2a 63 61 63 6b 65 79 5f   sizeof(*cackey_
179c0 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
179d0 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20 2a 20 63  n].sign_buf) * c
179e0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68  ackey_sessions[h
179f0 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75  Session].sign_bu
17a00 66 6c 65 6e 29 3b 0a 09 09 09 7d 0a 0a 09 09 09  flen);....}.....
17a10 6d 65 6d 63 70 79 28 63 61 63 6b 65 79 5f 73 65  memcpy(cackey_se
17a20 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d  ssions[hSession]
17a30 2e 73 69 67 6e 5f 62 75 66 20 2b 20 63 61 63 6b  .sign_buf + cack
17a40 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
17a50 73 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73  sion].sign_bufus
17a60 65 64 2c 20 70 50 61 72 74 2c 20 75 6c 50 61 72  ed, pPart, ulPar
17a70 74 4c 65 6e 29 3b 0a 0a 09 09 09 63 61 63 6b 65  tLen);.....cacke
17a80 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73  y_sessions[hSess
17a90 69 6f 6e 5d 2e 73 69 67 6e 5f 62 75 66 75 73 65  ion].sign_bufuse
17aa0 64 20 2b 3d 20 75 6c 50 61 72 74 4c 65 6e 3b 0a  d += ulPartLen;.
17ab0 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63 61 73  ....break;...cas
17ac0 65 20 43 4b 4d 5f 53 48 41 31 5f 52 53 41 5f 50  e CKM_SHA1_RSA_P
17ad0 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 63 63 75 6d  KCS:..../* Accum
17ae0 75 6c 61 74 65 20 69 6e 74 6f 20 61 20 53 48 41  ulate into a SHA
17af0 31 20 68 61 73 68 20 2a 2f 0a 09 09 09 63 61 63  1 hash */....cac
17b00 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b  key_mutex_unlock
17b10 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29  (cackey_biglock)
17b20 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44 45 42  ;.....CACKEY_DEB
17b30 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72  UG_PRINTF("Retur
17b40 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f  ning CKR_FUNCTIO
17b50 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20  N_NOT_SUPPORTED 
17b60 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54  (%i)", CKR_FUNCT
17b70 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
17b80 44 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e 28 43  D);.....return(C
17b90 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
17ba0 53 55 50 50 4f 52 54 45 44 29 3b 0a 09 09 09 62  SUPPORTED);....b
17bb0 72 65 61 6b 3b 0a 09 7d 0a 0a 09 6d 75 74 65 78  reak;..}...mutex
17bc0 5f 72 65 74 76 61 6c 20 3d 20 63 61 63 6b 65 79  _retval = cackey
17bd0 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61  _mutex_unlock(ca
17be0 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 09  ckey_biglock);..
17bf0 69 66 20 28 6d 75 74 65 78 5f 72 65 74 76 61 6c  if (mutex_retval
17c00 20 21 3d 20 30 29 20 7b 0a 09 09 43 41 43 4b 45   != 0) {...CACKE
17c10 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
17c20 45 72 72 6f 72 2e 20 20 55 6e 6c 6f 63 6b 69 6e  Error.  Unlockin
17c30 67 20 66 61 69 6c 65 64 2e 22 29 3b 0a 0a 09 09  g failed.");....
17c40 72 65 74 75 72 6e 28 43 4b 52 5f 47 45 4e 45 52  return(CKR_GENER
17c50 41 4c 5f 45 52 52 4f 52 29 3b 0a 09 7d 0a 0a 09  AL_ERROR);..}...
17c60 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
17c70 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43  NTF("Returning C
17c80 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20 43 4b 52  KR_OK (%i)", CKR
17c90 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  _OK);...return(C
17ca0 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a 43 4b 5f 44 45  KR_OK);.}..CK_DE
17cb0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b  FINE_FUNCTION(CK
17cc0 5f 52 56 2c 20 43 5f 53 69 67 6e 46 69 6e 61 6c  _RV, C_SignFinal
17cd0 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e  )(CK_SESSION_HAN
17ce0 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b  DLE hSession, CK
17cf0 5f 42 59 54 45 5f 50 54 52 20 70 53 69 67 6e 61  _BYTE_PTR pSigna
17d00 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50  ture, CK_ULONG_P
17d10 54 52 20 70 75 6c 53 69 67 6e 61 74 75 72 65 4c  TR pulSignatureL
17d20 65 6e 29 20 7b 0a 09 73 74 61 74 69 63 20 43 4b  en) {..static CK
17d30 5f 42 59 54 45 20 73 69 67 62 75 66 5b 31 30 32  _BYTE sigbuf[102
17d40 34 5d 3b 0a 09 73 73 69 7a 65 5f 74 20 73 69 67  4];..ssize_t sig
17d50 62 75 66 6c 65 6e 3b 0a 09 43 4b 5f 52 56 20 72  buflen;..CK_RV r
17d60 65 74 76 61 6c 20 3d 20 43 4b 52 5f 47 45 4e 45  etval = CKR_GENE
17d70 52 41 4c 5f 45 52 52 4f 52 3b 0a 09 69 6e 74 20  RAL_ERROR;..int 
17d80 74 65 72 6d 69 6e 61 74 65 5f 73 69 67 6e 20 3d  terminate_sign =
17d90 20 31 3b 0a 09 69 6e 74 20 6d 75 74 65 78 5f 72   1;..int mutex_r
17da0 65 74 76 61 6c 3b 0a 0a 09 43 41 43 4b 45 59 5f  etval;...CACKEY_
17db0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61  DEBUG_PRINTF("Ca
17dc0 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21  lled.");...if (!
17dd0 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a  cackey_initializ
17de0 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  ed) {...CACKEY_D
17df0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
17e00 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c  or.  Not initial
17e10 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75  ized.");....retu
17e20 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f  rn(CKR_CRYPTOKI_
17e30 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29  NOT_INITIALIZED)
17e40 3b 0a 09 7d 0a 0a 09 69 66 20 28 70 75 6c 53 69  ;..}...if (pulSi
17e50 67 6e 61 74 75 72 65 4c 65 6e 20 3d 3d 20 4e 55  gnatureLen == NU
17e60 4c 4c 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44  LL) {...CACKEY_D
17e70 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
17e80 6f 72 2e 20 70 75 6c 53 69 67 6e 61 74 75 72 65  or. pulSignature
17e90 4c 65 6e 20 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a  Len is NULL.");.
17ea0 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 41 52  ...return(CKR_AR
17eb0 47 55 4d 45 4e 54 53 5f 42 41 44 29 3b 0a 09 7d  GUMENTS_BAD);..}
17ec0 0a 0a 09 69 66 20 28 68 53 65 73 73 69 6f 6e 20  ...if (hSession 
17ed0 3d 3d 20 30 20 7c 7c 20 68 53 65 73 73 69 6f 6e  == 0 || hSession
17ee0 20 3e 3d 20 28 73 69 7a 65 6f 66 28 63 61 63 6b   >= (sizeof(cack
17ef0 65 79 5f 73 65 73 73 69 6f 6e 73 29 20 2f 20 73  ey_sessions) / s
17f00 69 7a 65 6f 66 28 63 61 63 6b 65 79 5f 73 65 73  izeof(cackey_ses
17f10 73 69 6f 6e 73 5b 30 5d 29 29 29 20 7b 0a 09 09  sions[0]))) {...
17f20 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
17f30 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53 65 73  NTF("Error.  Ses
17f40 73 69 6f 6e 20 6f 75 74 20 6f 66 20 72 61 6e 67  sion out of rang
17f50 65 2e 22 29 3b 0a 09 09 0a 09 09 72 65 74 75 72  e.");......retur
17f60 6e 28 43 4b 52 5f 53 45 53 53 49 4f 4e 5f 48 41  n(CKR_SESSION_HA
17f70 4e 44 4c 45 5f 49 4e 56 41 4c 49 44 29 3b 0a 09  NDLE_INVALID);..
17f80 7d 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c  }...mutex_retval
17f90 20 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f   = cackey_mutex_
17fa0 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c  lock(cackey_bigl
17fb0 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65 78  ock);..if (mutex
17fc0 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b 0a  _retval != 0) {.
17fd0 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
17fe0 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4c  RINTF("Error.  L
17ff0 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64 2e 22 29  ocking failed.")
18000 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f  ;....return(CKR_
18010 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52 29 3b 0a  GENERAL_ERROR);.
18020 09 7d 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79  .}...if (!cackey
18030 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69  _sessions[hSessi
18040 6f 6e 5d 2e 61 63 74 69 76 65 29 20 7b 0a 09 09  on].active) {...
18050 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c  cackey_mutex_unl
18060 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f  ock(cackey_biglo
18070 63 6b 29 3b 0a 0a 09 09 43 41 43 4b 45 59 5f 44  ck);....CACKEY_D
18080 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72 72  EBUG_PRINTF("Err
18090 6f 72 2e 20 20 53 65 73 73 69 6f 6e 20 6e 6f 74  or.  Session not
180a0 20 61 63 74 69 76 65 2e 22 29 3b 0a 09 09 0a 09   active.");.....
180b0 09 72 65 74 75 72 6e 28 43 4b 52 5f 53 45 53 53  .return(CKR_SESS
180c0 49 4f 4e 5f 48 41 4e 44 4c 45 5f 49 4e 56 41 4c  ION_HANDLE_INVAL
180d0 49 44 29 3b 0a 09 7d 0a 0a 09 69 66 20 28 21 63  ID);..}...if (!c
180e0 61 63 6b 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68  ackey_sessions[h
180f0 53 65 73 73 69 6f 6e 5d 2e 73 69 67 6e 5f 61 63  Session].sign_ac
18100 74 69 76 65 29 20 7b 0a 09 09 63 61 63 6b 65 79  tive) {...cackey
18110 5f 6d 75 74 65 78 5f 75 6e 6c 6f 63 6b 28 63 61  _mutex_unlock(ca
18120 63 6b 65 79 5f 62 69 67 6c 6f 63 6b 29 3b 0a 0a  ckey_biglock);..
18130 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
18140 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 53  RINTF("Error.  S
18150 69 67 6e 20 6e 6f 74 20 61 63 74 69 76 65 2e 22  ign not active."
18160 29 3b 0a 09 09 0a 09 09 72 65 74 75 72 6e 28 43  );......return(C
18170 4b 52 5f 4f 50 45 52 41 54 49 4f 4e 5f 4e 4f 54  KR_OPERATION_NOT
18180 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09  _INITIALIZED);..
18190 7d 0a 0a 09 73 77 69 74 63 68 20 28 63 61 63 6b  }...switch (cack
181a0 65 79 5f 73 65 73 73 69 6f 6e 73 5b 68 53 65 73  ey_sessions[hSes
181b0 73 69 6f 6e 5d 2e 73 69 67 6e 5f 6d 65 63 68 61  sion].sign_mecha
181c0 6e 69 73 6d 29 20 7b 0a 09 09 63 61 73 65 20 43  nism) {...case C
181d0 4b 4d 5f 52 53 41 5f 50 4b 43 53 3a 0a 09 09 09  KM_RSA_PKCS:....
181e0 73 69 67 62 75 66 6c 65 6e 20 3d 20 2d 31 3b 0a  sigbuflen = -1;.
181f0 0a 09 09 09 2f 2a 20 58 58 58 3a 20 41 73 6b 20  ..../* XXX: Ask 
18200 63 61 72 64 20 74 6f 20 73 69 67 6e 20 2a 2f 0a  card to sign */.
18210 0a 09 09 09 69 66 20 28 73 69 67 62 75 66 6c 65  ....if (sigbufle
18220 6e 20 3c 20 30 29 20 7b 0a 09 09 09 09 2f 2a 20  n < 0) {...../* 
18230 53 69 67 6e 69 6e 67 20 66 61 69 6c 65 64 2e 20  Signing failed. 
18240 2a 2f 0a 09 09 09 09 72 65 74 76 61 6c 20 3d 20  */.....retval = 
18250 43 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f  CKR_GENERAL_ERRO
18260 52 3b 0a 09 09 09 7d 20 65 6c 73 65 20 69 66 20  R;....} else if 
18270 28 28 28 75 6e 73 69 67 6e 65 64 20 6c 6f 6e 67  (((unsigned long
18280 29 20 73 69 67 62 75 66 6c 65 6e 29 20 3e 20 2a  ) sigbuflen) > *
18290 70 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 20  pulSignatureLen 
182a0 26 26 20 70 53 69 67 6e 61 74 75 72 65 29 20 7b  && pSignature) {
182b0 0a 09 09 09 09 2f 2a 20 53 69 67 6e 65 64 20 64  ...../* Signed d
182c0 61 74 61 20 74 6f 6f 20 6c 61 72 67 65 20 2a 2f  ata too large */
182d0 0a 09 09 09 09 72 65 74 76 61 6c 20 3d 20 43 4b  .....retval = CK
182e0 52 5f 42 55 46 46 45 52 5f 54 4f 4f 5f 53 4d 41  R_BUFFER_TOO_SMA
182f0 4c 4c 3b 0a 0a 09 09 09 09 74 65 72 6d 69 6e 61  LL;......termina
18300 74 65 5f 73 69 67 6e 20 3d 20 30 3b 0a 09 09 09  te_sign = 0;....
18310 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 74 65 72  } else {.....ter
18320 6d 69 6e 61 74 65 5f 73 69 67 6e 20 3d 20 30 3b  minate_sign = 0;
18330 0a 0a 09 09 09 09 69 66 20 28 70 53 69 67 6e 61  ......if (pSigna
18340 74 75 72 65 29 20 7b 0a 09 09 09 09 09 6d 65 6d  ture) {......mem
18350 63 70 79 28 70 53 69 67 6e 61 74 75 72 65 2c 20  cpy(pSignature, 
18360 73 69 67 62 75 66 2c 20 73 69 67 62 75 66 6c 65  sigbuf, sigbufle
18370 6e 29 3b 0a 0a 09 09 09 09 09 74 65 72 6d 69 6e  n);.......termin
18380 61 74 65 5f 73 69 67 6e 20 3d 20 31 3b 0a 09 09  ate_sign = 1;...
18390 09 09 7d 0a 0a 09 09 09 09 2a 70 75 6c 53 69 67  ..}......*pulSig
183a0 6e 61 74 75 72 65 4c 65 6e 20 3d 20 73 69 67 62  natureLen = sigb
183b0 75 66 6c 65 6e 3b 0a 0a 09 09 09 09 72 65 74 76  uflen;......retv
183c0 61 6c 20 3d 20 43 4b 52 5f 4f 4b 3b 0a 09 09 09  al = CKR_OK;....
183d0 7d 0a 0a 09 09 09 62 72 65 61 6b 3b 0a 09 09 63  }.....break;...c
183e0 61 73 65 20 43 4b 4d 5f 53 48 41 31 5f 52 53 41  ase CKM_SHA1_RSA
183f0 5f 50 4b 43 53 3a 0a 09 09 09 2f 2a 20 41 63 63  _PKCS:..../* Acc
18400 75 6d 75 6c 61 74 65 20 69 6e 74 6f 20 61 20 53  umulate into a S
18410 48 41 31 20 68 61 73 68 20 2a 2f 0a 09 09 09 63  HA1 hash */....c
18420 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75 6e 6c 6f  ackey_mutex_unlo
18430 63 6b 28 63 61 63 6b 65 79 5f 62 69 67 6c 6f 63  ck(cackey_bigloc
18440 6b 29 3b 0a 0a 09 09 09 43 41 43 4b 45 59 5f 44  k);.....CACKEY_D
18450 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
18460 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54  urning CKR_FUNCT
18470 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
18480 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e  D (%i)", CKR_FUN
18490 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
184a0 54 45 44 29 3b 0a 0a 09 09 09 72 65 74 75 72 6e  TED);.....return
184b0 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f  (CKR_FUNCTION_NO
184c0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 09 09  T_SUPPORTED);...
184d0 09 62 72 65 61 6b 3b 0a 09 7d 0a 0a 09 69 66 20  .break;..}...if 
184e0 28 74 65 72 6d 69 6e 61 74 65 5f 73 69 67 6e 29  (terminate_sign)
184f0 20 7b 0a 09 09 69 66 20 28 63 61 63 6b 65 79 5f   {...if (cackey_
18500 73 65 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f  sessions[hSessio
18510 6e 5d 2e 73 69 67 6e 5f 62 75 66 29 20 7b 0a 09  n].sign_buf) {..
18520 09 09 66 72 65 65 28 63 61 63 6b 65 79 5f 73 65  ..free(cackey_se
18530 73 73 69 6f 6e 73 5b 68 53 65 73 73 69 6f 6e 5d  ssions[hSession]
18540 2e 73 69 67 6e 5f 62 75 66 29 3b 0a 09 09 7d 0a  .sign_buf);...}.
18550 0a 09 09 63 61 63 6b 65 79 5f 73 65 73 73 69 6f  ...cackey_sessio
18560 6e 73 5b 68 53 65 73 73 69 6f 6e 5d 2e 73 69 67  ns[hSession].sig
18570 6e 5f 61 63 74 69 76 65 20 3d 20 30 3b 0a 09 7d  n_active = 0;..}
18580 0a 0a 09 6d 75 74 65 78 5f 72 65 74 76 61 6c 20  ...mutex_retval 
18590 3d 20 63 61 63 6b 65 79 5f 6d 75 74 65 78 5f 75  = cackey_mutex_u
185a0 6e 6c 6f 63 6b 28 63 61 63 6b 65 79 5f 62 69 67  nlock(cackey_big
185b0 6c 6f 63 6b 29 3b 0a 09 69 66 20 28 6d 75 74 65  lock);..if (mute
185c0 78 5f 72 65 74 76 61 6c 20 21 3d 20 30 29 20 7b  x_retval != 0) {
185d0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
185e0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
185f0 55 6e 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 65 64  Unlocking failed
18600 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  .");....return(C
18610 4b 52 5f 47 45 4e 45 52 41 4c 5f 45 52 52 4f 52  KR_GENERAL_ERROR
18620 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44  );..}...CACKEY_D
18630 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
18640 75 72 6e 69 6e 67 20 25 69 22 2c 20 28 69 6e 74  urning %i", (int
18650 29 20 72 65 74 76 61 6c 29 3b 0a 0a 09 72 65 74  ) retval);...ret
18660 75 72 6e 28 72 65 74 76 61 6c 29 3b 0a 7d 0a 0a  urn(retval);.}..
18670 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49  CK_DEFINE_FUNCTI
18680 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 69 67 6e  ON(CK_RV, C_Sign
18690 52 65 63 6f 76 65 72 49 6e 69 74 29 28 43 4b 5f  RecoverInit)(CK_
186a0 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68  SESSION_HANDLE h
186b0 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48  Session, CK_MECH
186c0 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61  ANISM_PTR pMecha
186d0 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f  nism, CK_OBJECT_
186e0 48 41 4e 44 4c 45 20 68 4b 65 79 29 20 7b 0a 09  HANDLE hKey) {..
186f0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
18700 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a  NTF("Called.");.
18710 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e  ..if (!cackey_in
18720 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43  itialized) {...C
18730 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
18740 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20  TF("Error.  Not 
18750 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a  initialized.");.
18760 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52  ...return(CKR_CR
18770 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49  YPTOKI_NOT_INITI
18780 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41  ALIZED);..}...CA
18790 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
187a0 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52  F("Returning CKR
187b0 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55  _FUNCTION_NOT_SU
187c0 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43  PPORTED (%i)", C
187d0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
187e0 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65  SUPPORTED);...re
187f0 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f  turn(CKR_FUNCTIO
18800 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29  N_NOT_SUPPORTED)
18810 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46  ;.}..CK_DEFINE_F
18820 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43  UNCTION(CK_RV, C
18830 5f 53 69 67 6e 52 65 63 6f 76 65 72 29 28 43 4b  _SignRecover)(CK
18840 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20  _SESSION_HANDLE 
18850 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54  hSession, CK_BYT
18860 45 5f 50 54 52 20 70 44 61 74 61 2c 20 43 4b 5f  E_PTR pData, CK_
18870 55 4c 4f 4e 47 20 75 6c 44 61 74 61 4c 65 6e 2c  ULONG ulDataLen,
18880 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69   CK_BYTE_PTR pSi
18890 67 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e  gnature, CK_ULON
188a0 47 5f 50 54 52 20 70 75 6c 53 69 67 6e 61 74 75  G_PTR pulSignatu
188b0 72 65 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59  reLen) {..CACKEY
188c0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
188d0 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
188e0 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69  !cackey_initiali
188f0 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  zed) {...CACKEY_
18900 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
18910 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61  ror.  Not initia
18920 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  lized.");....ret
18930 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49  urn(CKR_CRYPTOKI
18940 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
18950 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44  );..}...CACKEY_D
18960 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
18970 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54  urning CKR_FUNCT
18980 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
18990 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e  D (%i)", CKR_FUN
189a0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
189b0 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  TED);...return(C
189c0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
189d0 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43  SUPPORTED);.}..C
189e0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f  K_DEFINE_FUNCTIO
189f0 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 69 66  N(CK_RV, C_Verif
18a00 79 49 6e 69 74 29 28 43 4b 5f 53 45 53 53 49 4f  yInit)(CK_SESSIO
18a10 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f  N_HANDLE hSessio
18a20 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f  n, CK_MECHANISM_
18a30 50 54 52 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20  PTR pMechanism, 
18a40 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e 44 4c 45  CK_OBJECT_HANDLE
18a50 20 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59   hKey) {..CACKEY
18a60 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
18a70 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
18a80 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69  !cackey_initiali
18a90 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  zed) {...CACKEY_
18aa0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
18ab0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61  ror.  Not initia
18ac0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  lized.");....ret
18ad0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49  urn(CKR_CRYPTOKI
18ae0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
18af0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44  );..}...CACKEY_D
18b00 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
18b10 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54  urning CKR_FUNCT
18b20 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
18b30 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e  D (%i)", CKR_FUN
18b40 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
18b50 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  TED);...return(C
18b60 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
18b70 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43  SUPPORTED);.}..C
18b80 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f  K_DEFINE_FUNCTIO
18b90 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 69 66  N(CK_RV, C_Verif
18ba0 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41  y)(CK_SESSION_HA
18bb0 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43  NDLE hSession, C
18bc0 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 61 74 61  K_BYTE_PTR pData
18bd0 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 44 61 74  , CK_ULONG ulDat
18be0 61 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54  aLen, CK_BYTE_PT
18bf0 52 20 70 53 69 67 6e 61 74 75 72 65 2c 20 43 4b  R pSignature, CK
18c00 5f 55 4c 4f 4e 47 20 75 6c 53 69 67 6e 61 74 75  _ULONG ulSignatu
18c10 72 65 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59  reLen) {..CACKEY
18c20 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
18c30 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
18c40 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69  !cackey_initiali
18c50 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  zed) {...CACKEY_
18c60 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
18c70 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61  ror.  Not initia
18c80 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  lized.");....ret
18c90 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49  urn(CKR_CRYPTOKI
18ca0 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
18cb0 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44  );..}...CACKEY_D
18cc0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
18cd0 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54  urning CKR_FUNCT
18ce0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
18cf0 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e  D (%i)", CKR_FUN
18d00 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
18d10 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  TED);...return(C
18d20 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
18d30 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43  SUPPORTED);.}..C
18d40 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f  K_DEFINE_FUNCTIO
18d50 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65 72 69 66  N(CK_RV, C_Verif
18d60 79 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53  yUpdate)(CK_SESS
18d70 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73  ION_HANDLE hSess
18d80 69 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52  ion, CK_BYTE_PTR
18d90 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47   pPart, CK_ULONG
18da0 20 75 6c 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43   ulPartLen) {..C
18db0 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
18dc0 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a  TF("Called.");..
18dd0 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69  .if (!cackey_ini
18de0 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41  tialized) {...CA
18df0 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
18e00 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69  F("Error.  Not i
18e10 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a  nitialized.");..
18e20 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59  ..return(CKR_CRY
18e30 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41  PTOKI_NOT_INITIA
18e40 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43  LIZED);..}...CAC
18e50 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
18e60 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f  ("Returning CKR_
18e70 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
18e80 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b  PORTED (%i)", CK
18e90 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53  R_FUNCTION_NOT_S
18ea0 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74  UPPORTED);...ret
18eb0 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  urn(CKR_FUNCTION
18ec0 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b  _NOT_SUPPORTED);
18ed0 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55  .}..CK_DEFINE_FU
18ee0 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f  NCTION(CK_RV, C_
18ef0 56 65 72 69 66 79 46 69 6e 61 6c 29 28 43 4b 5f  VerifyFinal)(CK_
18f00 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68  SESSION_HANDLE h
18f10 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54 45  Session, CK_BYTE
18f20 5f 50 54 52 20 70 53 69 67 6e 61 74 75 72 65 2c  _PTR pSignature,
18f30 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 53 69 67 6e   CK_ULONG ulSign
18f40 61 74 75 72 65 4c 65 6e 29 20 7b 0a 09 43 41 43  atureLen) {..CAC
18f50 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
18f60 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69  ("Called.");...i
18f70 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69  f (!cackey_initi
18f80 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b  alized) {...CACK
18f90 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
18fa0 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69  "Error.  Not ini
18fb0 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09  tialized.");....
18fc0 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54  return(CKR_CRYPT
18fd0 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49  OKI_NOT_INITIALI
18fe0 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45  ZED);..}...CACKE
18ff0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
19000 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55  Returning CKR_FU
19010 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
19020 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f  RTED (%i)", CKR_
19030 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
19040 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72  PORTED);...retur
19050 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  n(CKR_FUNCTION_N
19060 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d  OT_SUPPORTED);.}
19070 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43  ..CK_DEFINE_FUNC
19080 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 56 65  TION(CK_RV, C_Ve
19090 72 69 66 79 52 65 63 6f 76 65 72 49 6e 69 74 29  rifyRecoverInit)
190a0 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44  (CK_SESSION_HAND
190b0 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f  LE hSession, CK_
190c0 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d  MECHANISM_PTR pM
190d0 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a  echanism, CK_OBJ
190e0 45 43 54 5f 48 41 4e 44 4c 45 20 68 4b 65 79 29  ECT_HANDLE hKey)
190f0 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47   {..CACKEY_DEBUG
19100 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e  _PRINTF("Called.
19110 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ");...if (!cacke
19120 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b  y_initialized) {
19130 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
19140 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
19150 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  Not initialized.
19160 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
19170 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49  R_CRYPTOKI_NOT_I
19180 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a  NITIALIZED);..}.
19190 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
191a0 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
191b0 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f   CKR_FUNCTION_NO
191c0 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29  T_SUPPORTED (%i)
191d0 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  ", CKR_FUNCTION_
191e0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a  NOT_SUPPORTED);.
191f0 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e  ..return(CKR_FUN
19200 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
19210 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49  TED);.}..CK_DEFI
19220 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52  NE_FUNCTION(CK_R
19230 56 2c 20 43 5f 56 65 72 69 66 79 52 65 63 6f 76  V, C_VerifyRecov
19240 65 72 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48  er)(CK_SESSION_H
19250 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20  ANDLE hSession, 
19260 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 53 69 67  CK_BYTE_PTR pSig
19270 6e 61 74 75 72 65 2c 20 43 4b 5f 55 4c 4f 4e 47  nature, CK_ULONG
19280 20 75 6c 53 69 67 6e 61 74 75 72 65 4c 65 6e 2c   ulSignatureLen,
19290 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 44 61   CK_BYTE_PTR pDa
192a0 74 61 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52  ta, CK_ULONG_PTR
192b0 20 70 75 6c 44 61 74 61 4c 65 6e 29 20 7b 0a 09   pulDataLen) {..
192c0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
192d0 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a  NTF("Called.");.
192e0 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69 6e  ..if (!cackey_in
192f0 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43  itialized) {...C
19300 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
19310 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20  TF("Error.  Not 
19320 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a  initialized.");.
19330 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43 52  ...return(CKR_CR
19340 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49  YPTOKI_NOT_INITI
19350 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41  ALIZED);..}...CA
19360 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54  CKEY_DEBUG_PRINT
19370 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b 52  F("Returning CKR
19380 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55  _FUNCTION_NOT_SU
19390 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20 43  PPORTED (%i)", C
193a0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
193b0 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65  SUPPORTED);...re
193c0 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f  turn(CKR_FUNCTIO
193d0 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29  N_NOT_SUPPORTED)
193e0 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46  ;.}..CK_DEFINE_F
193f0 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43  UNCTION(CK_RV, C
19400 5f 44 69 67 65 73 74 45 6e 63 72 79 70 74 55 70  _DigestEncryptUp
19410 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49 4f 4e  date)(CK_SESSION
19420 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e  _HANDLE hSession
19430 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70 50  , CK_BYTE_PTR pP
19440 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c  art, CK_ULONG ul
19450 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45  PartLen, CK_BYTE
19460 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65 64 50  _PTR pEncryptedP
19470 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54  art, CK_ULONG_PT
19480 52 20 70 75 6c 45 6e 63 72 79 70 74 65 64 50 61  R pulEncryptedPa
19490 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b 45 59  rtLen) {..CACKEY
194a0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
194b0 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
194c0 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69  !cackey_initiali
194d0 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  zed) {...CACKEY_
194e0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
194f0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61  ror.  Not initia
19500 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  lized.");....ret
19510 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49  urn(CKR_CRYPTOKI
19520 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
19530 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44  );..}...CACKEY_D
19540 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
19550 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54  urning CKR_FUNCT
19560 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
19570 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e  D (%i)", CKR_FUN
19580 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
19590 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  TED);...return(C
195a0 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
195b0 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43  SUPPORTED);.}..C
195c0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f  K_DEFINE_FUNCTIO
195d0 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63 72 79  N(CK_RV, C_Decry
195e0 70 74 44 69 67 65 73 74 55 70 64 61 74 65 29 28  ptDigestUpdate)(
195f0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c  CK_SESSION_HANDL
19600 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42  E hSession, CK_B
19610 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 74  YTE_PTR pEncrypt
19620 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47  edPart, CK_ULONG
19630 20 75 6c 45 6e 63 72 79 70 74 65 64 50 61 72 74   ulEncryptedPart
19640 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52  Len, CK_BYTE_PTR
19650 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47   pPart, CK_ULONG
19660 5f 50 54 52 20 70 75 6c 50 61 72 74 4c 65 6e 29  _PTR pulPartLen)
19670 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47   {..CACKEY_DEBUG
19680 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e  _PRINTF("Called.
19690 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ");...if (!cacke
196a0 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b  y_initialized) {
196b0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
196c0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
196d0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  Not initialized.
196e0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
196f0 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49  R_CRYPTOKI_NOT_I
19700 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a  NITIALIZED);..}.
19710 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
19720 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
19730 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f   CKR_FUNCTION_NO
19740 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29  T_SUPPORTED (%i)
19750 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  ", CKR_FUNCTION_
19760 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a  NOT_SUPPORTED);.
19770 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e  ..return(CKR_FUN
19780 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
19790 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49  TED);.}..CK_DEFI
197a0 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52  NE_FUNCTION(CK_R
197b0 56 2c 20 43 5f 53 69 67 6e 45 6e 63 72 79 70 74  V, C_SignEncrypt
197c0 55 70 64 61 74 65 29 28 43 4b 5f 53 45 53 53 49  Update)(CK_SESSI
197d0 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69  ON_HANDLE hSessi
197e0 6f 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20  on, CK_BYTE_PTR 
197f0 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 20  pPart, CK_ULONG 
19800 75 6c 50 61 72 74 4c 65 6e 2c 20 43 4b 5f 42 59  ulPartLen, CK_BY
19810 54 45 5f 50 54 52 20 70 45 6e 63 72 79 70 74 65  TE_PTR pEncrypte
19820 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f 4e 47 5f  dPart, CK_ULONG_
19830 50 54 52 20 70 75 6c 45 6e 63 72 79 70 74 65 64  PTR pulEncrypted
19840 50 61 72 74 4c 65 6e 29 20 7b 0a 09 43 41 43 4b  PartLen) {..CACK
19850 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
19860 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66  "Called.");...if
19870 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61   (!cackey_initia
19880 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45  lized) {...CACKE
19890 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
198a0 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74  Error.  Not init
198b0 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72  ialized.");....r
198c0 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f  eturn(CKR_CRYPTO
198d0 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a  KI_NOT_INITIALIZ
198e0 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59  ED);..}...CACKEY
198f0 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52  _DEBUG_PRINTF("R
19900 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e  eturning CKR_FUN
19910 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
19920 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46  TED (%i)", CKR_F
19930 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50  UNCTION_NOT_SUPP
19940 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e  ORTED);...return
19950 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f  (CKR_FUNCTION_NO
19960 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a  T_SUPPORTED);.}.
19970 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54  .CK_DEFINE_FUNCT
19980 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 44 65 63  ION(CK_RV, C_Dec
19990 72 79 70 74 56 65 72 69 66 79 55 70 64 61 74 65  ryptVerifyUpdate
199a0 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e  )(CK_SESSION_HAN
199b0 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b  DLE hSession, CK
199c0 5f 42 59 54 45 5f 50 54 52 20 70 45 6e 63 72 79  _BYTE_PTR pEncry
199d0 70 74 65 64 50 61 72 74 2c 20 43 4b 5f 55 4c 4f  ptedPart, CK_ULO
199e0 4e 47 20 75 6c 45 6e 63 72 79 70 74 65 64 50 61  NG ulEncryptedPa
199f0 72 74 4c 65 6e 2c 20 43 4b 5f 42 59 54 45 5f 50  rtLen, CK_BYTE_P
19a00 54 52 20 70 50 61 72 74 2c 20 43 4b 5f 55 4c 4f  TR pPart, CK_ULO
19a10 4e 47 5f 50 54 52 20 70 75 6c 50 61 72 74 4c 65  NG_PTR pulPartLe
19a20 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42  n) {..CACKEY_DEB
19a30 55 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65  UG_PRINTF("Calle
19a40 64 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63  d.");...if (!cac
19a50 6b 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29  key_initialized)
19a60 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
19a70 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
19a80 20 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65    Not initialize
19a90 64 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28  d.");....return(
19aa0 43 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54  CKR_CRYPTOKI_NOT
19ab0 5f 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09  _INITIALIZED);..
19ac0 7d 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47  }...CACKEY_DEBUG
19ad0 5f 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69  _PRINTF("Returni
19ae0 6e 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  ng CKR_FUNCTION_
19af0 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25  NOT_SUPPORTED (%
19b00 69 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f  i)", CKR_FUNCTIO
19b10 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29  N_NOT_SUPPORTED)
19b20 3b 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46  ;...return(CKR_F
19b30 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50  UNCTION_NOT_SUPP
19b40 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45  ORTED);.}..CK_DE
19b50 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b  FINE_FUNCTION(CK
19b60 5f 52 56 2c 20 43 5f 47 65 6e 65 72 61 74 65 4b  _RV, C_GenerateK
19b70 65 79 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48  ey)(CK_SESSION_H
19b80 41 4e 44 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20  ANDLE hSession, 
19b90 43 4b 5f 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52  CK_MECHANISM_PTR
19ba0 20 70 4d 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f   pMechanism, CK_
19bb0 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 70 54  ATTRIBUTE_PTR pT
19bc0 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f 4e  emplate, CK_ULON
19bd0 47 20 75 6c 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42  G ulCount, CK_OB
19be0 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20  JECT_HANDLE_PTR 
19bf0 70 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59  phKey) {..CACKEY
19c00 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
19c10 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
19c20 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69  !cackey_initiali
19c30 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  zed) {...CACKEY_
19c40 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
19c50 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61  ror.  Not initia
19c60 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  lized.");....ret
19c70 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49  urn(CKR_CRYPTOKI
19c80 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
19c90 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44  );..}...CACKEY_D
19ca0 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
19cb0 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54  urning CKR_FUNCT
19cc0 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
19cd0 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e  D (%i)", CKR_FUN
19ce0 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
19cf0 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  TED);...return(C
19d00 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
19d10 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43  SUPPORTED);.}..C
19d20 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f  K_DEFINE_FUNCTIO
19d30 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65 6e 65 72  N(CK_RV, C_Gener
19d40 61 74 65 4b 65 79 50 61 69 72 29 28 43 4b 5f 53  ateKeyPair)(CK_S
19d50 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53  ESSION_HANDLE hS
19d60 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41  ession, CK_MECHA
19d70 4e 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e  NISM_PTR pMechan
19d80 69 73 6d 2c 20 43 4b 5f 41 54 54 52 49 42 55 54  ism, CK_ATTRIBUT
19d90 45 5f 50 54 52 20 70 50 75 62 6c 69 63 4b 65 79  E_PTR pPublicKey
19da0 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f  Template, CK_ULO
19db0 4e 47 20 75 6c 50 75 62 6c 69 63 4b 65 79 41 74  NG ulPublicKeyAt
19dc0 74 72 69 62 75 74 65 43 6f 75 6e 74 2c 20 43 4b  tributeCount, CK
19dd0 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 70  _ATTRIBUTE_PTR p
19de0 50 72 69 76 61 74 65 4b 65 79 54 65 6d 70 6c 61  PrivateKeyTempla
19df0 74 65 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 50  te, CK_ULONG ulP
19e00 72 69 76 61 74 65 4b 65 79 41 74 74 72 69 62 75  rivateKeyAttribu
19e10 74 65 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45  teCount, CK_OBJE
19e20 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20 70 68  CT_HANDLE_PTR ph
19e30 50 75 62 6c 69 63 4b 65 79 2c 20 43 4b 5f 4f 42  PublicKey, CK_OB
19e40 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20  JECT_HANDLE_PTR 
19e50 70 68 50 72 69 76 61 74 65 4b 65 79 29 20 7b 0a  phPrivateKey) {.
19e60 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
19e70 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b  INTF("Called.");
19e80 0a 0a 09 69 66 20 28 21 63 61 63 6b 65 79 5f 69  ...if (!cackey_i
19e90 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b 0a 09 09  nitialized) {...
19ea0 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49  CACKEY_DEBUG_PRI
19eb0 4e 54 46 28 22 45 72 72 6f 72 2e 20 20 4e 6f 74  NTF("Error.  Not
19ec0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 22 29 3b   initialized.");
19ed0 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b 52 5f 43  ....return(CKR_C
19ee0 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54  RYPTOKI_NOT_INIT
19ef0 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43  IALIZED);..}...C
19f00 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e  ACKEY_DEBUG_PRIN
19f10 54 46 28 22 52 65 74 75 72 6e 69 6e 67 20 43 4b  TF("Returning CK
19f20 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53  R_FUNCTION_NOT_S
19f30 55 50 50 4f 52 54 45 44 20 28 25 69 29 22 2c 20  UPPORTED (%i)", 
19f40 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54  CKR_FUNCTION_NOT
19f50 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 0a 09 72  _SUPPORTED);...r
19f60 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43 54 49  eturn(CKR_FUNCTI
19f70 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44  ON_NOT_SUPPORTED
19f80 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f  );.}..CK_DEFINE_
19f90 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20  FUNCTION(CK_RV, 
19fa0 43 5f 57 72 61 70 4b 65 79 29 28 43 4b 5f 53 45  C_WrapKey)(CK_SE
19fb0 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65  SSION_HANDLE hSe
19fc0 73 73 69 6f 6e 2c 20 43 4b 5f 4d 45 43 48 41 4e  ssion, CK_MECHAN
19fd0 49 53 4d 5f 50 54 52 20 70 4d 65 63 68 61 6e 69  ISM_PTR pMechani
19fe0 73 6d 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41  sm, CK_OBJECT_HA
19ff0 4e 44 4c 45 20 68 57 72 61 70 70 69 6e 67 4b 65  NDLE hWrappingKe
1a000 79 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48 41 4e  y, CK_OBJECT_HAN
1a010 44 4c 45 20 68 4b 65 79 2c 20 43 4b 5f 42 59 54  DLE hKey, CK_BYT
1a020 45 5f 50 54 52 20 70 57 72 61 70 70 65 64 4b 65  E_PTR pWrappedKe
1a030 79 2c 20 43 4b 5f 55 4c 4f 4e 47 5f 50 54 52 20  y, CK_ULONG_PTR 
1a040 70 75 6c 57 72 61 70 70 65 64 4b 65 79 4c 65 6e  pulWrappedKeyLen
1a050 29 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55  ) {..CACKEY_DEBU
1a060 47 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64  G_PRINTF("Called
1a070 2e 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b  .");...if (!cack
1a080 65 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20  ey_initialized) 
1a090 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47  {...CACKEY_DEBUG
1a0a0 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20  _PRINTF("Error. 
1a0b0 20 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64   Not initialized
1a0c0 2e 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43  .");....return(C
1a0d0 4b 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f  KR_CRYPTOKI_NOT_
1a0e0 49 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d  INITIALIZED);..}
1a0f0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
1a100 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
1a110 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  g CKR_FUNCTION_N
1a120 4f 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69  OT_SUPPORTED (%i
1a130 29 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e  )", CKR_FUNCTION
1a140 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b  _NOT_SUPPORTED);
1a150 0a 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55  ...return(CKR_FU
1a160 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
1a170 52 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46  RTED);.}..CK_DEF
1a180 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f  INE_FUNCTION(CK_
1a190 52 56 2c 20 43 5f 55 6e 77 72 61 70 4b 65 79 29  RV, C_UnwrapKey)
1a1a0 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44  (CK_SESSION_HAND
1a1b0 4c 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f  LE hSession, CK_
1a1c0 4d 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d  MECHANISM_PTR pM
1a1d0 65 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a  echanism, CK_OBJ
1a1e0 45 43 54 5f 48 41 4e 44 4c 45 20 68 55 6e 77 72  ECT_HANDLE hUnwr
1a1f0 61 70 70 69 6e 67 4b 65 79 2c 20 43 4b 5f 42 59  appingKey, CK_BY
1a200 54 45 5f 50 54 52 20 70 57 72 61 70 70 65 64 4b  TE_PTR pWrappedK
1a210 65 79 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 57  ey, CK_ULONG ulW
1a220 72 61 70 70 65 64 4b 65 79 4c 65 6e 2c 20 43 4b  rappedKeyLen, CK
1a230 5f 41 54 54 52 49 42 55 54 45 5f 50 54 52 20 70  _ATTRIBUTE_PTR p
1a240 54 65 6d 70 6c 61 74 65 2c 20 43 4b 5f 55 4c 4f  Template, CK_ULO
1a250 4e 47 20 75 6c 41 74 74 72 69 62 75 74 65 43 6f  NG ulAttributeCo
1a260 75 6e 74 2c 20 43 4b 5f 4f 42 4a 45 43 54 5f 48  unt, CK_OBJECT_H
1a270 41 4e 44 4c 45 5f 50 54 52 20 70 68 4b 65 79 29  ANDLE_PTR phKey)
1a280 20 7b 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47   {..CACKEY_DEBUG
1a290 5f 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e  _PRINTF("Called.
1a2a0 22 29 3b 0a 0a 09 69 66 20 28 21 63 61 63 6b 65  ");...if (!cacke
1a2b0 79 5f 69 6e 69 74 69 61 6c 69 7a 65 64 29 20 7b  y_initialized) {
1a2c0 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
1a2d0 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e 20 20  PRINTF("Error.  
1a2e0 4e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  Not initialized.
1a2f0 22 29 3b 0a 0a 09 09 72 65 74 75 72 6e 28 43 4b  ");....return(CK
1a300 52 5f 43 52 59 50 54 4f 4b 49 5f 4e 4f 54 5f 49  R_CRYPTOKI_NOT_I
1a310 4e 49 54 49 41 4c 49 5a 45 44 29 3b 0a 09 7d 0a  NITIALIZED);..}.
1a320 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50  ..CACKEY_DEBUG_P
1a330 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e 67  RINTF("Returning
1a340 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f   CKR_FUNCTION_NO
1a350 54 5f 53 55 50 50 4f 52 54 45 44 20 28 25 69 29  T_SUPPORTED (%i)
1a360 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  ", CKR_FUNCTION_
1a370 4e 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a  NOT_SUPPORTED);.
1a380 0a 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e  ..return(CKR_FUN
1a390 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
1a3a0 54 45 44 29 3b 0a 7d 0a 0a 43 4b 5f 44 45 46 49  TED);.}..CK_DEFI
1a3b0 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52  NE_FUNCTION(CK_R
1a3c0 56 2c 20 43 5f 44 65 72 69 76 65 4b 65 79 29 28  V, C_DeriveKey)(
1a3d0 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c  CK_SESSION_HANDL
1a3e0 45 20 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 4d  E hSession, CK_M
1a3f0 45 43 48 41 4e 49 53 4d 5f 50 54 52 20 70 4d 65  ECHANISM_PTR pMe
1a400 63 68 61 6e 69 73 6d 2c 20 43 4b 5f 4f 42 4a 45  chanism, CK_OBJE
1a410 43 54 5f 48 41 4e 44 4c 45 20 68 42 61 73 65 4b  CT_HANDLE hBaseK
1a420 65 79 2c 20 43 4b 5f 41 54 54 52 49 42 55 54 45  ey, CK_ATTRIBUTE
1a430 5f 50 54 52 20 70 54 65 6d 70 6c 61 74 65 2c 20  _PTR pTemplate, 
1a440 43 4b 5f 55 4c 4f 4e 47 20 75 6c 41 74 74 72 69  CK_ULONG ulAttri
1a450 62 75 74 65 43 6f 75 6e 74 2c 20 43 4b 5f 4f 42  buteCount, CK_OB
1a460 4a 45 43 54 5f 48 41 4e 44 4c 45 5f 50 54 52 20  JECT_HANDLE_PTR 
1a470 70 68 4b 65 79 29 20 7b 0a 09 43 41 43 4b 45 59  phKey) {..CACKEY
1a480 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43  _DEBUG_PRINTF("C
1a490 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66 20 28  alled.");...if (
1a4a0 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61 6c 69  !cackey_initiali
1a4b0 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45 59 5f  zed) {...CACKEY_
1a4c0 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 45 72  DEBUG_PRINTF("Er
1a4d0 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74 69 61  ror.  Not initia
1a4e0 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72 65 74  lized.");....ret
1a4f0 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f 4b 49  urn(CKR_CRYPTOKI
1a500 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a 45 44  _NOT_INITIALIZED
1a510 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59 5f 44  );..}...CACKEY_D
1a520 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52 65 74  EBUG_PRINTF("Ret
1a530 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e 43 54  urning CKR_FUNCT
1a540 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52 54 45  ION_NOT_SUPPORTE
1a550 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46 55 4e  D (%i)", CKR_FUN
1a560 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
1a570 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e 28 43  TED);...return(C
1a580 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f  KR_FUNCTION_NOT_
1a590 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a 0a 43  SUPPORTED);.}..C
1a5a0 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43 54 49 4f  K_DEFINE_FUNCTIO
1a5b0 4e 28 43 4b 5f 52 56 2c 20 43 5f 53 65 65 64 52  N(CK_RV, C_SeedR
1a5c0 61 6e 64 6f 6d 29 28 43 4b 5f 53 45 53 53 49 4f  andom)(CK_SESSIO
1a5d0 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73 73 69 6f  N_HANDLE hSessio
1a5e0 6e 2c 20 43 4b 5f 42 59 54 45 5f 50 54 52 20 70  n, CK_BYTE_PTR p
1a5f0 53 65 65 64 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75  Seed, CK_ULONG u
1a600 6c 53 65 65 64 4c 65 6e 29 20 7b 0a 09 43 41 43  lSeedLen) {..CAC
1a610 4b 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46  KEY_DEBUG_PRINTF
1a620 28 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69  ("Called.");...i
1a630 66 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69  f (!cackey_initi
1a640 61 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b  alized) {...CACK
1a650 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
1a660 22 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69  "Error.  Not ini
1a670 74 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09  tialized.");....
1a680 72 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54  return(CKR_CRYPT
1a690 4f 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49  OKI_NOT_INITIALI
1a6a0 5a 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45  ZED);..}...CACKE
1a6b0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
1a6c0 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55  Returning CKR_FU
1a6d0 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f  NCTION_NOT_SUPPO
1a6e0 52 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f  RTED (%i)", CKR_
1a6f0 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50  FUNCTION_NOT_SUP
1a700 50 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72  PORTED);...retur
1a710 6e 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  n(CKR_FUNCTION_N
1a720 4f 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d  OT_SUPPORTED);.}
1a730 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55 4e 43  ..CK_DEFINE_FUNC
1a740 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f 47 65  TION(CK_RV, C_Ge
1a750 6e 65 72 61 74 65 52 61 6e 64 6f 6d 29 28 43 4b  nerateRandom)(CK
1a760 5f 53 45 53 53 49 4f 4e 5f 48 41 4e 44 4c 45 20  _SESSION_HANDLE 
1a770 68 53 65 73 73 69 6f 6e 2c 20 43 4b 5f 42 59 54  hSession, CK_BYT
1a780 45 5f 50 54 52 20 70 52 61 6e 64 6f 6d 44 61 74  E_PTR pRandomDat
1a790 61 2c 20 43 4b 5f 55 4c 4f 4e 47 20 75 6c 52 61  a, CK_ULONG ulRa
1a7a0 6e 64 6f 6d 4c 65 6e 29 20 7b 0a 09 43 41 43 4b  ndomLen) {..CACK
1a7b0 45 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28  EY_DEBUG_PRINTF(
1a7c0 22 43 61 6c 6c 65 64 2e 22 29 3b 0a 0a 09 69 66  "Called.");...if
1a7d0 20 28 21 63 61 63 6b 65 79 5f 69 6e 69 74 69 61   (!cackey_initia
1a7e0 6c 69 7a 65 64 29 20 7b 0a 09 09 43 41 43 4b 45  lized) {...CACKE
1a7f0 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
1a800 45 72 72 6f 72 2e 20 20 4e 6f 74 20 69 6e 69 74  Error.  Not init
1a810 69 61 6c 69 7a 65 64 2e 22 29 3b 0a 0a 09 09 72  ialized.");....r
1a820 65 74 75 72 6e 28 43 4b 52 5f 43 52 59 50 54 4f  eturn(CKR_CRYPTO
1a830 4b 49 5f 4e 4f 54 5f 49 4e 49 54 49 41 4c 49 5a  KI_NOT_INITIALIZ
1a840 45 44 29 3b 0a 09 7d 0a 0a 09 43 41 43 4b 45 59  ED);..}...CACKEY
1a850 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 52  _DEBUG_PRINTF("R
1a860 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55 4e  eturning CKR_FUN
1a870 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50 4f 52  CTION_NOT_SUPPOR
1a880 54 45 44 20 28 25 69 29 22 2c 20 43 4b 52 5f 46  TED (%i)", CKR_F
1a890 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 53 55 50 50  UNCTION_NOT_SUPP
1a8a0 4f 52 54 45 44 29 3b 0a 0a 09 72 65 74 75 72 6e  ORTED);...return
1a8b0 28 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f  (CKR_FUNCTION_NO
1a8c0 54 5f 53 55 50 50 4f 52 54 45 44 29 3b 0a 7d 0a  T_SUPPORTED);.}.
1a8d0 0a 2f 2a 20 44 65 70 72 65 63 61 74 65 64 20 46  ./* Deprecated F
1a8e0 75 6e 63 74 69 6f 6e 20 2a 2f 0a 43 4b 5f 44 45  unction */.CK_DE
1a8f0 46 49 4e 45 5f 46 55 4e 43 54 49 4f 4e 28 43 4b  FINE_FUNCTION(CK
1a900 5f 52 56 2c 20 43 5f 47 65 74 46 75 6e 63 74 69  _RV, C_GetFuncti
1a910 6f 6e 53 74 61 74 75 73 29 28 43 4b 5f 53 45 53  onStatus)(CK_SES
1a920 53 49 4f 4e 5f 48 41 4e 44 4c 45 20 68 53 65 73  SION_HANDLE hSes
1a930 73 69 6f 6e 29 20 7b 0a 09 43 41 43 4b 45 59 5f  sion) {..CACKEY_
1a940 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22 43 61  DEBUG_PRINTF("Ca
1a950 6c 6c 65 64 2e 22 29 3b 0a 0a 09 43 41 43 4b 45  lled.");...CACKE
1a960 59 5f 44 45 42 55 47 5f 50 52 49 4e 54 46 28 22  Y_DEBUG_PRINTF("
1a970 52 65 74 75 72 6e 69 6e 67 20 43 4b 52 5f 46 55  Returning CKR_FU
1a980 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c  NCTION_NOT_PARAL
1a990 4c 45 4c 20 28 25 69 29 22 2c 20 43 4b 52 5f 46  LEL (%i)", CKR_F
1a9a0 55 4e 43 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41  UNCTION_NOT_PARA
1a9b0 4c 4c 45 4c 29 3b 0a 0a 09 72 65 74 75 72 6e 28  LLEL);...return(
1a9c0 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e 4f 54  CKR_FUNCTION_NOT
1a9d0 5f 50 41 52 41 4c 4c 45 4c 29 3b 0a 0a 09 68 53  _PARALLEL);...hS
1a9e0 65 73 73 69 6f 6e 20 3d 20 68 53 65 73 73 69 6f  ession = hSessio
1a9f0 6e 3b 20 2f 2a 20 53 75 70 72 65 73 73 20 75 6e  n; /* Supress un
1aa00 75 73 65 64 20 76 61 72 69 61 62 6c 65 20 77 61  used variable wa
1aa10 72 6e 69 6e 67 20 2a 2f 0a 7d 0a 0a 2f 2a 20 44  rning */.}../* D
1aa20 65 70 72 65 63 61 74 65 64 20 46 75 6e 63 74 69  eprecated Functi
1aa30 6f 6e 20 2a 2f 0a 43 4b 5f 44 45 46 49 4e 45 5f  on */.CK_DEFINE_
1aa40 46 55 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20  FUNCTION(CK_RV, 
1aa50 43 5f 43 61 6e 63 65 6c 46 75 6e 63 74 69 6f 6e  C_CancelFunction
1aa60 29 28 43 4b 5f 53 45 53 53 49 4f 4e 5f 48 41 4e  )(CK_SESSION_HAN
1aa70 44 4c 45 20 68 53 65 73 73 69 6f 6e 29 20 7b 0a  DLE hSession) {.
1aa80 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f 50 52  .CACKEY_DEBUG_PR
1aa90 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22 29 3b  INTF("Called.");
1aaa0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
1aab0 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
1aac0 67 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f 4e  g CKR_FUNCTION_N
1aad0 4f 54 5f 50 41 52 41 4c 4c 45 4c 20 28 25 69 29  OT_PARALLEL (%i)
1aae0 22 2c 20 43 4b 52 5f 46 55 4e 43 54 49 4f 4e 5f  ", CKR_FUNCTION_
1aaf0 4e 4f 54 5f 50 41 52 41 4c 4c 45 4c 29 3b 0a 0a  NOT_PARALLEL);..
1ab00 09 72 65 74 75 72 6e 28 43 4b 52 5f 46 55 4e 43  .return(CKR_FUNC
1ab10 54 49 4f 4e 5f 4e 4f 54 5f 50 41 52 41 4c 4c 45  TION_NOT_PARALLE
1ab20 4c 29 3b 0a 0a 09 68 53 65 73 73 69 6f 6e 20 3d  L);...hSession =
1ab30 20 68 53 65 73 73 69 6f 6e 3b 20 2f 2a 20 53 75   hSession; /* Su
1ab40 70 72 65 73 73 20 75 6e 75 73 65 64 20 76 61 72  press unused var
1ab50 69 61 62 6c 65 20 77 61 72 6e 69 6e 67 20 2a 2f  iable warning */
1ab60 0a 7d 0a 0a 43 4b 5f 44 45 46 49 4e 45 5f 46 55  .}..CK_DEFINE_FU
1ab70 4e 43 54 49 4f 4e 28 43 4b 5f 52 56 2c 20 43 5f  NCTION(CK_RV, C_
1ab80 47 65 74 46 75 6e 63 74 69 6f 6e 4c 69 73 74 29  GetFunctionList)
1ab90 28 43 4b 5f 46 55 4e 43 54 49 4f 4e 5f 4c 49 53  (CK_FUNCTION_LIS
1aba0 54 5f 50 54 52 5f 50 54 52 20 70 70 46 75 6e 63  T_PTR_PTR ppFunc
1abb0 74 69 6f 6e 4c 69 73 74 29 20 7b 0a 09 43 4b 5f  tionList) {..CK_
1abc0 46 55 4e 43 54 49 4f 4e 5f 4c 49 53 54 5f 50 54  FUNCTION_LIST_PT
1abd0 52 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 3b  R pFunctionList;
1abe0 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
1abf0 50 52 49 4e 54 46 28 22 43 61 6c 6c 65 64 2e 22  PRINTF("Called."
1ac00 29 3b 0a 0a 09 69 66 20 28 70 70 46 75 6e 63 74  );...if (ppFunct
1ac10 69 6f 6e 4c 69 73 74 20 3d 3d 20 4e 55 4c 4c 29  ionList == NULL)
1ac20 20 7b 0a 09 09 43 41 43 4b 45 59 5f 44 45 42 55   {...CACKEY_DEBU
1ac30 47 5f 50 52 49 4e 54 46 28 22 45 72 72 6f 72 2e  G_PRINTF("Error.
1ac40 20 70 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 20   ppFunctionList 
1ac50 69 73 20 4e 55 4c 4c 2e 22 29 3b 0a 0a 09 09 72  is NULL.");....r
1ac60 65 74 75 72 6e 28 43 4b 52 5f 41 52 47 55 4d 45  eturn(CKR_ARGUME
1ac70 4e 54 53 5f 42 41 44 29 3b 0a 09 7d 0a 0a 09 70  NTS_BAD);..}...p
1ac80 46 75 6e 63 74 69 6f 6e 4c 69 73 74 20 3d 20 6d  FunctionList = m
1ac90 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 2a 70 46  alloc(sizeof(*pF
1aca0 75 6e 63 74 69 6f 6e 4c 69 73 74 29 29 3b 0a 0a  unctionList));..
1acb0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e  .pFunctionList->
1acc0 76 65 72 73 69 6f 6e 2e 6d 61 6a 6f 72 20 3d 20  version.major = 
1acd0 28 28 43 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b  ((CACKEY_CRYPTOK
1ace0 49 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 29 20  I_VERSION_CODE) 
1acf0 3e 3e 20 31 36 29 20 26 20 30 78 66 66 3b 0a 09  >> 16) & 0xff;..
1ad00 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 76  pFunctionList->v
1ad10 65 72 73 69 6f 6e 2e 6d 69 6e 6f 72 20 3d 20 28  ersion.minor = (
1ad20 28 43 41 43 4b 45 59 5f 43 52 59 50 54 4f 4b 49  (CACKEY_CRYPTOKI
1ad30 5f 56 45 52 53 49 4f 4e 5f 43 4f 44 45 29 20 3e  _VERSION_CODE) >
1ad40 3e 20 38 29 20 26 20 30 78 66 66 3b 0a 0a 09 70  > 8) & 0xff;...p
1ad50 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f  FunctionList->C_
1ad60 49 6e 69 74 69 61 6c 69 7a 65 20 3d 20 43 5f 49  Initialize = C_I
1ad70 6e 69 74 69 61 6c 69 7a 65 3b 0a 09 70 46 75 6e  nitialize;..pFun
1ad80 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e  ctionList->C_Fin
1ad90 61 6c 69 7a 65 20 3d 20 43 5f 46 69 6e 61 6c 69  alize = C_Finali
1ada0 7a 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69  ze;..pFunctionLi
1adb0 73 74 2d 3e 43 5f 47 65 74 49 6e 66 6f 20 3d 20  st->C_GetInfo = 
1adc0 43 5f 47 65 74 49 6e 66 6f 3b 0a 09 70 46 75 6e  C_GetInfo;..pFun
1add0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74  ctionList->C_Get
1ade0 53 6c 6f 74 4c 69 73 74 20 3d 20 43 5f 47 65 74  SlotList = C_Get
1adf0 53 6c 6f 74 4c 69 73 74 3b 0a 09 70 46 75 6e 63  SlotList;..pFunc
1ae00 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 53  tionList->C_GetS
1ae10 6c 6f 74 49 6e 66 6f 20 3d 20 43 5f 47 65 74 53  lotInfo = C_GetS
1ae20 6c 6f 74 49 6e 66 6f 3b 0a 09 70 46 75 6e 63 74  lotInfo;..pFunct
1ae30 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 54 6f  ionList->C_GetTo
1ae40 6b 65 6e 49 6e 66 6f 20 3d 20 43 5f 47 65 74 54  kenInfo = C_GetT
1ae50 6f 6b 65 6e 49 6e 66 6f 3b 0a 09 70 46 75 6e 63  okenInfo;..pFunc
1ae60 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 57 61 69 74  tionList->C_Wait
1ae70 46 6f 72 53 6c 6f 74 45 76 65 6e 74 20 3d 20 43  ForSlotEvent = C
1ae80 5f 57 61 69 74 46 6f 72 53 6c 6f 74 45 76 65 6e  _WaitForSlotEven
1ae90 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73  t;..pFunctionLis
1aea0 74 2d 3e 43 5f 47 65 74 4d 65 63 68 61 6e 69 73  t->C_GetMechanis
1aeb0 6d 4c 69 73 74 20 3d 20 43 5f 47 65 74 4d 65 63  mList = C_GetMec
1aec0 68 61 6e 69 73 6d 4c 69 73 74 3b 0a 09 70 46 75  hanismList;..pFu
1aed0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65  nctionList->C_Ge
1aee0 74 4d 65 63 68 61 6e 69 73 6d 49 6e 66 6f 20 3d  tMechanismInfo =
1aef0 20 43 5f 47 65 74 4d 65 63 68 61 6e 69 73 6d 49   C_GetMechanismI
1af00 6e 66 6f 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c  nfo;..pFunctionL
1af10 69 73 74 2d 3e 43 5f 49 6e 69 74 54 6f 6b 65 6e  ist->C_InitToken
1af20 20 3d 20 43 5f 49 6e 69 74 54 6f 6b 65 6e 3b 0a   = C_InitToken;.
1af30 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e  .pFunctionList->
1af40 43 5f 49 6e 69 74 50 49 4e 20 3d 20 43 5f 49 6e  C_InitPIN = C_In
1af50 69 74 50 49 4e 3b 0a 09 70 46 75 6e 63 74 69 6f  itPIN;..pFunctio
1af60 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 50 49 4e 20  nList->C_SetPIN 
1af70 3d 20 43 5f 53 65 74 50 49 4e 3b 0a 09 70 46 75  = C_SetPIN;..pFu
1af80 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 4f 70  nctionList->C_Op
1af90 65 6e 53 65 73 73 69 6f 6e 20 3d 20 43 5f 4f 70  enSession = C_Op
1afa0 65 6e 53 65 73 73 69 6f 6e 3b 0a 09 70 46 75 6e  enSession;..pFun
1afb0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 6c 6f  ctionList->C_Clo
1afc0 73 65 53 65 73 73 69 6f 6e 20 3d 20 43 5f 43 6c  seSession = C_Cl
1afd0 6f 73 65 53 65 73 73 69 6f 6e 3b 0a 09 70 46 75  oseSession;..pFu
1afe0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 6c  nctionList->C_Cl
1aff0 6f 73 65 41 6c 6c 53 65 73 73 69 6f 6e 73 20 3d  oseAllSessions =
1b000 20 43 5f 43 6c 6f 73 65 41 6c 6c 53 65 73 73 69   C_CloseAllSessi
1b010 6f 6e 73 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c  ons;..pFunctionL
1b020 69 73 74 2d 3e 43 5f 47 65 74 53 65 73 73 69 6f  ist->C_GetSessio
1b030 6e 49 6e 66 6f 20 3d 20 43 5f 47 65 74 53 65 73  nInfo = C_GetSes
1b040 73 69 6f 6e 49 6e 66 6f 3b 0a 09 70 46 75 6e 63  sionInfo;..pFunc
1b050 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 4f  tionList->C_GetO
1b060 70 65 72 61 74 69 6f 6e 53 74 61 74 65 20 3d 20  perationState = 
1b070 43 5f 47 65 74 4f 70 65 72 61 74 69 6f 6e 53 74  C_GetOperationSt
1b080 61 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c  ate;..pFunctionL
1b090 69 73 74 2d 3e 43 5f 53 65 74 4f 70 65 72 61 74  ist->C_SetOperat
1b0a0 69 6f 6e 53 74 61 74 65 20 3d 20 43 5f 53 65 74  ionState = C_Set
1b0b0 4f 70 65 72 61 74 69 6f 6e 53 74 61 74 65 3b 0a  OperationState;.
1b0c0 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e  .pFunctionList->
1b0d0 43 5f 4c 6f 67 69 6e 20 3d 20 43 5f 4c 6f 67 69  C_Login = C_Logi
1b0e0 6e 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73  n;..pFunctionLis
1b0f0 74 2d 3e 43 5f 4c 6f 67 6f 75 74 20 3d 20 43 5f  t->C_Logout = C_
1b100 4c 6f 67 6f 75 74 3b 0a 09 70 46 75 6e 63 74 69  Logout;..pFuncti
1b110 6f 6e 4c 69 73 74 2d 3e 43 5f 43 72 65 61 74 65  onList->C_Create
1b120 4f 62 6a 65 63 74 20 3d 20 43 5f 43 72 65 61 74  Object = C_Creat
1b130 65 4f 62 6a 65 63 74 3b 0a 09 70 46 75 6e 63 74  eObject;..pFunct
1b140 69 6f 6e 4c 69 73 74 2d 3e 43 5f 43 6f 70 79 4f  ionList->C_CopyO
1b150 62 6a 65 63 74 20 3d 20 43 5f 43 6f 70 79 4f 62  bject = C_CopyOb
1b160 6a 65 63 74 3b 0a 09 70 46 75 6e 63 74 69 6f 6e  ject;..pFunction
1b170 4c 69 73 74 2d 3e 43 5f 44 65 73 74 72 6f 79 4f  List->C_DestroyO
1b180 62 6a 65 63 74 20 3d 20 43 5f 44 65 73 74 72 6f  bject = C_Destro
1b190 79 4f 62 6a 65 63 74 3b 0a 09 70 46 75 6e 63 74  yObject;..pFunct
1b1a0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 4f 62  ionList->C_GetOb
1b1b0 6a 65 63 74 53 69 7a 65 20 3d 20 43 5f 47 65 74  jectSize = C_Get
1b1c0 4f 62 6a 65 63 74 53 69 7a 65 3b 0a 09 70 46 75  ObjectSize;..pFu
1b1d0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 47 65  nctionList->C_Ge
1b1e0 74 41 74 74 72 69 62 75 74 65 56 61 6c 75 65 20  tAttributeValue 
1b1f0 3d 20 43 5f 47 65 74 41 74 74 72 69 62 75 74 65  = C_GetAttribute
1b200 56 61 6c 75 65 3b 0a 09 70 46 75 6e 63 74 69 6f  Value;..pFunctio
1b210 6e 4c 69 73 74 2d 3e 43 5f 53 65 74 41 74 74 72  nList->C_SetAttr
1b220 69 62 75 74 65 56 61 6c 75 65 20 3d 20 43 5f 53  ibuteValue = C_S
1b230 65 74 41 74 74 72 69 62 75 74 65 56 61 6c 75 65  etAttributeValue
1b240 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74  ;..pFunctionList
1b250 2d 3e 43 5f 46 69 6e 64 4f 62 6a 65 63 74 73 49  ->C_FindObjectsI
1b260 6e 69 74 20 3d 20 43 5f 46 69 6e 64 4f 62 6a 65  nit = C_FindObje
1b270 63 74 73 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74  ctsInit;..pFunct
1b280 69 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e 64 4f  ionList->C_FindO
1b290 62 6a 65 63 74 73 20 3d 20 43 5f 46 69 6e 64 4f  bjects = C_FindO
1b2a0 62 6a 65 63 74 73 3b 0a 09 70 46 75 6e 63 74 69  bjects;..pFuncti
1b2b0 6f 6e 4c 69 73 74 2d 3e 43 5f 46 69 6e 64 4f 62  onList->C_FindOb
1b2c0 6a 65 63 74 73 46 69 6e 61 6c 20 3d 20 43 5f 46  jectsFinal = C_F
1b2d0 69 6e 64 4f 62 6a 65 63 74 73 46 69 6e 61 6c 3b  indObjectsFinal;
1b2e0 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d  ..pFunctionList-
1b2f0 3e 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 20 3d  >C_EncryptInit =
1b300 20 43 5f 45 6e 63 72 79 70 74 49 6e 69 74 3b 0a   C_EncryptInit;.
1b310 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e  .pFunctionList->
1b320 43 5f 45 6e 63 72 79 70 74 20 3d 20 43 5f 45 6e  C_Encrypt = C_En
1b330 63 72 79 70 74 3b 0a 09 70 46 75 6e 63 74 69 6f  crypt;..pFunctio
1b340 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 72 79 70 74  nList->C_Encrypt
1b350 55 70 64 61 74 65 20 3d 20 43 5f 45 6e 63 72 79  Update = C_Encry
1b360 70 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63  ptUpdate;..pFunc
1b370 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 45 6e 63 72  tionList->C_Encr
1b380 79 70 74 46 69 6e 61 6c 20 3d 20 43 5f 45 6e 63  yptFinal = C_Enc
1b390 72 79 70 74 46 69 6e 61 6c 3b 0a 09 70 46 75 6e  ryptFinal;..pFun
1b3a0 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 63  ctionList->C_Dec
1b3b0 72 79 70 74 49 6e 69 74 20 3d 20 43 5f 44 65 63  ryptInit = C_Dec
1b3c0 72 79 70 74 49 6e 69 74 3b 0a 09 70 46 75 6e 63  ryptInit;..pFunc
1b3d0 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 63 72  tionList->C_Decr
1b3e0 79 70 74 20 3d 20 43 5f 44 65 63 72 79 70 74 3b  ypt = C_Decrypt;
1b3f0 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d  ..pFunctionList-
1b400 3e 43 5f 44 65 63 72 79 70 74 55 70 64 61 74 65  >C_DecryptUpdate
1b410 20 3d 20 43 5f 44 65 63 72 79 70 74 55 70 64 61   = C_DecryptUpda
1b420 74 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69  te;..pFunctionLi
1b430 73 74 2d 3e 43 5f 44 65 63 72 79 70 74 46 69 6e  st->C_DecryptFin
1b440 61 6c 20 3d 20 43 5f 44 65 63 72 79 70 74 46 69  al = C_DecryptFi
1b450 6e 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c  nal;..pFunctionL
1b460 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 49 6e 69  ist->C_DigestIni
1b470 74 20 3d 20 43 5f 44 69 67 65 73 74 49 6e 69 74  t = C_DigestInit
1b480 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74  ;..pFunctionList
1b490 2d 3e 43 5f 44 69 67 65 73 74 20 3d 20 43 5f 44  ->C_Digest = C_D
1b4a0 69 67 65 73 74 3b 0a 09 70 46 75 6e 63 74 69 6f  igest;..pFunctio
1b4b0 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 73 74 55  nList->C_DigestU
1b4c0 70 64 61 74 65 20 3d 20 43 5f 44 69 67 65 73 74  pdate = C_Digest
1b4d0 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 69  Update;..pFuncti
1b4e0 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65 73 74  onList->C_Digest
1b4f0 4b 65 79 20 3d 20 43 5f 44 69 67 65 73 74 4b 65  Key = C_DigestKe
1b500 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73  y;..pFunctionLis
1b510 74 2d 3e 43 5f 44 69 67 65 73 74 46 69 6e 61 6c  t->C_DigestFinal
1b520 20 3d 20 43 5f 44 69 67 65 73 74 46 69 6e 61 6c   = C_DigestFinal
1b530 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74  ;..pFunctionList
1b540 2d 3e 43 5f 53 69 67 6e 49 6e 69 74 20 3d 20 43  ->C_SignInit = C
1b550 5f 53 69 67 6e 49 6e 69 74 3b 0a 09 70 46 75 6e  _SignInit;..pFun
1b560 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67  ctionList->C_Sig
1b570 6e 20 3d 20 43 5f 53 69 67 6e 3b 0a 09 70 46 75  n = C_Sign;..pFu
1b580 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69  nctionList->C_Si
1b590 67 6e 55 70 64 61 74 65 20 3d 20 43 5f 53 69 67  gnUpdate = C_Sig
1b5a0 6e 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 74  nUpdate;..pFunct
1b5b0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 46  ionList->C_SignF
1b5c0 69 6e 61 6c 20 3d 20 43 5f 53 69 67 6e 46 69 6e  inal = C_SignFin
1b5d0 61 6c 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69  al;..pFunctionLi
1b5e0 73 74 2d 3e 43 5f 53 69 67 6e 52 65 63 6f 76 65  st->C_SignRecove
1b5f0 72 49 6e 69 74 20 3d 20 43 5f 53 69 67 6e 52 65  rInit = C_SignRe
1b600 63 6f 76 65 72 49 6e 69 74 3b 0a 09 70 46 75 6e  coverInit;..pFun
1b610 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67  ctionList->C_Sig
1b620 6e 52 65 63 6f 76 65 72 20 3d 20 43 5f 53 69 67  nRecover = C_Sig
1b630 6e 52 65 63 6f 76 65 72 3b 0a 09 70 46 75 6e 63  nRecover;..pFunc
1b640 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69  tionList->C_Veri
1b650 66 79 49 6e 69 74 20 3d 20 43 5f 56 65 72 69 66  fyInit = C_Verif
1b660 79 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f  yInit;..pFunctio
1b670 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 20  nList->C_Verify 
1b680 3d 20 43 5f 56 65 72 69 66 79 3b 0a 09 70 46 75  = C_Verify;..pFu
1b690 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65  nctionList->C_Ve
1b6a0 72 69 66 79 55 70 64 61 74 65 20 3d 20 43 5f 56  rifyUpdate = C_V
1b6b0 65 72 69 66 79 55 70 64 61 74 65 3b 0a 09 70 46  erifyUpdate;..pF
1b6c0 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56  unctionList->C_V
1b6d0 65 72 69 66 79 46 69 6e 61 6c 20 3d 20 43 5f 56  erifyFinal = C_V
1b6e0 65 72 69 66 79 46 69 6e 61 6c 3b 0a 09 70 46 75  erifyFinal;..pFu
1b6f0 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 56 65  nctionList->C_Ve
1b700 72 69 66 79 52 65 63 6f 76 65 72 49 6e 69 74 20  rifyRecoverInit 
1b710 3d 20 43 5f 56 65 72 69 66 79 52 65 63 6f 76 65  = C_VerifyRecove
1b720 72 49 6e 69 74 3b 0a 09 70 46 75 6e 63 74 69 6f  rInit;..pFunctio
1b730 6e 4c 69 73 74 2d 3e 43 5f 56 65 72 69 66 79 52  nList->C_VerifyR
1b740 65 63 6f 76 65 72 20 3d 20 43 5f 56 65 72 69 66  ecover = C_Verif
1b750 79 52 65 63 6f 76 65 72 3b 0a 09 70 46 75 6e 63  yRecover;..pFunc
1b760 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 69 67 65  tionList->C_Dige
1b770 73 74 45 6e 63 72 79 70 74 55 70 64 61 74 65 20  stEncryptUpdate 
1b780 3d 20 43 5f 44 69 67 65 73 74 45 6e 63 72 79 70  = C_DigestEncryp
1b790 74 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 74  tUpdate;..pFunct
1b7a0 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 63 72 79  ionList->C_Decry
1b7b0 70 74 44 69 67 65 73 74 55 70 64 61 74 65 20 3d  ptDigestUpdate =
1b7c0 20 43 5f 44 65 63 72 79 70 74 44 69 67 65 73 74   C_DecryptDigest
1b7d0 55 70 64 61 74 65 3b 0a 09 70 46 75 6e 63 74 69  Update;..pFuncti
1b7e0 6f 6e 4c 69 73 74 2d 3e 43 5f 53 69 67 6e 45 6e  onList->C_SignEn
1b7f0 63 72 79 70 74 55 70 64 61 74 65 20 3d 20 43 5f  cryptUpdate = C_
1b800 53 69 67 6e 45 6e 63 72 79 70 74 55 70 64 61 74  SignEncryptUpdat
1b810 65 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73  e;..pFunctionLis
1b820 74 2d 3e 43 5f 44 65 63 72 79 70 74 56 65 72 69  t->C_DecryptVeri
1b830 66 79 55 70 64 61 74 65 20 3d 20 43 5f 44 65 63  fyUpdate = C_Dec
1b840 72 79 70 74 56 65 72 69 66 79 55 70 64 61 74 65  ryptVerifyUpdate
1b850 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74  ;..pFunctionList
1b860 2d 3e 43 5f 47 65 6e 65 72 61 74 65 4b 65 79 20  ->C_GenerateKey 
1b870 3d 20 43 5f 47 65 6e 65 72 61 74 65 4b 65 79 3b  = C_GenerateKey;
1b880 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d  ..pFunctionList-
1b890 3e 43 5f 47 65 6e 65 72 61 74 65 4b 65 79 50 61  >C_GenerateKeyPa
1b8a0 69 72 20 3d 20 43 5f 47 65 6e 65 72 61 74 65 4b  ir = C_GenerateK
1b8b0 65 79 50 61 69 72 3b 0a 09 70 46 75 6e 63 74 69  eyPair;..pFuncti
1b8c0 6f 6e 4c 69 73 74 2d 3e 43 5f 57 72 61 70 4b 65  onList->C_WrapKe
1b8d0 79 20 3d 20 43 5f 57 72 61 70 4b 65 79 3b 0a 09  y = C_WrapKey;..
1b8e0 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 2d 3e 43  pFunctionList->C
1b8f0 5f 55 6e 77 72 61 70 4b 65 79 20 3d 20 43 5f 55  _UnwrapKey = C_U
1b900 6e 77 72 61 70 4b 65 79 3b 0a 09 70 46 75 6e 63  nwrapKey;..pFunc
1b910 74 69 6f 6e 4c 69 73 74 2d 3e 43 5f 44 65 72 69  tionList->C_Deri
1b920 76 65 4b 65 79 20 3d 20 43 5f 44 65 72 69 76 65  veKey = C_Derive
1b930 4b 65 79 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c  Key;..pFunctionL
1b940 69 73 74 2d 3e 43 5f 53 65 65 64 52 61 6e 64 6f  ist->C_SeedRando
1b950 6d 20 3d 20 43 5f 53 65 65 64 52 61 6e 64 6f 6d  m = C_SeedRandom
1b960 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74  ;..pFunctionList
1b970 2d 3e 43 5f 47 65 6e 65 72 61 74 65 52 61 6e 64  ->C_GenerateRand
1b980 6f 6d 20 3d 20 43 5f 47 65 6e 65 72 61 74 65 52  om = C_GenerateR
1b990 61 6e 64 6f 6d 3b 0a 09 70 46 75 6e 63 74 69 6f  andom;..pFunctio
1b9a0 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 46 75 6e 63  nList->C_GetFunc
1b9b0 74 69 6f 6e 53 74 61 74 75 73 20 3d 20 43 5f 47  tionStatus = C_G
1b9c0 65 74 46 75 6e 63 74 69 6f 6e 53 74 61 74 75 73  etFunctionStatus
1b9d0 3b 0a 09 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74  ;..pFunctionList
1b9e0 2d 3e 43 5f 43 61 6e 63 65 6c 46 75 6e 63 74 69  ->C_CancelFuncti
1b9f0 6f 6e 20 3d 20 43 5f 43 61 6e 63 65 6c 46 75 6e  on = C_CancelFun
1ba00 63 74 69 6f 6e 3b 0a 09 70 46 75 6e 63 74 69 6f  ction;..pFunctio
1ba10 6e 4c 69 73 74 2d 3e 43 5f 47 65 74 46 75 6e 63  nList->C_GetFunc
1ba20 74 69 6f 6e 4c 69 73 74 20 3d 20 43 5f 47 65 74  tionList = C_Get
1ba30 46 75 6e 63 74 69 6f 6e 4c 69 73 74 3b 0a 0a 09  FunctionList;...
1ba40 2a 70 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 20  *ppFunctionList 
1ba50 3d 20 70 46 75 6e 63 74 69 6f 6e 4c 69 73 74 3b  = pFunctionList;
1ba60 0a 0a 09 43 41 43 4b 45 59 5f 44 45 42 55 47 5f  ...CACKEY_DEBUG_
1ba70 50 52 49 4e 54 46 28 22 52 65 74 75 72 6e 69 6e  PRINTF("Returnin
1ba80 67 20 43 4b 52 5f 4f 4b 20 28 25 69 29 22 2c 20  g CKR_OK (%i)", 
1ba90 43 4b 52 5f 4f 4b 29 3b 0a 0a 09 72 65 74 75 72  CKR_OK);...retur
1baa0 6e 28 43 4b 52 5f 4f 4b 29 3b 0a 7d 0a 0a        n(CKR_OK);.}..