Botan 3.9.0
Crypto and TLS for C&
Botan::CRYSTALS::PolynomialVector< Trait, D > Class Template Reference

#include <pqcrystals.h>

Public Member Functions

void _const_time_poison () const
void _const_time_unpoison () const
decltype(auto) begin ()
decltype(auto) begin () const
ThisPolynomialVector clone () const
std::span< T > coefficients ()
std::span< const T > coefficients () const
ThisPolynomialVectorconditional_add_q ()
constexpr bool ct_validate_value_range (T min, T max) const noexcept
constexpr Domain domain () const noexcept
decltype(auto) end ()
decltype(auto) end () const
size_t hamming_weight () const noexcept
ThisPolynomialVectoroperator+= (const ThisPolynomialVector &other)
ThisPolynomialVectoroperator-= (const ThisPolynomialVector &other)
ThisPolynomialVectoroperator= (const ThisPolynomialVector &other)=delete
ThisPolynomialVectoroperator= (ThisPolynomialVector &&other) noexcept=default
Polynomial< Trait, D > & operator[] (size_t i)
const Polynomial< Trait, D > & operator[] (size_t i) const
 PolynomialVector (const ThisPolynomialVector &other)=delete
 PolynomialVector (size_t vecsize)
 PolynomialVector (ThisPolynomialVector &&other) noexcept=default
ThisPolynomialVectorreduce ()
size_t size () const
 ~PolynomialVector ()=default

Static Public Member Functions

template<Domain OtherD>
requires (D != OtherD)
static PolynomialVector< Trait, D > from_domain_cast (PolynomialVector< Trait, OtherD > &&other)

Friends

template<Domain To, template< typename, Domain > class StructureT, crystals_trait C, Domain From>
requires (To != From)
StructureT< C, To > detail::domain_cast (StructureT< C, From > &&)
template<crystals_trait OtherTrait, Domain OtherD>
class PolynomialVector

Detailed Description

template<crystals_trait Trait, Domain D = Domain::Normal>
class Botan::CRYSTALS::PolynomialVector< Trait, D >

Definition at line 354 of file pqcrystals.h.

Constructor & Destructor Documentation

◆ PolynomialVector() [1/3]

template<crystals_trait Trait, Domain D = Domain::Normal>
Botan::CRYSTALS::PolynomialVector< Trait, D >::PolynomialVector ( size_t vecsize)
inlineexplicit

Definition at line 401 of file pqcrystals.h.

402 for(size_t i = 0; i < vecsize; ++i) {
403 m_vec.emplace_back(
405 }
406 }

◆ PolynomialVector() [2/3]

template<crystals_trait Trait, Domain D = Domain::Normal>
Botan::CRYSTALS::PolynomialVector< Trait, D >::PolynomialVector ( const ThisPolynomialVector< Trait, D > & other)
delete

◆ PolynomialVector() [3/3]

template<crystals_trait Trait, Domain D = Domain::Normal>
Botan::CRYSTALS::PolynomialVector< Trait, D >::PolynomialVector ( ThisPolynomialVector< Trait, D > && other)
defaultnoexcept

◆ ~PolynomialVector()

template<crystals_trait Trait, Domain D = Domain::Normal>
Botan::CRYSTALS::PolynomialVector< Trait, D >::~PolynomialVector ( )
default

Member Function Documentation

◆ _const_time_poison()

template<crystals_trait Trait, Domain D = Domain::Normal>
void Botan::CRYSTALS::PolynomialVector< Trait, D >::_const_time_poison ( ) const
inline

Definition at line 489 of file pqcrystals.h.

constexpr void poison_range(const R &r)
Definition ct_utils.h:179

◆ _const_time_unpoison()

template<crystals_trait Trait, Domain D = Domain::Normal>
void Botan::CRYSTALS::PolynomialVector< Trait, D >::_const_time_unpoison ( ) const
inline

Definition at line 491 of file pqcrystals.h.

