620fc3dc2c55ef35efee20bd92a58a8b484ebcd8
[users/jgh/exim.git] / src / src / pdkim / sha1.h
1 /* $Cambridge: exim/src/src/pdkim/sha1.h,v 1.1.2.2 2009/02/24 18:43:59 tom Exp $ */
2 /**
3  * \file sha1.h
4  *
5  *  Based on XySSL: Copyright (C) 2006-2008  Christophe Devine
6  *
7  *  Copyright (C) 2009  Paul Bakker <polarssl_maintainer at polarssl dot org>
8  *
9  *  This program is free software; you can redistribute it and/or modify
10  *  it under the terms of the GNU General Public License as published by
11  *  the Free Software Foundation; either version 2 of the License, or
12  *  (at your option) any later version.
13  *
14  *  This program is distributed in the hope that it will be useful,
15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  *  GNU General Public License for more details.
18  *
19  *  You should have received a copy of the GNU General Public License along
20  *  with this program; if not, write to the Free Software Foundation, Inc.,
21  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22  */
23 #ifndef POLARSSL_SHA1_H
24 #define POLARSSL_SHA1_H
25
26 /**
27  * \brief          SHA-1 context structure
28  */
29 typedef struct
30 {
31     unsigned long total[2];     /*!< number of bytes processed  */
32     unsigned long state[5];     /*!< intermediate digest state  */
33     unsigned char buffer[64];   /*!< data block being processed */
34
35     unsigned char ipad[64];     /*!< HMAC: inner padding        */
36     unsigned char opad[64];     /*!< HMAC: outer padding        */
37 }
38 sha1_context;
39
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43
44 /**
45  * \brief          SHA-1 context setup
46  *
47  * \param ctx      context to be initialized
48  */
49 void sha1_starts( sha1_context *ctx );
50
51 /**
52  * \brief          SHA-1 process buffer
53  *
54  * \param ctx      SHA-1 context
55  * \param input    buffer holding the  data
56  * \param ilen     length of the input data
57  */
58 void sha1_update( sha1_context *ctx, unsigned char *input, int ilen );
59
60 /**
61  * \brief          SHA-1 final digest
62  *
63  * \param ctx      SHA-1 context
64  * \param output   SHA-1 checksum result
65  */
66 void sha1_finish( sha1_context *ctx, unsigned char output[20] );
67
68 /**
69  * \brief          Output = SHA-1( input buffer )
70  *
71  * \param input    buffer holding the  data
72  * \param ilen     length of the input data
73  * \param output   SHA-1 checksum result
74  */
75 void sha1_oneshot( unsigned char *input, int ilen, unsigned char output[20] );
76
77 /**
78  * \brief          Output = SHA-1( file contents )
79  *
80  * \param path     input file name
81  * \param output   SHA-1 checksum result
82  *
83  * \return         0 if successful, 1 if fopen failed,
84  *                 or 2 if fread failed
85  */
86 int sha1_file( char *path, unsigned char output[20] );
87
88 /**
89  * \brief          SHA-1 HMAC context setup
90  *
91  * \param ctx      HMAC context to be initialized
92  * \param key      HMAC secret key
93  * \param keylen   length of the HMAC key
94  */
95 void sha1_hmac_starts( sha1_context *ctx, unsigned char *key, int keylen );
96
97 /**
98  * \brief          SHA-1 HMAC process buffer
99  *
100  * \param ctx      HMAC context
101  * \param input    buffer holding the  data
102  * \param ilen     length of the input data
103  */
104 void sha1_hmac_update( sha1_context *ctx, unsigned char *input, int ilen );
105
106 /**
107  * \brief          SHA-1 HMAC final digest
108  *
109  * \param ctx      HMAC context
110  * \param output   SHA-1 HMAC checksum result
111  */
112 void sha1_hmac_finish( sha1_context *ctx, unsigned char output[20] );
113
114 /**
115  * \brief          Output = HMAC-SHA-1( hmac key, input buffer )
116  *
117  * \param key      HMAC secret key
118  * \param keylen   length of the HMAC key
119  * \param input    buffer holding the  data
120  * \param ilen     length of the input data
121  * \param output   HMAC-SHA-1 result
122  */
123 void sha1_hmac( unsigned char *key, int keylen,
124                 unsigned char *input, int ilen,
125                 unsigned char output[20] );
126
127 #ifdef __cplusplus
128 }
129 #endif
130
131 #endif /* sha1.h */