Botan 1.10.17
Botan::MDx_HashFunction Class Referenceabstract

#include <mdx_hash.h>

Inheritance diagram for Botan::MDx_HashFunction:
Botan::HashFunction Botan::Buffered_Computation Botan::Algorithm Botan::BMW_512 Botan::HAS_160 Botan::MD4 Botan::MD5 Botan::RIPEMD_128 Botan::RIPEMD_160 Botan::SHA_160 Botan::SHA_224 Botan::SHA_256 Botan::SHA_384 Botan::SHA_512 Botan::Tiger Botan::Whirlpool

Public Member Functions

virtual HashFunctionclone () const =0
SecureVector< bytefinal ()
void final (byte out[])
size_t hash_block_size () const
 MDx_HashFunction (size_t block_length, bool big_byte_endian, bool big_bit_endian, size_t counter_size=8)
virtual std::string name () const =0
virtual size_t output_length () const =0
SecureVector< byteprocess (const byte in[], size_t length)
SecureVector< byteprocess (const MemoryRegion< byte > &in)
SecureVector< byteprocess (const std::string &in)
void update (byte in)
void update (const byte in[], size_t length)
void update (const MemoryRegion< byte > &in)
void update (const std::string &str)
template<typename T>
void update_be (const T in)

Protected Member Functions

void add_data (const byte input[], size_t length)
void clear ()
virtual void compress_n (const byte blocks[], size_t block_n)=0
virtual void copy_out (byte buffer[])=0
void final_result (byte output[])
virtual void write_count (byte out[])

Detailed Description

MDx Hash Function Base Class

Definition at line 18 of file mdx_hash.h.

Constructor & Destructor Documentation

◆ MDx_HashFunction()

Botan::MDx_HashFunction::MDx_HashFunction ( size_t block_length,
bool big_byte_endian,
bool big_bit_endian,
size_t counter_size = 8 )
Parameters
block_lengthis the number of bytes per block
big_byte_endianspecifies if the hash uses big-endian bytes
big_bit_endianspecifies if the hash uses big-endian bits
counter_sizespecifies the size of the counter var in bytes

Definition at line 17 of file mdx_hash.cpp.

20 :
21 buffer(block_len),
22 BIG_BYTE_ENDIAN(byte_end),
23 BIG_BIT_ENDIAN(bit_end),
24 COUNT_SIZE(cnt_size)
25 {
26 count = position = 0;
27 }

Referenced by Botan::BMW_512::BMW_512(), Botan::HAS_160::HAS_160(), Botan::MD4::MD4(), Botan::MD5::MD5(), Botan::RIPEMD_128::RIPEMD_128(), Botan::RIPEMD_160::RIPEMD_160(), Botan::SHA_160::SHA_160(), Botan::SHA_160::SHA_160(), Botan::SHA_224::SHA_224(), Botan::SHA_256::SHA_256(), Botan::SHA_384::SHA_384(), Botan::SHA_512::SHA_512(), Botan::Tiger::Tiger(), and Botan::Whirlpool::Whirlpool().

Member Function Documentation

◆ add_data()

void Botan::MDx_HashFunction::add_data ( const byte input[],
size_t length )
protectedvirtual

Add more data to the computation

Parameters
inputis an input buffer
lengthis the length of input in bytes

Implements Botan::Buffered_Computation.

Definition at line 41 of file mdx_hash.cpp.

42 {
43 count += length;
44
45 if(position)
46 {
47 buffer.copy(position, input, length);
48
49 if(position + length >= buffer.size())
50 {
51 compress_n(&buffer[0], 1);
52 input += (buffer.size() - position);
53 length -= (buffer.size() - position);
54 position = 0;
55 }
56 }
57
58 const size_t full_blocks = length / buffer.size();
59 const size_t remaining = length % buffer.size();
60
61 if(full_blocks)
62 compress_n(input, full_blocks);
63
64 buffer.copy(position, input + full_blocks * buffer.size(), remaining);
65 position += remaining;
66 }
virtual void compress_n(const byte blocks[], size_t block_n)=0

References compress_n().

◆ clear()

◆ clone()

◆ compress_n()

virtual void Botan::MDx_HashFunction::compress_n ( const byte blocks[],
size_t block_n )
protectedpure virtual

Run the hash's compression function over a set of blocks

Parameters
blocksthe input
block_nthe number of blocks

Implemented in Botan::MD4, Botan::MD5, and Botan::SHA_160.

References clear().

Referenced by add_data(), and final_result().

◆ copy_out()

virtual void Botan::MDx_HashFunction::copy_out ( byte buffer[])
protectedpure virtual

Copy the output to the buffer

Parameters
bufferto put the output into

Implemented in Botan::MD4, Botan::MD5, and Botan::SHA_160.

References write_count().

Referenced by final_result().

◆ final() [1/2]

SecureVector< byte > Botan::Buffered_Computation::final ( )
inlineinherited

