Пример #1
0
void Tiger::Final(byte *hash)
{
	PadLastBlock(56, 0x01);
	CorrectEndianess(data, data, 56);

	data[7] = countLo;

	Transform(digest, data);
	CorrectEndianess(digest, digest, DigestSize());
	memcpy(hash, digest, DigestSize());

	Reinit();		// reinit for next use
}
Пример #2
0
void Tiger::TruncatedFinal(byte *hash, unsigned int size)
{
	ThrowIfInvalidTruncatedSize(size);

	PadLastBlock(56, 0x01);
	CorrectEndianess(m_data, m_data, 56);

	m_data[7] = GetBitCountLo();

	Transform(m_digest, m_data);
	CorrectEndianess(m_digest, m_digest, DigestSize());
	memcpy(hash, m_digest, size);

	Restart();		// reinit for next use
}
Пример #3
0
void Whirlpool::TruncatedFinal(byte *hash, size_t size)
{
    ThrowIfInvalidTruncatedSize(size);

    PadLastBlock(32);
    CorrectEndianess(m_data, m_data, 32);

    m_data[m_data.size()-4] = 0;
    m_data[m_data.size()-3] = 0;
    m_data[m_data.size()-2] = GetBitCountHi();
    m_data[m_data.size()-1] = GetBitCountLo();

    Transform(m_digest, m_data);
    CorrectEndianess(m_digest, m_digest, DigestSize());
    memcpy(hash, m_digest, size);

    Restart();		// reinit for next use
}
Пример #4
0
void HashTransformation::ThrowIfInvalidTruncatedSize(unsigned int size) const
{
	if (size > DigestSize())
		throw InvalidArgument("HashTransformation: can't truncate a " + IntToString(DigestSize()) + " byte digest to " + IntToString(size) + " bytes");
}
Пример #5
0
size_t OAEP_Base::MaxUnpaddedLength(size_t paddedLength) const
{
	return SaturatingSubtract(paddedLength/8, 1+2*DigestSize());
}
Пример #6
0
bool MessageAuthenticationCode::Verify(const byte *macIn)
{
	SecByteBlock mac(DigestSize());
	Final(mac);
	return memcmp(mac, macIn, DigestSize()) == 0;
}