1 #ifndef	sha1_h
2 #define	sha1_h
3 
4 /*
5 ** Copyright 2001-2008 Double Precision, Inc.
6 ** See COPYING for distribution information.
7 */
8 
9 
10 #if	HAVE_CONFIG_H
11 #include	"sha1/config.h"
12 #endif
13 
14 #if	HAVE_SYS_TYPES_H
15 #include	<sys/types.h>
16 #endif
17 #if	HAVE_STDINT_H
18 #include	<stdint.h>
19 #endif
20 
21 #define	SHA1_DIGEST_SIZE	20
22 #define	SHA1_BLOCK_SIZE		64
23 
24 #define SHA256_DIGEST_SIZE	32
25 #define SHA256_BLOCK_SIZE	64
26 
27 #define SHA512_DIGEST_SIZE	64
28 #define SHA512_BLOCK_SIZE	128
29 
30 typedef SHA1_WORD SHA256_WORD;
31 
32 #ifdef	__cplusplus
33 extern "C" {
34 #endif
35 
36 typedef	unsigned char SHA1_DIGEST[20];
37 typedef unsigned char SHA256_DIGEST[32];
38 typedef unsigned char SHA512_DIGEST[64];
39 
40 #ifdef	SHA1_INTERNAL
41 
42 struct SHA1_CONTEXT {
43 
44 	SHA1_WORD	H[5];
45 
46 	unsigned char blk[SHA1_BLOCK_SIZE];
47 	unsigned blk_ptr;
48 	} ;
49 
50 struct SHA256_CONTEXT {
51 
52 	SHA256_WORD	H[8];
53 
54 	unsigned char blk[SHA256_BLOCK_SIZE];
55 	unsigned blk_ptr;
56 	} ;
57 
58 struct SHA512_CONTEXT {
59 
60 	SHA512_WORD	H[8];
61 
62 	unsigned char blk[SHA512_BLOCK_SIZE];
63 	unsigned blk_ptr;
64 	} ;
65 
66 void sha1_context_init(struct SHA1_CONTEXT *);
67 void sha1_context_hash(struct SHA1_CONTEXT *,
68 		       const unsigned char[SHA1_BLOCK_SIZE]);
69 void sha1_context_hashstream(struct SHA1_CONTEXT *, const void *, unsigned);
70 void sha1_context_endstream(struct SHA1_CONTEXT *, unsigned long);
71 void sha1_context_digest(struct SHA1_CONTEXT *, SHA1_DIGEST);
72 void sha1_context_restore(struct SHA1_CONTEXT *, const SHA1_DIGEST);
73 
74 void sha256_context_init(struct SHA256_CONTEXT *);
75 void sha256_context_hash(struct SHA256_CONTEXT *,
76 			 const unsigned char[SHA256_BLOCK_SIZE]);
77 void sha256_context_hashstream(struct SHA256_CONTEXT *,
78 			       const void *, unsigned);
79 void sha256_context_endstream(struct SHA256_CONTEXT *, unsigned long);
80 void sha256_context_digest(struct SHA256_CONTEXT *, SHA256_DIGEST);
81 void sha256_context_restore(struct SHA256_CONTEXT *, const SHA256_DIGEST);
82 
83 void sha512_context_init(struct SHA512_CONTEXT *);
84 void sha512_context_hash(struct SHA512_CONTEXT *,
85 			 const unsigned char[SHA512_BLOCK_SIZE]);
86 void sha512_context_hashstream(struct SHA512_CONTEXT *,
87 			       const void *, unsigned);
88 void sha512_context_endstream(struct SHA512_CONTEXT *, SHA512_WORD);
89 void sha512_context_digest(struct SHA512_CONTEXT *, SHA512_DIGEST);
90 void sha512_context_restore(struct SHA512_CONTEXT *, const SHA512_DIGEST);
91 
92 #endif
93 
94 void sha1_digest(const void *, unsigned, SHA1_DIGEST);
95 const char *sha1_hash(const char *);
96 
97 typedef unsigned char SSHA_RAND[4];
98 
99 const char *ssha_hash(const char *, SSHA_RAND);
100 
101 void sha256_digest(const void *, unsigned, SHA256_DIGEST);
102 
103 const char *sha256_hash(const char *);
104 
105 void sha512_digest(const void *, unsigned, SHA512_DIGEST);
106 
107 const char *sha512_hash(const char *);
108 
109 #ifdef	__cplusplus
110  } ;
111 #endif
112 
113 #endif
114