42#define LC_SHA512_SIZE_BLOCK 128
43#define LC_SHA512_SIZE_DIGEST 64
44#define LC_SHA512_STATE_WORDS 8
46struct lc_sha512_state {
47 uint64_t H[LC_SHA512_STATE_WORDS];
49 uint8_t partial[LC_SHA512_SIZE_BLOCK];
52#define LC_SHA512_STATE_SIZE (sizeof(struct lc_sha512_state))
53#define LC_SHA512_CTX_SIZE (sizeof(struct lc_hash) + LC_SHA512_STATE_SIZE)
55#define LC_SHA512_CTX(name) \
56 LC_HASH_SET_CTX(name, lc_sha512); \
59#define LC_SHA384_SIZE_BLOCK 128
60#define LC_SHA384_SIZE_DIGEST 48
62#define LC_SHA384_STATE_SIZE LC_SHA512_STATE_SIZE
63#define LC_SHA384_CTX_SIZE LC_SHA512_CTX_SIZE
65#define LC_SHA384_CTX(name) \
66 LC_HASH_SET_CTX(name, lc_sha384); \
75#define LC_SHA384_CTX_ON_STACK(name) \
76 _Pragma("GCC diagnostic push") \
77 _Pragma("GCC diagnostic ignored \"-Wvla\"") _Pragma( \
78 "GCC diagnostic ignored \"-Wdeclaration-after-statement\"") \
79 LC_ALIGNED_BUFFER(name##_ctx_buf, LC_SHA384_CTX_SIZE, \
80 LC_HASH_COMMON_ALIGNMENT); \
81 struct lc_hash_ctx *name = (struct lc_hash_ctx *)name##_ctx_buf; \
82 LC_SHA384_CTX(name); \
83 _Pragma("GCC diagnostic pop")
90#define LC_SHA512_CTX_ON_STACK(name) \
91 _Pragma("GCC diagnostic push") \
92 _Pragma("GCC diagnostic ignored \"-Wvla\"") _Pragma( \
93 "GCC diagnostic ignored \"-Wdeclaration-after-statement\"") \
94 LC_ALIGNED_BUFFER(name##_ctx_buf, LC_SHA512_CTX_SIZE, \
95 LC_HASH_COMMON_ALIGNMENT); \
96 struct lc_hash_ctx *name = (struct lc_hash_ctx *)name##_ctx_buf; \
97 LC_SHA512_CTX(name); \
98 _Pragma("GCC diagnostic pop")
int lc_hash(const struct lc_hash *hash, const uint8_t *in, size_t inlen, uint8_t *digest)
Calculate message digest - one-shot.
const struct lc_hash * lc_sha512
SHA2-512 algorithm reference.
const struct lc_hash * lc_sha384
SHA2-384 algorithm reference.