Statistics
| Branch: | Revision:

iof-bird-daemon / lib / sha512.h @ f312a837

History | View | Annotate | Download (1.99 KB)

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 "lib/sha256.h"
17

    
18
#define SHA384_SIZE                 48
19
#define SHA384_HEX_SIZE                97
20
#define SHA384_BLOCK_SIZE        128
21

    
22
#define SHA512_SIZE                 64
23
#define SHA512_HEX_SIZE                129
24
#define SHA512_BLOCK_SIZE        128
25

    
26
struct sha512_state
27
{
28
  u64 h0, h1, h2, h3, h4, h5, h6, h7;
29
};
30

    
31
struct sha512_context
32
{
33
  struct sha256_context bctx;
34
  struct sha512_state state;
35
};
36
#define sha384_context sha512_context        /* aliasing 'struct sha384_context' to 'struct sha512_context' */
37

    
38

    
39
void sha512_init(struct sha512_context *ctx);
40
void sha384_init(struct sha384_context *ctx);
41

    
42
void sha512_update(struct sha512_context *ctx, const byte *in_buf, size_t in_len);
43
static inline void sha384_update(struct sha384_context *ctx, const byte *in_buf, size_t in_len)
44
{
45
  sha512_update(ctx, in_buf, in_len);
46
}
47

    
48
byte* sha512_final(struct sha512_context *ctx);
49
static inline byte* sha384_final(struct sha384_context *ctx)
50
{
51
  return sha512_final(ctx);
52
}
53

    
54
/*
55
 *        HMAC-SHA512, HMAC-SHA384
56
 */
57
struct sha512_hmac_context
58
{
59
  struct sha512_context ictx;
60
  struct sha512_context octx;
61
} ;
62
#define sha384_hmac_context sha512_hmac_context        /* aliasing 'struct sha384_hmac_context' to 'struct sha384_hmac_context' */
63

    
64
void sha512_hmac_init(struct sha512_hmac_context *ctx, const byte *key, size_t keylen);
65
void sha384_hmac_init(struct sha384_hmac_context *ctx, const byte *key, size_t keylen);
66

    
67
void sha512_hmac_update(struct sha512_hmac_context *ctx, const byte *buf, size_t buflen);
68
void sha384_hmac_update(struct sha384_hmac_context *ctx, const byte *buf, size_t buflen);
69

    
70
byte *sha512_hmac_final(struct sha512_hmac_context *ctx);
71
byte *sha384_hmac_final(struct sha384_hmac_context *ctx);
72

    
73
#endif /* _BIRD_SHA512_H_ */