00001
00005 #ifndef _CYFER_HASH_H_
00006 #define _CYFER_HASH_H_
00007
00008 #define CYFER_HASH_NONE 0
00009 #define CYFER_HASH_MD4 1
00010 #define CYFER_HASH_MD5 2
00011 #define CYFER_HASH_SHA1 3
00012 #define CYFER_HASH_RMD160 4
00013 #define CYFER_HASH_ADLER32 5
00014 #define CYFER_HASH_SNEFRU 6
00015 #define CYFER_HASH_CRC32 7
00016 #define CYFER_HASH_MD2 8
00017 #define CYFER_HASH_SHA256 9
00018
00019 #ifdef CYFER_INTERNAL
00020 #include <md4.h>
00021 #include <md5.h>
00022 #include <sha1.h>
00023 #include <rmd160.h>
00024 #include <adler32.h>
00025 #include <snefru.h>
00026 #include <crc32.h>
00027 #include <md2.h>
00028 #include <sha256.h>
00029
00030 typedef struct {
00031 int type;
00032 union {
00033 MD4_CTX md4;
00034 MD5_CTX md5;
00035 SHA1_CTX sha1;
00036 RMD160_CTX rmd160;
00037 ADLER32_CTX adler32;
00038 SNEFRU_CTX snefru;
00039 CRC32_CTX crc32;
00040 MD2_CTX md2;
00041 SHA256_CTX sha256;
00042 } u;
00043 } CYFER_HASH_CTX;
00044 #else
00045 #include <cyfer/cyfer.h>
00047 typedef void CYFER_HASH_CTX;
00048 #endif
00049
00051 typedef struct {
00053 int type;
00055 char *name;
00057 size_t length;
00058 } CYFER_Hash_t;
00059
00060 #ifdef __cplusplus
00061 extern "C" {
00062 #endif
00063
00065 CYFER_API CYFER_Hash_t *CYFER_Hash_Get_Supported(void);
00066
00071 CYFER_API int CYFER_Hash_Select(const char *name, size_t *length);
00072
00076 CYFER_API CYFER_HASH_CTX *CYFER_Hash_Init(int type);
00077
00078
00083 CYFER_API void CYFER_Hash_Update(CYFER_HASH_CTX *ctx, const unsigned char *data, size_t len);
00084
00089 CYFER_API void CYFER_Hash_Finish(CYFER_HASH_CTX *ctx, unsigned char *md);
00090
00096 CYFER_API int CYFER_Hash(int type, const unsigned char *data, size_t len, unsigned char *md);
00097
00098 #ifdef __cplusplus
00099 };
00100 #endif
00101
00102 #endif
00103