xref: /rk3399_rockchip-uboot/include/u-boot/sha1.h (revision 2b9912e6a7df7b1f60beb7942bd0e6fa5f9d0167)
1*2b9912e6SJeroen Hofstee /**
2*2b9912e6SJeroen Hofstee  * \file sha1.h
3*2b9912e6SJeroen Hofstee  * based from http://xyssl.org/code/source/sha1/
4*2b9912e6SJeroen Hofstee  *  FIPS-180-1 compliant SHA-1 implementation
5*2b9912e6SJeroen Hofstee  *
6*2b9912e6SJeroen Hofstee  *  Copyright (C) 2003-2006  Christophe Devine
7*2b9912e6SJeroen Hofstee  *
8*2b9912e6SJeroen Hofstee  *  This library is free software; you can redistribute it and/or
9*2b9912e6SJeroen Hofstee  *  modify it under the terms of the GNU Lesser General Public
10*2b9912e6SJeroen Hofstee  *  License, version 2.1 as published by the Free Software Foundation.
11*2b9912e6SJeroen Hofstee  *
12*2b9912e6SJeroen Hofstee  *  This library is distributed in the hope that it will be useful,
13*2b9912e6SJeroen Hofstee  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14*2b9912e6SJeroen Hofstee  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15*2b9912e6SJeroen Hofstee  *  Lesser General Public License for more details.
16*2b9912e6SJeroen Hofstee  *
17*2b9912e6SJeroen Hofstee  *  You should have received a copy of the GNU Lesser General Public
18*2b9912e6SJeroen Hofstee  *  License along with this library; if not, write to the Free Software
19*2b9912e6SJeroen Hofstee  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20*2b9912e6SJeroen Hofstee  *  MA	02110-1301  USA
21*2b9912e6SJeroen Hofstee  */
22*2b9912e6SJeroen Hofstee /*
23*2b9912e6SJeroen Hofstee  *  The SHA-1 standard was published by NIST in 1993.
24*2b9912e6SJeroen Hofstee  *
25*2b9912e6SJeroen Hofstee  *  http://www.itl.nist.gov/fipspubs/fip180-1.htm
26*2b9912e6SJeroen Hofstee  */
27*2b9912e6SJeroen Hofstee #ifndef _SHA1_H
28*2b9912e6SJeroen Hofstee #define _SHA1_H
29*2b9912e6SJeroen Hofstee 
30*2b9912e6SJeroen Hofstee #ifdef __cplusplus
31*2b9912e6SJeroen Hofstee extern "C" {
32*2b9912e6SJeroen Hofstee #endif
33*2b9912e6SJeroen Hofstee 
34*2b9912e6SJeroen Hofstee #define SHA1_SUM_POS	-0x20
35*2b9912e6SJeroen Hofstee #define SHA1_SUM_LEN	20
36*2b9912e6SJeroen Hofstee 
37*2b9912e6SJeroen Hofstee /**
38*2b9912e6SJeroen Hofstee  * \brief	   SHA-1 context structure
39*2b9912e6SJeroen Hofstee  */
40*2b9912e6SJeroen Hofstee typedef struct
41*2b9912e6SJeroen Hofstee {
42*2b9912e6SJeroen Hofstee     unsigned long total[2];	/*!< number of bytes processed	*/
43*2b9912e6SJeroen Hofstee     unsigned long state[5];	/*!< intermediate digest state	*/
44*2b9912e6SJeroen Hofstee     unsigned char buffer[64];	/*!< data block being processed */
45*2b9912e6SJeroen Hofstee }
46*2b9912e6SJeroen Hofstee sha1_context;
47*2b9912e6SJeroen Hofstee 
48*2b9912e6SJeroen Hofstee /**
49*2b9912e6SJeroen Hofstee  * \brief	   SHA-1 context setup
50*2b9912e6SJeroen Hofstee  *
51*2b9912e6SJeroen Hofstee  * \param ctx	   SHA-1 context to be initialized
52*2b9912e6SJeroen Hofstee  */
53*2b9912e6SJeroen Hofstee void sha1_starts( sha1_context *ctx );
54*2b9912e6SJeroen Hofstee 
55*2b9912e6SJeroen Hofstee /**
56*2b9912e6SJeroen Hofstee  * \brief	   SHA-1 process buffer
57*2b9912e6SJeroen Hofstee  *
58*2b9912e6SJeroen Hofstee  * \param ctx	   SHA-1 context
59*2b9912e6SJeroen Hofstee  * \param input    buffer holding the  data
60*2b9912e6SJeroen Hofstee  * \param ilen	   length of the input data
61*2b9912e6SJeroen Hofstee  */
62*2b9912e6SJeroen Hofstee void sha1_update(sha1_context *ctx, const unsigned char *input,
63*2b9912e6SJeroen Hofstee 		 unsigned int ilen);
64*2b9912e6SJeroen Hofstee 
65*2b9912e6SJeroen Hofstee /**
66*2b9912e6SJeroen Hofstee  * \brief	   SHA-1 final digest
67*2b9912e6SJeroen Hofstee  *
68*2b9912e6SJeroen Hofstee  * \param ctx	   SHA-1 context
69*2b9912e6SJeroen Hofstee  * \param output   SHA-1 checksum result
70*2b9912e6SJeroen Hofstee  */
71*2b9912e6SJeroen Hofstee void sha1_finish( sha1_context *ctx, unsigned char output[20] );
72*2b9912e6SJeroen Hofstee 
73*2b9912e6SJeroen Hofstee /**
74*2b9912e6SJeroen Hofstee  * \brief	   Output = SHA-1( input buffer )
75*2b9912e6SJeroen Hofstee  *
76*2b9912e6SJeroen Hofstee  * \param input    buffer holding the  data
77*2b9912e6SJeroen Hofstee  * \param ilen	   length of the input data
78*2b9912e6SJeroen Hofstee  * \param output   SHA-1 checksum result
79*2b9912e6SJeroen Hofstee  */
80*2b9912e6SJeroen Hofstee void sha1_csum(const unsigned char *input, unsigned int ilen,
81*2b9912e6SJeroen Hofstee 		unsigned char *output);
82*2b9912e6SJeroen Hofstee 
83*2b9912e6SJeroen Hofstee /**
84*2b9912e6SJeroen Hofstee  * \brief	   Output = SHA-1( input buffer ), with watchdog triggering
85*2b9912e6SJeroen Hofstee  *
86*2b9912e6SJeroen Hofstee  * \param input    buffer holding the  data
87*2b9912e6SJeroen Hofstee  * \param ilen	   length of the input data
88*2b9912e6SJeroen Hofstee  * \param output   SHA-1 checksum result
89*2b9912e6SJeroen Hofstee  * \param chunk_sz watchdog triggering period (in bytes of input processed)
90*2b9912e6SJeroen Hofstee  */
91*2b9912e6SJeroen Hofstee void sha1_csum_wd(const unsigned char *input, unsigned int ilen,
92*2b9912e6SJeroen Hofstee 		unsigned char *output, unsigned int chunk_sz);
93*2b9912e6SJeroen Hofstee 
94*2b9912e6SJeroen Hofstee /**
95*2b9912e6SJeroen Hofstee  * \brief	   Output = HMAC-SHA-1( input buffer, hmac key )
96*2b9912e6SJeroen Hofstee  *
97*2b9912e6SJeroen Hofstee  * \param key	   HMAC secret key
98*2b9912e6SJeroen Hofstee  * \param keylen   length of the HMAC key
99*2b9912e6SJeroen Hofstee  * \param input    buffer holding the  data
100*2b9912e6SJeroen Hofstee  * \param ilen	   length of the input data
101*2b9912e6SJeroen Hofstee  * \param output   HMAC-SHA-1 result
102*2b9912e6SJeroen Hofstee  */
103*2b9912e6SJeroen Hofstee void sha1_hmac(const unsigned char *key, int keylen,
104*2b9912e6SJeroen Hofstee 		const unsigned char *input, unsigned int ilen,
105*2b9912e6SJeroen Hofstee 		unsigned char *output);
106*2b9912e6SJeroen Hofstee 
107*2b9912e6SJeroen Hofstee /**
108*2b9912e6SJeroen Hofstee  * \brief	   Checkup routine
109*2b9912e6SJeroen Hofstee  *
110*2b9912e6SJeroen Hofstee  * \return	   0 if successful, or 1 if the test failed
111*2b9912e6SJeroen Hofstee  */
112*2b9912e6SJeroen Hofstee int sha1_self_test( void );
113*2b9912e6SJeroen Hofstee 
114*2b9912e6SJeroen Hofstee #ifdef __cplusplus
115*2b9912e6SJeroen Hofstee }
116*2b9912e6SJeroen Hofstee #endif
117*2b9912e6SJeroen Hofstee 
118*2b9912e6SJeroen Hofstee #endif /* sha1.h */
119