root/trunk/src/libopensc/cardctl.h

Revision 3556, 14.8 kB (checked in by aj, 3 months ago)

Add new entersafe driver for ePass 3000 tokens.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1/*
2 * cardctl.h: card_ctl command numbers
3 *
4 * Copyright (C) 2003  Olaf Kirch <okir@lse.de>
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21#ifndef _OPENSC_CARDCTL_H
22#define _OPENSC_CARDCTL_H
23
24#include <opensc/types.h>
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30#define _CTL_PREFIX(a, b, c) (((a) << 24) | ((b) << 16) | ((c) << 8))
31
32enum {
33        /*
34         * Generic card_ctl calls
35         */
36        SC_CARDCTL_GENERIC_BASE = 0x00000000,
37        SC_CARDCTL_ERASE_CARD,
38        SC_CARDCTL_GET_DEFAULT_KEY,
39        SC_CARDCTL_LIFECYCLE_GET,
40        SC_CARDCTL_LIFECYCLE_SET,
41        SC_CARDCTL_GET_SERIALNR,
42
43        /*
44         * GPK specific calls
45         */
46        SC_CARDCTL_GPK_BASE = _CTL_PREFIX('G', 'P', 'K'),
47        SC_CARDCTL_GPK_VARIANT,
48        SC_CARDCTL_GPK_LOCK,
49        SC_CARDCTL_GPK_PKINIT,
50        SC_CARDCTL_GPK_PKLOAD,
51        SC_CARDCTL_GPK_IS_LOCKED,
52        SC_CARDCTL_GPK_GENERATE_KEY,
53
54        /*
55         * Cryptoflex specific calls
56         */
57        SC_CARDCTL_CRYPTOFLEX_BASE = _CTL_PREFIX('C', 'F', 'X'),
58        SC_CARDCTL_CRYPTOFLEX_GENERATE_KEY,
59
60        /*
61         * MioCOS specific calls
62         */
63        SC_CARDCTL_MIOCOS_BASE = _CTL_PREFIX('M', 'I', 'O'),
64        SC_CARDCTL_MIOCOS_CREATE_AC,
65
66        /*
67         * TCOS specific calls
68         */
69        SC_CARDCTL_TCOS_BASE = _CTL_PREFIX('T','C','S'),
70        SC_CARDCTL_TCOS_SETPERM,
71
72        /*
73         * CardOS specific calls
74         * (formerly known as "etoken" driver, thus ETK as prefix)
75         */
76        SC_CARDCTL_CARDOS_BASE = _CTL_PREFIX('E', 'T', 'K'),
77        SC_CARDCTL_CARDOS_PUT_DATA_FCI,
78        SC_CARDCTL_CARDOS_PUT_DATA_OCI,
79        SC_CARDCTL_CARDOS_PUT_DATA_SECI,
80        SC_CARDCTL_CARDOS_GENERATE_KEY,
81
82        /*
83         * Starcos SPK 2.3 specific calls
84         */
85        SC_CARDCTL_STARCOS_BASE = _CTL_PREFIX('S', 'T', 'A'),
86        SC_CARDCTL_STARCOS_CREATE_FILE,
87        SC_CARDCTL_STARCOS_CREATE_END,
88        SC_CARDCTL_STARCOS_WRITE_KEY,
89        SC_CARDCTL_STARCOS_GENERATE_KEY,
90
91        /*
92         * JCOP specific calls
93         */
94        SC_CARDCTL_JCOP_BASE = _CTL_PREFIX('J', 'C', 'P'),
95        SC_CARDCTL_JCOP_LOCK,
96        SC_CARDCTL_JCOP_GENERATE_KEY,
97
98        /*
99         * Oberthur specific calls
100         */
101        SC_CARDCTL_OBERTHUR_BASE = _CTL_PREFIX('O', 'B', 'R'),
102        SC_CARDCTL_OBERTHUR_UPDATE_KEY,
103        SC_CARDCTL_OBERTHUR_GENERATE_KEY,
104        SC_CARDCTL_OBERTHUR_CREATE_PIN,
105
106        /*
107         * Setcos specific calls
108         */
109        SC_CARDCTL_SETCOS_BASE = _CTL_PREFIX('S', 'E', 'T'),
110        SC_CARDCTL_SETCOS_PUTDATA,
111        SC_CARDCTL_SETCOS_GETDATA,
112        SC_CARDCTL_SETCOS_GENERATE_STORE_KEY,
113        SC_CARDCTL_SETCOS_ACTIVATE_FILE,
114
115        /*
116         * Incrypto34 specific calls
117         */
118        SC_CARDCTL_INCRYPTO34_BASE = _CTL_PREFIX('I', '3', '4'),
119        SC_CARDCTL_INCRYPTO34_PUT_DATA_FCI,
120        SC_CARDCTL_INCRYPTO34_PUT_DATA_OCI,
121        SC_CARDCTL_INCRYPTO34_PUT_DATA_SECI,
122        SC_CARDCTL_INCRYPTO34_GENERATE_KEY,
123        SC_CARDCTL_INCRYPTO34_CHANGE_KEY_DATA,
124        SC_CARDCTL_INCRYPTO34_ERASE_FILES,
125       
126        /*
127         * Muscle specific calls
128         */
129        SC_CARDCTL_MUSCLE_BASE = _CTL_PREFIX('M','S','C'),
130        SC_CARDCTL_MUSCLE_GENERATE_KEY,
131        SC_CARDCTL_MUSCLE_EXTRACT_KEY,
132        SC_CARDCTL_MUSCLE_IMPORT_KEY,
133        SC_CARDCTL_MUSCLE_VERIFIED_PINS,
134
135        /*
136         * ASEPCOS specific calls
137         */
138        SC_CARDCTL_ASEPCOS_BASE = _CTL_PREFIX('A','S','E'),
139        SC_CARDCTL_ASEPCOS_CHANGE_KEY,
140        SC_CARDCTL_ASEPCOS_AKN2FILEID,
141        SC_CARDCTL_ASEPCOS_SET_SATTR,
142        SC_CARDCTL_ASEPCOS_ACTIVATE_FILE,
143
144        /*
145         * ruToken specific calls
146         */
147        SC_CARDCTL_RUTOKEN_BASE = _CTL_PREFIX('R', 'T', 'K'),
148        /*  PUT_DATA  */
149        SC_CARDCTL_RUTOKEN_CREATE_DO,
150        SC_CARDCTL_RUTOKEN_CHANGE_DO,
151        SC_CARDCTL_RUTOKEN_GENERATE_KEY_DO,
152        SC_CARDCTL_RUTOKEN_DELETE_DO,
153        SC_CARDCTL_RUTOKEN_GET_INFO,
154        /* NON STANDART  */
155        SC_CARDCTL_RUTOKEN_GET_DO_INFO,
156        SC_CARDCTL_RUTOKEN_GOST_ENCIPHER,
157        SC_CARDCTL_RUTOKEN_GOST_DECIPHER,
158        SC_CARDCTL_RUTOKEN_FORMAT_INIT,
159        SC_CARDCTL_RUTOKEN_FORMAT_END,
160
161        /*
162         * EnterSafe specific calls
163         */
164        SC_CARDCTL_ENTERSAFE_BASE = _CTL_PREFIX('E', 'S', 'F'),
165        SC_CARDCTL_ENTERSAFE_CREATE_FILE,
166        SC_CARDCTL_ENTERSAFE_CREATE_END,
167        SC_CARDCTL_ENTERSAFE_WRITE_KEY,
168        SC_CARDCTL_ENTERSAFE_GENERATE_KEY,
169        SC_CARDCTL_ENTERSAFE_PREINSTALL_KEYS,
170};
171
172enum {
173        SC_CARDCTRL_LIFECYCLE_ADMIN,
174        SC_CARDCTRL_LIFECYCLE_USER,
175        SC_CARDCTRL_LIFECYCLE_OTHER
176};
177
178/*
179 * Generic cardctl - check if the required key is a default
180 * key (such as the GPK "TEST KEYTEST KEY" key, or the Cryptoflex AAK)
181 */
182struct sc_cardctl_default_key {
183        int             method;         /* SC_AC_XXX */
184        int             key_ref;        /* key reference */
185
186        size_t          len;            /* in: max size, out: actual size */
187        u8 *            key_data;       /* out: key data */
188};
189
190/*
191 * GPK lock file.
192 * Parent DF of file must be selected.
193 */
194struct sc_cardctl_gpk_lock {
195        struct sc_file *        file;
196        unsigned int            operation;
197};
198
199/*
200 * GPK initialize private key file.
201 * Parent DF must be selected.
202 */
203struct sc_cardctl_gpk_pkinit {
204        struct sc_file *        file;
205        unsigned int            privlen;
206};
207
208/*
209 * GPK load private key portion.
210 */
211struct sc_cardctl_gpk_pkload {
212        struct sc_file *        file;
213        u8 *                    data;
214        unsigned int            len;
215        unsigned int            datalen;
216};
217
218struct sc_cardctl_gpk_genkey {
219        unsigned int            fid;
220        unsigned int            privlen;
221        unsigned char *         pubkey;
222        unsigned int            pubkey_len;
223};
224
225enum {
226        SC_CARDCTL_MIOCOS_AC_PIN,
227        SC_CARDCTL_MIOCOS_AC_CHAL,
228        SC_CARDCTL_MIOCOS_AC_LOGICAL,
229        SC_CARDCTL_MIOCOS_AC_SMARTPIN
230};
231
232/*
233 * MioCOS AC info
234 */
235struct sc_cardctl_miocos_ac_info {
236        int type;
237        int ref;
238        int max_tries;
239        int enable_ac;          /* only applicable to PINs */
240        u8 key_value[8];
241        int max_unblock_tries;  /* same here */
242        u8 unblock_value[8];    /* and here */
243};
244
245/*
246 * Siemens CardOS PIN info
247 */
248struct sc_cardctl_cardos_obj_info {
249        u8 *            data;
250        size_t          len;
251};
252
253struct sc_cardctl_cardos_genkey_info {
254        unsigned int    key_id;
255        unsigned int    key_bits;
256        unsigned short  fid;
257};
258
259/*
260 * Incrypto34 PIN info
261 */
262struct sc_cardctl_incrypto34_obj_info {
263        u8 *            data;
264        size_t          len;
265        unsigned int    key_id;
266        unsigned int    key_class;
267};
268
269struct sc_cardctl_incrypto34_genkey_info {
270        unsigned int    key_id;
271        unsigned int    key_bits;
272        unsigned short  fid;
273};
274
275/*
276 * Cryptoflex info
277 */
278struct sc_cardctl_cryptoflex_genkey_info {
279        unsigned int    key_num;
280        unsigned int    key_bits;
281        unsigned long   exponent;
282        unsigned char * pubkey;
283        unsigned int    pubkey_len;
284};
285
286/*
287 * Starcos stuff
288 */
289#define SC_STARCOS_MF_DATA      0x01
290#define SC_STARCOS_DF_DATA      0x02
291#define SC_STARCOS_EF_DATA      0x04
292
293typedef struct sc_starcos_create_data_st {
294        unsigned int type;
295        union {
296                struct {
297                        u8 header[19];  /* see starcos manual */
298                } mf;
299                struct {
300                        u8 header[25];  /* see starcos manual */
301                        u8 size[2];
302                } df;
303                struct {
304                        u8 header[16];  /* see starcos manual */
305                } ef;
306        } data;
307} sc_starcos_create_data;
308
309typedef struct sc_starcos_write_key_data_st {
310        u8      mode;           /* 1 = Update, 0 = Install */
311        u8      kid;            /* key id                  */
312        u8      key_header[12]; /* see starcos manual      */
313        const u8 *key;
314        size_t  key_len;
315} sc_starcos_wkey_data;
316
317typedef struct sc_starcos_gen_key_data_st {
318        u8      key_id;
319        size_t  key_length;
320        u8      *modulus;
321} sc_starcos_gen_key_data;
322
323struct sc_cardctl_jcop_genkey  {
324     unsigned long exponent;
325     sc_path_t pub_file_ref;
326     sc_path_t pri_file_ref;
327     unsigned char *    pubkey;
328     unsigned int       pubkey_len;
329};
330
331/*
332 * Oberthur ex_data stuff
333 */
334enum SC_CARDCTL_OBERTHUR_KEY_TYPE {
335        SC_CARDCTL_OBERTHUR_KEY_DES = 0x80,
336
337        SC_CARDCTL_OBERTHUR_KEY_RSA_PUBLIC = 0xA1,
338        SC_CARDCTL_OBERTHUR_KEY_RSA_SFM,
339        SC_CARDCTL_OBERTHUR_KEY_RSA_CRT,
340        SC_CARDCTL_OBERTHUR_KEY_DSA_PUBLIC,
341        SC_CARDCTL_OBERTHUR_KEY_DSA_PRIVATE
342};
343
344struct sc_cardctl_oberthur_genkey_info {
345        unsigned int    id_prv, id_pub;
346        unsigned int    key_bits;
347        unsigned long   exponent;
348        unsigned char * pubkey;
349        unsigned int    pubkey_len;
350
351        int     method;     /* SC_AC_XXX */
352        int     key_ref;    /* key reference */         
353};
354
355struct sc_cardctl_oberthur_updatekey_info {
356        enum SC_CARDCTL_OBERTHUR_KEY_TYPE  type;
357
358        unsigned char   *data;
359        unsigned int    data_len;
360
361        unsigned char   id[256];
362        unsigned int    id_len;
363};
364
365struct sc_cardctl_oberthur_createpin_info {
366        unsigned int type;
367        unsigned int ref;
368        const unsigned char *pin;
369        unsigned int pin_len;
370        unsigned int pin_tries;
371        const unsigned char *puk;
372        unsigned int puk_len;
373        unsigned int puk_tries;
374};
375
376/*
377 * Setcos stuff
378 */
379struct sc_cardctl_setcos_data_obj {
380        int     P1;
381        int     P2;
382        u8 *    Data;
383        size_t  DataLen;
384        int     LengthMax;
385};
386
387struct sc_cardctl_setcos_gen_store_key_info {
388        int             op_type;
389        unsigned int    mod_len;     /* in bits */
390        unsigned int    pubexp_len;  /* in bits */
391        unsigned char  *pubexp;
392        unsigned int    primep_len;  /* in bits */
393        unsigned char  *primep;
394        unsigned int    primeq_len;  /* in bits */
395        unsigned char  *primeq;
396};
397
398/*
399 * Muscle stuff
400 */
401typedef struct sc_cardctl_muscle_gen_key_info {
402        int     keyType;
403        int     keySize;
404        int     privateKeyLocation;
405        int     publicKeyLocation;
406} sc_cardctl_muscle_gen_key_info_t;
407
408
409typedef struct sc_cardctl_muscle_key_info {
410        int     keyType;
411        int     keyLocation;
412        int     keySize;
413        int     modLength;
414        u8*     modValue;
415        int     expLength;
416        u8*     expValue;
417        int     pLength;
418        u8*     pValue;
419        int     qLength;
420        u8*     qValue;
421        int     pqLength;
422        u8*     pqValue;
423        int     dp1Length;
424        u8*     dp1Value;
425        int     dq1Length;
426        u8*     dq1Value;
427        int     gLength;
428        u8*     gValue;
429        int     yLength;
430        u8*     yValue;
431} sc_cardctl_muscle_key_info_t;
432
433typedef struct sc_cardctl_muscle_verified_pins_info {
434        unsigned        verifiedPins;
435} sc_cardctl_muscle_verified_pins_info_t;
436
437/* ASEPCOS ctl specific structures */
438typedef struct sc_cardctl_asepcos_change_key {
439        const u8 *data;
440        size_t datalen;
441} sc_cardctl_asepcos_change_key_t;
442
443typedef struct sc_cardctl_asepcos_akn2fileid {
444        int akn;
445        int fileid;
446} sc_cardctl_asepcos_akn2fileid_t;
447
448typedef struct sc_cardctl_asepcos_activate_file {
449        int     fileid;
450        int     is_ef;
451} sc_cardctl_asepcos_activate_file_t;
452
453#define OP_TYPE_GENERATE        0
454#define OP_TYPE_STORE           1
455
456/*
457 *  RuToken types and constants
458 */
459
460#define SC_RUTOKEN_DO_PART_BODY_LEN    199   
461#define SC_RUTOKEN_DO_HDR_LEN  32
462
463/*   DO Types  */
464#define SC_RUTOKEN_TYPE_MASK             0xF
465#define SC_RUTOKEN_TYPE_SE               0x0
466#define SC_RUTOKEN_TYPE_CHV              0x1
467#define SC_RUTOKEN_TYPE_KEY              0x2
468
469#define SC_RUTOKEN_COMPACT_DO_MAX_LEN  16          /*  MAX Body length of Compact DOs  */
470
471#define SC_RUTOKEN_DO_ALL_MIN_ID       0x1         /*  MIN ID value of All DOs  */
472#define SC_RUTOKEN_DO_CHV_MAX_ID       0x1F        /*  MAX ID value of CHV-objects  */
473#define SC_RUTOKEN_DO_NOCHV_MAX_ID     0xFE        /*  MAX ID value of All Other DOs  */
474
475/*  DO Default Lengths  */
476#define SC_RUTOKEN_DEF_LEN_DO_GOST         32
477#define SC_RUTOKEN_DEF_LEN_DO_SE           6
478
479
480#define SC_RUTOKEN_ALLTYPE_SE            SC_RUTOKEN_TYPE_SE             /* SE  */
481#define SC_RUTOKEN_ALLTYPE_GCHV          SC_RUTOKEN_TYPE_CHV    /* GCHV  */
482#define SC_RUTOKEN_ALLTYPE_LCHV          0x11                           /*  LCHV  */
483#define SC_RUTOKEN_ALLTYPE_GOST          SC_RUTOKEN_TYPE_KEY    /*  GOST  */
484
485/*  DO ID  */
486#define SC_RUTOKEN_ID_CURDF_RESID_FLAG   0x80        /*  DO placed in current DF  */
487                                           
488#define SC_RUTOKEN_DEF_ID_GCHV_ADMIN       0x01      /*  ID DO ADMIN  */
489#define SC_RUTOKEN_DEF_ID_GCHV_USER        0x02      /*  ID DO USER  */
490
491/*  DO Options  */
492#define SC_RUTOKEN_OPTIONS_GCHV_ACCESS_MASK  0x7     /*  Access rights  */
493#define SC_RUTOKEN_OPTIONS_GACCESS_ADMIN     SC_RUTOKEN_DEF_ID_GCHV_ADMIN   /*  ADMIN  */
494#define SC_RUTOKEN_OPTIONS_GACCESS_USER      SC_RUTOKEN_DEF_ID_GCHV_USER    /*  USER  */
495
496#define SC_RUTOKEN_OPTIONS_GOST_CRYPT_MASK   0x7     /*  crypto algorithm  */
497#define SC_RUTOKEN_OPTIONS_GOST_CRYPT_PZ     0x0     /*  (encryptECB) simple-change mode  */
498#define SC_RUTOKEN_OPTIONS_GOST_CRYPT_GAMM   0x1     /*  (encryptCNT) gamma mode  */
499#define SC_RUTOKEN_OPTIONS_GOST_CRYPT_GAMMOS 0x2     /*  (encryptCFB) feed-back gamma mode  */
500
501
502/*  DO flags  */
503#define SC_RUTOKEN_FLAGS_COMPACT_DO      0x1
504#define SC_RUTOKEN_FLAGS_OPEN_DO_MASK    0x6
505#define SC_RUTOKEN_FLAGS_BLEN_OPEN_DO    0x2
506#define SC_RUTOKEN_FLAGS_FULL_OPEN_DO    0x6
507
508/*  DO MAX:CUR try  */
509#define SC_RUTOKEN_MAXTRY_MASK           0xF0        /*  MAX try  */
510#define SC_RUTOKEN_CURTRY_MASK           0x0F        /*  CUR try  */
511
512#define SC_RUTOKEN_DO_CHV_MAX_ID_V2       SC_RUTOKEN_DEF_ID_GCHV_USER   /*  MAX ID value of CHV-objects  */
513#define SC_RUTOKEN_DO_NOCHV_MAX_ID_V2     SC_RUTOKEN_DO_NOCHV_MAX_ID    /*  MAX ID value of All Other DOs  */
514
515#define SEC_ATTR_SIZE 15
516       
517#pragma pack(push, 1)
518typedef u8 sc_SecAttrV2_t[SEC_ATTR_SIZE];
519
520typedef struct sc_ObjectTypeID{
521        u8    byObjectType;
522        u8    byObjectID;
523} sc_ObjectTypeID_t;
524
525typedef struct sc_ObjectParams{
526        u8    byObjectOptions;
527        u8    byObjectFlags;
528        u8    byObjectTry;
529} sc_ObjectParams_t;
530
531typedef struct sc_DOHdrV2 {
532        unsigned short          wDOBodyLen;
533        sc_ObjectTypeID_t       OTID;
534        sc_ObjectParams_t       OP;
535        u8                                      dwReserv1[4];
536        u8                                      abyReserv2[6];
537        sc_SecAttrV2_t          SA_V2;
538} sc_DOHdrV2_t;
539
540typedef struct sc_DO_V2 {
541        sc_DOHdrV2_t    HDR;
542        u8                              abyDOBody[SC_RUTOKEN_DO_PART_BODY_LEN];
543} sc_DO_V2_t;
544
545typedef enum
546{
547        select_first,
548        select_by_id,
549        select_next,
550} SC_RUTOKEN_DO_SEL_TYPES;
551
552typedef struct sc_DO_INFO_V2 {
553        u8                                              DoId;
554        SC_RUTOKEN_DO_SEL_TYPES SelType;
555        u8                                              pDoData[256];
556} sc_DO_INFO_t;
557
558struct sc_rutoken_decipherinfo {
559        const u8        *inbuf;
560    size_t inlen;
561    u8  *outbuf;
562    size_t outlen;
563};
564
565/*
566 * EnterSafe stuff
567 *
568 */
569
570#define SC_ENTERSAFE_MF_DATA    0x01
571#define SC_ENTERSAFE_DF_DATA    0x02
572#define SC_ENTERSAFE_EF_DATA    0x04
573
574#define ENTERSAFE_USER_PIN_ID  0x01
575#define ENTERSAFE_SO_PIN_ID 0x02
576#define ENTERSAFE_MIN_KEY_ID 0x01
577#define ENTERSAFE_MAX_KEY_ID 0x09
578
579#define ENTERSAFE_AC_EVERYONE 0x00
580#define ENTERSAFE_AC_USER 0x04
581#define ENTERSAFE_AC_USER_ 0x08
582
583
584#define ENTERSAFE_AC_NEVER 0xC0
585#define ENTERSAFE_AC_ALWAYS 0x10
586#define ENTERSAFE_AC_CHV 0x30
587
588
589typedef struct sc_entersafe_create_data_st {
590         unsigned int type;
591         union {
592                  struct {
593                           u8 file_id[2];
594                           u8 file_count;
595                           u8 flag;
596                           u8 ikf_size[2];
597                           u8 create_ac;
598                           u8 append_ac;
599                           u8 lock_ac;
600                           u8 aid[16];
601                           u8 init_key[16];
602                  } mf;
603                  struct {
604                           u8 file_id[2];
605                           u8 file_count;
606                           u8 flag;
607                           u8 ikf_size[2];
608                           u8 create_ac;
609                           u8 append_ac;
610                           u8 lock_ac;
611                           u8 aid[16];
612                           u8 init_key[16];
613                  } df;
614                  struct {
615                           u8 file_id[2];       
616                           u8 size[2];
617                           u8 attr[2];
618                           u8 name;
619                           u8 ac[10];
620                           u8 sm[2];
621                  } ef;
622         } data;
623} sc_entersafe_create_data;
624
625typedef struct sc_entersafe_wkey_data_st {
626         u8 key_id;
627         u8 usage;
628         union{
629                  struct sc_pkcs15_prkey_rsa* rsa;
630                  struct{
631                           u8 EC;
632                           u8 ver;
633                           u8 key_val[256];
634                           size_t key_len;
635                  } symmetric;
636         }key_data;
637} sc_entersafe_wkey_data;
638
639typedef struct sc_entersafe_gen_key_data_st {
640        u8      key_id;
641        size_t  key_length;
642        u8      *modulus;
643} sc_entersafe_gen_key_data;
644
645#pragma pack(pop)
646
647#ifdef __cplusplus
648}
649#endif
650
651#endif /* _OPENSC_CARDCTL_H */
Note: See TracBrowser for help on using the browser.