Complete the computation and retrieve the final result.

Returns
SecureVector holding the result

Definition at line 87 of file buf_comp.h.

88 {
89 SecureVector<byte> output(output_length());
90 final_result(&output[0]);
91 return output;
92 }
virtual size_t output_length() const =0

References output_length().

◆ final() [2/2]

void Botan::Buffered_Computation::final ( byte out[])
inlineinherited

Complete the computation and retrieve the final result.

Parameters
outThe byte array to be filled with the result. Must be of length output_length()

Definition at line 80 of file buf_comp.h.

80{ final_result(out); }

Referenced by Botan::X942_PRF::derive(), Botan::HandshakeHash::final(), and Botan::HandshakeHash::final_ssl3().

◆ final_result()

void Botan::MDx_HashFunction::final_result ( byte out[])
protectedvirtual

Write the final output to out

Parameters
outis an output buffer of output_length()

Implements Botan::Buffered_Computation.

Definition at line 71 of file mdx_hash.cpp.

72 {
73 buffer[position] = (BIG_BIT_ENDIAN ? 0x80 : 0x01);
74 for(size_t i = position+1; i != buffer.size(); ++i)
75 buffer[i] = 0;
76
77 if(position >= buffer.size() - COUNT_SIZE)
78 {
79 compress_n(&buffer[0], 1);
80 zeroise(buffer);
81 }
82
83 write_count(&buffer[buffer.size() - COUNT_SIZE]);
84
85 compress_n(&buffer[0], 1);
86 copy_out(output);
87 clear();
88 }
virtual void copy_out(byte buffer[])=0
virtual void write_count(byte out[])
Definition mdx_hash.cpp:93

References clear(), compress_n(), copy_out(), write_count(), and Botan::zeroise().

◆ hash_block_size()

size_t Botan::MDx_HashFunction::hash_block_size ( ) const
inlinevirtual

The hash block size as defined for this algorithm

Reimplemented from Botan::HashFunction.

Definition at line 32 of file mdx_hash.h.

32{ return buffer.size(); }

Referenced by Botan::MD4::compress_n(), Botan::MD5::compress_n(), Botan::SHA_160::compress_n(), and write_count().

◆ name()

virtual std::string Botan::Algorithm::name ( ) const
pure virtualinherited
Returns
name of this algorithm

Implemented in Botan::Adler32, Botan::AES_128, Botan::AES_128_NI, Botan::AES_128_SSSE3, Botan::AES_192, Botan::AES_192_NI, Botan::AES_192_SSSE3, Botan::AES_256, Botan::AES_256_NI, Botan::AES_256_SSSE3, Botan::ANSI_X919_MAC, Botan::ARC4, Botan::Blowfish, Botan::BMW_512, Botan::Camellia_128, Botan::Camellia_192, Botan::Camellia_256, Botan::Cascade_Cipher, Botan::CAST_128, Botan::CAST_256, Botan::CBC_MAC, Botan::CMAC, Botan::Comb4P, Botan::CRC24, Botan::CRC32, Botan::CTR_BE, Botan::DES, Botan::DESX, Botan::GOST_28147_89, Botan::GOST_34_11, Botan::HAS_160, Botan::HMAC, Botan::IDEA, Botan::KASUMI, Botan::KDF1, Botan::KDF2, Botan::Keccak_1600, Botan::Lion, Botan::LubyRackoff, Botan::MARS, Botan::MD2, Botan::MD4, Botan::MD5, Botan::MessageAuthenticationCode, Botan::MISTY1, Botan::Noekeon, Botan::OFB, Botan::OpenPGP_S2K, Botan::Parallel, Botan::PKCS5_PBKDF1, Botan::PKCS5_PBKDF2, Botan::RC2, Botan::RIPEMD_128, Botan::RIPEMD_160, Botan::SAFER_SK, Botan::Salsa20, Botan::SEED, Botan::Serpent, Botan::SHA_160, Botan::SHA_224, Botan::SHA_256, Botan::SHA_384, Botan::SHA_512, Botan::Skein_512, Botan::Skipjack, Botan::Square, Botan::SSL3_MAC, Botan::SSL3_PRF, Botan::TEA, Botan::Tiger, Botan::TLS_12_PRF, Botan::TLS_PRF, Botan::TripleDES, Botan::Turing, Botan::Twofish, Botan::Whirlpool, Botan::WiderWake_41_BE, Botan::X942_PRF, and Botan::XTEA.

Referenced by Botan::Algorithm_Factory::add_block_cipher(), Botan::Algorithm_Factory::add_hash_function(), Botan::Algorithm_Factory::add_pbkdf(), Botan::Algorithm_Factory::add_stream_cipher(), Botan::choose_sig_format(), Botan::PBE_PKCS5v15::PBE_PKCS5v15(), Botan::PBE_PKCS5v20::PBE_PKCS5v20(), Botan::StreamCipher::set_iv(), and Botan::SymmetricAlgorithm::set_key().

