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