Botan 3.6.1
Crypto and TLS for C&
Botan::PK_Ops::Verification_with_Hash Class Referenceabstract

#include <pk_ops_impl.h>

Inheritance diagram for Botan::PK_Ops::Verification_with_Hash:
Botan::PK_Ops::Verification

Public Member Functions

std::string hash_function () const final
 
bool is_valid_signature (std::span< const uint8_t > sig) override
 
void update (std::span< const uint8_t > input) override
 
 ~Verification_with_Hash () override=default
 

Protected Member Functions

 Verification_with_Hash (const AlgorithmIdentifier &alg_id, std::string_view pk_algo, bool allow_null_parameters=false)
 
 Verification_with_Hash (std::string_view hash)
 
virtual bool verify (std::span< const uint8_t > input, std::span< const uint8_t > sig)=0
 

Detailed Description

Definition at line 50 of file pk_ops_impl.h.

Constructor & Destructor Documentation

◆ ~Verification_with_Hash()

Botan::PK_Ops::Verification_with_Hash::~Verification_with_Hash ( )
overridedefault

◆ Verification_with_Hash() [1/2]

Botan::PK_Ops::Verification_with_Hash::Verification_with_Hash ( std::string_view hash)
explicitprotected

Definition at line 141 of file pk_ops.cpp.

141 :
142 Verification(), m_hash(create_signature_hash(padding)) {}

◆ Verification_with_Hash() [2/2]

Botan::PK_Ops::Verification_with_Hash::Verification_with_Hash ( const AlgorithmIdentifier & alg_id,
std::string_view pk_algo,
bool allow_null_parameters = false )
explicitprotected

Definition at line 144 of file pk_ops.cpp.

146 {
147 const auto oid_info = split_on(alg_id.oid().to_formatted_string(), '/');
148
149 if(oid_info.size() != 2 || oid_info[0] != pk_algo) {
150 throw Decoding_Error(
151 fmt("Unexpected AlgorithmIdentifier OID {} in association with {} key", alg_id.oid(), pk_algo));
152 }
153
154 if(!alg_id.parameters_are_empty()) {
155 if(alg_id.parameters_are_null()) {
156 if(!allow_null_parameters) {
157 throw Decoding_Error(fmt("Unexpected NULL AlgorithmIdentifier parameters for {}", pk_algo));
158 }
159 } else {
160 throw Decoding_Error(fmt("Unexpected AlgorithmIdentifier parameters for {}", pk_algo));
161 }
162 }
163
164 m_hash = HashFunction::create_or_throw(oid_info[1]);
165}
static std::unique_ptr< HashFunction > create_or_throw(std::string_view algo_spec, std::string_view provider="")
Definition hash.cpp:298
std::string fmt(std::string_view format, const T &... args)
Definition fmt.h:53
std::vector< std::string > split_on(std::string_view str, char delim)
Definition parsing.cpp:111

References Botan::HashFunction::create_or_throw(), Botan::fmt(), Botan::AlgorithmIdentifier::oid(), Botan::AlgorithmIdentifier::parameters_are_empty(), Botan::AlgorithmIdentifier::parameters_are_null(), Botan::split_on(), and Botan::OID::to_formatted_string().

Member Function Documentation

◆ hash_function()

std::string Botan::PK_Ops::Verification_with_Hash::hash_function ( ) const
inlinefinalvirtual

Return the hash function being used by this signer

Implements Botan::PK_Ops::Verification.

Definition at line 57 of file pk_ops_impl.h.

57{ return m_hash->name(); }

◆ is_valid_signature()

bool Botan::PK_Ops::Verification_with_Hash::is_valid_signature ( std::span< const uint8_t > sig)
overridevirtual

Perform a verification operation

Parameters
sigthe signature to be checked with respect to the input

Implements Botan::PK_Ops::Verification.

Definition at line 171 of file pk_ops.cpp.

171 {
172 const std::vector<uint8_t> msg = m_hash->final_stdvec();
173 return verify(msg, sig);
174}
virtual bool verify(std::span< const uint8_t > input, std::span< const uint8_t > sig)=0

◆ update()

void Botan::PK_Ops::Verification_with_Hash::update ( std::span< const uint8_t > input)
overridevirtual

Add more data to the message currently being signed

Parameters
inputthe input to be hashed/verified

Implements Botan::PK_Ops::Verification.

Definition at line 167 of file pk_ops.cpp.

167 {
168 m_hash->update(msg);
169}

◆ verify()

virtual bool Botan::PK_Ops::Verification_with_Hash::verify ( std::span< const uint8_t > input,
std::span< const uint8_t > sig )
protectedpure virtual

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