8#ifndef BOTAN_GCM_GHASH_H_
9#define BOTAN_GCM_GHASH_H_
11#include <botan/sym_algo.h>
25 void set_associated_data(
const uint8_t ad[],
size_t ad_len);
28 nonce_hash(const uint8_t nonce[],
size_t nonce_len)
31 nonce_hash(y0, nonce, nonce_len);
37 void start(
const uint8_t nonce[],
size_t len);
42 void update(
const uint8_t in[],
size_t len);
47 void update_associated_data(
const uint8_t ad[],
size_t len);
52 final(mac.data(), mac.size());
56 void final(uint8_t out[],
size_t out_len);
61 void clear()
override;
65 std::string
name()
const override {
return "GHASH"; }
67 std::string provider()
const;
70 const uint8_t input[],
size_t input_len);
73 size_t ad_len,
size_t pt_len);
76#if defined(BOTAN_HAS_GHASH_CLMUL_CPU)
77 static void ghash_precompute_cpu(
const uint8_t H[16], uint64_t H_pow[4*2]);
79 static void ghash_multiply_cpu(uint8_t x[16],
80 const uint64_t H_pow[4*2],
81 const uint8_t input[],
size_t blocks);
84#if defined(BOTAN_HAS_GHASH_CLMUL_VPERM)
85 static void ghash_multiply_vperm(uint8_t x[16],
86 const uint64_t HM[256],
87 const uint8_t input[],
size_t blocks);
90 void key_schedule(
const uint8_t key[],
size_t key_len)
override;
93 const uint8_t input[],
96 static const size_t GCM_BS = 16;
105 size_t m_text_len = 0;
std::string name() const override
Key_Length_Specification key_spec() const override
int(* update)(CTX *, const void *, CC_LONG len)
int(* final)(unsigned char *, CTX *)
#define BOTAN_PUBLIC_API(maj, min)
#define BOTAN_FUTURE_INTERNAL_HEADER(hdr)
std::vector< T, secure_allocator< T > > secure_vector