00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef CRYP_H
00030 #define CRYP_H "$Id"
00031
00032 #include <openssl/rsa.h>
00033 #include <openssl/blowfish.h>
00034 #include <openssl/ripemd.h>
00035 #include <chameleon/error.h>
00036 #include <chameleon/ipcmessage.h>
00037
00038
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042
00043
00044 #define CRYP_RSA_DEFAULT_KEY_LENGTH 1024
00045 #define CRYP_RSA_MAX_KEY_LENGTH 4096
00046 #define CRYP_RSA_DEFAULT_EXPONENT 65537
00047 #define CRYP_RSA_DEFAULT_EXPONENT_STR "65537"
00048
00049
00050 #define CRYP_ERROR_MEMORY_FULL 1
00051 #define CRYP_ERROR_KEY_GENERATION 2
00052 #define CRYP_ERROR_BUFFER_TOO_SMALL 3
00053 #define CRYP_ERROR_BAD_PADDING 4
00054 #define CRYP_ERROR_ENCRYPTION 5
00055 #define CRYP_ERROR_DECRYPTION 6
00056 #define CRYP_ERROR_BAD_SIZE 7
00057 #define CRYP_ERROR_BAD_SIGNATURE 8
00058 #define CRYP_ERROR_BAD_ALGO 9
00059 #define CRYP_ERROR_BAD_EXPONENT 10
00060
00061
00062 CHIPCARD_API typedef enum {
00063 CryptAlgoNone=0,
00064 CryptAlgoBlowfish,
00065 CryptAlgoRSA
00066 } CryptAlgo;
00067
00068
00072 CHIPCARD_API struct CRYP_RSAKEYSTRUCT {
00073 RSA *key;
00074 };
00075
00076
00077 CHIPCARD_API typedef struct CRYP_RSAKEYSTRUCT CRYP_RSAKEY;
00078 CHIPCARD_API typedef CRYP_RSAKEY *CRYP_RSAKEYPTR;
00079
00080
00081 CHIPCARD_API ERRORCODE Cryp_ModuleInit();
00082 CHIPCARD_API ERRORCODE Cryp_ModuleFini();
00083
00084 CHIPCARD_API CRYP_RSAKEYPTR Cryp_RsaKey_new();
00085 CHIPCARD_API void Cryp_RsaKey_free(CRYP_RSAKEYPTR k);
00086
00087 CHIPCARD_API ERRORCODE Cryp_RsaKey_Generate(CRYP_RSAKEYPTR k, int keylength, int expo);
00088 CHIPCARD_API ERRORCODE Cryp_RsaKey_ToMessage(CRYP_RSAKEYPTR k, IPCMESSAGE *m, int pub);
00089 CHIPCARD_API ERRORCODE Cryp_RsaKey_FromMessage(CRYP_RSAKEYPTR k, IPCMESSAGE *m);
00090 CHIPCARD_API ERRORCODE Cryp_RsaKey_GetChunkSize(CRYP_RSAKEYPTR k, int *size);
00091 CHIPCARD_API ERRORCODE Cryp_Rsa_CryptPublic(CRYP_RSAKEYPTR k,
00092 const unsigned char *source,
00093 unsigned int size,
00094 unsigned char *target,
00095 unsigned int bsize);
00096 CHIPCARD_API ERRORCODE Cryp_Rsa_CryptPrivate(CRYP_RSAKEYPTR k,
00097 const unsigned char *source,
00098 unsigned int size,
00099 unsigned char *target,
00100 unsigned int bsize);
00101 CHIPCARD_API ERRORCODE Cryp_Rsa_DecryptPublic(CRYP_RSAKEYPTR k,
00102 const unsigned char *source,
00103 unsigned int size,
00104 unsigned char *target,
00105 unsigned int bsize);
00106 CHIPCARD_API ERRORCODE Cryp_Rsa_DecryptPrivate(CRYP_RSAKEYPTR k,
00107 const unsigned char *source,
00108 unsigned int size,
00109 unsigned char *target,
00110 unsigned int bsize);
00111 CHIPCARD_API ERRORCODE Cryp_Rsa_Sign(CRYP_RSAKEYPTR k,
00112 const unsigned char *text,
00113 unsigned int size,
00114 unsigned char *buffer,
00115 unsigned int *bsize);
00116
00117 CHIPCARD_API ERRORCODE Cryp_Rsa_Verify(CRYP_RSAKEYPTR k,
00118 const unsigned char *text,
00119 unsigned int size,
00120 const unsigned char *signature,
00121 unsigned int ssize);
00122
00123
00124 CHIPCARD_API ERRORCODE Cryp_PaddForRSAKey(CRYP_RSAKEYPTR k,
00125 unsigned char *source,
00126 unsigned int *size,
00127 unsigned int bsize);
00128
00129 CHIPCARD_API int Cryp_Rsa_GetChunkSize(CRYP_RSAKEYPTR k);
00130
00131 CHIPCARD_API ERRORCODE Cryp_Unpadd(const unsigned char *source,
00132 unsigned int *size);
00133
00134 CHIPCARD_API ERRORCODE Cryp_RipeMD160(const unsigned char *source,
00135 unsigned int size,
00136 unsigned char *buffer,
00137 unsigned int bsize);
00138
00139
00140
00141
00145 CHIPCARD_API struct CRYP_BFKEYSTRUCT {
00146 BF_KEY key;
00147 int keylen;
00148 char keydata[16];
00149 };
00150
00151
00152 CHIPCARD_API typedef struct CRYP_BFKEYSTRUCT CRYP_BFKEY;
00153
00154
00155 CHIPCARD_API CRYP_BFKEY *Cryp_BlowfishKey_new();
00156 CHIPCARD_API void Cryp_BlowfishKey_free(CRYP_BFKEY *);
00157
00158 CHIPCARD_API ERRORCODE Cryp_BlowfishKey_SetKey(CRYP_BFKEY *key,
00159 const char *data,
00160 int len);
00161
00162 CHIPCARD_API ERRORCODE Cryp_BlowfishKey_GenerateKey(CRYP_BFKEY *key);
00163
00164 CHIPCARD_API ERRORCODE Cryp_BlowfishKey_GetKey(CRYP_BFKEY *key,
00165 char **data,
00166 int *len);
00167
00168 CHIPCARD_API ERRORCODE Cryp_Blowfish_Encrypt(CRYP_BFKEY *key,
00169 const char *indata,
00170 int size,
00171 char *outdata);
00172
00173 CHIPCARD_API ERRORCODE Cryp_Blowfish_Decrypt(CRYP_BFKEY *key,
00174 const char *indata,
00175 int size,
00176 char *outdata);
00177
00178 CHIPCARD_API ERRORCODE Cryp_PaddForBFKey(CRYP_BFKEY *k,
00179 unsigned char *source,
00180 unsigned int *size,
00181 unsigned int bsize);
00182
00183
00184 CHIPCARD_API ERRORCODE Cryp_Encrypt(void *key,
00185 CryptAlgo algo,
00186 const unsigned char *source,
00187 int insize,
00188 unsigned char **outbuffer,
00189 int *outsize);
00190
00191 CHIPCARD_API ERRORCODE Cryp_Decrypt(void *key,
00192 CryptAlgo algo,
00193 const unsigned char *source,
00194 int insize,
00195 unsigned char **outbuffer,
00196 int *outsize);
00197
00201 CHIPCARD_API struct CRYP_RMD160STRUCT {
00202 RIPEMD160_CTX ctx;
00203 };
00204 CHIPCARD_API typedef struct CRYP_RMD160STRUCT CRYP_RMD160;
00205
00206
00207 CHIPCARD_API CRYP_RMD160 *Cryp_RMD160_new();
00208 CHIPCARD_API void Cryp_RMD160_free(CRYP_RMD160 *r);
00209
00210 CHIPCARD_API ERRORCODE Cryp_RMD160_Init(CRYP_RMD160 *r);
00211 CHIPCARD_API ERRORCODE Cryp_RMD160_Update(CRYP_RMD160 *r,
00212 const unsigned char *data,
00213 int bsize);
00214 CHIPCARD_API ERRORCODE Cryp_RMD160_Final(CRYP_RMD160 *r,
00215 unsigned char *buffer,
00216 int *bsize);
00217
00218 #ifdef __cplusplus
00219 }
00220 #endif
00221
00222 #endif
00223
00224