]> git.ipfire.org Git - thirdparty/bird.git/blob - lib/sha512.h
Minor changes to SHA hash functions
[thirdparty/bird.git] / lib / sha512.h
1 /*
2 * BIRD Library -- SHA-512 and SHA-384 Hash Functions,
3 * HMAC-SHA-512 and HMAC-SHA-384 Functions
4 *
5 * (c) 2015 CZ.NIC z.s.p.o.
6 *
7 * Based on the code from libgcrypt-1.6.0, which is
8 * (c) 2003, 2006, 2008, 2009 Free Software Foundation, Inc.
9 *
10 * Can be freely distributed and used under the terms of the GNU GPL.
11 */
12
13 #ifndef _BIRD_SHA512_H_
14 #define _BIRD_SHA512_H_
15
16 #include "nest/bird.h"
17
18
19 #define SHA384_SIZE 48
20 #define SHA384_HEX_SIZE 97
21 #define SHA384_BLOCK_SIZE 128
22
23 #define SHA512_SIZE 64
24 #define SHA512_HEX_SIZE 129
25 #define SHA512_BLOCK_SIZE 128
26
27
28 struct sha512_context {
29 u64 h0, h1, h2, h3, h4, h5, h6, h7;
30 byte buf[SHA512_BLOCK_SIZE];
31 uint nblocks;
32 uint count;
33 };
34
35 #define sha384_context sha512_context
36
37
38 void sha512_init(struct sha512_context *ctx);
39 void sha384_init(struct sha384_context *ctx);
40
41 void sha512_update(struct sha512_context *ctx, const byte *buf, size_t len);
42 static inline void sha384_update(struct sha384_context *ctx, const byte *buf, size_t len)
43 { sha512_update(ctx, buf, len); }
44
45 byte *sha512_final(struct sha512_context *ctx);
46 static inline byte *sha384_final(struct sha384_context *ctx)
47 { return sha512_final(ctx); }
48
49
50 /*
51 * HMAC-SHA512, HMAC-SHA384
52 */
53
54 struct sha512_hmac_context
55 {
56 struct sha512_context ictx;
57 struct sha512_context octx;
58 };
59
60 #define sha384_hmac_context sha512_hmac_context
61
62
63 void sha512_hmac_init(struct sha512_hmac_context *ctx, const byte *key, size_t keylen);
64 void sha384_hmac_init(struct sha384_hmac_context *ctx, const byte *key, size_t keylen);
65
66 void sha512_hmac_update(struct sha512_hmac_context *ctx, const byte *buf, size_t buflen);
67 void sha384_hmac_update(struct sha384_hmac_context *ctx, const byte *buf, size_t buflen);
68
69 byte *sha512_hmac_final(struct sha512_hmac_context *ctx);
70 byte *sha384_hmac_final(struct sha384_hmac_context *ctx);
71
72
73 #endif /* _BIRD_SHA512_H_ */