◆ output_length()

◆ process() [1/3]

SecureVector< byte > Botan::Buffered_Computation::process ( const byte in[],
size_t length )
inlineinherited

Update and finalize computation. Does the same as calling update() and final() consecutively.

Parameters
inthe input to process as a byte array
lengththe length of the byte array
Returns
the result of the call to final()

Definition at line 101 of file buf_comp.h.

102 {
103 add_data(in, length);
104 return final();
105 }

Referenced by Botan::EME1::EME1(), Botan::RTSS_Share::split(), and Botan::Cert_Extension::Subject_Key_ID::Subject_Key_ID().

◆ process() [2/3]

SecureVector< byte > Botan::Buffered_Computation::process ( const MemoryRegion< byte > & in)
inlineinherited

Update and finalize computation. Does the same as calling update() and final() consecutively.

Parameters
inthe input to process
Returns
the result of the call to final()

Definition at line 113 of file buf_comp.h.

114 {
115 add_data(&in[0], in.size());
116 return final();
117 }

References Botan::MemoryRegion< T >::size().

◆ process() [3/3]

SecureVector< byte > Botan::Buffered_Computation::process ( const std::string & in)
inlineinherited

Update and finalize computation. Does the same as calling update() and final() consecutively.

Parameters
inthe input to process as a string
Returns
the result of the call to final()

Definition at line 125 of file buf_comp.h.

126 {
127 update(in);
128 return final();
129 }
void update(const byte in[], size_t length)
Definition buf_comp.h:33

References update().

◆ update() [1/4]

void Botan::Buffered_Computation::update ( byte in)
inlineinherited

Process a single byte.

Parameters
inthe byte to process

Definition at line 72 of file buf_comp.h.

72{ add_data(&in, 1); }

◆ update() [2/4]

void Botan::Buffered_Computation::update ( const byte in[],
size_t length )
inlineinherited

Add new input to process.

Parameters
inthe input to process as a byte array
lengthof param in in bytes

Definition at line 33 of file buf_comp.h.

33{ add_data(in, length); }

Referenced by Botan::X942_PRF::derive(), Botan::HandshakeHash::final(), Botan::HandshakeHash::final_ssl3(), process(), and Botan::EAX_Base::start_msg().

◆ update() [3/4]

void Botan::Buffered_Computation::update ( const MemoryRegion< byte > & in)
inlineinherited

Add new input to process.

Parameters
inthe input to process as a MemoryRegion

Definition at line 39 of file buf_comp.h.

40 {
41 add_data(&in[0], in.size());
42 }

References Botan::MemoryRegion< T >::size().

◆ update() [4/4]

void Botan::Buffered_Computation::update ( const std::string & str)
inlineinherited

Add new input to process.

Parameters
strthe input to process as a std::string. Will be interpreted as a byte array based on the strings encoding.

Definition at line 63 of file buf_comp.h.

64 {
65 add_data(reinterpret_cast<const byte*>(str.data()), str.size());
66 }

◆ update_be()

template<typename T>
void Botan::Buffered_Computation::update_be ( const T in)
inlineinherited

Add an integer in big-endian order

Parameters
inthe value

Definition at line 48 of file buf_comp.h.

49 {
50 for(size_t i = 0; i != sizeof(T); ++i)
51 {
52 byte b = get_byte(i, in);
53 add_data(&b, 1);
54 }
55 }
byte get_byte(size_t byte_num, T input)
Definition get_byte.h:21

References Botan::get_byte().

◆ write_count()

void Botan::MDx_HashFunction::write_count ( byte out[])
protectedvirtual

Write the count, if used, to this spot

Parameters
outwhere to write the counter to

Definition at line 93 of file mdx_hash.cpp.

94 {
95 if(COUNT_SIZE < 8)
96 throw Invalid_State("MDx_HashFunction::write_count: COUNT_SIZE < 8");
97 if(COUNT_SIZE >= output_length() || COUNT_SIZE >= hash_block_size())
98 throw Invalid_Argument("MDx_HashFunction: COUNT_SIZE is too big");
99
100 const u64bit bit_count = count * 8;
101
102 if(BIG_BYTE_ENDIAN)
103 store_be(bit_count, out + COUNT_SIZE - 8);
104 else
105 store_le(bit_count, out + COUNT_SIZE - 8);
106 }
size_t hash_block_size() const
Definition mdx_hash.h:32
unsigned long long u64bit
Definition types.h:49
std::invalid_argument Invalid_Argument
Definition exceptn.h:20
void store_be(u16bit in, byte out[2])
Definition loadstor.h:412
void store_le(u16bit in, byte out[2])
Definition loadstor.h:427
Invalid_State(const std::string &err)
Definition exceptn.h:27

References hash_block_size(), Botan::Invalid_State::Invalid_State(), Botan::Buffered_Computation::output_length(), Botan::store_be(), and Botan::store_le().

Referenced by copy_out(), and final_result().


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