1 /***************************************************************************
2     begin       : Wed Mar 16 2005
3     copyright   : (C) 2005 by Martin Preuss
4     email       : martin@libchipcard.de
5 
6  ***************************************************************************
7  *          Please see toplevel file COPYING for license details           *
8  ***************************************************************************/
9 
10 
11 #ifndef GWEN_CRYPT_CRYPTTOKEN_H
12 #define GWEN_CRYPT_CRYPTTOKEN_H
13 
14 #include <gwenhywfar/list1.h>
15 #include <gwenhywfar/list2.h>
16 
17 
18 
19 typedef struct GWEN_CRYPT_TOKEN GWEN_CRYPT_TOKEN;
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 
26 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN, GWEN_Crypt_Token, GWENHYWFAR_API)
27 GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN, GWEN_Crypt_Token, GWENHYWFAR_API)
28 
29 #ifdef __cplusplus
30 }
31 #endif
32 
33 
34 
35 typedef enum {
36   GWEN_Crypt_Token_Device_Unknown=-1,
37   GWEN_Crypt_Token_Device_None=0,
38   GWEN_Crypt_Token_Device_File,
39   GWEN_Crypt_Token_Device_Card,
40   GWEN_Crypt_Token_Device_Any=999
41 } GWEN_CRYPT_TOKEN_DEVICE;
42 
43 
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
47 
48 /** @name Converting Device Types to and from Strings
49  *
50  */
51 /*@{*/
52 GWENHYWFAR_API GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_Device_fromString(const char *s);
53 GWENHYWFAR_API const char *GWEN_Crypt_Token_Device_toString(GWEN_CRYPT_TOKEN_DEVICE d);
54 /*@}*/
55 
56 
57 
58 #define GWEN_CRYPT_TOKEN_MODE_SECURE_PIN_ENTRY   0x00000001
59 #define GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY    0x00000002
60 /** this flag allows updating of old CryptToken files to newer versions */
61 #define GWEN_CRYPT_TOKEN_MODE_ALLOW_UPDATE       0x00000004
62 #define GWEN_CRYPT_TOKEN_MODE_EXP_65537          0x00000008
63 #define GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN        0x00000010
64 
65 
66 
67 #define GWEN_CRYPT_TOKEN_FLAGS_MANAGES_SIGNSEQ   0x00000001
68 
69 
70 
71 #include <gwenhywfar/ct_keyinfo.h>
72 #include <gwenhywfar/ct_context.h>
73 #include <gwenhywfar/paddalgo.h>
74 #include <gwenhywfar/hashalgo.h>
75 #include <gwenhywfar/cryptalgo.h>
76 #include <gwenhywfar/cryptdefs.h>
77 
78 
79 /** @name Basic Informations about a CryptToken
80  *
81  */
82 /*@{*/
83 GWENHYWFAR_API void GWEN_Crypt_Token_free(GWEN_CRYPT_TOKEN *ct);
84 /*@}*/
85 
86 
87 
88 /** @name Basic Informations about a CryptToken
89  *
90  */
91 /*@{*/
92 GWENHYWFAR_API uint32_t GWEN_Crypt_Token_GetFlags(const GWEN_CRYPT_TOKEN *ct);
93 
94 GWENHYWFAR_API uint32_t GWEN_Crypt_Token_GetModes(const GWEN_CRYPT_TOKEN *ct);
95 
96 GWENHYWFAR_API void GWEN_Crypt_Token_SetModes(GWEN_CRYPT_TOKEN *ct, uint32_t f);
97 
98 GWENHYWFAR_API void GWEN_Crypt_Token_AddModes(GWEN_CRYPT_TOKEN *ct, uint32_t f);
99 
100 GWENHYWFAR_API void GWEN_Crypt_Token_SubModes(GWEN_CRYPT_TOKEN *ct, uint32_t f);
101 
102 GWENHYWFAR_API GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_GetDevice(const GWEN_CRYPT_TOKEN *ct);
103 
104 GWENHYWFAR_API const char *GWEN_Crypt_Token_GetTokenName(const GWEN_CRYPT_TOKEN *ct);
105 
106 GWENHYWFAR_API const char *GWEN_Crypt_Token_GetTypeName(const GWEN_CRYPT_TOKEN *ct);
107 
108 GWENHYWFAR_API const char *GWEN_Crypt_Token_GetFriendlyName(const GWEN_CRYPT_TOKEN *ct);
109 
110 GWENHYWFAR_API void GWEN_Crypt_Token_SetFriendlyName(GWEN_CRYPT_TOKEN *ct, const char *s);
111 /*@}*/
112 
113 
114 
115 /** @name Open, Create and Close
116  *
117  */
118 /*@{*/
119 GWENHYWFAR_API int GWEN_Crypt_Token_Open(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid);
120 
121 
122 GWENHYWFAR_API int GWEN_Crypt_Token_Create(GWEN_CRYPT_TOKEN *ct, uint32_t gid);
123 
124 GWENHYWFAR_API int GWEN_Crypt_Token_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid);
125 
126 GWENHYWFAR_API int GWEN_Crypt_Token_IsOpen(const GWEN_CRYPT_TOKEN *ct);
127 
128 /*@}*/
129 
130 
131 
132 /** @name Cryptographic Objects
133  *
134  */
135 /*@{*/
136 GWENHYWFAR_API int GWEN_Crypt_Token_GetKeyIdList(GWEN_CRYPT_TOKEN *ct,
137                                                  uint32_t *pIdList,
138                                                  uint32_t *pCount,
139                                                  uint32_t gid);
140 
141 GWENHYWFAR_API const GWEN_CRYPT_TOKEN_KEYINFO *GWEN_Crypt_Token_GetKeyInfo(GWEN_CRYPT_TOKEN *ct,
142                                                                            uint32_t id,
143                                                                            uint32_t flags,
144                                                                            uint32_t gid);
145 
146 GWENHYWFAR_API int GWEN_Crypt_Token_SetKeyInfo(GWEN_CRYPT_TOKEN *ct,
147                                                uint32_t id,
148                                                const GWEN_CRYPT_TOKEN_KEYINFO *ki,
149                                                uint32_t gid);
150 
151 
152 GWENHYWFAR_API int GWEN_Crypt_Token_GetContextIdList(GWEN_CRYPT_TOKEN *ct,
153                                                      uint32_t *pIdList,
154                                                      uint32_t *pCount,
155                                                      uint32_t gid);
156 
157 GWENHYWFAR_API const GWEN_CRYPT_TOKEN_CONTEXT *GWEN_Crypt_Token_GetContext(GWEN_CRYPT_TOKEN *ct,
158                                                                            uint32_t id,
159                                                                            uint32_t gid);
160 
161 GWENHYWFAR_API int GWEN_Crypt_Token_SetContext(GWEN_CRYPT_TOKEN *ct,
162                                                uint32_t id,
163                                                const GWEN_CRYPT_TOKEN_CONTEXT *ctx,
164                                                uint32_t gid);
165 /*@}*/
166 
167 
168 
169 /** @name Cryptographic Operations
170  *
171  */
172 /*@{*/
173 GWENHYWFAR_API int GWEN_Crypt_Token_Sign(GWEN_CRYPT_TOKEN *ct,
174                                          uint32_t keyId,
175                                          GWEN_CRYPT_PADDALGO *a,
176                                          const uint8_t *pInData,
177                                          uint32_t inLen,
178                                          uint8_t *pSignatureData,
179                                          uint32_t *pSignatureLen,
180                                          uint32_t *pSeqCounter,
181                                          uint32_t gid);
182 
183 GWENHYWFAR_API int GWEN_Crypt_Token_Verify(GWEN_CRYPT_TOKEN *ct,
184                                            uint32_t keyId,
185                                            GWEN_CRYPT_PADDALGO *a,
186                                            const uint8_t *pInData,
187                                            uint32_t inLen,
188                                            const uint8_t *pSignatureData,
189                                            uint32_t signatureLen,
190                                            uint32_t seqCounter,
191                                            uint32_t gid);
192 
193 GWENHYWFAR_API int GWEN_Crypt_Token_Encipher(GWEN_CRYPT_TOKEN *ct,
194                                              uint32_t keyId,
195                                              GWEN_CRYPT_PADDALGO *a,
196                                              const uint8_t *pInData,
197                                              uint32_t inLen,
198                                              uint8_t *pOutData,
199                                              uint32_t *pOutLen,
200                                              uint32_t gid);
201 
202 GWENHYWFAR_API int GWEN_Crypt_Token_Decipher(GWEN_CRYPT_TOKEN *ct,
203                                              uint32_t keyId,
204                                              GWEN_CRYPT_PADDALGO *a,
205                                              const uint8_t *pInData,
206                                              uint32_t inLen,
207                                              uint8_t *pOutData,
208                                              uint32_t *pOutLen,
209                                              uint32_t gid);
210 /*@}*/
211 
212 
213 
214 /** @name Administrative Operations
215  *
216  */
217 /*@{*/
218 GWENHYWFAR_API int GWEN_Crypt_Token_GenerateKey(GWEN_CRYPT_TOKEN *ct,
219                                                 uint32_t keyId,
220                                                 const GWEN_CRYPT_CRYPTALGO *a,
221                                                 uint32_t gid);
222 
223 GWENHYWFAR_API int GWEN_Crypt_Token_ChangePin(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid);
224 
225 GWENHYWFAR_API int  GWEN_Crypt_Token_ActivateKey(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid);
226 
227 /*@}*/
228 
229 
230 #ifdef __cplusplus
231 }
232 #endif
233 
234 
235 
236 #endif
237 
238 
239