Projekt

Allgemein

Profil

Herunterladen (23,1 KB) Statistiken
| Zweig: | Markierung: | Revision:
/***************************************************************************
$RCSfile$
-------------------
cvs : $Id$
begin : Wed Mar 16 2005
copyright : (C) 2005 by Martin Preuss
email : martin@libchipcard.de

***************************************************************************
* Please see toplevel file COPYING for license details *
***************************************************************************/


#ifndef GWEN_CRYPTTOKEN_H
#define GWEN_CRYPTTOKEN_H

#include <gwenhywfar/keyspec.h>
#include <gwenhywfar/crypt.h>
#include <gwenhywfar/buffer.h>
#include <gwenhywfar/db.h>
#include <gwenhywfar/xml.h>
#include <gwenhywfar/plugin.h>

#include <gwenhywfar/crypttoken_user.h>

#ifdef __cplusplus
extern "C" {
#endif

#define GWEN_CRYPTMANAGER_NAME "crypttoken"


#define GWEN_CRYPTTOKEN_FLAGS_MANAGES_SIGNSEQ 0x00000001
#define GWEN_CRYPTTOKEN_FLAGS_PREDEF_CONTEXT_ONLY 0x00000002

#define GWEN_CRYPTTOKEN_FLAGS_DISABLE_SMALLER_SIGNATURE 0x00000004
/** @deprecated */
#define GWEN_CRYPTTOKEN_FLAGS_FORCE_PIN_ENTRY 0x00000008


#define GWEN_CRYPTTOKEN_GETPIN_FLAGS_CONFIRM 0x00000001
#define GWEN_CRYPTTOKEN_GETPIN_FLAGS_NUMERIC 0x00000002
#define GWEN_CRYPTTOKEN_GETPIN_FLAGS_SHOW 0x00000004
#define GWEN_CRYPTTOKEN_GETPIN_FLAGS_RETRY 0x00000008
#define GWEN_CRYPTTOKEN_GETPIN_FLAGS_ALLOW_DEFAULT 0x00000010


/** this is used when checking for the pin status */
#define GWEN_CRYPTTOKEN_MODES_FORCE_PIN_ENTRY 0x00000001

/**
* This is a list of status values used by GWEN_CRYPTTOKEN in key specs.
*/
/*@{*/
#define GWEN_CRYPTTOKEN_KEYSTATUS_FREE 0
#define GWEN_CRYPTTOKEN_KEYSTATUS_NEW 1
#define GWEN_CRYPTTOKEN_KEYSTATUS_ACTIVE 2
#define GWEN_CRYPTTOKEN_KEYSTATUS_UNKNOWN 99
/*@}*/


typedef struct GWEN_CRYPTTOKEN GWEN_CRYPTTOKEN;


GWEN_LIST_FUNCTION_LIB_DEFS(GWEN_CRYPTTOKEN,
GWEN_CryptToken,
GWENHYWFAR_API)
GWEN_INHERIT_FUNCTION_LIB_DEFS(GWEN_CRYPTTOKEN,
GWENHYWFAR_API)


GWENHYWFAR_API
GWEN_TYPE_UINT32 GWEN_CryptToken_Flag_fromString(const char *s);

GWENHYWFAR_API
GWEN_TYPE_UINT32 GWEN_CryptToken_Flags_fromDb(GWEN_DB_NODE *db,
const char *n);
GWENHYWFAR_API
void GWEN_CryptToken_Flags_toDb(GWEN_DB_NODE *db,
const char *n,
GWEN_TYPE_UINT32 flags);


typedef enum {
GWEN_CryptToken_HashAlgo_Unknown=-1,
GWEN_CryptToken_HashAlgo_None=0,
GWEN_CryptToken_HashAlgo_Any,
/** SHA-1 */
GWEN_CryptToken_HashAlgo_SHA1,
/** Ripemd 160 */
GWEN_CryptToken_HashAlgo_RMD160,
/** MD-5 */
GWEN_CryptToken_HashAlgo_MD5,
} GWEN_CRYPTTOKEN_HASHALGO;

GWENHYWFAR_API
GWEN_CRYPTTOKEN_HASHALGO GWEN_CryptToken_HashAlgo_fromString(const char *s);

GWENHYWFAR_API
const char *GWEN_CryptToken_HashAlgo_toString(GWEN_CRYPTTOKEN_HASHALGO a);


typedef enum {
GWEN_CryptToken_PaddAlgo_Unknown=-1,
GWEN_CryptToken_PaddAlgo_None=0,
GWEN_CryptToken_PaddAlgo_Any,
/** ISO 9796/1 without appendix 4 */
GWEN_CryptToken_PaddAlgo_ISO9796_1,
/** ISO 9796/1 with appendix 4 */
GWEN_CryptToken_PaddAlgo_ISO9796_1A4,
/** ISO 9796/2 with random (SigG v1.0) */
GWEN_CryptToken_PaddAlgo_ISO9796_2,
/** PKCS#1 block type 01 */
GWEN_CryptToken_PaddAlgo_PKCS1_1,
/** PKCS#1 block type 02 */
GWEN_CryptToken_PaddAlgo_PKCS1_2,
/** fill left with zeroes */
GWEN_CryptToken_PaddAlgo_LeftZero,
/** fill right with zeroes */
GWEN_CryptToken_PaddAlgo_RightZero,
/** ANSI X9.23 */
GWEN_CryptToken_PaddAlgo_ANSIX9_23,
} GWEN_CRYPTTOKEN_PADDALGO;

GWENHYWFAR_API
GWEN_CRYPTTOKEN_PADDALGO GWEN_CryptToken_PaddAlgo_fromString(const char *s);

GWENHYWFAR_API
const char *GWEN_CryptToken_PaddAlgo_toString(GWEN_CRYPTTOKEN_PADDALGO a);


typedef enum {
GWEN_CryptToken_CryptAlgo_Unknown=-1,
GWEN_CryptToken_CryptAlgo_None=0,
GWEN_CryptToken_CryptAlgo_Any,
/** RSA */
GWEN_CryptToken_CryptAlgo_RSA,
/** DSA */
GWEN_CryptToken_CryptAlgo_DSA,
/* DES */
GWEN_CryptToken_CryptAlgo_DES,
/** triple-key DES */
GWEN_CryptToken_CryptAlgo_DES_3K
} GWEN_CRYPTTOKEN_CRYPTALGO;

GWENHYWFAR_API
GWEN_CRYPTTOKEN_CRYPTALGO GWEN_CryptToken_CryptAlgo_fromString(const char *s);

GWENHYWFAR_API
const char *GWEN_CryptToken_CryptAlgo_toString(GWEN_CRYPTTOKEN_CRYPTALGO a);



typedef enum {
GWEN_CryptToken_Device_Unknown=-1,
GWEN_CryptToken_Device_None=0,
GWEN_CryptToken_Device_File,
GWEN_CryptToken_Device_Card,
GWEN_CryptToken_Device_Any=999
} GWEN_CRYPTTOKEN_DEVICE;

GWENHYWFAR_API
GWEN_CRYPTTOKEN_DEVICE GWEN_CryptToken_Device_fromString(const char *s);

GWENHYWFAR_API
const char *GWEN_CryptToken_Device_toString(GWEN_CRYPTTOKEN_DEVICE d);



typedef enum {
GWEN_CryptToken_PinType_Unknown=-1,
GWEN_CryptToken_PinType_None=0,
GWEN_CryptToken_PinType_Access,
GWEN_CryptToken_PinType_Manage
} GWEN_CRYPTTOKEN_PINTYPE;

GWENHYWFAR_API
GWEN_CRYPTTOKEN_PINTYPE GWEN_CryptToken_PinType_fromString(const char *s);

GWENHYWFAR_API
const char *GWEN_CryptToken_PinType_toString(GWEN_CRYPTTOKEN_PINTYPE pt);



typedef enum {
GWEN_CryptToken_PinEncoding_Unknown=-1,
GWEN_CryptToken_PinEncoding_None=0,
GWEN_CryptToken_PinEncoding_Bin,
GWEN_CryptToken_PinEncoding_BCD,
GWEN_CryptToken_PinEncoding_ASCII,
GWEN_CryptToken_PinEncoding_FPIN2
} GWEN_CRYPTTOKEN_PINENCODING;

GWENHYWFAR_API
GWEN_CRYPTTOKEN_PINENCODING
GWEN_CryptToken_PinEncoding_fromString(const char *s);

GWENHYWFAR_API
const char*
GWEN_CryptToken_PinEncoding_toString(GWEN_CRYPTTOKEN_PINENCODING pe);


#ifdef __cplusplus
}
#endif

