Exemple #1
0
bool HashTransformation::TruncatedVerify(const byte *digestIn, size_t digestLength)
{
	ThrowIfInvalidTruncatedSize(digestLength);
	SecByteBlock digest(digestLength);
	TruncatedFinal(digest, digestLength);
	return VerifyBufsEqual(digest, digestIn, digestLength);
}
Exemple #2
0
void Adler32::TruncatedFinal(byte *hash, size_t size)
{
	ThrowIfInvalidTruncatedSize(size);

	switch (size)
	{
	default:
		hash[3] = byte(m_s1);
		// fall through
	case 3:
		hash[2] = byte(m_s1 >> 8);
		// fall through
	case 2:
		hash[1] = byte(m_s2);
		// fall through
	case 1:
		hash[0] = byte(m_s2 >> 8);
		// fall through
	case 0:
		;;
		// fall through
	}

	Reset();
}
Exemple #3
0
bool HashTransformation::TruncatedVerify(const byte *digestIn, unsigned int digestLength)
{
	ThrowIfInvalidTruncatedSize(digestLength);
	SecByteBlock digest(digestLength);
	TruncatedFinal(digest, digestLength);
	return memcmp(digest, digestIn, digestLength) == 0;
}
void SHA3::TruncatedFinal(byte *hash, size_t size)
{
	ThrowIfInvalidTruncatedSize(size);
	m_state.BytePtr()[m_counter] ^= 1;
	m_state.BytePtr()[r()-1] ^= 0x80;
	KeccakF1600(m_state);
	memcpy(hash, m_state, size);
	Restart();
}
Exemple #5
0
void CRC32C::TruncatedFinal(byte *hash, size_t size)
{
	ThrowIfInvalidTruncatedSize(size);

	m_crc ^= CRC32_NEGL;
	for (size_t i=0; i<size; i++)
		hash[i] = GetCrcByte(i);

	Reset();
}
Exemple #6
0
void CBC_MAC_Base::TruncatedFinal(byte *mac, size_t size)
{
	ThrowIfInvalidTruncatedSize(size);

	if (m_counter)
		ProcessBuf();

	memcpy(mac, m_reg, size);
	memset(m_reg, 0, AccessCipher().BlockSize());
}
Exemple #7
0
void Keccak::TruncatedFinal(byte *hash, size_t size)
{
	CRYPTOPP_ASSERT(hash != NULLPTR);
    ThrowIfInvalidTruncatedSize(size);

    m_state.BytePtr()[m_counter] ^= 1;
    m_state.BytePtr()[r()-1] ^= 0x80;
    KeccakF1600(m_state);
    memcpy(hash, m_state, size);
    Restart();
}
Exemple #8
0
void SapphireHash::TruncatedFinal(byte *hash, unsigned int size)
{
	ThrowIfInvalidTruncatedSize(size);

	for (int i=255; i>=0; i--)
		ProcessByte((byte) i);

	for (unsigned int j=0; j<size; j++)
		hash[j] = ProcessByte(0);

	Init();
}
Exemple #9
0
void PanamaHash<B>::TruncatedFinal(byte *hash, unsigned int size)
{
	ThrowIfInvalidTruncatedSize(size);

	PadLastBlock(BLOCKSIZE, 0x01);
	
	vTransform(m_data);

	Iterate(32);	// pull

	ConditionalByteReverse(B::ToEnum(), m_state+9, m_state+9, DIGESTSIZE);
	memcpy(hash, m_state+9, size);

	Restart();		// reinit for next use
}
Exemple #10
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
}
Exemple #11
0
void SHA3::TruncatedFinal(byte *hash, size_t size)
{
	ThrowIfInvalidTruncatedSize(size);

#if defined(CRYPTOPP_USE_FIPS_202_SHA3)
	m_state.BytePtr()[m_counter] ^= 0x06;
#else
	m_state.BytePtr()[m_counter] ^= 1;
#endif

	m_state.BytePtr()[r()-1] ^= 0x80;
	KeccakF1600(m_state);
	memcpy(hash, m_state, size);
	Restart();
}
Exemple #12
0
void HMAC_Base::TruncatedFinal(byte *mac, unsigned int size)
{
    ThrowIfInvalidTruncatedSize(size);

    HashTransformation &hash = AccessHash();

    if (!m_innerHashKeyed)
        KeyInnerHash();
    hash.Final(AccessInnerHash());

    hash.Update(AccessOpad(), hash.BlockSize());
    hash.Update(AccessInnerHash(), hash.DigestSize());
    hash.TruncatedFinal(mac, size);

    m_innerHashKeyed = false;
}
Exemple #13
0
void MD2::TruncatedFinal(byte *hash, size_t size)
{
	ThrowIfInvalidTruncatedSize(size);

	byte padding[16];
	word32 padlen;
	unsigned int i;

	padlen= 16-m_count;
	for(i=0; i<padlen; i++) padding[i]=(byte)padlen;
	Update(padding, padlen);
	Update(m_C, 16);
	memcpy(hash, m_X, size);

	Init();
}
Exemple #14
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
}
Exemple #15
0
void HAVAL::TruncatedFinal(byte *hash, unsigned int size)
{
	ThrowIfInvalidTruncatedSize(size);

	PadLastBlock(118, 1);	// first byte of padding for HAVAL is 1 instead of 0x80
	CorrectEndianess(m_data, m_data, 120);

	m_data[29] &= 0xffff;
	m_data[29] |= ((word32)digestSize<<25) | ((word32)pass<<19) | ((word32)HAVAL_VERSION<<16);
	m_data[30] = GetBitCountLo();
	m_data[31] = GetBitCountHi();

	vTransform(m_data);
	Tailor(digestSize*8);
	CorrectEndianess(m_digest, m_digest, digestSize);
	memcpy(hash, m_digest, size);

	Restart();		// reinit for next use
}
Exemple #16
0
void Adler32::TruncatedFinal(byte *hash, unsigned int size)
{
	ThrowIfInvalidTruncatedSize(size);

	switch (size)
	{
	default:
		hash[3] = byte(m_s1);
	case 3:
		hash[2] = byte(m_s1 >> 8);
	case 2:
		hash[1] = byte(m_s2);
	case 1:
		hash[0] = byte(m_s2 >> 8);
	case 0:
		;
	}

	Reset();
}
Exemple #17
0
void CMAC_Base::TruncatedFinal(byte *mac, size_t size)
{
	ThrowIfInvalidTruncatedSize(size);

	BlockCipher &cipher = AccessCipher();
	unsigned int blockSize = cipher.BlockSize();

	if (m_counter < blockSize)
	{
		m_reg[m_counter] ^= 0x80;
		cipher.AdvancedProcessBlocks(m_reg, m_reg+2*blockSize, m_reg, blockSize, BlockTransformation::BT_DontIncrementInOutPointers|BlockTransformation::BT_XorInput);
	}
	else
		cipher.AdvancedProcessBlocks(m_reg, m_reg+blockSize, m_reg, blockSize, BlockTransformation::BT_DontIncrementInOutPointers|BlockTransformation::BT_XorInput);

	memcpy(mac, m_reg, size);

	m_counter = 0;
	memset(m_reg, 0, blockSize);
}
Exemple #18
0
void MD5MAC_Base::TruncatedFinal(byte *hash, size_t size)
{
	ThrowIfInvalidTruncatedSize(size);

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

	m_data[14] = GetBitCountLo();
	m_data[15] = GetBitCountHi();

	Transform(m_digest, m_data, m_key+4);

	unsigned i;
	for (i=0; i<4; i++)
		m_data[i] = m_key[8+i];
	for (i=0; i<12; i++)
		m_data[i+4] = T[i] ^ m_key[8+i%4];
	Transform(m_digest, m_data, m_key+4);

	CorrectEndianess(m_digest, m_digest, DIGESTSIZE);
	memcpy(hash, m_digest, size);

	Restart();		// reinit for next use
}