Merge branch 'master' of git://git.denx.de/u-boot-arm
[platform/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, unsigned char *input, int ilen );
63
64 /**
65  * \brief          SHA-1 final digest
66  *
67  * \param ctx      SHA-1 context
68  * \param output   SHA-1 checksum result
69  */
70 void sha1_finish( sha1_context *ctx, unsigned char output[20] );
71
72 /**
73  * \brief          Output = SHA-1( input buffer )
74  *
75  * \param input    buffer holding the  data
76  * \param ilen     length of the input data
77  * \param output   SHA-1 checksum result
78  */
79 void sha1_csum( unsigned char *input, int ilen,
80                 unsigned char output[20] );
81
82 /**
83  * \brief          Output = SHA-1( input buffer ), with watchdog triggering
84  *
85  * \param input    buffer holding the  data
86  * \param ilen     length of the input data
87  * \param output   SHA-1 checksum result
88  * \param chunk_sz watchdog triggering period (in bytes of input processed)
89  */
90 void sha1_csum_wd (unsigned char *input, int ilen,
91                 unsigned char output[20], unsigned int chunk_sz);
92
93 /**
94  * \brief          Output = SHA-1( file contents )
95  *
96  * \param path     input file name
97  * \param output   SHA-1 checksum result
98  * \return         0 if successful, or 1 if fopen failed
99  */
100 int sha1_file( char *path, unsigned char output[20] );
101
102 /**
103  * \brief          Output = HMAC-SHA-1( input buffer, hmac key )
104  *
105  * \param key      HMAC secret key
106  * \param keylen   length of the HMAC key
107  * \param input    buffer holding the  data
108  * \param ilen     length of the input data
109  * \param output   HMAC-SHA-1 result
110  */
111 void sha1_hmac( unsigned char *key, int keylen,
112                 unsigned char *input, int ilen,
113                 unsigned char output[20] );
114
115 /**
116  * \brief          Checkup routine
117  *
118  * \return         0 if successful, or 1 if the test failed
119  */
120 int sha1_self_test( void );
121
122 #ifdef __cplusplus
123 }
124 #endif
125
126 #endif /* sha1.h */