#include <gwenhywfar/crypttoken_signinfo.h>
#include <gwenhywfar/crypttoken_cryptinfo.h>
#include <gwenhywfar/crypttoken_keyinfo.h>
#include <gwenhywfar/crypttoken_context.h>
#include <gwenhywfar/crypttoken_plugin.h>


#ifdef __cplusplus
extern "C" {
#endif



/** @name CryptToken
*
*/
/*@{*/



typedef int (*GWEN_CRYPTTOKEN_OPEN_FN)(GWEN_CRYPTTOKEN *ct,
int manage);
typedef int (*GWEN_CRYPTTOKEN_CREATE_FN)(GWEN_CRYPTTOKEN *ct);
typedef int (*GWEN_CRYPTTOKEN_CLOSE_FN)(GWEN_CRYPTTOKEN *ct);

typedef int (*GWEN_CRYPTTOKEN_CHANGEPIN_FN)(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_PINTYPE pt);

typedef int (*GWEN_CRYPTTOKEN_SIGN_FN)(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_CONTEXT *ctx,
const char *ptr,
unsigned int len,
GWEN_BUFFER *dst);
typedef int (*GWEN_CRYPTTOKEN_VERIFY_FN)(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_CONTEXT *ctx,
const char *ptr,
unsigned int len,
const char *sigptr,
unsigned int siglen);
typedef int (*GWEN_CRYPTTOKEN_ENCRYPT_FN)(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_CONTEXT *ctx,
const char *ptr,
unsigned int len,
GWEN_BUFFER *dst);
typedef int (*GWEN_CRYPTTOKEN_DECRYPT_FN)(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_CONTEXT *ctx,
const char *ptr,
unsigned int len,
GWEN_BUFFER *dst);
typedef int (*GWEN_CRYPTTOKEN_AUTHSIGN_FN)(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_CONTEXT *ctx,
const char *ptr,
unsigned int len,
GWEN_BUFFER *dst);
typedef int
(*GWEN_CRYPTTOKEN_AUTHVERIFY_FN)(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_CONTEXT *ctx,
const char *ptr,
unsigned int len,
const char *sigptr,
unsigned int siglen);

typedef int (*GWEN_CRYPTTOKEN_READKEY_FN)(GWEN_CRYPTTOKEN *ct,
GWEN_TYPE_UINT32 kid,
GWEN_CRYPTKEY **key);
typedef int (*GWEN_CRYPTTOKEN_WRITEKEY_FN)(GWEN_CRYPTTOKEN *ct,
GWEN_TYPE_UINT32 kid,
const GWEN_CRYPTKEY *key);
typedef int (*GWEN_CRYPTTOKEN_READKEYSPEC_FN)(GWEN_CRYPTTOKEN *ct,
GWEN_TYPE_UINT32 kid,
GWEN_KEYSPEC **ks);
typedef int (*GWEN_CRYPTTOKEN_WRITEKEYSPEC_FN)(GWEN_CRYPTTOKEN *ct,
GWEN_TYPE_UINT32 kid,
const GWEN_KEYSPEC *ks);

typedef int (*GWEN_CRYPTTOKEN_GENERATEKEY_FN)(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_KEYINFO *ki,
GWEN_CRYPTKEY **key);

typedef int (*GWEN_CRYPTTOKEN_GETSIGNSEQ_FN)(GWEN_CRYPTTOKEN *ct,
GWEN_TYPE_UINT32 kid,
GWEN_TYPE_UINT32 *signSeq);

typedef int
(*GWEN_CRYPTTOKEN_FILLCONTEXTLIST_FN)(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_CONTEXT_LIST *l);
typedef int
(*GWEN_CRYPTTOKEN_FILLSIGNINFOLIST_FN)(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_SIGNINFO_LIST *l);

typedef int
(*GWEN_CRYPTTOKEN_FILLCRYPTINFOLIST_FN)(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_CRYPTINFO_LIST *l);

typedef int
(*GWEN_CRYPTTOKEN_FILLKEYINFOLIST_FN)(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_KEYINFO_LIST *l);

typedef int
(*GWEN_CRYPTTOKEN_FILLUSERLIST_FN)(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_USER_LIST *l);

typedef int
(*GWEN_CRYPTTOKEN_MODIFYUSER_FN)(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_USER *u);

typedef int (*GWEN_CRYPTTOKEN_GETTOKENIDDATA_FN)(GWEN_CRYPTTOKEN *ct,
GWEN_BUFFER *buf);


GWENHYWFAR_API
GWEN_CRYPTTOKEN *GWEN_CryptToken_new(GWEN_PLUGIN_MANAGER *pm,
GWEN_CRYPTTOKEN_DEVICE devType,
const char *typeName,
const char *subTypeName,
const char *name);

GWENHYWFAR_API
void GWEN_CryptToken_free(GWEN_CRYPTTOKEN *ct);

GWENHYWFAR_API
GWEN_CRYPTTOKEN *GWEN_CryptToken_fromXml(GWEN_PLUGIN_MANAGER *pm,
GWEN_CRYPTTOKEN_DEVICE devType,
GWEN_XMLNODE *n);

GWENHYWFAR_API
int GWEN_CryptToken_ReadXml(GWEN_CRYPTTOKEN *ct, GWEN_XMLNODE *n);

GWENHYWFAR_API
GWEN_PLUGIN_MANAGER*
GWEN_CryptToken_GetCryptManager(const GWEN_CRYPTTOKEN *ct);

GWENHYWFAR_API
const char *GWEN_CryptToken_GetTokenName(const GWEN_CRYPTTOKEN *ct);

GWENHYWFAR_API
void GWEN_CryptToken_SetTokenName(GWEN_CRYPTTOKEN *ct, const char *s);

GWENHYWFAR_API
const char *GWEN_CryptToken_GetTokenType(const GWEN_CRYPTTOKEN *ct);

GWENHYWFAR_API
const char *GWEN_CryptToken_GetTokenSubType(const GWEN_CRYPTTOKEN *ct);

GWENHYWFAR_API
GWEN_CRYPTTOKEN_DEVICE
GWEN_CryptToken_GetDeviceType(const GWEN_CRYPTTOKEN *ct);

GWENHYWFAR_API
GWEN_TYPE_UINT32 GWEN_CryptToken_GetFlags(const GWEN_CRYPTTOKEN *ct);

GWENHYWFAR_API
void GWEN_CryptToken_SetFlags(GWEN_CRYPTTOKEN *ct, GWEN_TYPE_UINT32 fl);

GWENHYWFAR_API
void GWEN_CryptToken_AddFlags(GWEN_CRYPTTOKEN *ct, GWEN_TYPE_UINT32 fl);

GWENHYWFAR_API
void GWEN_CryptToken_SubFlags(GWEN_CRYPTTOKEN *ct, GWEN_TYPE_UINT32 fl);


GWENHYWFAR_API
GWEN_TYPE_UINT32 GWEN_CryptToken_GetModes(const GWEN_CRYPTTOKEN *ct);

GWENHYWFAR_API
void GWEN_CryptToken_SetModes(GWEN_CRYPTTOKEN *ct, GWEN_TYPE_UINT32 fl);

GWENHYWFAR_API
void GWEN_CryptToken_AddModes(GWEN_CRYPTTOKEN *ct, GWEN_TYPE_UINT32 fl);

GWENHYWFAR_API
void GWEN_CryptToken_SubModes(GWEN_CRYPTTOKEN *ct, GWEN_TYPE_UINT32 fl);

GWENHYWFAR_API
const char *GWEN_CryptToken_GetDescriptiveName(const GWEN_CRYPTTOKEN *ct);

GWENHYWFAR_API
void GWEN_CryptToken_SetDescriptiveName(GWEN_CRYPTTOKEN *ct, const char *s);




GWENHYWFAR_API
void GWEN_CryptToken_SetOpenFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_OPEN_FN fn);

