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