F´ Flight Software - C/C++ Documentation  devel
A framework for building embedded system applications to NASA flight quality standards.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
sha.h
Go to the documentation of this file.
1 /* crypto/sha/sha.h */
2 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3  * All rights reserved.
4  *
5  * This package is an SSL implementation written
6  * by Eric Young (eay@cryptsoft.com).
7  * The implementation was written so as to conform with Netscape's SSL.
8  *
9  * This library is free for commercial and non-commercial use as long as
10  * the following conditions are aheared to. The following conditions
11  * apply to all code found in this distribution, be it the RC4, RSA,
12  * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13  * included with this distribution is covered by the same copyright terms
14  * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15  *
16  * Copyright remains Eric Young's, and as such any Copyright notices in
17  * the code are not to be removed.
18  * If this package is used in a product, Eric Young should be given attribution
19  * as the author of the parts of the library used.
20  * This can be in the form of a textual message at program startup or
21  * in documentation (online or textual) provided with the package.
22  *
23  * Redistribution and use in source and binary forms, with or without
24  * modification, are permitted provided that the following conditions
25  * are met:
26  * 1. Redistributions of source code must retain the copyright
27  * notice, this list of conditions and the following disclaimer.
28  * 2. Redistributions in binary form must reproduce the above copyright
29  * notice, this list of conditions and the following disclaimer in the
30  * documentation and/or other materials provided with the distribution.
31  * 3. All advertising materials mentioning features or use of this software
32  * must display the following acknowledgement:
33  * "This product includes cryptographic software written by
34  * Eric Young (eay@cryptsoft.com)"
35  * The word 'cryptographic' can be left out if the routines from the library
36  * being used are not cryptographic related :-).
37  * 4. If you include any Windows specific code (or a derivative thereof) from
38  * the apps directory (application code) you must include an acknowledgement:
39  * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40  *
41  * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51  * SUCH DAMAGE.
52  *
53  * The licence and distribution terms for any publicly available version or
54  * derivative of this code cannot be changed. i.e. this code cannot simply be
55  * copied and put under another distribution licence
56  * [including the GNU Public Licence.]
57  */
58 
59 #ifndef HEADER_SHA_H
60 # define HEADER_SHA_H
61 
62 # include <openssl/e_os2.h>
63 # include <stddef.h>
64 
65 #ifdef __cplusplus
66 extern "C" {
67 #endif
68 
69 # if defined(OPENSSL_NO_SHA) || (defined(OPENSSL_NO_SHA0) && defined(OPENSSL_NO_SHA1))
70 # error SHA is disabled.
71 # endif
72 
73 # if defined(OPENSSL_FIPS)
74 # define FIPS_SHA_SIZE_T size_t
75 # endif
76 
77 /*-
78  * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
79  * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then !
80  * ! SHA_LONG_LOG2 has to be defined along. !
81  * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
82  */
83 
84 # if defined(__LP32__)
85 # define SHA_LONG unsigned long
86 # elif defined(OPENSSL_SYS_CRAY) || defined(__ILP64__)
87 # define SHA_LONG unsigned long
88 # define SHA_LONG_LOG2 3
89 # else
90 # define SHA_LONG unsigned int
91 # endif
92 
93 # define SHA_LBLOCK 16
94 # define SHA_CBLOCK (SHA_LBLOCK*4)/* SHA treats input data as a
95  * contiguous array of 32 bit wide
96  * big-endian values. */
97 # define SHA_LAST_BLOCK (SHA_CBLOCK-8)
98 # define SHA_DIGEST_LENGTH 20
99 
100 typedef struct SHAstate_st {
104  unsigned int num;
105 } SHA_CTX;
106 
107 # ifndef OPENSSL_NO_SHA0
108 # ifdef OPENSSL_FIPS
109 int private_SHA_Init(SHA_CTX *c);
110 # endif
112 int SHA_Update(SHA_CTX *c, const void *data, size_t len);
113 int SHA_Final(unsigned char *md, SHA_CTX *c);
114 unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md);
115 void SHA_Transform(SHA_CTX *c, const unsigned char *data);
116 # endif
117 # ifndef OPENSSL_NO_SHA1
118 # ifdef OPENSSL_FIPS
119 int private_SHA1_Init(SHA_CTX *c);
120 # endif
122 int SHA1_Update(SHA_CTX *c, const void *data, size_t len);
123 int SHA1_Final(unsigned char *md, SHA_CTX *c);
124 unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md);
125 void SHA1_Transform(SHA_CTX *c, const unsigned char *data);
126 # endif
127 
128 # define SHA256_CBLOCK (SHA_LBLOCK*4)/* SHA-256 treats input data as a
129  * contiguous array of 32 bit wide
130  * big-endian values. */
131 # define SHA224_DIGEST_LENGTH 28
132 # define SHA256_DIGEST_LENGTH 32
133 
134 typedef struct SHA256state_st {
136  SHA_LONG Nl, Nh;
138  unsigned int num, md_len;
139 } SHA256_CTX;
140 
141 # ifndef OPENSSL_NO_SHA256
142 # ifdef OPENSSL_FIPS
143 int private_SHA224_Init(SHA256_CTX *c);
144 int private_SHA256_Init(SHA256_CTX *c);
145 # endif
147 int SHA224_Update(SHA256_CTX *c, const void *data, size_t len);
148 int SHA224_Final(unsigned char *md, SHA256_CTX *c);
149 unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md);
151 int SHA256_Update(SHA256_CTX *c, const void *data, size_t len);
152 int SHA256_Final(unsigned char *md, SHA256_CTX *c);
153 unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md);
154 void SHA256_Transform(SHA256_CTX *c, const unsigned char *data);
155 # endif
156 
157 # define SHA384_DIGEST_LENGTH 48
158 # define SHA512_DIGEST_LENGTH 64
159 
160 # ifndef OPENSSL_NO_SHA512
161 /*
162  * Unlike 32-bit digest algorithms, SHA-512 *relies* on SHA_LONG64
163  * being exactly 64-bit wide. See Implementation Notes in sha512.c
164  * for further details.
165  */
166 /*
167  * SHA-512 treats input data as a
168  * contiguous array of 64 bit
169  * wide big-endian values.
170  */
171 # define SHA512_CBLOCK (SHA_LBLOCK*8)
172 # if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__)
173 # define SHA_LONG64 unsigned __int64
174 # define U64(C) C##UI64
175 # elif defined(__arch64__)
176 # define SHA_LONG64 unsigned long
177 # define U64(C) C##UL
178 # else
179 # define SHA_LONG64 unsigned long long
180 # define U64(C) C##ULL
181 # endif
182 
183 typedef struct SHA512state_st {
186  union {
188  unsigned char p[SHA512_CBLOCK];
189  } u;
190  unsigned int num, md_len;
191 } SHA512_CTX;
192 # endif
193 
194 # ifndef OPENSSL_NO_SHA512
195 # ifdef OPENSSL_FIPS
196 int private_SHA384_Init(SHA512_CTX *c);
197 int private_SHA512_Init(SHA512_CTX *c);
198 # endif
200 int SHA384_Update(SHA512_CTX *c, const void *data, size_t len);
201 int SHA384_Final(unsigned char *md, SHA512_CTX *c);
202 unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md);
204 int SHA512_Update(SHA512_CTX *c, const void *data, size_t len);
205 int SHA512_Final(unsigned char *md, SHA512_CTX *c);
206 unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md);
207 void SHA512_Transform(SHA512_CTX *c, const unsigned char *data);
208 # endif
209 
210 #ifdef __cplusplus
211 }
212 #endif
213 
214 #endif
unsigned char * SHA512(const unsigned char *d, size_t n, unsigned char *md)
int SHA256_Final(unsigned char *md, SHA256_CTX *c)
int SHA512_Update(SHA512_CTX *c, const void *data, size_t len)
#define SHA_LONG
Definition: sha.h:90
#define SHA_LONG64
Definition: sha.h:175
struct SHA512state_st SHA512_CTX
#define SHA512_CBLOCK
Definition: sha.h:167
struct SHAstate_st SHA_CTX
int SHA384_Final(unsigned char *md, SHA512_CTX *c)
int SHA512_Init(SHA512_CTX *c)
void SHA512_Transform(SHA512_CTX *c, const unsigned char *data)
int SHA512_Final(unsigned char *md, SHA512_CTX *c)
void SHA256_Transform(SHA256_CTX *c, const unsigned char *data)
int SHA_Init(SHA_CTX *c)
void SHA1_Transform(SHA_CTX *c, const unsigned char *data)
unsigned char * SHA384(const unsigned char *d, size_t n, unsigned char *md)
#define SHA_LBLOCK
Definition: sha.h:93
int SHA224_Final(unsigned char *md, SHA256_CTX *c)
int SHA256_Update(SHA256_CTX *c, const void *data, size_t len)
int SHA_Final(unsigned char *md, SHA_CTX *c)
int SHA384_Update(SHA512_CTX *c, const void *data, size_t len)
int SHA1_Update(SHA_CTX *c, const void *data, size_t len)
int SHA224_Init(SHA256_CTX *c)
unsigned char * SHA256(const unsigned char *d, size_t n, unsigned char *md)
int SHA384_Init(SHA512_CTX *c)
unsigned char * SHA(const unsigned char *d, size_t n, unsigned char *md)
unsigned char * SHA224(const unsigned char *d, size_t n, unsigned char *md)
unsigned char * SHA1(const unsigned char *d, size_t n, unsigned char *md)
struct SHA256state_st SHA256_CTX
int SHA256_Init(SHA256_CTX *c)
int SHA1_Init(SHA_CTX *c)
void SHA_Transform(SHA_CTX *c, const unsigned char *data)
int SHA224_Update(SHA256_CTX *c, const void *data, size_t len)
int SHA1_Final(unsigned char *md, SHA_CTX *c)
int SHA_Update(SHA_CTX *c, const void *data, size_t len)
SHA_LONG Nh
Definition: sha.h:132
SHA_LONG data[SHA_LBLOCK]
Definition: sha.h:133
unsigned int num
Definition: sha.h:134
unsigned int md_len
Definition: sha.h:134
SHA_LONG h[8]
Definition: sha.h:131
SHA_LONG Nl
Definition: sha.h:132
union SHA512state_st::@362 u
SHA_LONG64 h[8]
Definition: sha.h:180
SHA_LONG64 Nl
Definition: sha.h:181
unsigned int md_len
Definition: sha.h:186
unsigned char p[SHA512_CBLOCK]
Definition: sha.h:184
SHA_LONG64 Nh
Definition: sha.h:181
unsigned int num
Definition: sha.h:186
SHA_LONG64 d[SHA_LBLOCK]
Definition: sha.h:183
SHA_LONG h3
Definition: sha.h:99
SHA_LONG h2
Definition: sha.h:99
unsigned int num
Definition: sha.h:102
SHA_LONG h1
Definition: sha.h:99
SHA_LONG h0
Definition: sha.h:99
SHA_LONG h4
Definition: sha.h:99
SHA_LONG Nl
Definition: sha.h:100
SHA_LONG data[SHA_LBLOCK]
Definition: sha.h:101
SHA_LONG Nh
Definition: sha.h:100