32
32
* $Id: sha2.h,v 1.1 2001/11/08 00:02:01 adg Exp adg $
35
#ifndef __CLEMENTINE_SHA2_H__
36
#define __CLEMENTINE_SHA2_H__
44
39
* Import u_intXX_t size_t type definitions from system headers. You
48
43
#include <sys/types.h>
50
#ifdef SHA2_USE_INTTYPES_H
54
#endif /* SHA2_USE_INTTYPES_H */
45
namespace clementine_sha2 {
57
47
/*** SHA-256/384/512 Various Length Definitions ***********************/
58
#define SHA256_BLOCK_LENGTH 64
59
#define SHA256_DIGEST_LENGTH 32
60
#define SHA256_DIGEST_STRING_LENGTH (SHA256_DIGEST_LENGTH * 2 + 1)
61
#define SHA384_BLOCK_LENGTH 128
62
#define SHA384_DIGEST_LENGTH 48
63
#define SHA384_DIGEST_STRING_LENGTH (SHA384_DIGEST_LENGTH * 2 + 1)
64
#define SHA512_BLOCK_LENGTH 128
65
#define SHA512_DIGEST_LENGTH 64
66
#define SHA512_DIGEST_STRING_LENGTH (SHA512_DIGEST_LENGTH * 2 + 1)
48
static const int SHA256_BLOCK_LENGTH = 64;
49
static const int SHA256_DIGEST_LENGTH = 32;
50
static const int SHA256_DIGEST_STRING_LENGTH = (SHA256_DIGEST_LENGTH * 2 + 1);
51
static const int SHA384_BLOCK_LENGTH = 128;
52
static const int SHA384_DIGEST_LENGTH = 48;
53
static const int SHA384_DIGEST_STRING_LENGTH = (SHA384_DIGEST_LENGTH * 2 + 1);
54
static const int SHA512_BLOCK_LENGTH = 128;
55
static const int SHA512_DIGEST_LENGTH = 64;
56
static const int SHA512_DIGEST_STRING_LENGTH = (SHA512_DIGEST_LENGTH * 2 + 1);
69
59
/*** SHA-256/384/512 Context Structures *******************************/
76
66
typedef unsigned int u_int32_t; /* 4-bytes (32-bits) */
77
67
typedef unsigned long long u_int64_t; /* 8-bytes (64-bits) */
80
* Most BSD systems already define u_intXX_t types, as does Linux.
81
* Some systems, however, like Compaq's Tru64 Unix instead can use
82
* uintXX_t types defined by very recent ANSI C standards and included
85
* #include <inttypes.h>
87
* If you choose to use <inttypes.h> then please define:
89
* #define SHA2_USE_INTTYPES_H
91
* Or on the command line during compile:
93
* cc -DSHA2_USE_INTTYPES_H ...
95
#ifdef SHA2_USE_INTTYPES_H
97
typedef struct _SHA256_CTX {
100
uint8_t buffer[SHA256_BLOCK_LENGTH];
102
typedef struct _SHA512_CTX {
104
uint64_t bitcount[2];
105
uint8_t buffer[SHA512_BLOCK_LENGTH];
108
#else /* SHA2_USE_INTTYPES_H */
110
70
typedef struct _SHA256_CTX {
111
71
u_int32_t state[8];
118
78
u_int8_t buffer[SHA512_BLOCK_LENGTH];
121
#endif /* SHA2_USE_INTTYPES_H */
123
81
typedef SHA512_CTX SHA384_CTX;
126
/*** SHA-256/384/512 Function Prototypes ******************************/
128
#ifdef SHA2_USE_INTTYPES_H
130
void SHA256_Init(SHA256_CTX *);
131
void SHA256_Update(SHA256_CTX*, const uint8_t*, size_t);
132
void SHA256_Final(uint8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
133
char* SHA256_End(SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]);
134
char* SHA256_Data(const uint8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]);
136
void SHA384_Init(SHA384_CTX*);
137
void SHA384_Update(SHA384_CTX*, const uint8_t*, size_t);
138
void SHA384_Final(uint8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*);
139
char* SHA384_End(SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]);
140
char* SHA384_Data(const uint8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]);
142
void SHA512_Init(SHA512_CTX*);
143
void SHA512_Update(SHA512_CTX*, const uint8_t*, size_t);
144
void SHA512_Final(uint8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*);
145
char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
146
char* SHA512_Data(const uint8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
148
#else /* SHA2_USE_INTTYPES_H */
150
84
void SHA256_Init(SHA256_CTX *);
151
85
void SHA256_Update(SHA256_CTX*, const u_int8_t*, size_t);
152
86
void SHA256_Final(u_int8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*);
165
99
char* SHA512_End(SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]);
166
100
char* SHA512_Data(const u_int8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]);
168
#endif /* SHA2_USE_INTTYPES_H */
173
void SHA256_Update();
179
void SHA384_Update();
185
void SHA512_Update();
194
#endif /* __cplusplus */
196
#endif /* __SHA2_H__ */
102
} // namespace clementine_sha2
104
#endif /* __CLEMENTINE_SHA2_H__ */