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