2 * sha.h: header file for SHA-1/224/256/384/512 routines
4 * Ref: NIST FIPS PUB 180-2 Secure Hash Standard
6 * Copyright (C) 2003-2011 Mark Shelor, All Rights Reserved
9 * Wed Mar 9 05:26:36 MST 2011
13 #ifndef _INCLUDE_SHA_H_
14 #define _INCLUDE_SHA_H_
18 #define SHA32_MAX 4294967295U
20 #define SHA32_SHR(x, n) ((x) >> (n))
21 #define SHA32_SHL(x, n) ((x) << (n))
23 #define SHA64_SHR(x, n) ((x) >> (n))
24 #define SHA64_SHL(x, n) ((x) << (n))
29 #define SHA_LO32(x) (x)
31 #if USHRT_MAX == SHA32_MAX
32 #define SHA32 unsigned short
33 #define SHA32_CONST(c) c ## U
34 #elif UINT_MAX == SHA32_MAX
35 #define SHA32 unsigned int
36 #define SHA32_CONST(c) c ## U
37 #elif ULONG_MAX == SHA32_MAX
38 #define SHA32 unsigned long
39 #define SHA32_CONST(c) c ## UL
43 #define SHA_LO32(x) ((x) & SHA32_MAX)
45 #define SHA32_SHR(x, n) (SHA_LO32(x) >> (n))
46 #define SHA32 unsigned long
47 #define SHA32_CONST(c) c ## UL
50 #if defined(ULONG_LONG_MAX) || defined(ULLONG_MAX) || defined(HAS_LONG_LONG)
51 #define SHA_ULL_EXISTS
54 #if (((ULONG_MAX >> 16) >> 16) >> 16) >> 15 == 1UL
55 #define SHA64 unsigned long
56 #define SHA64_CONST(c) c ## UL
57 #elif defined(SHA_ULL_EXISTS) && defined(LONGLONGSIZE) && LONGLONGSIZE == 8
58 #define SHA64 unsigned long long
59 #define SHA64_CONST(c) c ## ULL
60 #elif defined(SHA_ULL_EXISTS)
63 #define SHA64_MAX 18446744073709551615ULL
64 #define SHA64_SHR(x, n) (((x) & SHA64_MAX) >> (n))
65 #define SHA64 unsigned long long
66 #define SHA64_CONST(c) c ## ULL
68 /* The following cases detect compilers that
69 * support 64-bit types in a non-standard way */
71 #elif defined(_MSC_VER) /* Microsoft C */
72 #define SHA64 unsigned __int64
73 #define SHA64_CONST(c) (SHA64) c
76 #if defined(SHA64) && !defined(NO_SHA_384_512)
80 #if defined(BYTEORDER) && (BYTEORDER & 0xffff) == 0x4321
81 #if defined(SHA32_ALIGNED)
82 #define SHA32_SCHED(W, b) memcpy(W, b, 64)
84 #if defined(SHA64) && defined(SHA64_ALIGNED)
85 #define SHA64_SCHED(W, b) memcpy(W, b, 128)
89 #if !defined(SHA32_SCHED)
90 #define SHA32_SCHED(W, b) { int t; SHA32 *q = W; \
91 for (t = 0; t < 16; t++, b += 4) *q++ = \
92 (SHA32) b[0] << 24 | (SHA32) b[1] << 16 | \
93 (SHA32) b[2] << 8 | (SHA32) b[3]; }
96 #if defined(SHA64) && !defined(SHA64_SCHED)
97 #define SHA64_SCHED(W, b) { int t; SHA64 *q = W; \
98 for (t = 0; t < 16; t++, b += 8) *q++ = \
99 (SHA64) b[0] << 56 | (SHA64) b[1] << 48 | \
100 (SHA64) b[2] << 40 | (SHA64) b[3] << 32 | \
101 (SHA64) b[4] << 24 | (SHA64) b[5] << 16 | \
102 (SHA64) b[6] << 8 | (SHA64) b[7]; }
106 * SHA_STO_CLASS: default to auto storage class for message schedule
107 * arrays inside transform routines. Note that redefining this to
108 * static might improve performance on some platforms (e.g. Intel).
111 #if !defined(SHA_STO_CLASS)
112 #define SHA_STO_CLASS auto
115 /* Override use of static arrays if compiling for thread-safety */
116 #ifdef SHA_THREAD_SAFE
118 #define SHA_STO_CLASS auto
121 /* Configure memory management and I/O for Perl or standalone C */
122 #ifdef SHA_PERL_MODULE
124 #define SHA_newz Newz
125 #define SHA_free Safefree
126 #define SHA_FILE PerlIO
127 #define SHA_stdin() PerlIO_stdin()
128 #define SHA_stdout() PerlIO_stdout()
129 #define SHA_open PerlIO_open
130 #define SHA_close PerlIO_close
131 #define SHA_fprintf PerlIO_printf
132 #define SHA_feof PerlIO_eof
133 #define SHA_getc PerlIO_getc
135 #define SHA_new(id, p, n, t) p = (t *) malloc(sizeof(t))
136 #define SHA_newz(id, p, n, t) p = (t *) calloc(n, sizeof(t))
137 #define SHA_free free
138 #define SHA_FILE FILE
139 #define SHA_stdin() stdin
140 #define SHA_stdout() stdout
141 #define SHA_open fopen
142 #define SHA_close fclose
143 #define SHA_fprintf fprintf
144 #define SHA_feof feof
145 #define SHA_getc fgetc
153 #define SHA512224 512224
154 #define SHA512256 512256
156 #define SHA1_BLOCK_BITS 512
157 #define SHA224_BLOCK_BITS SHA1_BLOCK_BITS
158 #define SHA256_BLOCK_BITS SHA1_BLOCK_BITS
159 #define SHA384_BLOCK_BITS 1024
160 #define SHA512_BLOCK_BITS SHA384_BLOCK_BITS
161 #define SHA512224_BLOCK_BITS SHA512_BLOCK_BITS
162 #define SHA512256_BLOCK_BITS SHA512_BLOCK_BITS
164 #define SHA1_DIGEST_BITS 160
165 #define SHA224_DIGEST_BITS 224
166 #define SHA256_DIGEST_BITS 256
167 #define SHA384_DIGEST_BITS 384
168 #define SHA512_DIGEST_BITS 512
169 #define SHA512224_DIGEST_BITS 224
170 #define SHA512256_DIGEST_BITS 256
172 #define SHA_MAX_BLOCK_BITS SHA512_BLOCK_BITS
173 #define SHA_MAX_DIGEST_BITS SHA512_DIGEST_BITS
174 #define SHA_MAX_HEX_LEN (SHA_MAX_DIGEST_BITS / 4)
175 #define SHA_MAX_BASE64_LEN (1 + (SHA_MAX_DIGEST_BITS / 6))
178 #define SHA_H_SIZE sizeof(SHA64) * 8
180 #define SHA_H_SIZE sizeof(SHA32) * 8
185 void (*sha)(struct SHA *, unsigned char *);
186 unsigned char H[SHA_H_SIZE];
187 unsigned char block[SHA_MAX_BLOCK_BITS/8];
188 unsigned int blockcnt;
189 unsigned int blocksize;
190 SHA32 lenhh, lenhl, lenlh, lenll;
191 unsigned char digest[SHA_MAX_DIGEST_BITS/8];
193 char hex[SHA_MAX_HEX_LEN+1];
194 char base64[SHA_MAX_BASE64_LEN+1];
197 #define SHA_FMT_RAW 1
198 #define SHA_FMT_HEX 2
199 #define SHA_FMT_BASE64 3
201 #define _SHA_STATE SHA *s
202 #define _SHA_ALG int alg
203 #define _SHA_DATA unsigned char *bitstr, unsigned long bitcnt
204 #define _SHA_FNAME char *filename
206 SHA *shaopen (_SHA_ALG);
207 unsigned long shawrite (_SHA_DATA, _SHA_STATE);
208 void shafinish (_SHA_STATE);
209 void sharewind (_SHA_STATE);
210 unsigned char *shadigest (_SHA_STATE);
211 char *shahex (_SHA_STATE);
212 char *shabase64 (_SHA_STATE);
213 int shadsize (_SHA_STATE);
214 int shaalg (_SHA_STATE);
215 SHA *shadup (_SHA_STATE);
216 int shadump (_SHA_FNAME, _SHA_STATE);
217 SHA *shaload (_SHA_FNAME);
218 int shaclose (_SHA_STATE);
220 #ifndef SHA_PERL_MODULE
222 unsigned char *sha1digest (_SHA_DATA);
223 char *sha1hex (_SHA_DATA);
224 char *sha1base64 (_SHA_DATA);
225 unsigned char *sha224digest (_SHA_DATA);
226 char *sha224hex (_SHA_DATA);
227 char *sha224base64 (_SHA_DATA);
228 unsigned char *sha256digest (_SHA_DATA);
229 char *sha256hex (_SHA_DATA);
230 char *sha256base64 (_SHA_DATA);
231 unsigned char *sha384digest (_SHA_DATA);
232 char *sha384hex (_SHA_DATA);
233 char *sha384base64 (_SHA_DATA);
234 unsigned char *sha512digest (_SHA_DATA);
235 char *sha512hex (_SHA_DATA);
236 char *sha512base64 (_SHA_DATA);
237 unsigned char *sha512224digest (_SHA_DATA);
238 char *sha512224hex (_SHA_DATA);
239 char *sha512224base64 (_SHA_DATA);
240 unsigned char *sha512256digest (_SHA_DATA);
241 char *sha512256hex (_SHA_DATA);
242 char *sha512256base64 (_SHA_DATA);
246 #endif /* _INCLUDE_SHA_H_ */