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_BE_H
12 #define GWEN_CRYPT_CRYPTTOKEN_BE_H
13 
14 
15 #include <gwenhywfar/ct.h>
16 #include <gwenhywfar/inherit.h>
17 #include <gwenhywfar/buffer.h>
18 #include <gwenhywfar/hashalgo.h>
19 
20 
21 
22 GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN, GWENHYWFAR_API)
23 
24 
25 
26 
27 /** @name Prototypes for Virtual Functions
28  *
29  */
30 /*@{*/
31 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_OPEN_FN)(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid);
32 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_CREATE_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t gid);
33 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_CLOSE_FN)(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid);
34 
35 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN)(GWEN_CRYPT_TOKEN *ct,
36                                                              uint32_t *pIdList,
37                                                              uint32_t *pCount,
38                                                              uint32_t gid);
39 typedef const GWEN_CRYPT_TOKEN_KEYINFO *GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_GETKEYINFO_FN)(GWEN_CRYPT_TOKEN *ct,
40     uint32_t id,
41     uint32_t flags,
42     uint32_t gid);
43 
44 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_SETKEYINFO_FN)(GWEN_CRYPT_TOKEN *ct,
45                                                            uint32_t id,
46                                                            const GWEN_CRYPT_TOKEN_KEYINFO *ki,
47                                                            uint32_t gid);
48 
49 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN)(GWEN_CRYPT_TOKEN *ct,
50                                                                  uint32_t *pIdList,
51                                                                  uint32_t *pCount,
52                                                                  uint32_t gid);
53 typedef const GWEN_CRYPT_TOKEN_CONTEXT *GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_GETCONTEXT_FN)(GWEN_CRYPT_TOKEN *ct,
54     uint32_t id,
55     uint32_t gid);
56 
57 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_SETCONTEXT_FN)(GWEN_CRYPT_TOKEN *ct,
58                                                            uint32_t id,
59                                                            const GWEN_CRYPT_TOKEN_CONTEXT *ctx,
60                                                            uint32_t gid);
61 
62 
63 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_SIGN_FN)(GWEN_CRYPT_TOKEN *ct,
64                                                      uint32_t keyId,
65                                                      GWEN_CRYPT_PADDALGO *a,
66                                                      const uint8_t *pInData,
67                                                      uint32_t inLen,
68                                                      uint8_t *pSignatureData,
69                                                      uint32_t *pSignatureLen,
70                                                      uint32_t *pSeqCounter,
71                                                      uint32_t gid);
72 
73 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_VERIFY_FN)(GWEN_CRYPT_TOKEN *ct,
74                                                        uint32_t keyId,
75                                                        GWEN_CRYPT_PADDALGO *a,
76                                                        const uint8_t *pInData,
77                                                        uint32_t inLen,
78                                                        const uint8_t *pSignatureData,
79                                                        uint32_t signatureLen,
80                                                        uint32_t seqCounter,
81                                                        uint32_t gid);
82 
83 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_ENCIPHER_FN)(GWEN_CRYPT_TOKEN *ct,
84                                                          uint32_t keyId,
85                                                          GWEN_CRYPT_PADDALGO *a,
86                                                          const uint8_t *pInData,
87                                                          uint32_t inLen,
88                                                          uint8_t *pOutData,
89                                                          uint32_t *pOutLen,
90                                                          uint32_t gid);
91 
92 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_DECIPHER_FN)(GWEN_CRYPT_TOKEN *ct,
93                                                          uint32_t keyId,
94                                                          GWEN_CRYPT_PADDALGO *a,
95                                                          const uint8_t *pInData,
96                                                          uint32_t inLen,
97                                                          uint8_t *pOutData,
98                                                          uint32_t *pOutLen,
99                                                          uint32_t gid);
100 
101 
102 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_GENERATEKEY_FN)(GWEN_CRYPT_TOKEN *ct,
103                                                             uint32_t keyId,
104                                                             const GWEN_CRYPT_CRYPTALGO *a,
105                                                             uint32_t gid);
106 
107 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_CHANGEPIN_FN)(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid);
108 
109 typedef int GWENHYWFAR_CB(*GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN)(GWEN_CRYPT_TOKEN *ct, uint32_t id, uint32_t gid);
110 
111 /*@}*/
112 
113 
114 
115 
116 /** @name Contructor
117  *
118  */
119 /*@{*/
120 GWENHYWFAR_API GWEN_CRYPT_TOKEN *GWEN_Crypt_Token_new(GWEN_CRYPT_TOKEN_DEVICE dev,
121                                                       const char *typeName,
122                                                       const char *tokenName);
123 /*@}*/
124 
125 
126 
127 /** @name Setting CryptToken Information
128  *
129  */
130 /*@{*/
131 GWENHYWFAR_API void GWEN_Crypt_Token_SetTokenName(GWEN_CRYPT_TOKEN *ct, const char *s);
132 
133 GWENHYWFAR_API void GWEN_Crypt_Token_SetFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f);
134 GWENHYWFAR_API void GWEN_Crypt_Token_AddFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f);
135 GWENHYWFAR_API void GWEN_Crypt_Token_SubFlags(GWEN_CRYPT_TOKEN *ct, uint32_t f);
136 /*@}*/
137 
138 
139 
140 /** @name Interactive Helper Functions
141  *
142  */
143 /*@{*/
144 GWENHYWFAR_API int GWEN_Crypt_Token_GetPin(GWEN_CRYPT_TOKEN *ct,
145                                            GWEN_CRYPT_PINTYPE pt,
146                                            GWEN_CRYPT_PINENCODING pe,
147                                            uint32_t flags,
148                                            unsigned char *pwbuffer,
149                                            unsigned int minLength,
150                                            unsigned int maxLength,
151                                            unsigned int *pinLength,
152                                            uint32_t gid);
153 
154 
155 GWENHYWFAR_API int GWEN_Crypt_Token_SetPinStatus(GWEN_CRYPT_TOKEN *ct,
156                                                  GWEN_CRYPT_PINTYPE pt,
157                                                  GWEN_CRYPT_PINENCODING pe,
158                                                  uint32_t flags,
159                                                  const unsigned char *buffer,
160                                                  unsigned int pinLength,
161                                                  int isOk,
162                                                  uint32_t gid);
163 
164 GWENHYWFAR_API uint32_t GWEN_Crypt_Token_BeginEnterPin(GWEN_CRYPT_TOKEN *ct,
165                                                        GWEN_CRYPT_PINTYPE pt,
166                                                        uint32_t gid);
167 
168 GWENHYWFAR_API int GWEN_Crypt_Token_EndEnterPin(GWEN_CRYPT_TOKEN *ct,
169                                                 GWEN_CRYPT_PINTYPE pt,
170                                                 int ok,
171                                                 uint32_t id);
172 
173 GWENHYWFAR_API int GWEN_Crypt_Token_InsertToken(GWEN_CRYPT_TOKEN *ct, uint32_t gid);
174 
175 GWENHYWFAR_API int GWEN_Crypt_Token_InsertCorrectToken(GWEN_CRYPT_TOKEN *ct, uint32_t gid);
176 /*@}*/
177 
178 
179 
180 
181 /** @name Setter for Virtual Functions
182  *
183  */
184 /*@{*/
185 GWENHYWFAR_API GWEN_CRYPT_TOKEN_OPEN_FN GWEN_Crypt_Token_SetOpenFn(GWEN_CRYPT_TOKEN *ct,
186                                                                    GWEN_CRYPT_TOKEN_OPEN_FN f);
187 
188 GWENHYWFAR_API GWEN_CRYPT_TOKEN_CREATE_FN GWEN_Crypt_Token_SetCreateFn(GWEN_CRYPT_TOKEN *ct,
189                                                                        GWEN_CRYPT_TOKEN_CREATE_FN f);
190 
191 GWENHYWFAR_API GWEN_CRYPT_TOKEN_CLOSE_FN GWEN_Crypt_Token_SetCloseFn(GWEN_CRYPT_TOKEN *ct,
192                                                                      GWEN_CRYPT_TOKEN_CLOSE_FN f);
193 
194 GWENHYWFAR_API GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN GWEN_Crypt_Token_SetGetKeyIdListFn(GWEN_CRYPT_TOKEN *ct,
195     GWEN_CRYPT_TOKEN_GETKEYIDLIST_FN f);
196 
197 GWENHYWFAR_API GWEN_CRYPT_TOKEN_GETKEYINFO_FN GWEN_Crypt_Token_SetGetKeyInfoFn(GWEN_CRYPT_TOKEN *ct,
198                                                                                GWEN_CRYPT_TOKEN_GETKEYINFO_FN f);
199 
200 GWENHYWFAR_API GWEN_CRYPT_TOKEN_SETKEYINFO_FN GWEN_Crypt_Token_SetSetKeyInfoFn(GWEN_CRYPT_TOKEN *ct,
201                                                                                GWEN_CRYPT_TOKEN_SETKEYINFO_FN f);
202 
203 GWENHYWFAR_API GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN GWEN_Crypt_Token_SetGetContextIdListFn(GWEN_CRYPT_TOKEN *ct,
204     GWEN_CRYPT_TOKEN_GETCONTEXTIDLIST_FN f);
205 
206 GWENHYWFAR_API GWEN_CRYPT_TOKEN_GETCONTEXT_FN GWEN_Crypt_Token_SetGetContextFn(GWEN_CRYPT_TOKEN *ct,
207                                                                                GWEN_CRYPT_TOKEN_GETCONTEXT_FN f);
208 
209 GWENHYWFAR_API GWEN_CRYPT_TOKEN_SETCONTEXT_FN GWEN_Crypt_Token_SetSetContextFn(GWEN_CRYPT_TOKEN *ct,
210                                                                                GWEN_CRYPT_TOKEN_SETCONTEXT_FN f);
211 
212 GWENHYWFAR_API GWEN_CRYPT_TOKEN_SIGN_FN GWEN_Crypt_Token_SetSignFn(GWEN_CRYPT_TOKEN *ct,
213                                                                    GWEN_CRYPT_TOKEN_SIGN_FN f);
214 
215 GWENHYWFAR_API GWEN_CRYPT_TOKEN_VERIFY_FN GWEN_Crypt_Token_SetVerifyFn(GWEN_CRYPT_TOKEN *ct,
216                                                                        GWEN_CRYPT_TOKEN_VERIFY_FN f);
217 
218 GWENHYWFAR_API GWEN_CRYPT_TOKEN_ENCIPHER_FN GWEN_Crypt_Token_SetEncipherFn(GWEN_CRYPT_TOKEN *ct,
219                                                                            GWEN_CRYPT_TOKEN_ENCIPHER_FN f);
220 
221 GWENHYWFAR_API GWEN_CRYPT_TOKEN_DECIPHER_FN GWEN_Crypt_Token_SetDecipherFn(GWEN_CRYPT_TOKEN *ct,
222                                                                            GWEN_CRYPT_TOKEN_DECIPHER_FN f);
223 
224 GWENHYWFAR_API GWEN_CRYPT_TOKEN_GENERATEKEY_FN GWEN_Crypt_Token_SetGenerateKeyFn(GWEN_CRYPT_TOKEN *ct,
225     GWEN_CRYPT_TOKEN_GENERATEKEY_FN f);
226 
227 GWENHYWFAR_API GWEN_CRYPT_TOKEN_CHANGEPIN_FN GWEN_Crypt_Token_SetChangePinFn(GWEN_CRYPT_TOKEN *ct,
228                                                                              GWEN_CRYPT_TOKEN_CHANGEPIN_FN f);
229 
230 GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN GWEN_Crypt_Token_SetActivateKeyFn(GWEN_CRYPT_TOKEN *ct,
231                                                                   GWEN_CRYPT_TOKEN_ACTIVATEKEY_FN f);
232 
233 /*@}*/
234 
235 
236 
237 
238 #endif
239 
240 
241