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