1 /***************************************************************************
2  $RCSfile$
3                              -------------------
4     cvs         : $Id: crypttoken.h 1113 2007-01-10 09:14:16Z martin $
5     begin       : Wed Mar 16 2005
6     copyright   : (C) 2005 by Martin Preuss
7     email       : martin@libchipcard.de
8 
9  ***************************************************************************
10  *          Please see toplevel file COPYING for license details           *
11  ***************************************************************************/
12 
13 
14 #ifndef GWEN_CRYPT_CRYPTALGO_H
15 #define GWEN_CRYPT_CRYPTALGO_H
16 
17 
18 #include <gwenhywfar/list2.h>
19 
20 typedef struct GWEN_CRYPT_CRYPTALGO GWEN_CRYPT_CRYPTALGO;
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 GWEN_LIST2_FUNCTION_LIB_DEFS(GWEN_CRYPT_CRYPTALGO,
27                              GWEN_Crypt_CryptAlgo,
28                              GWENHYWFAR_API)
29 #ifdef __cplusplus
30 }
31 #endif
32 
33 
34 typedef enum {
35   GWEN_Crypt_CryptAlgoId_Unknown=-1,
36   GWEN_Crypt_CryptAlgoId_None=0,
37   GWEN_Crypt_CryptAlgoId_Any,
38   /** RSA */
39   GWEN_Crypt_CryptAlgoId_Rsa,
40   /** DSA */
41   GWEN_Crypt_CryptAlgoId_Dsa,
42   /* DES */
43   GWEN_Crypt_CryptAlgoId_Des,
44   /** triple-key DES */
45   GWEN_Crypt_CryptAlgoId_Des3K,
46   /* blowfish */
47   GWEN_Crypt_CryptAlgoId_BlowFish,
48   /* AES-128 */
49   GWEN_Crypt_CryptAlgoId_Aes128,
50   /* AES-246 */
51   GWEN_Crypt_CryptAlgoId_Aes256,
52 } GWEN_CRYPT_CRYPTALGOID;
53 
54 
55 typedef enum {
56   GWEN_Crypt_CryptMode_Unknown=-1,
57   GWEN_Crypt_CryptMode_None=0,
58   GWEN_Crypt_CryptMode_Ecb, /* electronic codebook */
59   GWEN_Crypt_CryptMode_Cfb, /* cipher feedback */
60   GWEN_Crypt_CryptMode_Cbc  /* cipher block chaining */
61 } GWEN_CRYPT_CRYPTMODE;
62 
63 
64 #include <gwenhywfar/db.h>
65 
66 
67 #ifdef __cplusplus
68 extern "C" {
69 #endif
70 
71 GWENHYWFAR_API GWEN_CRYPT_CRYPTALGOID GWEN_Crypt_CryptAlgoId_fromString(const char *s);
72 GWENHYWFAR_API const char *GWEN_Crypt_CryptAlgoId_toString(GWEN_CRYPT_CRYPTALGOID a);
73 
74 GWENHYWFAR_API GWEN_CRYPT_CRYPTMODE GWEN_Crypt_CryptMode_fromString(const char *s);
75 GWENHYWFAR_API const char *GWEN_Crypt_CryptMode_toString(GWEN_CRYPT_CRYPTMODE m);
76 
77 
78 GWENHYWFAR_API GWEN_CRYPT_CRYPTALGO *GWEN_Crypt_CryptAlgo_new(GWEN_CRYPT_CRYPTALGOID id,
79                                                               GWEN_CRYPT_CRYPTMODE m);
80 GWENHYWFAR_API GWEN_CRYPT_CRYPTALGO *GWEN_Crypt_CryptAlgo_dup(const GWEN_CRYPT_CRYPTALGO *a);
81 GWENHYWFAR_API GWEN_CRYPT_CRYPTALGO *GWEN_Crypt_CryptAlgo_fromDb(GWEN_DB_NODE *db);
82 GWENHYWFAR_API int GWEN_Crypt_CryptAlgo_toDb(const GWEN_CRYPT_CRYPTALGO *a, GWEN_DB_NODE *db);
83 GWENHYWFAR_API void GWEN_Crypt_CryptAlgo_Attach(GWEN_CRYPT_CRYPTALGO *a);
84 GWENHYWFAR_API void GWEN_Crypt_CryptAlgo_free(GWEN_CRYPT_CRYPTALGO *a);
85 
86 GWENHYWFAR_API GWEN_CRYPT_CRYPTALGOID GWEN_Crypt_CryptAlgo_GetId(const GWEN_CRYPT_CRYPTALGO *a);
87 GWENHYWFAR_API GWEN_CRYPT_CRYPTMODE GWEN_Crypt_CryptAlgo_GetMode(const GWEN_CRYPT_CRYPTALGO *a);
88 GWENHYWFAR_API uint8_t *GWEN_Crypt_CryptAlgo_GetInitVectorPtr(const GWEN_CRYPT_CRYPTALGO *a);
89 GWENHYWFAR_API uint32_t GWEN_Crypt_CryptAlgo_GetInitVectorLen(const GWEN_CRYPT_CRYPTALGO *a);
90 GWENHYWFAR_API int GWEN_Crypt_CryptAlgo_SetInitVector(GWEN_CRYPT_CRYPTALGO *a,
91                                                       const uint8_t *pv,
92                                                       uint32_t lv);
93 
94 
95 GWENHYWFAR_API int GWEN_Crypt_CryptAlgo_GetChunkSize(const GWEN_CRYPT_CRYPTALGO *a);
96 GWENHYWFAR_API void GWEN_Crypt_CryptAlgo_SetChunkSize(GWEN_CRYPT_CRYPTALGO *a, int s);
97 
98 
99 GWENHYWFAR_API int GWEN_Crypt_CryptAlgo_GetKeySizeInBits(const GWEN_CRYPT_CRYPTALGO *a);
100 GWENHYWFAR_API void GWEN_Crypt_CryptAlgo_SetKeySizeInBits(GWEN_CRYPT_CRYPTALGO *a, int s);
101 
102 
103 #ifdef __cplusplus
104 }
105 #endif
106 
107 #endif
108 
109 
110