⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filters.cpp

📁 lots Elliptic curve cryptography codes. Use Visual c++ to compile
💻 CPP
📖 第 1 页 / 共 3 页
字号:
HashVerificationFilter::HashVerificationFilter(HashTransformation &hm, BufferedTransformation *attachment, word32 flags, int truncatedDigestSize)	: FilterWithBufferedInput(attachment)	, m_hashModule(hm){	IsolatedInitialize(MakeParameters(Name::HashVerificationFilterFlags(), flags)(Name::TruncatedDigestSize(), truncatedDigestSize));}void HashVerificationFilter::InitializeDerivedAndReturnNewSizes(const NameValuePairs &parameters, size_t &firstSize, size_t &blockSize, size_t &lastSize){	m_flags = parameters.GetValueWithDefault(Name::HashVerificationFilterFlags(), (word32)DEFAULT_FLAGS);	int s = parameters.GetIntValueWithDefault(Name::TruncatedDigestSize(), -1);	m_digestSize = s < 0 ? m_hashModule.DigestSize() : s;	m_verified = false;	firstSize = m_flags & HASH_AT_BEGIN ? m_digestSize : 0;	blockSize = 1;	lastSize = m_flags & HASH_AT_BEGIN ? 0 : m_digestSize;}void HashVerificationFilter::FirstPut(const byte *inString){	if (m_flags & HASH_AT_BEGIN)	{		m_expectedHash.New(m_digestSize);		memcpy(m_expectedHash, inString, m_expectedHash.size());		if (m_flags & PUT_HASH)			AttachedTransformation()->Put(inString, m_expectedHash.size());	}}void HashVerificationFilter::NextPutMultiple(const byte *inString, size_t length){	m_hashModule.Update(inString, length);	if (m_flags & PUT_MESSAGE)		AttachedTransformation()->Put(inString, length);}void HashVerificationFilter::LastPut(const byte *inString, size_t length){	if (m_flags & HASH_AT_BEGIN)	{		assert(length == 0);		m_verified = m_hashModule.TruncatedVerify(m_expectedHash, m_digestSize);	}	else	{		m_verified = (length==m_digestSize && m_hashModule.TruncatedVerify(inString, length));		if (m_flags & PUT_HASH)			AttachedTransformation()->Put(inString, length);	}	if (m_flags & PUT_RESULT)		AttachedTransformation()->Put(m_verified);	if ((m_flags & THROW_EXCEPTION) && !m_verified)		throw HashVerificationFailed();}// *************************************************************AuthenticatedEncryptionFilter::AuthenticatedEncryptionFilter(AuthenticatedSymmetricCipher &c, BufferedTransformation *attachment, 								bool putAAD, int truncatedDigestSize, const std::string &macChannel, BlockPaddingScheme padding)	: StreamTransformationFilter(c, attachment, padding, true)	, m_hf(c, new OutputProxy(*this, false), putAAD, truncatedDigestSize, AAD_CHANNEL, macChannel){	assert(c.IsForwardTransformation());}void AuthenticatedEncryptionFilter::IsolatedInitialize(const NameValuePairs &parameters){	m_hf.IsolatedInitialize(parameters);	StreamTransformationFilter::IsolatedInitialize(parameters);}byte * AuthenticatedEncryptionFilter::ChannelCreatePutSpace(const std::string &channel, size_t &size){	if (channel.empty())		return StreamTransformationFilter::CreatePutSpace(size);	if (channel == AAD_CHANNEL)		return m_hf.CreatePutSpace(size);	throw InvalidChannelName("AuthenticatedEncryptionFilter", channel);}size_t AuthenticatedEncryptionFilter::ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking){	if (channel.empty())		return StreamTransformationFilter::Put2(begin, length, messageEnd, blocking);	if (channel == AAD_CHANNEL)		return m_hf.Put2(begin, length, 0, blocking);	throw InvalidChannelName("AuthenticatedEncryptionFilter", channel);}void AuthenticatedEncryptionFilter::LastPut(const byte *inString, size_t length){	StreamTransformationFilter::LastPut(inString, length);	m_hf.MessageEnd();}// *************************************************************AuthenticatedDecryptionFilter::AuthenticatedDecryptionFilter(AuthenticatedSymmetricCipher &c, BufferedTransformation *attachment, word32 flags, int truncatedDigestSize, BlockPaddingScheme padding)	: FilterWithBufferedInput(attachment)	, m_hashVerifier(c, new OutputProxy(*this, false))	, m_streamFilter(c, new OutputProxy(*this, false), padding, true){	assert(!c.IsForwardTransformation() || c.IsSelfInverting());	IsolatedInitialize(MakeParameters(Name::BlockPaddingScheme(), padding)(Name::AuthenticatedDecryptionFilterFlags(), flags)(Name::TruncatedDigestSize(), truncatedDigestSize));}void AuthenticatedDecryptionFilter::InitializeDerivedAndReturnNewSizes(const NameValuePairs &parameters, size_t &firstSize, size_t &blockSize, size_t &lastSize){	word32 flags = parameters.GetValueWithDefault(Name::AuthenticatedDecryptionFilterFlags(), (word32)DEFAULT_FLAGS);	m_hashVerifier.Initialize(CombinedNameValuePairs(parameters, MakeParameters(Name::HashVerificationFilterFlags(), flags)));	m_streamFilter.Initialize(parameters);	firstSize = m_hashVerifier.m_firstSize;	blockSize = 1;	lastSize = m_hashVerifier.m_lastSize;}byte * AuthenticatedDecryptionFilter::ChannelCreatePutSpace(const std::string &channel, size_t &size){	if (channel.empty())		return m_streamFilter.CreatePutSpace(size);	if (channel == AAD_CHANNEL)		return m_hashVerifier.CreatePutSpace(size);	throw InvalidChannelName("AuthenticatedDecryptionFilter", channel);}size_t AuthenticatedDecryptionFilter::ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking){	if (channel.empty())	{		if (m_lastSize > 0)			m_hashVerifier.ForceNextPut();		return FilterWithBufferedInput::Put2(begin, length, messageEnd, blocking);	}	if (channel == AAD_CHANNEL)		return m_hashVerifier.Put2(begin, length, 0, blocking);	throw InvalidChannelName("AuthenticatedDecryptionFilter", channel);}void AuthenticatedDecryptionFilter::FirstPut(const byte *inString){	m_hashVerifier.Put(inString, m_firstSize);}void AuthenticatedDecryptionFilter::NextPutMultiple(const byte *inString, size_t length){	m_streamFilter.Put(inString, length);}void AuthenticatedDecryptionFilter::LastPut(const byte *inString, size_t length){	m_streamFilter.MessageEnd();	m_hashVerifier.PutMessageEnd(inString, length);}// *************************************************************void SignerFilter::IsolatedInitialize(const NameValuePairs &parameters){	m_putMessage = parameters.GetValueWithDefault(Name::PutMessage(), false);	m_messageAccumulator.reset(m_signer.NewSignatureAccumulator(m_rng));}size_t SignerFilter::Put2(const byte *inString, size_t length, int messageEnd, bool blocking){	FILTER_BEGIN;	m_messageAccumulator->Update(inString, length);	if (m_putMessage)		FILTER_OUTPUT(1, inString, length, 0);	if (messageEnd)	{		m_buf.New(m_signer.SignatureLength());		m_signer.Sign(m_rng, m_messageAccumulator.release(), m_buf);		FILTER_OUTPUT(2, m_buf, m_buf.size(), messageEnd);		m_messageAccumulator.reset(m_signer.NewSignatureAccumulator(m_rng));	}	FILTER_END_NO_MESSAGE_END;}SignatureVerificationFilter::SignatureVerificationFilter(const PK_Verifier &verifier, BufferedTransformation *attachment, word32 flags)	: FilterWithBufferedInput(attachment)	, m_verifier(verifier){	IsolatedInitialize(MakeParameters(Name::SignatureVerificationFilterFlags(), flags));}void SignatureVerificationFilter::InitializeDerivedAndReturnNewSizes(const NameValuePairs &parameters, size_t &firstSize, size_t &blockSize, size_t &lastSize){	m_flags = parameters.GetValueWithDefault(Name::SignatureVerificationFilterFlags(), (word32)DEFAULT_FLAGS);	m_messageAccumulator.reset(m_verifier.NewVerificationAccumulator());	size_t size = m_verifier.SignatureLength();	assert(size != 0);	// TODO: handle recoverable signature scheme	m_verified = false;	firstSize = m_flags & SIGNATURE_AT_BEGIN ? size : 0;	blockSize = 1;	lastSize = m_flags & SIGNATURE_AT_BEGIN ? 0 : size;}void SignatureVerificationFilter::FirstPut(const byte *inString){	if (m_flags & SIGNATURE_AT_BEGIN)	{		if (m_verifier.SignatureUpfront())			m_verifier.InputSignature(*m_messageAccumulator, inString, m_verifier.SignatureLength());		else		{			m_signature.New(m_verifier.SignatureLength());			memcpy(m_signature, inString, m_signature.size());		}		if (m_flags & PUT_SIGNATURE)			AttachedTransformation()->Put(inString, m_signature.size());	}	else	{		assert(!m_verifier.SignatureUpfront());	}}void SignatureVerificationFilter::NextPutMultiple(const byte *inString, size_t length){	m_messageAccumulator->Update(inString, length);	if (m_flags & PUT_MESSAGE)		AttachedTransformation()->Put(inString, length);}void SignatureVerificationFilter::LastPut(const byte *inString, size_t length){	if (m_flags & SIGNATURE_AT_BEGIN)	{		assert(length == 0);		m_verifier.InputSignature(*m_messageAccumulator, m_signature, m_signature.size());		m_verified = m_verifier.VerifyAndRestart(*m_messageAccumulator);	}	else	{		m_verifier.InputSignature(*m_messageAccumulator, inString, length);		m_verified = m_verifier.VerifyAndRestart(*m_messageAccumulator);		if (m_flags & PUT_SIGNATURE)			AttachedTransformation()->Put(inString, length);	}	if (m_flags & PUT_RESULT)		AttachedTransformation()->Put(m_verified);	if ((m_flags & THROW_EXCEPTION) && !m_verified)		throw SignatureVerificationFailed();}// *************************************************************size_t Source::PumpAll2(bool blocking){	unsigned int messageCount = UINT_MAX;	do {		RETURN_IF_NONZERO(PumpMessages2(messageCount, blocking));	} while(messageCount == UINT_MAX);	return 0;}bool Store::GetNextMessage(){	if (!m_messageEnd && !AnyRetrievable())	{		m_messageEnd=true;		return true;	}	else		return false;}unsigned int Store::CopyMessagesTo(BufferedTransformation &target, unsigned int count, const std::string &channel) const{	if (m_messageEnd || count == 0)		return 0;	else	{		CopyTo(target, ULONG_MAX, channel);		if (GetAutoSignalPropagation())			target.ChannelMessageEnd(channel, GetAutoSignalPropagation()-1);		return 1;	}}void StringStore::StoreInitialize(const NameValuePairs &parameters){	ConstByteArrayParameter array;	if (!parameters.GetValue(Name::InputBuffer(), array))		throw InvalidArgument("StringStore: missing InputBuffer argument");	m_store = array.begin();	m_length = array.size();	m_count = 0;}size_t StringStore::TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel, bool blocking){	lword position = 0;	size_t blockedBytes = CopyRangeTo2(target, position, transferBytes, channel, blocking);	m_count += (size_t)position;	transferBytes = position;	return blockedBytes;}size_t StringStore::CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end, const std::string &channel, bool blocking) const{	size_t i = UnsignedMin(m_length, m_count+begin);	size_t len = UnsignedMin(m_length-i, end-begin);	size_t blockedBytes = target.ChannelPut2(channel, m_store+i, len, 0, blocking);	if (!blockedBytes)		begin += len;	return blockedBytes;}void RandomNumberStore::StoreInitialize(const NameValuePairs &parameters){	parameters.GetRequiredParameter("RandomNumberStore", "RandomNumberGeneratorPointer", m_rng);	int length;	parameters.GetRequiredIntParameter("RandomNumberStore", "RandomNumberStoreSize", length);	m_length = length;}size_t RandomNumberStore::TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel, bool blocking){	if (!blocking)		throw NotImplemented("RandomNumberStore: nonblocking transfer is not implemented by this object");	transferBytes = UnsignedMin(transferBytes, m_length - m_count);	m_rng->GenerateIntoBufferedTransformation(target, channel, transferBytes);	m_count += transferBytes;	return 0;}size_t NullStore::CopyRangeTo2(BufferedTransformation &target, lword &begin, lword end, const std::string &channel, bool blocking) const{	static const byte nullBytes[128] = {0};	while (begin < end)	{		size_t len = (size_t)STDMIN(end-begin, lword(128));		size_t blockedBytes = target.ChannelPut2(channel, nullBytes, len, 0, blocking);		if (blockedBytes)			return blockedBytes;		begin += len;	}	return 0;}size_t NullStore::TransferTo2(BufferedTransformation &target, lword &transferBytes, const std::string &channel, bool blocking){	lword begin = 0;	size_t blockedBytes = NullStore::CopyRangeTo2(target, begin, transferBytes, channel, blocking);	transferBytes = begin;	m_size -= begin;	return blockedBytes;}NAMESPACE_END#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -