Main Page   Data Structures   File List   Data Fields   Globals  

cipher.h

Go to the documentation of this file.
00001 
00005 #ifndef _CIPHER_H_
00006 #define _CIPHER_H_
00007 
00008 #define CYFER_CIPHER_NONE 0
00009 #define CYFER_CIPHER_BLOWFISH 1
00010 #define CYFER_CIPHER_DES 2
00011 #define CYFER_CIPHER_DESX 3
00012 #define CYFER_CIPHER_TRIPLEDES 4
00013 #define CYFER_CIPHER_RC2 5
00014 #define CYFER_CIPHER_RC4 6
00015 #define CYFER_CIPHER_RC5 7
00016 #define CYFER_CIPHER_RC6 8
00017 #define CYFER_CIPHER_IDEA 9
00018 #define CYFER_CIPHER_AES 10
00019 #define CYFER_CIPHER_DEAL 11
00020 #define CYFER_CIPHER_THREEWAY 12
00021 
00022 #define CYFER_MODE_NONE 0
00023 #define CYFER_MODE_ECB 1
00024 #define CYFER_MODE_CBC 2
00025 #define CYFER_MODE_CFB 3
00026 #define CYFER_MODE_OFB 4
00027 
00028 
00029 #ifdef CYFER_INTERNAL
00030 #include <util.h>
00031 #include <blowfish.h>
00032 #include <des.h>
00033 #include <desx.h>
00034 #include <tripledes.h>
00035 #include <rc2.h>
00036 #include <rc4.h>
00037 #include <rc5.h>
00038 #include <rc6.h>
00039 #include <idea.h>
00040 #include <aes.h>
00041 #include <deal.h>
00042 #include <threeway.h>
00043 
00044 typedef struct {
00045         int mode;
00046         void *context;
00047         cyfer_crypt_handler_t encrypt;
00048         cyfer_crypt_handler_t decrypt;
00049         size_t length;
00050         unsigned char *chain;
00051         unsigned char *outbuf;
00052 } CYFER_BLOCK_MODE_CTX;
00053 
00054 typedef struct {
00055         int type;
00056         union {
00057                 BLOWFISH_CTX blowfish;
00058                 DES_CTX des;
00059                 DESX_CTX desx;
00060                 TRIPLEDES_CTX tripledes;
00061                 RC2_CTX rc2;
00062                 RC5_CTX rc5;
00063                 RC6_CTX rc6;
00064                 IDEA_CTX idea;
00065                 AES_CTX aes;
00066                 DEAL_CTX deal;
00067                 THREEWAY_CTX threeway;
00068         } u;
00069         CYFER_BLOCK_MODE_CTX mctx;
00070 } CYFER_BLOCK_CIPHER_CTX;
00071 
00072 typedef struct {
00073         int type;
00074         union {
00075                 RC4_CTX rc4;
00076         } u;
00077 } CYFER_STREAM_CIPHER_CTX;
00078 
00079 #else
00080 #include <cyfer/cyfer.h>
00082 typedef void CYFER_BLOCK_CIPHER_CTX;
00084 typedef void CYFER_STREAM_CIPHER_CTX;
00085 #endif
00086 
00088 typedef struct {
00090         int type;
00092         char *name;
00094         size_t keylen;
00096         size_t minkey;
00098         size_t length;
00099 } CYFER_BlockCipher_t;
00100 
00102 typedef struct {
00104         int type;
00106         char *name;
00108         size_t keylen;
00110         size_t minkey;
00111 } CYFER_StreamCipher_t;
00112 
00114 typedef struct {
00116         int type;
00118         char *name;
00120         size_t length;
00121 } CYFER_BlockMode_t;
00122 
00123 
00124 #ifdef __cplusplus
00125 extern "C" {
00126 #endif
00127 
00129 CYFER_API CYFER_BlockMode_t *CYFER_BlockCipher_Get_SupportedModes(void);
00130 
00132 CYFER_API CYFER_BlockCipher_t *CYFER_BlockCipher_Get_Supported(void);
00133 
00141 CYFER_API int CYFER_BlockCipher_Select(const char *name, size_t *keylen, size_t *minkey, size_t *length);
00142 
00149 CYFER_API int CYFER_BlockCipher_SelectMode(const char *name, size_t *length);
00150 
00160 CYFER_API CYFER_BLOCK_CIPHER_CTX *CYFER_BlockCipher_Init(int type, const unsigned char *key, size_t keylen, int mode, const unsigned char *ivec);
00161 
00166 CYFER_API void CYFER_BlockCipher_Encrypt(CYFER_BLOCK_CIPHER_CTX *ctx, const unsigned char *input, unsigned char *output);
00167 
00172 CYFER_API void CYFER_BlockCipher_Decrypt(CYFER_BLOCK_CIPHER_CTX *ctx, const unsigned char *input, unsigned char *output);
00173 
00176 CYFER_API void CYFER_BlockCipher_Finish(CYFER_BLOCK_CIPHER_CTX *ctx);
00177 
00179 CYFER_API CYFER_StreamCipher_t *CYFER_StreamCipher_Get_Supported(void);
00180 
00187 CYFER_API int CYFER_StreamCipher_Select(const char *name, size_t *keylen, size_t *minkey);
00188 
00194 CYFER_API CYFER_STREAM_CIPHER_CTX *CYFER_StreamCipher_Init(int type, const unsigned char *key, size_t keylen);
00195 
00201 CYFER_API void CYFER_StreamCipher_Encrypt(CYFER_STREAM_CIPHER_CTX *ctx, const unsigned char *input, unsigned char *output, size_t length);
00202 
00208 CYFER_API void CYFER_StreamCipher_Decrypt(CYFER_STREAM_CIPHER_CTX *ctx, const unsigned char *input, unsigned char *output, size_t length);
00209 
00212 CYFER_API void CYFER_StreamCipher_Finish(CYFER_STREAM_CIPHER_CTX *ctx);
00213 
00214 #ifdef __cplusplus
00215 };
00216 #endif 
00217 
00218 #endif /* _CIPHER_H_ */
00219 

Generated on Sun Sep 26 13:53:58 2004 for Cyfer by doxygen1.3-rc3