00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef GWEN_CRYPT_CRYPTTOKEN_H
00015 #define GWEN_CRYPT_CRYPTTOKEN_H
00016
00017 #include <gwenhywfar/list1.h>
00018 #include <gwenhywfar/list2.h>
00019
00020
00021
00022 typedef struct GWEN_CRYPT_TOKEN GWEN_CRYPT_TOKEN;
00023
00024 #ifdef __cplusplus
00025 extern "C" {
00026 #endif
00027
00028
00029 GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN, GWEN_Crypt_Token, GWENHYWFAR_API)
00030 GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_CRYPT_TOKEN, GWEN_Crypt_Token, GWENHYWFAR_API)
00031
00032 #ifdef __cplusplus
00033 }
00034 #endif
00035
00036
00037
00038 typedef enum {
00039 GWEN_Crypt_Token_Device_Unknown=-1,
00040 GWEN_Crypt_Token_Device_None=0,
00041 GWEN_Crypt_Token_Device_File,
00042 GWEN_Crypt_Token_Device_Card,
00043 GWEN_Crypt_Token_Device_Any=999
00044 } GWEN_CRYPT_TOKEN_DEVICE;
00045
00046
00047 #ifdef __cplusplus
00048 extern "C" {
00049 #endif
00050
00055 GWENHYWFAR_API GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_Device_fromString(const char *s);
00056 GWENHYWFAR_API const char *GWEN_Crypt_Token_Device_toString(GWEN_CRYPT_TOKEN_DEVICE d);
00061 #define GWEN_CRYPT_TOKEN_MODE_SECURE_PIN_ENTRY 0x00000001
00062 #define GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY 0x00000002
00063
00064 #define GWEN_CRYPT_TOKEN_MODE_ALLOW_UPDATE 0x00000004
00065 #define GWEN_CRYPT_TOKEN_MODE_EXP_65537 0x00000008
00066 #define GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN 0x00000010
00067
00068
00069
00070 #define GWEN_CRYPT_TOKEN_FLAGS_MANAGES_SIGNSEQ 0x00000001
00071
00072
00073
00074 #include <gwenhywfar/ct_keyinfo.h>
00075 #include <gwenhywfar/ct_context.h>
00076 #include <gwenhywfar/paddalgo.h>
00077 #include <gwenhywfar/hashalgo.h>
00078 #include <gwenhywfar/cryptalgo.h>
00079 #include <gwenhywfar/cryptdefs.h>
00080
00081
00086 GWENHYWFAR_API void GWEN_Crypt_Token_free(GWEN_CRYPT_TOKEN *ct);
00095 GWENHYWFAR_API uint32_t GWEN_Crypt_Token_GetFlags(const GWEN_CRYPT_TOKEN *ct);
00096
00097 GWENHYWFAR_API uint32_t GWEN_Crypt_Token_GetModes(const GWEN_CRYPT_TOKEN *ct);
00098
00099 GWENHYWFAR_API void GWEN_Crypt_Token_SetModes(GWEN_CRYPT_TOKEN *ct, uint32_t f);
00100
00101 GWENHYWFAR_API void GWEN_Crypt_Token_AddModes(GWEN_CRYPT_TOKEN *ct, uint32_t f);
00102
00103 GWENHYWFAR_API void GWEN_Crypt_Token_SubModes(GWEN_CRYPT_TOKEN *ct, uint32_t f);
00104
00105 GWENHYWFAR_API GWEN_CRYPT_TOKEN_DEVICE GWEN_Crypt_Token_GetDevice(const GWEN_CRYPT_TOKEN *ct);
00106
00107 GWENHYWFAR_API const char *GWEN_Crypt_Token_GetTokenName(const GWEN_CRYPT_TOKEN *ct);
00108
00109 GWENHYWFAR_API const char *GWEN_Crypt_Token_GetTypeName(const GWEN_CRYPT_TOKEN *ct);
00110
00111 GWENHYWFAR_API const char *GWEN_Crypt_Token_GetFriendlyName(const GWEN_CRYPT_TOKEN *ct);
00112
00113 GWENHYWFAR_API void GWEN_Crypt_Token_SetFriendlyName(GWEN_CRYPT_TOKEN *ct, const char *s);
00122 GWENHYWFAR_API int GWEN_Crypt_Token_Open(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid);
00123
00124
00125 GWENHYWFAR_API int GWEN_Crypt_Token_Create(GWEN_CRYPT_TOKEN *ct, uint32_t gid);
00126
00127 GWENHYWFAR_API int GWEN_Crypt_Token_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid);
00128
00129 GWENHYWFAR_API int GWEN_Crypt_Token_IsOpen(const GWEN_CRYPT_TOKEN *ct);
00130
00139 GWENHYWFAR_API int GWEN_Crypt_Token_GetKeyIdList(GWEN_CRYPT_TOKEN *ct,
00140 uint32_t *pIdList,
00141 uint32_t *pCount,
00142 uint32_t gid);
00143
00144 GWENHYWFAR_API const GWEN_CRYPT_TOKEN_KEYINFO* GWEN_Crypt_Token_GetKeyInfo(GWEN_CRYPT_TOKEN *ct,
00145 uint32_t id,
00146 uint32_t flags,
00147 uint32_t gid);
00148
00149 GWENHYWFAR_API int GWEN_Crypt_Token_SetKeyInfo(GWEN_CRYPT_TOKEN *ct,
00150 uint32_t id,
00151 const GWEN_CRYPT_TOKEN_KEYINFO *ki,
00152 uint32_t gid);
00153
00154
00155 GWENHYWFAR_API int GWEN_Crypt_Token_GetContextIdList(GWEN_CRYPT_TOKEN *ct,
00156 uint32_t *pIdList,
00157 uint32_t *pCount,
00158 uint32_t gid);
00159
00160 GWENHYWFAR_API const GWEN_CRYPT_TOKEN_CONTEXT* GWEN_Crypt_Token_GetContext(GWEN_CRYPT_TOKEN *ct,
00161 uint32_t id,
00162 uint32_t gid);
00163
00164 GWENHYWFAR_API int GWEN_Crypt_Token_SetContext(GWEN_CRYPT_TOKEN *ct,
00165 uint32_t id,
00166 const GWEN_CRYPT_TOKEN_CONTEXT *ctx,
00167 uint32_t gid);
00176 GWENHYWFAR_API int GWEN_Crypt_Token_Sign(GWEN_CRYPT_TOKEN *ct,
00177 uint32_t keyId,
00178 GWEN_CRYPT_PADDALGO *a,
00179 const uint8_t *pInData,
00180 uint32_t inLen,
00181 uint8_t *pSignatureData,
00182 uint32_t *pSignatureLen,
00183 uint32_t *pSeqCounter,
00184 uint32_t gid);
00185
00186 GWENHYWFAR_API int GWEN_Crypt_Token_Verify(GWEN_CRYPT_TOKEN *ct,
00187 uint32_t keyId,
00188 GWEN_CRYPT_PADDALGO *a,
00189 const uint8_t *pInData,
00190 uint32_t inLen,
00191 const uint8_t *pSignatureData,
00192 uint32_t signatureLen,
00193 uint32_t seqCounter,
00194 uint32_t gid);
00195
00196 GWENHYWFAR_API int GWEN_Crypt_Token_Encipher(GWEN_CRYPT_TOKEN *ct,
00197 uint32_t keyId,
00198 GWEN_CRYPT_PADDALGO *a,
00199 const uint8_t *pInData,
00200 uint32_t inLen,
00201 uint8_t *pOutData,
00202 uint32_t *pOutLen,
00203 uint32_t gid);
00204
00205 GWENHYWFAR_API int GWEN_Crypt_Token_Decipher(GWEN_CRYPT_TOKEN *ct,
00206 uint32_t keyId,
00207 GWEN_CRYPT_PADDALGO *a,
00208 const uint8_t *pInData,
00209 uint32_t inLen,
00210 uint8_t *pOutData,
00211 uint32_t *pOutLen,
00212 uint32_t gid);
00221 GWENHYWFAR_API int GWEN_Crypt_Token_GenerateKey(GWEN_CRYPT_TOKEN *ct,
00222 uint32_t keyId,
00223 const GWEN_CRYPT_CRYPTALGO *a,
00224 uint32_t gid);
00225
00226 GWENHYWFAR_API int GWEN_Crypt_Token_ChangePin(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid);
00230 #ifdef __cplusplus
00231 }
00232 #endif
00233
00234
00235
00236 #endif
00237
00238