GWENHYWFAR_API
GWEN_CRYPTTOKEN_OPEN_FN GWEN_CryptToken_GetOpenFn(const GWEN_CRYPTTOKEN *ct);

GWENHYWFAR_API
void GWEN_CryptToken_SetCreateFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_CREATE_FN fn);

GWENHYWFAR_API
GWEN_CRYPTTOKEN_CREATE_FN GWEN_CryptToken_GetCreateFn(const GWEN_CRYPTTOKEN *ct);

GWENHYWFAR_API
void GWEN_CryptToken_SetCloseFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_CLOSE_FN fn);

GWENHYWFAR_API
GWEN_CRYPTTOKEN_CLOSE_FN
GWEN_CryptToken_GetCloseFn(const GWEN_CRYPTTOKEN *ct);

GWENHYWFAR_API
void GWEN_CryptToken_SetChangePinFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_CHANGEPIN_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetSignFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_SIGN_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetVerifyFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_VERIFY_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetEncryptFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_ENCRYPT_FN fn);
GWENHYWFAR_API
void GWEN_CryptToken_SetDecryptFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_DECRYPT_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetAuthSignFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_AUTHSIGN_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetAuthVerifyFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_AUTHVERIFY_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetReadKeyFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_READKEY_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetWriteKeyFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_WRITEKEY_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetReadKeySpecFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_READKEYSPEC_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetWriteKeySpecFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_WRITEKEYSPEC_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetGenerateKeyFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_GENERATEKEY_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetFillContextListFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_FILLCONTEXTLIST_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetFillSignInfoListFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_FILLSIGNINFOLIST_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetFillCryptInfoListFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_FILLCRYPTINFOLIST_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetFillKeyInfoListFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_FILLKEYINFOLIST_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetFillUserListFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_FILLUSERLIST_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetGetSignSeqFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_GETSIGNSEQ_FN fn);

