Home | History | Annotate | Download | only in openbsd-compat
      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 (at) 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