]>
git.ipfire.org Git - thirdparty/bird.git/blob - lib/sha512.h
2 * BIRD Library -- SHA-512 and SHA-384 Hash Functions,
3 * HMAC-SHA-512 and HMAC-SHA-384 Functions
5 * (c) 2015 CZ.NIC z.s.p.o.
7 * Based on the code from libgcrypt-1.6.0, which is
8 * (c) 2003, 2006, 2008, 2009 Free Software Foundation, Inc.
10 * Can be freely distributed and used under the terms of the GNU GPL.
13 #ifndef _BIRD_SHA512_H_
14 #define _BIRD_SHA512_H_
16 #include "nest/bird.h"
19 #define SHA384_SIZE 48
20 #define SHA384_HEX_SIZE 97
21 #define SHA384_BLOCK_SIZE 128
23 #define SHA512_SIZE 64
24 #define SHA512_HEX_SIZE 129
25 #define SHA512_BLOCK_SIZE 128
28 struct sha512_context
{
29 u64 h0
, h1
, h2
, h3
, h4
, h5
, h6
, h7
;
30 byte buf
[SHA512_BLOCK_SIZE
];
35 #define sha384_context sha512_context
38 void sha512_init(struct sha512_context
*ctx
);
39 void sha384_init(struct sha384_context
*ctx
);
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
); }
45 byte
*sha512_final(struct sha512_context
*ctx
);
46 static inline byte
*sha384_final(struct sha384_context
*ctx
)
47 { return sha512_final(ctx
); }
51 * HMAC-SHA512, HMAC-SHA384
54 struct sha512_hmac_context
56 struct sha512_context ictx
;
57 struct sha512_context octx
;
60 #define sha384_hmac_context sha512_hmac_context
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
);
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
);
69 byte
*sha512_hmac_final(struct sha512_hmac_context
*ctx
);
70 byte
*sha384_hmac_final(struct sha384_hmac_context
*ctx
);
73 #endif /* _BIRD_SHA512_H_ */