GWENHYWFAR_API
void GWEN_CryptToken_SetModifyUserFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_MODIFYUSER_FN fn);

GWENHYWFAR_API
void
GWEN_CryptToken_SetGetTokenIdDataFn(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_GETTOKENIDDATA_FN fn);



/* _________________________________________________________________________
* AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
* Virtual Functions
* YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
*/

GWENHYWFAR_API
int GWEN_CryptToken_Open(GWEN_CRYPTTOKEN *ct, int manage);

GWENHYWFAR_API
int GWEN_CryptToken_Create(GWEN_CRYPTTOKEN *ct);

GWENHYWFAR_API
int GWEN_CryptToken_Close(GWEN_CRYPTTOKEN *ct);

GWENHYWFAR_API
int GWEN_CryptToken_ChangePin(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_PINTYPE pt);

GWENHYWFAR_API
int GWEN_CryptToken_Sign(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_CONTEXT *ctx,
const char *ptr,
unsigned int len,
GWEN_BUFFER *dst);

GWENHYWFAR_API
int GWEN_CryptToken_Verify(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_CONTEXT *ctx,
const char *ptr,
unsigned int len,
const char *sigptr,
unsigned int siglen);

GWENHYWFAR_API
int GWEN_CryptToken_AuthSign(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_CONTEXT *ctx,
const char *ptr,
unsigned int len,
GWEN_BUFFER *dst);

