Crypto++
Public Member Functions | Protected Member Functions | List of all members
HashTransformation Class Referenceabstract

interface for hash functions and data processing part of MACs More...

#include <cryptlib.h>

Inheritance diagram for HashTransformation:
Algorithm Clonable Adler32 CRC32 MessageAuthenticationCode NullHash PK_MessageAccumulator TruncatedHashTemplate< T > Weak1::MD2 AuthenticatedSymmetricCipher CBC_MAC_Base CMAC_Base DMAC_Base< T > HMAC_Base IteratedHashBase< word32, MessageAuthenticationCode > IteratedHashBase< word64, MessageAuthenticationCode > TwoBases< MessageAuthenticationCode, VariableKeyLength< 32, 0, INT_MAX > > PK_MessageAccumulatorBase

Public Member Functions

HashTransformationRef ()
 return a reference to this object, useful for passing a temporary object to a function that takes a non-const reference
 
virtual void Update (const byte *input, size_t length)=0
 process more input
 
virtual byte * CreateUpdateSpace (size_t &size)
 request space to write input into
 
virtual void Final (byte *digest)
 compute hash for current message, then restart for a new message More...
 
virtual void Restart ()
 discard the current state, and restart with a new message
 
virtual unsigned int DigestSize () const =0
 size of the hash/digest/MAC returned by Final()
 
unsigned int TagSize () const
 same as DigestSize()
 
virtual unsigned int BlockSize () const
 block size of underlying compression function, or 0 if not block based
 
virtual unsigned int OptimalBlockSize () const
 input to Update() should have length a multiple of this for optimal speed
 
virtual unsigned int OptimalDataAlignment () const
 returns how input should be aligned for optimal performance
 
virtual void CalculateDigest (byte *digest, const byte *input, size_t length)
 use this if your input is in one piece and you don't want to call Update() and Final() separately
 
virtual bool Verify (const byte *digest)
 verify that digest is a valid digest for the current message, then reinitialize the object More...
 
virtual bool VerifyDigest (const byte *digest, const byte *input, size_t length)
 use this if your input is in one piece and you don't want to call Update() and Verify() separately
 
virtual void TruncatedFinal (byte *digest, size_t digestSize)=0
 truncated version of Final()
 
virtual void CalculateTruncatedDigest (byte *digest, size_t digestSize, const byte *input, size_t length)
 truncated version of CalculateDigest()
 
virtual bool TruncatedVerify (const byte *digest, size_t digestLength)
 truncated version of Verify()
 
virtual bool VerifyTruncatedDigest (const byte *digest, size_t digestLength, const byte *input, size_t length)
 truncated version of VerifyDigest()
 
virtual std::string AlgorithmName () const
 returns name of this algorithm, not universally implemented yet
 
virtual ClonableClone () const
 this is not implemented by most classes yet
 

Protected Member Functions

void ThrowIfInvalidTruncatedSize (size_t size) const
 

Detailed Description

interface for hash functions and data processing part of MACs

HashTransformation objects are stateful. They are created in an initial state, change state as Update() is called, and return to the initial state when Final() is called. This interface allows a large message to be hashed in pieces by calling Update() on each piece followed by calling Final().

Definition at line 530 of file cryptlib.h.

Member Function Documentation

virtual void HashTransformation::Final ( byte *  digest)
inlinevirtual

compute hash for current message, then restart for a new message

Precondition
size of digest == DigestSize().

Definition at line 544 of file cryptlib.h.

Referenced by PKCS5_PBKDF2_HMAC< T >::DeriveKey().

virtual bool HashTransformation::Verify ( const byte *  digest)
inlinevirtual

verify that digest is a valid digest for the current message, then reinitialize the object

Default implementation is to call Final() and do a bitwise comparison between its output and digest.

Definition at line 574 of file cryptlib.h.


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