• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 */
109