1 /* $OpenBSD: sha1.h,v 1.24 2012/12/05 23:19:57 deraadt Exp $ */ 2 3 /* 4 * SHA-1 in C 5 * By Steve Reid <steve@edmweb.com> 6 * 100% Public Domain 7 */ 8 9 #ifndef _SHA1_H 10 #define _SHA1_H 11 12 #ifndef WITH_OPENSSL 13 14 #define SHA1_BLOCK_LENGTH 64 15 #define SHA1_DIGEST_LENGTH 20 16 #define SHA1_DIGEST_STRING_LENGTH (SHA1_DIGEST_LENGTH * 2 + 1) 17 18 typedef struct { 19 u_int32_t state[5]; 20 u_int64_t count; 21 u_int8_t buffer[SHA1_BLOCK_LENGTH]; 22 } SHA1_CTX; 23 24 void SHA1Init(SHA1_CTX *); 25 void SHA1Pad(SHA1_CTX *); 26 void SHA1Transform(u_int32_t [5], const u_int8_t [SHA1_BLOCK_LENGTH]) 27 __attribute__((__bounded__(__minbytes__,1,5))) 28 __attribute__((__bounded__(__minbytes__,2,SHA1_BLOCK_LENGTH))); 29 void SHA1Update(SHA1_CTX *, const u_int8_t *, size_t) 30 __attribute__((__bounded__(__string__,2,3))); 31 void SHA1Final(u_int8_t [SHA1_DIGEST_LENGTH], SHA1_CTX *) 32 __attribute__((__bounded__(__minbytes__,1,SHA1_DIGEST_LENGTH))); 33 char *SHA1End(SHA1_CTX *, char *) 34 __attribute__((__bounded__(__minbytes__,2,SHA1_DIGEST_STRING_LENGTH))); 35 char *SHA1File(const char *, char *) 36 __attribute__((__bounded__(__minbytes__,2,SHA1_DIGEST_STRING_LENGTH))); 37 char *SHA1FileChunk(const char *, char *, off_t, off_t) 38 __attribute__((__bounded__(__minbytes__,2,SHA1_DIGEST_STRING_LENGTH))); 39 char *SHA1Data(const u_int8_t *, size_t, char *) 40 __attribute__((__bounded__(__string__,1,2))) 41 __attribute__((__bounded__(__minbytes__,3,SHA1_DIGEST_STRING_LENGTH))); 42 43 #define HTONDIGEST(x) do { \ 44 x[0] = htonl(x[0]); \ 45 x[1] = htonl(x[1]); \ 46 x[2] = htonl(x[2]); \ 47 x[3] = htonl(x[3]); \ 48 x[4] = htonl(x[4]); } while (0) 49 50 #define NTOHDIGEST(x) do { \ 51 x[0] = ntohl(x[0]); \ 52 x[1] = ntohl(x[1]); \ 53 x[2] = ntohl(x[2]); \ 54 x[3] = ntohl(x[3]); \ 55 x[4] = ntohl(x[4]); } while (0) 56 57 #endif /* !WITH_OPENSSL */ 58 #endif /* _SHA1_H */ 59