00001
00005 #ifndef _CYFER_PK_H_
00006 #define _CYFER_PK_H_
00007
00008 #define CYFER_PK_NONE 0
00009 #define CYFER_PK_RSA 1
00010 #define CYFER_PK_ELGAMAL 2
00011 #define CYFER_PK_LUC 3
00012
00013 #ifdef CYFER_INTERNAL
00014 #include <bignum.h>
00015 #include <pkiutil.h>
00016 #include <rsa.h>
00017 #include <elgamal.h>
00018 #include <luc.h>
00019
00020 typedef struct {
00021 int type;
00022 union {
00023 RSA_CTX rsa;
00024 ELGAMAL_CTX elgamal;
00025 LUC_CTX luc;
00026 } u;
00027 } CYFER_PK_CTX;
00028 #else
00029 #include <cyfer/cyfer.h>
00031 typedef void CYFER_PK_CTX;
00032 #endif
00033
00035 typedef struct {
00037 int type;
00039 char *name;
00041 bool encryption;
00043 bool signature;
00044 } CYFER_Pk_t;
00045
00046 #ifdef __cplusplus
00047 extern "C" {
00048 #endif
00049
00051 CYFER_API CYFER_Pk_t *CYFER_Pk_Get_Supported(void);
00052
00058 CYFER_API int CYFER_Pk_Select(const char *name, bool *enc, bool *sig);
00059
00063 CYFER_API CYFER_PK_CTX *CYFER_Pk_Init(int type);
00064
00068 CYFER_API void CYFER_Pk_Generate_Key(CYFER_PK_CTX *ctx, size_t keylen);
00069
00074 CYFER_API void CYFER_Pk_Size(CYFER_PK_CTX *ctx, size_t *pt_len, size_t *ct_len);
00075
00080 CYFER_API void CYFER_Pk_KeySize(CYFER_PK_CTX *ctx, size_t *privlen, size_t *publen);
00081
00088 CYFER_API void CYFER_Pk_Export_Key(CYFER_PK_CTX *ctx, unsigned char *priv, unsigned char *pub);
00089
00099 CYFER_API bool CYFER_Pk_Import_Key(CYFER_PK_CTX *ctx, unsigned char *priv, size_t privlen, unsigned char *pub, size_t publen);
00100
00105 CYFER_API void CYFER_Pk_Encrypt(CYFER_PK_CTX *ctx, const unsigned char *input, unsigned char *output);
00106
00111 CYFER_API void CYFER_Pk_Decrypt(CYFER_PK_CTX *ctx, const unsigned char *input, unsigned char *output);
00112
00117 CYFER_API void CYFER_Pk_Sign(CYFER_PK_CTX *ctx, const unsigned char *input, unsigned char *output);
00118
00124 CYFER_API bool CYFER_Pk_Verify(CYFER_PK_CTX *ctx, const unsigned char *signature, const unsigned char *message);
00125
00128 CYFER_API void CYFER_Pk_Finish(CYFER_PK_CTX *ctx);
00129
00130 #ifdef __cplusplus
00131 };
00132 #endif
00133
00134 #endif
00135