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