constexpr void unpoison_range(const R &r)
Definition ct_utils.h:187

◆ begin() [1/2]

template<crystals_trait Trait, Domain D = Domain::Normal>
decltype(auto) Botan::CRYSTALS::PolynomialVector< Trait, D >::begin ( )
inline

Definition at line 481 of file pqcrystals.h.

481{ return m_vec.begin(); }

◆ begin() [2/2]

template<crystals_trait Trait, Domain D = Domain::Normal>
decltype(auto) Botan::CRYSTALS::PolynomialVector< Trait, D >::begin ( ) const
inline

Definition at line 483 of file pqcrystals.h.

483{ return m_vec.begin(); }

◆ clone()

template<crystals_trait Trait, Domain D = Domain::Normal>
ThisPolynomialVector Botan::CRYSTALS::PolynomialVector< Trait, D >::clone ( ) const
inline

Definition at line 418 of file pqcrystals.h.

418 {
420
421 // The default-constructed PolynomialVector has set up res.m_vec to
422 // point to res.m_polys_storage. Therefore we can just copy the data
423 // into res.m_polys_storage to fill the non-owning polynomials.
424 copy_mem(res.m_polys_storage, m_polys_storage);
425
426 return res;
427 }
constexpr void copy_mem(T *out, const T *in, size_t n)
Definition mem_ops.h:145

◆ coefficients() [1/2]

◆ coefficients() [2/2]

template<crystals_trait Trait, Domain D = Domain::Normal>
std::span< const T > Botan::CRYSTALS::PolynomialVector< Trait, D >::coefficients ( ) const
inline

Definition at line 445 of file pqcrystals.h.

445{ return m_polys_storage; }

◆ conditional_add_q()

template<crystals_trait Trait, Domain D = Domain::Normal>
ThisPolynomialVector & Botan::CRYSTALS::PolynomialVector< Trait, D >::conditional_add_q ( )
inline

Definition at line 470 of file pqcrystals.h.

470 {
471 for(auto& v : m_vec) {
473 }
474 return *this;
475 }

◆ ct_validate_value_range()

template<crystals_trait Trait, Domain D = Domain::Normal>
bool Botan::CRYSTALS::PolynomialVector< Trait, D >::ct_validate_value_range ( T min,
T max ) const
inlineconstexprnoexcept
Returns
true if all coefficients are within the range [min, max]

Definition at line 439 of file pqcrystals.h.

439 {
441 }

Referenced by Botan::Dilithium_Algos::make_hint(), and Botan::Dilithium_Algos::use_hint().

◆ domain()

template<crystals_trait Trait, Domain D = Domain::Normal>
Domain Botan::CRYSTALS::PolynomialVector< Trait, D >::domain ( ) const
inlineconstexprnoexcept

Definition at line 416 of file pqcrystals.h.

416{ return D; }

◆ end() [1/2]

template<crystals_trait Trait, Domain D = Domain::Normal>
decltype(auto) Botan::CRYSTALS::PolynomialVector< Trait, D >::end ( )
inline

Definition at line 485 of file pqcrystals.h.

485{ return m_vec.end(); }

◆ end() [2/2]

template<crystals_trait Trait, Domain D = Domain::Normal>
decltype(auto) Botan::CRYSTALS::PolynomialVector< Trait, D >::end ( ) const
inline

Definition at line 487 of file pqcrystals.h.

487{ return m_vec.end(); }

◆ from_domain_cast()

template<crystals_trait Trait, Domain D = Domain::Normal>
template<Domain OtherD>
requires (D != OtherD)
PolynomialVector< Trait, D > Botan::CRYSTALS::PolynomialVector< Trait, D >::from_domain_cast ( PolynomialVector< Trait, OtherD > && other)
inlinestatic

Definition at line 396 of file pqcrystals.h.

396 {
398 }

◆ hamming_weight()

