Botan 3.4.0
Crypto and TLS for C&
Public Types | Public Member Functions | Static Public Member Functions | List of all members
Botan::Dilithium_Common_Symmetric_Primitives Class Reference

#include <dilithium_modern.h>

Inheritance diagram for Botan::Dilithium_Common_Symmetric_Primitives:
Botan::Dilithium_Symmetric_Primitives

Public Types

enum class  XofType { k128 , k256 }
 

Public Member Functions

secure_vector< uint8_t > CRH (std::span< const uint8_t > in, size_t out_len) const
 
secure_vector< uint8_t > ExpandMask (std::span< const uint8_t > seed, uint16_t nonce, size_t out_len) const
 
secure_vector< uint8_t > H (std::span< const uint8_t > seed, size_t out_len) const
 
std::unique_ptr< Botan::XOFXOF (XofType type, std::span< const uint8_t > seed, uint16_t nonce) const override
 

Static Public Member Functions

static std::unique_ptr< Dilithium_Symmetric_Primitivescreate (DilithiumMode mode)
 

Detailed Description

Definition at line 24 of file dilithium_modern.h.

Member Enumeration Documentation

◆ XofType

Member Function Documentation

◆ create()

std::unique_ptr< Dilithium_Symmetric_Primitives > Botan::Dilithium_Symmetric_Primitives::create ( DilithiumMode mode)
staticinherited

Definition at line 22 of file dilithium_symmetric_primitives.cpp.

22 {
23#if BOTAN_HAS_DILITHIUM
24 if(mode.is_modern()) {
25 return std::make_unique<Dilithium_Common_Symmetric_Primitives>();
26 }
27#endif
28
29#if BOTAN_HAS_DILITHIUM_AES
30 if(mode.is_aes()) {
31 return std::make_unique<Dilithium_AES_Symmetric_Primitives>();
32 }
33#endif
34
35 throw Not_Implemented("requested Dilithium mode is not enabled in this build");
36}

References Botan::DilithiumMode::is_aes(), and Botan::DilithiumMode::is_modern().

◆ CRH()

secure_vector< uint8_t > Botan::Dilithium_Symmetric_Primitives::CRH ( std::span< const uint8_t > in,
size_t out_len ) const
inlineinherited

Definition at line 43 of file dilithium_symmetric_primitives.h.

43 {
44 return SHAKE_256(out_len * 8).process(in.data(), in.size());
45 }

References Botan::Buffered_Computation::process().

◆ ExpandMask()

secure_vector< uint8_t > Botan::Dilithium_Symmetric_Primitives::ExpandMask ( std::span< const uint8_t > seed,
uint16_t nonce,
size_t out_len ) const
inlineinherited

Definition at line 48 of file dilithium_symmetric_primitives.h.

48 {
49 return XOF(XofType::k256, seed, nonce)->output(out_len);
50 }
virtual std::unique_ptr< Botan::XOF > XOF(XofType type, std::span< const uint8_t > seed, uint16_t nonce) const =0

References Botan::Dilithium_Symmetric_Primitives::k256, and Botan::Dilithium_Symmetric_Primitives::XOF().

◆ H()

secure_vector< uint8_t > Botan::Dilithium_Symmetric_Primitives::H ( std::span< const uint8_t > seed,
size_t out_len ) const
inlineinherited

Definition at line 38 of file dilithium_symmetric_primitives.h.

38 {
39 return SHAKE_256(out_len * 8).process(seed.data(), seed.size());
40 }

References Botan::Buffered_Computation::process().

◆ XOF()

std::unique_ptr< Botan::XOF > Botan::Dilithium_Common_Symmetric_Primitives::XOF ( XofType type,
std::span< const uint8_t > seed,
uint16_t nonce ) const
inlineoverridevirtual

Implements Botan::Dilithium_Symmetric_Primitives.

Definition at line 26 of file dilithium_modern.h.

26 {
27 const auto xof_type = [&] {
28 switch(type) {
29 case XofType::k128:
30 return "SHAKE-128";
31 case XofType::k256:
32 return "SHAKE-256";
33 }
34
36 }();
37
38 std::array<uint8_t, sizeof(nonce)> nonce_buffer;
39 store_le(nonce, nonce_buffer.data());
40
41 auto xof = Botan::XOF::create_or_throw(xof_type);
42 xof->update(seed);
43 xof->update(nonce_buffer);
44 return xof;
45 }
#define BOTAN_ASSERT_UNREACHABLE()
Definition assert.h:137
static std::unique_ptr< XOF > create_or_throw(std::string_view algo_spec, std::string_view provider="")
Definition xof.cpp:42
constexpr auto store_le(ParamTs &&... params)
Definition loadstor.h:702

References BOTAN_ASSERT_UNREACHABLE, Botan::XOF::create_or_throw(), Botan::Dilithium_Symmetric_Primitives::k128, Botan::Dilithium_Symmetric_Primitives::k256, and Botan::store_le().


The documentation for this class was generated from the following file: