1#ifndef LDNS_SHA1_H
2#define LDNS_SHA1_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8#define LDNS_SHA1_BLOCK_LENGTH               64
9#define LDNS_SHA1_DIGEST_LENGTH              20
10
11typedef struct {
12        uint32_t       state[5];
13        uint64_t       count;
14        unsigned char   buffer[LDNS_SHA1_BLOCK_LENGTH];
15} ldns_sha1_ctx;
16
17void ldns_sha1_init(ldns_sha1_ctx * context);
18void ldns_sha1_transform(uint32_t state[5], const unsigned char buffer[LDNS_SHA1_BLOCK_LENGTH]);
19void ldns_sha1_update(ldns_sha1_ctx *context, const unsigned char *data, unsigned int len);
20void ldns_sha1_final(unsigned char digest[LDNS_SHA1_DIGEST_LENGTH], ldns_sha1_ctx *context);
21
22/**
23 * Convenience function to digest a fixed block of data at once.
24 *
25 * \param[in] data the data to digest
26 * \param[in] data_len the length of data in bytes
27 * \param[out] digest the length of data in bytes
28 *             This pointer MUST have LDNS_SHA1_DIGEST_LENGTH bytes
29 *             available
30 * \return the SHA1 digest of the given data
31 */
32unsigned char *ldns_sha1(unsigned char *data, unsigned int data_len, unsigned char *digest);
33
34#ifdef __cplusplus
35}
36#endif
37
38#endif /* LDNS_SHA1_H */
39