template<crystals_trait Trait, Domain D = Domain::Normal>
size_t Botan::CRYSTALS::PolynomialVector< Trait, D >::hamming_weight ( ) const
inlinenoexcept
Returns
the number of non-zero coefficients in the polynomial vector

Definition at line 430 of file pqcrystals.h.

430 {
431 size_t weight = 0;
432 for(const auto c : m_polys_storage) {
433 weight += (c != 0);
434 }
435 return weight;
436 }

◆ operator+=()

template<crystals_trait Trait, Domain D = Domain::Normal>
ThisPolynomialVector & Botan::CRYSTALS::PolynomialVector< Trait, D >::operator+= ( const ThisPolynomialVector< Trait, D > & other)
inline

Definition at line 447 of file pqcrystals.h.

447 {
448 BOTAN_ASSERT(m_vec.size() == other.m_vec.size(), "cannot add polynomial vectors of differing lengths");
449 for(size_t i = 0; i < m_vec.size(); ++i) {
450 Trait::poly_add(m_vec[i].coefficients(), m_vec[i].coefficients(), other.m_vec[i].coefficients());
451 }
452 return *this;
453 }
#define BOTAN_ASSERT(expr, assertion_made)
Definition assert.h:62

◆ operator-=()

template<crystals_trait Trait, Domain D = Domain::Normal>
ThisPolynomialVector & Botan::CRYSTALS::PolynomialVector< Trait, D >::operator-= ( const ThisPolynomialVector< Trait, D > & other)
inline

Definition at line 455 of file pqcrystals.h.

455 {
456 BOTAN_ASSERT(m_vec.size() == other.m_vec.size(), "cannot subtract polynomial vectors of differing lengths");
457 for(size_t i = 0; i < m_vec.size(); ++i) {
458 Trait::poly_sub(m_vec[i].coefficients(), m_vec[i].coefficients(), other.m_vec[i].coefficients());
459 }
460 return *this;
461 }

◆ operator=() [1/2]

template<crystals_trait Trait, Domain D = Domain::Normal>
ThisPolynomialVector & Botan::CRYSTALS::PolynomialVector< Trait, D >::operator= ( const ThisPolynomialVector< Trait, D > & other)
delete

◆ operator=() [2/2]

template<crystals_trait Trait, Domain D = Domain::Normal>
ThisPolynomialVector & Botan::CRYSTALS::PolynomialVector< Trait, D >::operator= ( ThisPolynomialVector< Trait, D > && other)
defaultnoexcept

◆ operator[]() [1/2]

template<crystals_trait Trait, Domain D = Domain::Normal>
Polynomial< Trait, D > & Botan::CRYSTALS::PolynomialVector< Trait, D >::operator[] ( size_t i)
inline

Definition at line 477 of file pqcrystals.h.

477{ return m_vec[i]; }

◆ operator[]() [2/2]

template<crystals_trait Trait, Domain D = Domain::Normal>
const Polynomial< Trait, D > & Botan::CRYSTALS::PolynomialVector< Trait, D >::operator[] ( size_t i) const
inline

Definition at line 479 of file pqcrystals.h.

479{ return m_vec[i]; }

◆ reduce()

template<crystals_trait Trait, Domain D = Domain::Normal>
ThisPolynomialVector & Botan::CRYSTALS::PolynomialVector< Trait, D >::reduce ( )
inline

Definition at line 463 of file pqcrystals.h.

463 {
464 for(auto& p : m_vec) {
466 }
467 return *this;
468 }

◆ size()

◆ detail::domain_cast

template<crystals_trait Trait, Domain D = Domain::Normal>
template<Domain To, template< typename, Domain > class StructureT, crystals_trait C, Domain From>
requires (To != From)
StructureT< C, To > detail::domain_cast ( StructureT< C, From > && )
friend

◆ PolynomialVector

template<crystals_trait Trait, Domain D = Domain::Normal>
template<crystals_trait OtherTrait, Domain OtherD>
friend class PolynomialVector
friend

Definition at line 365 of file pqcrystals.h.


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