]>
Commit | Line | Data |
---|---|---|
1 | /** | |
2 | * \file sha1.h | |
3 | * based from http://xyssl.org/code/source/sha1/ | |
4 | * FIPS-180-1 compliant SHA-1 implementation | |
5 | * | |
6 | * Copyright (C) 2003-2006 Christophe Devine | |
7 | * | |
8 | * SPDX-License-Identifier: LGPL-2.1 | |
9 | */ | |
10 | /* | |
11 | * The SHA-1 standard was published by NIST in 1993. | |
12 | * | |
13 | * http://www.itl.nist.gov/fipspubs/fip180-1.htm | |
14 | */ | |
15 | #ifndef _SHA1_H | |
16 | #define _SHA1_H | |
17 | ||
18 | #ifdef __cplusplus | |
19 | extern "C" { | |
20 | #endif | |
21 | ||
22 | #define SHA1_SUM_POS -0x20 | |
23 | #define SHA1_SUM_LEN 20 | |
24 | #define SHA1_DER_LEN 15 | |
25 | ||
26 | extern const uint8_t sha1_der_prefix[]; | |
27 | ||
28 | /** | |
29 | * \brief SHA-1 context structure | |
30 | */ | |
31 | typedef struct | |
32 | { | |
33 | unsigned long total[2]; /*!< number of bytes processed */ | |
34 | unsigned long state[5]; /*!< intermediate digest state */ | |
35 | unsigned char buffer[64]; /*!< data block being processed */ | |
36 | } | |
37 | sha1_context; | |
38 | ||
39 | /** | |
40 | * \brief SHA-1 context setup | |
41 | * | |
42 | * \param ctx SHA-1 context to be initialized | |
43 | */ | |
44 | void sha1_starts( sha1_context *ctx ); | |
45 | ||
46 | /** | |
47 | * \brief SHA-1 process buffer | |
48 | * | |
49 | * \param ctx SHA-1 context | |
50 | * \param input buffer holding the data | |
51 | * \param ilen length of the input data | |
52 | */ | |
53 | void sha1_update(sha1_context *ctx, const unsigned char *input, | |
54 | unsigned int ilen); | |
55 | ||
56 | /** | |
57 | * \brief SHA-1 final digest | |
58 | * | |
59 | * \param ctx SHA-1 context | |
60 | * \param output SHA-1 checksum result | |
61 | */ | |
62 | void sha1_finish( sha1_context *ctx, unsigned char output[20] ); | |
63 | ||
64 | /** | |
65 | * \brief Output = SHA-1( input buffer ) | |
66 | * | |
67 | * \param input buffer holding the data | |
68 | * \param ilen length of the input data | |
69 | * \param output SHA-1 checksum result | |
70 | */ | |
71 | void sha1_csum(const unsigned char *input, unsigned int ilen, | |
72 | unsigned char *output); | |
73 | ||
74 | /** | |
75 | * \brief Output = SHA-1( input buffer ), with watchdog triggering | |
76 | * | |
77 | * \param input buffer holding the data | |
78 | * \param ilen length of the input data | |
79 | * \param output SHA-1 checksum result | |
80 | * \param chunk_sz watchdog triggering period (in bytes of input processed) | |
81 | */ | |
82 | void sha1_csum_wd(const unsigned char *input, unsigned int ilen, | |
83 | unsigned char *output, unsigned int chunk_sz); | |
84 | ||
85 | /** | |
86 | * \brief Output = HMAC-SHA-1( input buffer, hmac key ) | |
87 | * | |
88 | * \param key HMAC secret key | |
89 | * \param keylen length of the HMAC key | |
90 | * \param input buffer holding the data | |
91 | * \param ilen length of the input data | |
92 | * \param output HMAC-SHA-1 result | |
93 | */ | |
94 | void sha1_hmac(const unsigned char *key, int keylen, | |
95 | const unsigned char *input, unsigned int ilen, | |
96 | unsigned char *output); | |
97 | ||
98 | /** | |
99 | * \brief Checkup routine | |
100 | * | |
101 | * \return 0 if successful, or 1 if the test failed | |
102 | */ | |
103 | int sha1_self_test( void ); | |
104 | ||
105 | #ifdef __cplusplus | |
106 | } | |
107 | #endif | |
108 | ||
109 | #endif /* sha1.h */ |