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

📄 ida.h

📁 lots Elliptic curve cryptography codes. Use Visual c++ to compile
💻 H
字号:
#ifndef CRYPTOPP_IDA_H#define CRYPTOPP_IDA_H#include "mqueue.h"#include "filters.h"#include "channels.h"#include <map>#include <vector>NAMESPACE_BEGIN(CryptoPP)/// base class for secret sharing and information dispersalclass RawIDA : public AutoSignaling<Unflushable<Multichannel<Filter> > >{public:	RawIDA(BufferedTransformation *attachment=NULL)		{Detach(attachment);}	unsigned int GetThreshold() const {return m_threshold;}	void AddOutputChannel(word32 channelId);	void ChannelData(word32 channelId, const byte *inString, size_t length, bool messageEnd);	lword InputBuffered(word32 channelId) const;	void IsolatedInitialize(const NameValuePairs &parameters=g_nullNameValuePairs);	size_t ChannelPut2(const std::string &channel, const byte *begin, size_t length, int messageEnd, bool blocking)	{		if (!blocking)			throw BlockingInputOnly("RawIDA");		ChannelData(StringToWord<word32>(channel), begin, length, messageEnd != 0);		return 0;	}protected:	virtual void FlushOutputQueues();	virtual void OutputMessageEnds();	unsigned int InsertInputChannel(word32 channelId);	unsigned int LookupInputChannel(word32 channelId) const;	void ComputeV(unsigned int);	void PrepareInterpolation();	void ProcessInputQueues();	typedef std::map<word32, unsigned int> InputChannelMap;	InputChannelMap m_inputChannelMap;	InputChannelMap::iterator m_lastMapPosition;	std::vector<MessageQueue> m_inputQueues;	std::vector<word32> m_inputChannelIds, m_outputChannelIds, m_outputToInput;	std::vector<std::string> m_outputChannelIdStrings;	std::vector<ByteQueue> m_outputQueues;	int m_threshold;	unsigned int m_channelsReady, m_channelsFinished;	std::vector<SecBlock<word32> > m_v;	SecBlock<word32> m_u, m_w, m_y;};/// a variant of Shamir's Secret Sharing Algorithmclass SecretSharing : public CustomFlushPropagation<Filter>{public:	SecretSharing(RandomNumberGenerator &rng, int threshold, int nShares, BufferedTransformation *attachment=NULL, bool addPadding=true)		: m_rng(rng), m_ida(new OutputProxy(*this, true))	{		Detach(attachment);		IsolatedInitialize(MakeParameters("RecoveryThreshold", threshold)("NumberOfShares", nShares)("AddPadding", addPadding));	}	void IsolatedInitialize(const NameValuePairs &parameters=g_nullNameValuePairs);	size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking);	bool Flush(bool hardFlush, int propagation=-1, bool blocking=true) {return m_ida.Flush(hardFlush, propagation, blocking);}protected:	RandomNumberGenerator &m_rng;	RawIDA m_ida;	bool m_pad;};/// a variant of Shamir's Secret Sharing Algorithmclass SecretRecovery : public RawIDA{public:	SecretRecovery(int threshold, BufferedTransformation *attachment=NULL, bool removePadding=true)		: RawIDA(attachment)		{IsolatedInitialize(MakeParameters("RecoveryThreshold", threshold)("RemovePadding", removePadding));}	void IsolatedInitialize(const NameValuePairs &parameters=g_nullNameValuePairs);protected:	void FlushOutputQueues();	void OutputMessageEnds();	bool m_pad;};/// a variant of Rabin's Information Dispersal Algorithmclass InformationDispersal : public CustomFlushPropagation<Filter>{public:	InformationDispersal(int threshold, int nShares, BufferedTransformation *attachment=NULL, bool addPadding=true)		: m_ida(new OutputProxy(*this, true))	{		Detach(attachment);		IsolatedInitialize(MakeParameters("RecoveryThreshold", threshold)("NumberOfShares", nShares)("AddPadding", addPadding));	}	void IsolatedInitialize(const NameValuePairs &parameters=g_nullNameValuePairs);	size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking);	bool Flush(bool hardFlush, int propagation=-1, bool blocking=true) {return m_ida.Flush(hardFlush, propagation, blocking);}protected:	RawIDA m_ida;	bool m_pad;	unsigned int m_nextChannel;};/// a variant of Rabin's Information Dispersal Algorithmclass InformationRecovery : public RawIDA{public:	InformationRecovery(int threshold, BufferedTransformation *attachment=NULL, bool removePadding=true)		: RawIDA(attachment)		{IsolatedInitialize(MakeParameters("RecoveryThreshold", threshold)("RemovePadding", removePadding));}	void IsolatedInitialize(const NameValuePairs &parameters=g_nullNameValuePairs);protected:	void FlushOutputQueues();	void OutputMessageEnds();	bool m_pad;	ByteQueue m_queue;};class PaddingRemover : public Unflushable<Filter>{public:	PaddingRemover(BufferedTransformation *attachment=NULL)		: m_possiblePadding(false) {Detach(attachment);}	void IsolatedInitialize(const NameValuePairs &parameters) {m_possiblePadding = false;}	size_t Put2(const byte *begin, size_t length, int messageEnd, bool blocking);	// GetPossiblePadding() == false at the end of a message indicates incorrect padding	bool GetPossiblePadding() const {return m_possiblePadding;}private:	bool m_possiblePadding;	lword m_zeroCount;};NAMESPACE_END#endif

⌨️ 快捷键说明

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