GWENHYWFAR_API
int GWEN_CryptToken_AuthVerify(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_CONTEXT *ctx,
const char *ptr,
unsigned int len,
const char *sigptr,
unsigned int siglen);

GWENHYWFAR_API
int GWEN_CryptToken_Encrypt(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_CONTEXT *ctx,
const char *ptr,
unsigned int len,
GWEN_BUFFER *dst);

GWENHYWFAR_API
int GWEN_CryptToken_Decrypt(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_CONTEXT *ctx,
const char *ptr,
unsigned int len,
GWEN_BUFFER *dst);

GWENHYWFAR_API
int GWEN_CryptToken_ReadKey(GWEN_CRYPTTOKEN *ct,
GWEN_TYPE_UINT32 kid,
GWEN_CRYPTKEY **key);

GWENHYWFAR_API
int GWEN_CryptToken_WriteKey(GWEN_CRYPTTOKEN *ct,
GWEN_TYPE_UINT32 kid,
const GWEN_CRYPTKEY *key);

GWENHYWFAR_API
int GWEN_CryptToken_ReadKeySpec(GWEN_CRYPTTOKEN *ct,
GWEN_TYPE_UINT32 kid,
GWEN_KEYSPEC **ks);

GWENHYWFAR_API
int GWEN_CryptToken_WriteKeySpec(GWEN_CRYPTTOKEN *ct,
GWEN_TYPE_UINT32 kid,
const GWEN_KEYSPEC *ks);

GWENHYWFAR_API
int GWEN_CryptToken_GenerateKey(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_KEYINFO *ki,
GWEN_CRYPTKEY **key);

GWENHYWFAR_API
int GWEN_CryptToken_GetSignSeq(GWEN_CRYPTTOKEN *ct,
GWEN_TYPE_UINT32 kid,
GWEN_TYPE_UINT32 *signSeq);

GWENHYWFAR_API
int GWEN_CryptToken_FillContextList(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_CONTEXT_LIST *l);

