1 #ifndef __GSK_HASH_H_ 2 #define __GSK_HASH_H_ 3 4 #include <glib.h> 5 6 G_BEGIN_DECLS 7 8 typedef struct _GskHash GskHash; 9 10 /* --- public interface --- */ 11 GskHash *gsk_hash_new_md5 (void); 12 GskHash *gsk_hash_new_sha1 (void); 13 GskHash *gsk_hash_new_sha256 (void); /* WARNING: untested */ 14 GskHash *gsk_hash_new_crc32 (gboolean big_endian); 15 void gsk_hash_feed (GskHash *hash, 16 gconstpointer data, 17 guint length); 18 void gsk_hash_feed_str (GskHash *hash, 19 const char *str); 20 void gsk_hash_done (GskHash *hash); 21 guint gsk_hash_get_size (GskHash *hash); 22 void gsk_hash_get (GskHash *hash, 23 guint8 *data_out); 24 void gsk_hash_get_hex (GskHash *hash, 25 gchar *hex_out); 26 void gsk_hash_destroy (GskHash *hash); 27 28 29 /* --- for implementing new types of hash functions --- */ 30 struct _GskHash 31 { 32 /* The size of the hash-key (in bytes) */ 33 guint size; 34 35 /*< protected >*/ 36 void (*feed) (GskHash *hash, 37 gconstpointer data, 38 guint len); 39 gpointer (*done) (GskHash *hash); 40 void (*destroy) (GskHash *hash); 41 42 /*< private >*/ 43 guint flags; /* constructor must set this to 0 */ 44 gpointer hash_value; 45 }; 46 47 G_END_DECLS 48 49 #endif 50