## gskhash

gskhash — hash computing objects

## Synopsis

                        GskHash;
    GskHash *           gsk_hash_new_md5                    (void);
    GskHash *           gsk_hash_new_sha1                   (void);
    GskHash *           gsk_hash_new_crc32                  (gboolean big_endian);
    void                gsk_hash_feed                       (GskHash *hash,
                                                             gconstpointer data,
                                                             guint length);
    void                gsk_hash_feed_str                   (GskHash *hash,
                                                             const char *str);
    void                gsk_hash_done                       (GskHash *hash);
    guint               gsk_hash_get_size                   (GskHash *hash);
    void                gsk_hash_get                        (GskHash *hash,
                                                             guint8 *data_out);
    void                gsk_hash_get_hex                    (GskHash *hash,
                                                             gchar *hex_out);
    void                gsk_hash_destroy                    (GskHash *hash);

## Description

These small objects can compute a hash-function of a stream of data incrementally. Just pass pieces of data to `gsk_hash_feed()` and it will keep track of the hash-objects state. Call `gsk_hash_done()` to finish the hash off, then use `gsk_hash_get()` or `gsk_hash_get_hex()` to get the value of the hash.

## Details

### GskHash

    typedef struct {
      /* The size of the hash-key (in bytes) */
      guint       size;
    } GskHash;

An abstract hashing object.

guint `size`; | number of bytes in the hash.

### gsk_hash_new_md5 ()

    GskHash *           gsk_hash_new_md5                    (void);

Create a new MD5 hasher.

Returns : | the newly allocated hash object.

### gsk_hash_new_sha1 ()

    GskHash *           gsk_hash_new_sha1                   (void);

Create a new SHA1 hasher.

Returns : | the newly allocated hash object.

### gsk_hash_new_crc32 ()

    GskHash *           gsk_hash_new_crc32                  (gboolean big_endian);

Typically called as gsk_hash_new_crc32(G_BYTE_ORDER == G_BIG_ENDIAN).

`big_endian` : | whether to compute a big-endian crc32 hash. (As opposed to a little endian hash).
Returns : | the newly allocated hash object.

### gsk_hash_feed ()

    void                gsk_hash_feed                       (GskHash *hash,
                                                             gconstpointer data,
                                                             guint length);

Affect the hash incrementally; hash the given binary data.

You may call this function on little bits of data and it must have exactly the same effect is if you called it once with a larger slab of data.

`hash` : | the hash to feed data.
`data` : | binary data to accumulate in the hash.
`length` : | length of the binary data.

### gsk_hash_feed_str ()

    void                gsk_hash_feed_str                   (GskHash *hash,
                                                             const char *str);

Hash the given binary data (incrementally).

You may mix calls to `gsk_hash_feed()` and `gsk_hash_feed_str()`.

`hash` : | the hash to feed data.
`str` : | a NUL-terminated string to feed to the hash.

### gsk_hash_done ()

    void                gsk_hash_done                       (GskHash *hash);

Finish processing loose data for the hash. This may only be called once in the lifetime of the hash.

`hash` : | the hash to finish.

### gsk_hash_get_size ()

    guint               gsk_hash_get_size                   (GskHash *hash);

Get the number of binary bytes that this function maps to.

`hash` : | the hash to query.
Returns : | the number of bytes of binary data in this hash.

### gsk_hash_get ()

    void                gsk_hash_get                        (GskHash *hash,
                                                             guint8 *data_out);

Get a binary hash value. This should be of the size returned by `gsk_hash_get_size()`.

`hash` : | the hash to query.
`data_out` : | binary buffer to fill with the hash value.

### gsk_hash_get_hex ()

    void                gsk_hash_get_hex                    (GskHash *hash,
                                                             gchar *hex_out);

Get a hex hash value. This should be of the size returned by (`gsk_hash_get_size()` * 2 + 1).

`hash` : | the hash to query.
`hex_out` : | buffer to fill with a NUL-terminated hex hash value.

### gsk_hash_destroy ()

    void                gsk_hash_destroy                    (GskHash *hash);

Free memory used by the hash object.

`hash` : | the hash function.