GWENHYWFAR_API
int GWEN_CryptToken_FillSignInfoList(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_SIGNINFO_LIST *l);

GWENHYWFAR_API
int GWEN_CryptToken_FillCryptInfoList(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_CRYPTINFO_LIST *l);

GWENHYWFAR_API
int GWEN_CryptToken_FillKeyInfoList(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_KEYINFO_LIST *l);

GWENHYWFAR_API
int GWEN_CryptToken_FillUserList(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_USER_LIST *ul);

GWENHYWFAR_API
int GWEN_CryptToken_ModifyUser(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_USER *u);

GWENHYWFAR_API
int GWEN_CryptToken_GetTokenIdData(GWEN_CRYPTTOKEN *ct, GWEN_BUFFER *buf);


GWENHYWFAR_API
const GWEN_CRYPTTOKEN_SIGNINFO*
GWEN_CryptToken_GetSignInfoByAlgos(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_HASHALGO hashAlgo,
GWEN_CRYPTTOKEN_PADDALGO paddAlgo);

GWENHYWFAR_API
const GWEN_CRYPTTOKEN_SIGNINFO*
GWEN_CryptToken_GetSignInfoById(GWEN_CRYPTTOKEN *ct,
GWEN_TYPE_UINT32 id);

GWENHYWFAR_API
const GWEN_CRYPTTOKEN_CRYPTINFO*
GWEN_CryptToken_GetCryptInfoByAlgos(GWEN_CRYPTTOKEN *ct,
GWEN_CRYPTTOKEN_CRYPTALGO cryptAlgo,
GWEN_CRYPTTOKEN_PADDALGO paddAlgo);

GWENHYWFAR_API
const GWEN_CRYPTTOKEN_CRYPTINFO*
GWEN_CryptToken_GetCryptInfoById(GWEN_CRYPTTOKEN *ct,
GWEN_TYPE_UINT32 id);


GWENHYWFAR_API
const GWEN_CRYPTTOKEN_KEYINFO*
GWEN_CryptToken_GetKeyInfoById(GWEN_CRYPTTOKEN *ct,
GWEN_TYPE_UINT32 kid);

GWENHYWFAR_API
const GWEN_CRYPTTOKEN_CONTEXT*
GWEN_CryptToken_GetContextById(GWEN_CRYPTTOKEN *ct,
GWEN_TYPE_UINT32 id);

/**
* This function compares all available contexts to the given one and stores
* copies of all matching contexts in the given list.
* For comparison all key infos can be used, as well as signInfo, cryptInfo
* and authInfo. Data omitted in the pattern context always matches.
*/
GWENHYWFAR_API
int
GWEN_CryptToken_GetMatchingContexts(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_CONTEXT *pattern,
GWEN_CRYPTTOKEN_CONTEXT_LIST *cl);

GWENHYWFAR_API
GWEN_CRYPTTOKEN_CONTEXT*
GWEN_CryptToken_FindContextInList(const GWEN_CRYPTTOKEN_CONTEXT_LIST *cl,
GWEN_TYPE_UINT32 id);

GWENHYWFAR_API
int GWEN_CryptToken_Hash(GWEN_CRYPTTOKEN_HASHALGO algo,
const char *src,
unsigned int slen,
GWEN_BUFFER *dstBuf);

GWENHYWFAR_API
int GWEN_CryptToken_Padd(GWEN_CRYPTTOKEN_PADDALGO algo,
unsigned int chunkSize,
GWEN_BUFFER *buf);

GWENHYWFAR_API
int GWEN_CryptToken_Unpadd(GWEN_CRYPTTOKEN_PADDALGO algo,
GWEN_BUFFER *buf);

GWENHYWFAR_API
int GWEN_CryptToken_AddContext(GWEN_CRYPTTOKEN *ct,
const GWEN_CRYPTTOKEN_CONTEXT *ctx);

/*@}*/


/** @name CryptToken Helper Functions
*
*/
/*@{*/

GWENHYWFAR_API
int GWEN_CryptToken_TransformPin(GWEN_CRYPTTOKEN_PINENCODING peSrc,
GWEN_CRYPTTOKEN_PINENCODING peDst,
unsigned char *buffer,
unsigned int bufLength,
unsigned int *pinLength);

/*@}*/

#ifdef __cplusplus
}
#endif






#endif /* GWEN_CRYPTTOKEN_H */


(3-3/17)