F´ Flight Software - C/C++ Documentation NASA-v1.6.0
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
66extern "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
100typedef struct SHAstate_st {
104 unsigned int num;
105} SHA_CTX;
106
107# ifndef OPENSSL_NO_SHA0
108# ifdef OPENSSL_FIPS
109int private_SHA_Init(SHA_CTX *c);
110# endif
112int SHA_Update(SHA_CTX *c, const void *data, size_t len);
113int SHA_Final(unsigned char *md, SHA_CTX *c);
114unsigned char *SHA(const unsigned char *d, size_t n, unsigned char *md);
115void SHA_Transform(SHA_CTX *c, const unsigned char *data);
116# endif
117# ifndef OPENSSL_NO_SHA1
118# ifdef OPENSSL_FIPS
119int private_SHA1_Init(SHA_CTX *c);
120# endif
122int SHA1_Update(SHA_CTX *c, const void *data, size_t len);
123int SHA1_Final(unsigned char *md, SHA_CTX *c);
124unsigned char *SHA1(const unsigned char *d, size_t n, unsigned char *md);
125void SHA1_Transform(SHA_CTX *c, const unsigned char *data);
126# endif
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
134typedef 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
143int private_SHA224_Init(SHA256_CTX *c);
144int private_SHA256_Init(SHA256_CTX *c);
145# endif
147int SHA224_Update(SHA256_CTX *c, const void *data, size_t len);
148int SHA224_Final(unsigned char *md, SHA256_CTX *c);
149unsigned char *SHA224(const unsigned char *d, size_t n, unsigned char *md);
151int SHA256_Update(SHA256_CTX *c, const void *data, size_t len);
152int SHA256_Final(unsigned char *md, SHA256_CTX *c);
153unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md);
154void 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
183typedef 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
196int private_SHA384_Init(SHA512_CTX *c);
197int private_SHA512_Init(SHA512_CTX *c);
198# endif
200int SHA384_Update(SHA512_CTX *c, const void *data, size_t len);
201int SHA384_Final(unsigned char *md, SHA512_CTX *c);
202unsigned char *SHA384(const unsigned char *d, size_t n, unsigned char *md);
204int SHA512_Update(SHA512_CTX *c, const void *data, size_t len);
205int SHA512_Final(unsigned char *md, SHA512_CTX *c);
206unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md);
207void SHA512_Transform(SHA512_CTX *c, const unsigned char *data);
208# endif
209
210#ifdef __cplusplus
211}
212#endif
213
214#endif
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)
unsigned char * SHA256(const unsigned char *d, size_t n, unsigned char *md)
int SHA_Init(SHA_CTX *c)
void SHA1_Transform(SHA_CTX *c, const unsigned char *data)
unsigned char * SHA512(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)
unsigned char * SHA1(const unsigned char *d, size_t n, unsigned char *md)
unsigned char * SHA384(const unsigned char *d, size_t n, unsigned char *md)
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)
int SHA384_Init(SHA512_CTX *c)
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)
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)
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::@33 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