1238104Sdes#ifndef LDNS_SHA1_H
2238104Sdes#define LDNS_SHA1_H
3238104Sdes
4238104Sdes#ifdef __cplusplus
5238104Sdesextern "C" {
6238104Sdes#endif
7238104Sdes
8238104Sdes#define LDNS_SHA1_BLOCK_LENGTH               64
9238104Sdes#define LDNS_SHA1_DIGEST_LENGTH              20
10238104Sdes
11238104Sdestypedef struct {
12238104Sdes        uint32_t       state[5];
13238104Sdes        uint64_t       count;
14238104Sdes        unsigned char   buffer[LDNS_SHA1_BLOCK_LENGTH];
15238104Sdes} ldns_sha1_ctx;
16238104Sdes
17238104Sdesvoid ldns_sha1_init(ldns_sha1_ctx * context);
18238104Sdesvoid ldns_sha1_transform(uint32_t state[5], const unsigned char buffer[LDNS_SHA1_BLOCK_LENGTH]);
19238104Sdesvoid ldns_sha1_update(ldns_sha1_ctx *context, const unsigned char *data, unsigned int len);
20238104Sdesvoid ldns_sha1_final(unsigned char digest[LDNS_SHA1_DIGEST_LENGTH], ldns_sha1_ctx *context);
21238104Sdes
22238104Sdes/**
23238104Sdes * Convenience function to digest a fixed block of data at once.
24238104Sdes *
25238104Sdes * \param[in] data the data to digest
26238104Sdes * \param[in] data_len the length of data in bytes
27238104Sdes * \param[out] digest the length of data in bytes
28238104Sdes *             This pointer MUST have LDNS_SHA1_DIGEST_LENGTH bytes
29238104Sdes *             available
30238104Sdes * \return the SHA1 digest of the given data
31238104Sdes */
32238104Sdesunsigned char *ldns_sha1(unsigned char *data, unsigned int data_len, unsigned char *digest);
33238104Sdes
34238104Sdes#ifdef __cplusplus
35238104Sdes}
36238104Sdes#endif
37238104Sdes
38238104Sdes#endif /* LDNS_SHA1_H */
39