Botan 3.7.1
Crypto and TLS for C&
Botan::Classic_McEliece_PublicKeyInternal Class Reference

Representation of a Classic McEliece public key. More...

#include <cmce_keys_internal.h>

Public Member Functions

constexpr void _const_time_unpoison () const
 
 Classic_McEliece_PublicKeyInternal (const Classic_McEliece_Parameters &params, Classic_McEliece_Matrix matrix)
 Construct a Classic McEliece public key.
 
const Classic_McEliece_Matrixmatrix () const
 The Classic McEliece matrix.
 
const Classic_McEliece_Parametersparams () const
 The Classic McEliece parameters.
 
std::vector< uint8_t > serialize () const
 Serializes the Classic McEliece public key as defined in Classic McEliece ISO Section 9.2.7.
 

Static Public Member Functions

static std::shared_ptr< Classic_McEliece_PublicKeyInternalcreate_from_private_key (const Classic_McEliece_PrivateKeyInternal &sk)
 Create a Classic McEliece public key from a private key.
 

Detailed Description

Representation of a Classic McEliece public key.

This class represents a Classic McEliece public key. It is used internally by the Classic McEliece public key class and contains the following data:

  • The Classic McEliece parameters
  • The public key matrix

Definition at line 30 of file cmce_keys_internal.h.

Constructor & Destructor Documentation

◆ Classic_McEliece_PublicKeyInternal()

Botan::Classic_McEliece_PublicKeyInternal::Classic_McEliece_PublicKeyInternal ( const Classic_McEliece_Parameters & params,
Classic_McEliece_Matrix matrix )
inline

Construct a Classic McEliece public key.

Parameters
paramsThe Classic McEliece parameters
matrixThe public key matrix

Definition at line 38 of file cmce_keys_internal.h.

38 :
39 m_params(params), m_matrix(std::move(matrix)) {
40 BOTAN_ASSERT_NOMSG(m_matrix.bytes().size() == m_params.pk_size_bytes());
41 }
#define BOTAN_ASSERT_NOMSG(expr)
Definition assert.h:59
const std::vector< uint8_t > & bytes() const
The bytes of the submatrix T, with H=(I_mt, T) as defined in Classic McEliece ISO Section 9....
Definition cmce_matrix.h:77
size_t pk_size_bytes() const
The number of bytes for the public key.
const Classic_McEliece_Parameters & params() const
The Classic McEliece parameters.
const Classic_McEliece_Matrix & matrix() const
The Classic McEliece matrix.

References BOTAN_ASSERT_NOMSG.

Member Function Documentation

◆ _const_time_unpoison()

void Botan::Classic_McEliece_PublicKeyInternal::_const_time_unpoison ( ) const
inlineconstexpr

Definition at line 70 of file cmce_keys_internal.h.

70{ CT::unpoison(m_matrix); }
constexpr void unpoison(const T *p, size_t n)
Definition ct_utils.h:64

◆ create_from_private_key()

std::shared_ptr< Classic_McEliece_PublicKeyInternal > Botan::Classic_McEliece_PublicKeyInternal::create_from_private_key ( const Classic_McEliece_PrivateKeyInternal & sk)
static

Create a Classic McEliece public key from a private key.

Create the matrix from the private key values. Expects that the private key is valid, i.e. the matrix creation works.

Parameters
skThe private key
Returns
The public key as a shared pointer

Definition at line 132 of file cmce_keys_internal.cpp.

133 {
134 auto pk_matrix_and_pivot = Classic_McEliece_Matrix::create_matrix(sk.params(), sk.field_ordering(), sk.g());
135 if(!pk_matrix_and_pivot.has_value()) {
136 throw Decoding_Error("Cannot create public key from private key. Private key is invalid.");
137 }
138 auto& [pk_matrix, pivot] = pk_matrix_and_pivot.value();
139
140 // There should not be a pivot of any other form. Otherwise the gauss
141 // algorithm failed effectively.
142 if(!CT::driveby_unpoison(pivot.equals(bitvector{0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00}))) {
143 throw Decoding_Error("Cannot create public key from private key. Private key is invalid.");
144 }
145
146 return std::make_shared<Classic_McEliece_PublicKeyInternal>(sk.params(), std::move(pk_matrix));
147}
static std::optional< std::pair< Classic_McEliece_Matrix, CmceColumnSelection > > create_matrix(const Classic_McEliece_Parameters &params, const Classic_McEliece_Field_Ordering &field_ordering, const Classic_McEliece_Minimal_Polynomial &g)
Create the matrix H for a Classic McEliece instance given its parameters, field ordering and minimal ...
decltype(auto) driveby_unpoison(T &&v)
Definition ct_utils.h:237
bitvector_base< std::allocator > bitvector
Definition bitvector.h:1298

References Botan::Classic_McEliece_Matrix::create_matrix(), Botan::CT::driveby_unpoison(), Botan::Classic_McEliece_PrivateKeyInternal::field_ordering(), Botan::Classic_McEliece_PrivateKeyInternal::g(), and Botan::Classic_McEliece_PrivateKeyInternal::params().

Referenced by Botan::Classic_McEliece_PrivateKey::Classic_McEliece_PrivateKey().

◆ matrix()

const Classic_McEliece_Matrix & Botan::Classic_McEliece_PublicKeyInternal::matrix ( ) const
inline

The Classic McEliece matrix.

Definition at line 63 of file cmce_keys_internal.h.

63{ return m_matrix; }

◆ params()

const Classic_McEliece_Parameters & Botan::Classic_McEliece_PublicKeyInternal::params ( ) const
inline

The Classic McEliece parameters.

Definition at line 68 of file cmce_keys_internal.h.

68{ return m_params; }

◆ serialize()

std::vector< uint8_t > Botan::Classic_McEliece_PublicKeyInternal::serialize ( ) const
inline

Serializes the Classic McEliece public key as defined in Classic McEliece ISO Section 9.2.7.

Definition at line 58 of file cmce_keys_internal.h.

58{ return m_matrix.bytes(); }

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