+
+/****f* silccrypt/SilcHashAPI/silc_hash_init
+ *
+ * SYNOPSIS
+ *
+ * void silc_hash_init(SilcHash hash);
+ *
+ * DESCRIPTION
+ *
+ * Sometimes calling the silc_hash_make might not be the most optimal
+ * case of computing digests. If you have a lot of different data
+ * that you need to put together for computing a digest you may either
+ * put them into a buffer and compute the digest from the buffer by
+ * calling the silc_hash_make, or you can use the silc_hash_init,
+ * silc_hash_update and silc_hash_final to do the digest. This function
+ * prepares the allocated hash function context for this kind of digest
+ * computation. To add the data to be used in the digest computation
+ * call the silc_hash_update function.
+ *
+ ***/
+void silc_hash_init(SilcHash hash);
+
+/****f* silccrypt/SilcHashAPI/silc_hash_update
+ *
+ * SYNOPSIS
+ *
+ * void silc_hash_update(SilcHash hash, const unsigned char *data,
+ * SilcUInt32 data_len);
+ *
+ * DESCRIPTION
+ *
+ * This function may be called to add data to be used in the digest
+ * computation. This can be called multiple times to add data from
+ * many sources before actually computing the digest. Once you've
+ * added all the data you need you can call the silc_hash_final to
+ * actually produce the message digest value.
+ *
+ * EXAMPLE
+ *
+ * unsigned char digest[20];
+ *
+ * silc_hash_init(hash);
+ * silc_hash_update(hash, data, data_len);
+ * silc_hash_update(hash, more_data, more_data_len);
+ * silc_hash_final(hash, digest);
+ *
+ ***/
+void silc_hash_update(SilcHash hash, const unsigned char *data,
+ SilcUInt32 data_len);
+
+/****f* silccrypt/SilcHashAPI/silc_hash_final
+ *
+ * SYNOPSIS
+ *
+ * void silc_hash_final(SilcHash hash, unsigned char *return_hash);
+ *
+ * DESCRIPTION
+ *
+ * This function is used to produce the final message digest from
+ * the data that has been added to the hash function context by calling
+ * the silc_hash_update function. The digest is copied in to the
+ * `return_hash' pointer which must be at least the size that
+ * the silc_hash_len returns.
+ *
+ ***/
+void silc_hash_final(SilcHash hash, unsigned char *return_hash);
+
+/****f* silccrypt/SilcHashAPI/silc_hash_transform
+ *
+ * SYNOPSIS
+ *
+ * void silc_hash_transform(SilcHash hash, SilcUInt32 *state,
+ * const unsigned char *data);
+ *
+ * DESCRIPTION
+ *
+ * This is special function for calling the hash function's internal
+ * digest generation function. The size of the `state' array and the
+ * sizeof the `data' buffer is hash function specific and must be
+ * known by the caller. Usually this function is not needed.
+ *
+ ***/
+void silc_hash_transform(SilcHash hash, SilcUInt32 *state,
+ const unsigned char *data);
+
+/****f* silccrypt/SilcHashAPI/silc_hash_fingerprint
+ *
+ * SYNOPSIS
+ *
+ * char *silc_hash_fingerprint(SilcHash hash, const unsigned char *data,
+ * SilcUInt32 data_len);
+ *
+ * DESCRIPTION
+ *
+ * Utility function which can be used to create a textual fingerprint
+ * out of the data indicated by `data' of length of `data_len' bytes.
+ * If `hash' is NULL then SHA1 hash function is used automatically.
+ * The caller must free the returned string.
+ *
+ * Example output could be:
+ * 41BF 5C2E 4149 039A 3917 831F 65C4 0A69 F98B 0A4D
+ *
+ ***/