亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ida.cpp

?? 此壓縮包內(nèi)有cast、blowfish、simple、des、cryptlib、rsa、mqueue、xtrcrypt、gf256、base32,base64、modexppc、network等一些的
?? CPP
字號(hào):
// ida.cpp - written and placed in the public domain by Wei Dai

#include "pch.h"
#include "ida.h"

#include "algebra.h"
#include "gf2_32.h"
#include "polynomi.h"
#include <functional>

#include "polynomi.cpp"

ANONYMOUS_NAMESPACE_BEGIN
static const CryptoPP::GF2_32 field;
NAMESPACE_END

using namespace std;

NAMESPACE_BEGIN(CryptoPP)

void RawIDA::IsolatedInitialize(const NameValuePairs &parameters)
{
	if (!parameters.GetIntValue("RecoveryThreshold", m_threshold))
		throw InvalidArgument("RawIDA: missing RecoveryThreshold argument");

	if (m_threshold <= 0)
		throw InvalidArgument("RawIDA: RecoveryThreshold must be greater than 0");

	m_lastMapPosition = m_inputChannelMap.end();
	m_channelsReady = 0;
	m_channelsFinished = 0;
	m_w.New(m_threshold);
	m_y.New(m_threshold);
	m_inputQueues.reserve(m_threshold);

	m_outputChannelIds.clear();
	m_outputChannelIdStrings.clear();
	m_outputQueues.clear();

	word32 outputChannelID;
	if (parameters.GetValue("OutputChannelID", outputChannelID))
		AddOutputChannel(outputChannelID);
	else
	{
		int nShares = parameters.GetIntValueWithDefault("NumberOfShares", m_threshold);
		for (int i=0; i<nShares; i++)
			AddOutputChannel(i);
	}
}

unsigned int RawIDA::InsertInputChannel(word32 channelId)
{
	if (m_lastMapPosition != m_inputChannelMap.end())
	{
		if (m_lastMapPosition->first == channelId)
			goto skipFind;
		++m_lastMapPosition;
		if (m_lastMapPosition != m_inputChannelMap.end() && m_lastMapPosition->first == channelId)
			goto skipFind;
	}
	m_lastMapPosition = m_inputChannelMap.find(channelId);

skipFind:
	if (m_lastMapPosition == m_inputChannelMap.end())
	{
		if (m_inputChannelIds.size() == m_threshold)
			return m_threshold;

		m_lastMapPosition = m_inputChannelMap.insert(InputChannelMap::value_type(channelId, (unsigned int)m_inputChannelIds.size())).first;
		m_inputQueues.push_back(MessageQueue());
		m_inputChannelIds.push_back(channelId);

		if (m_inputChannelIds.size() == m_threshold)
			PrepareInterpolation();
	}
	return m_lastMapPosition->second;
}

unsigned int RawIDA::LookupInputChannel(word32 channelId) const
{
	map<word32, unsigned int>::const_iterator it = m_inputChannelMap.find(channelId);
	if (it == m_inputChannelMap.end())
		return m_threshold;
	else
		return it->second;
}

void RawIDA::ChannelData(word32 channelId, const byte *inString, size_t length, bool messageEnd)
{
	int i = InsertInputChannel(channelId);
	if (i < m_threshold)
	{
		lword size = m_inputQueues[i].MaxRetrievable();
		m_inputQueues[i].Put(inString, length);
		if (size < 4 && size + length >= 4)
		{
			m_channelsReady++;
			if (m_channelsReady == m_threshold)
				ProcessInputQueues();
		}

		if (messageEnd)
		{
			m_inputQueues[i].MessageEnd();
			if (m_inputQueues[i].NumberOfMessages() == 1)
			{
				m_channelsFinished++;
				if (m_channelsFinished == m_threshold)
				{
					m_channelsReady = 0;
					for (i=0; i<m_threshold; i++)
						m_channelsReady += m_inputQueues[i].AnyRetrievable();
					ProcessInputQueues();
				}
			}
		}
	}
}

lword RawIDA::InputBuffered(word32 channelId) const
{
	int i = LookupInputChannel(channelId);
	return i < m_threshold ? m_inputQueues[i].MaxRetrievable() : 0;
}

void RawIDA::ComputeV(unsigned int i)
{
	if (i >= m_v.size())
	{
		m_v.resize(i+1);
		m_outputToInput.resize(i+1);
	}

	m_outputToInput[i] = LookupInputChannel(m_outputChannelIds[i]);
	if (m_outputToInput[i] == m_threshold && i * m_threshold <= 1000*1000)
	{
		m_v[i].resize(m_threshold);
		PrepareBulkPolynomialInterpolationAt(field, m_v[i].begin(), m_outputChannelIds[i], &(m_inputChannelIds[0]), m_w.begin(), m_threshold);
	}
}

void RawIDA::AddOutputChannel(word32 channelId)
{
	m_outputChannelIds.push_back(channelId);
	m_outputChannelIdStrings.push_back(WordToString(channelId));
	m_outputQueues.push_back(ByteQueue());
	if (m_inputChannelIds.size() == m_threshold)
		ComputeV((unsigned int)m_outputChannelIds.size() - 1);
}

void RawIDA::PrepareInterpolation()
{
	assert(m_inputChannelIds.size() == m_threshold);
	PrepareBulkPolynomialInterpolation(field, m_w.begin(), &(m_inputChannelIds[0]), m_threshold);
	for (unsigned int i=0; i<m_outputChannelIds.size(); i++)
		ComputeV(i);
}

void RawIDA::ProcessInputQueues()
{
	bool finished = (m_channelsFinished == m_threshold);
	int i;

	while (finished ? m_channelsReady > 0 : m_channelsReady == m_threshold)
	{
		m_channelsReady = 0;
		for (i=0; i<m_threshold; i++)
		{
			MessageQueue &queue = m_inputQueues[i];
			queue.GetWord32(m_y[i]);

			if (finished)
				m_channelsReady += queue.AnyRetrievable();
			else
				m_channelsReady += queue.NumberOfMessages() > 0 || queue.MaxRetrievable() >= 4;
		}

		for (i=0; (unsigned int)i<m_outputChannelIds.size(); i++)
		{
			if (m_outputToInput[i] != m_threshold)
				m_outputQueues[i].PutWord32(m_y[m_outputToInput[i]]);
			else if (m_v[i].size() == m_threshold)
				m_outputQueues[i].PutWord32(BulkPolynomialInterpolateAt(field, m_y.begin(), m_v[i].begin(), m_threshold));
			else
			{
				m_u.resize(m_threshold);
				PrepareBulkPolynomialInterpolationAt(field, m_u.begin(), m_outputChannelIds[i], &(m_inputChannelIds[0]), m_w.begin(), m_threshold);
				m_outputQueues[i].PutWord32(BulkPolynomialInterpolateAt(field, m_y.begin(), m_u.begin(), m_threshold));
			}
		}
	}

	if (m_outputChannelIds.size() > 0 && m_outputQueues[0].AnyRetrievable())
		FlushOutputQueues();

	if (finished)
	{
		OutputMessageEnds();

		m_channelsReady = 0;
		m_channelsFinished = 0;
		m_v.clear();

		vector<MessageQueue> inputQueues;
		vector<word32> inputChannelIds;

		inputQueues.swap(m_inputQueues);
		inputChannelIds.swap(m_inputChannelIds);
		m_inputChannelMap.clear();
		m_lastMapPosition = m_inputChannelMap.end();

		for (i=0; i<m_threshold; i++)
		{
			inputQueues[i].GetNextMessage();
			inputQueues[i].TransferAllTo(*AttachedTransformation(), WordToString(inputChannelIds[i]));
		}
	}
}

void RawIDA::FlushOutputQueues()
{
	for (unsigned int i=0; i<m_outputChannelIds.size(); i++)
		m_outputQueues[i].TransferAllTo(*AttachedTransformation(), m_outputChannelIdStrings[i]);
}

void RawIDA::OutputMessageEnds()
{
	if (GetAutoSignalPropagation() != 0)
	{
		for (unsigned int i=0; i<m_outputChannelIds.size(); i++)
			AttachedTransformation()->ChannelMessageEnd(m_outputChannelIdStrings[i], GetAutoSignalPropagation()-1);
	}
}

// ****************************************************************

void SecretSharing::IsolatedInitialize(const NameValuePairs &parameters)
{
	m_pad = parameters.GetValueWithDefault("AddPadding", true);
	m_ida.IsolatedInitialize(parameters);
}

size_t SecretSharing::Put2(const byte *begin, size_t length, int messageEnd, bool blocking)
{
	if (!blocking)
		throw BlockingInputOnly("SecretSharing");

	SecByteBlock buf(UnsignedMin(256, length));
	unsigned int threshold = m_ida.GetThreshold();
	while (length > 0)
	{
		size_t len = STDMIN(length, buf.size());
		m_ida.ChannelData(0xffffffff, begin, len, false);
		for (unsigned int i=0; i<threshold-1; i++)
		{
			m_rng.GenerateBlock(buf, len);
			m_ida.ChannelData(i, buf, len, false);
		}
		length -= len;
		begin += len;
	}

	if (messageEnd)
	{
		m_ida.SetAutoSignalPropagation(messageEnd-1);
		if (m_pad)
		{
			SecretSharing::Put(1);
			while (m_ida.InputBuffered(0xffffffff) > 0)
				SecretSharing::Put(0);
		}
		m_ida.ChannelData(0xffffffff, NULL, 0, true);
		for (unsigned int i=0; i<m_ida.GetThreshold()-1; i++)
			m_ida.ChannelData(i, NULL, 0, true);
	}

	return 0;
}

void SecretRecovery::IsolatedInitialize(const NameValuePairs &parameters)
{
	m_pad = parameters.GetValueWithDefault("RemovePadding", true);
	RawIDA::IsolatedInitialize(CombinedNameValuePairs(parameters, MakeParameters("OutputChannelID", (word32)0xffffffff)));
}

void SecretRecovery::FlushOutputQueues()
{
	if (m_pad)
		m_outputQueues[0].TransferTo(*AttachedTransformation(), m_outputQueues[0].MaxRetrievable()-4);
	else
		m_outputQueues[0].TransferTo(*AttachedTransformation());
}

void SecretRecovery::OutputMessageEnds()
{
	if (m_pad)
	{
		PaddingRemover paddingRemover(new Redirector(*AttachedTransformation()));
		m_outputQueues[0].TransferAllTo(paddingRemover);
	}

	if (GetAutoSignalPropagation() != 0)
		AttachedTransformation()->MessageEnd(GetAutoSignalPropagation()-1);
}

// ****************************************************************

void InformationDispersal::IsolatedInitialize(const NameValuePairs &parameters)
{
	m_nextChannel = 0;
	m_pad = parameters.GetValueWithDefault("AddPadding", true);
	m_ida.IsolatedInitialize(parameters);
}

size_t InformationDispersal::Put2(const byte *begin, size_t length, int messageEnd, bool blocking)
{
	if (!blocking)
		throw BlockingInputOnly("InformationDispersal");
	
	while (length--)
	{
		m_ida.ChannelData(m_nextChannel, begin, 1, false);
		begin++;
		m_nextChannel++;
		if (m_nextChannel == m_ida.GetThreshold())
			m_nextChannel = 0;
	}

	if (messageEnd)
	{
		m_ida.SetAutoSignalPropagation(messageEnd-1);
		if (m_pad)
			InformationDispersal::Put(1);
		for (word32 i=0; i<m_ida.GetThreshold(); i++)
			m_ida.ChannelData(i, NULL, 0, true);
	}

	return 0;
}

void InformationRecovery::IsolatedInitialize(const NameValuePairs &parameters)
{
	m_pad = parameters.GetValueWithDefault("RemovePadding", true);
	RawIDA::IsolatedInitialize(parameters);
}

void InformationRecovery::FlushOutputQueues()
{
	while (m_outputQueues[0].AnyRetrievable())
	{
		for (unsigned int i=0; i<m_outputChannelIds.size(); i++)
			m_outputQueues[i].TransferTo(m_queue, 1);
	}

	if (m_pad)
		m_queue.TransferTo(*AttachedTransformation(), m_queue.MaxRetrievable()-4*m_threshold);
	else
		m_queue.TransferTo(*AttachedTransformation());
}

void InformationRecovery::OutputMessageEnds()
{
	if (m_pad)
	{
		PaddingRemover paddingRemover(new Redirector(*AttachedTransformation()));
		m_queue.TransferAllTo(paddingRemover);
	}

	if (GetAutoSignalPropagation() != 0)
		AttachedTransformation()->MessageEnd(GetAutoSignalPropagation()-1);
}

size_t PaddingRemover::Put2(const byte *begin, size_t length, int messageEnd, bool blocking)
{
	if (!blocking)
		throw BlockingInputOnly("PaddingRemover");

	const byte *const end = begin + length;

	if (m_possiblePadding)
	{
		size_t len = find_if(begin, end, bind2nd(not_equal_to<byte>(), 0)) - begin;
		m_zeroCount += len;
		begin += len;
		if (begin == end)
			return 0;

		AttachedTransformation()->Put(1);
		while (m_zeroCount--)
			AttachedTransformation()->Put(0);
		AttachedTransformation()->Put(*begin++);
		m_possiblePadding = false;
	}

#if defined(_MSC_VER) && !defined(__MWERKS__) && (_MSC_VER <= 1300)
	// VC60 and VC7 workaround: built-in reverse_iterator has two template parameters, Dinkumware only has one
	typedef reverse_bidirectional_iterator<const byte *, const byte> RevIt;
#elif defined(_RWSTD_NO_CLASS_PARTIAL_SPEC)
	typedef reverse_iterator<const byte *, random_access_iterator_tag, const byte> RevIt;
#else
	typedef reverse_iterator<const byte *> RevIt;
#endif
	const byte *x = find_if(RevIt(end), RevIt(begin), bind2nd(not_equal_to<byte>(), 0)).base();
	if (x != begin && *(x-1) == 1)
	{
		AttachedTransformation()->Put(begin, x-begin-1);
		m_possiblePadding = true;
		m_zeroCount = end - x;
	}
	else
		AttachedTransformation()->Put(begin, end-begin);

	if (messageEnd)
	{
		m_possiblePadding = false;
		Output(0, begin, length, messageEnd, blocking);
	}
	return 0;
}

NAMESPACE_END

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费观看日韩电影| 成人app网站| 亚洲丝袜精品丝袜在线| 日韩一级高清毛片| av一区二区三区| 久久精品国产一区二区三区免费看| 国产精品免费丝袜| 日韩一区二区三区免费看 | 国产一区二区三区免费| 亚洲欧美日韩国产手机在线| 精品国产乱码91久久久久久网站| 在线精品视频免费观看| 福利电影一区二区三区| 日本va欧美va精品发布| 亚洲一区二区av电影| 国产精品毛片大码女人| 久久无码av三级| 欧美一区二区视频网站| 欧美在线啊v一区| 成人app在线| 国产91色综合久久免费分享| 另类小说色综合网站| 亚洲18影院在线观看| 亚洲人精品午夜| 国产精品久线在线观看| 日韩午夜三级在线| 在线成人免费观看| 欧美欧美欧美欧美首页| 91老师片黄在线观看| 成人综合婷婷国产精品久久免费| 国产毛片精品视频| 久久97超碰色| 日本怡春院一区二区| 日韩影院精彩在线| 偷窥国产亚洲免费视频 | 国产盗摄精品一区二区三区在线| 日韩有码一区二区三区| 日韩av一区二区在线影视| 亚洲国产乱码最新视频| 亚洲影院理伦片| 亚洲精品成人天堂一二三| 亚洲欧美日韩国产一区二区三区| 国产精品高潮久久久久无| 国产精品久久久久久户外露出 | 久久综合999| wwww国产精品欧美| 久久久精品黄色| 国产欧美日韩久久| 国产日韩欧美制服另类| 国产日产欧美精品一区二区三区| 国产欧美视频一区二区| 国产精品视频麻豆| 国产精品国产三级国产有无不卡| 国产精品国产三级国产三级人妇 | 中文字幕在线不卡国产视频| 中文字幕一区二区三| 亚洲欧美偷拍三级| 亚洲国产精品久久不卡毛片| 日韩不卡一区二区| 国产在线精品一区在线观看麻豆| 国产suv精品一区二区6| 不卡一区二区三区四区| 在线欧美小视频| 欧美日本精品一区二区三区| 日韩欧美一级特黄在线播放| 久久一夜天堂av一区二区三区| 日本一区二区综合亚洲| 亚洲人一二三区| 天天亚洲美女在线视频| 韩国精品在线观看| 91亚洲国产成人精品一区二三| 欧美日韩一区二区在线观看视频 | 欧美一区二区三区成人| 国产亚洲自拍一区| 亚洲一区二区精品视频| 琪琪一区二区三区| zzijzzij亚洲日本少妇熟睡| 精品视频在线看| 精品91自产拍在线观看一区| 综合久久国产九一剧情麻豆| 午夜日韩在线电影| 国产一区久久久| 欧美丝袜丝交足nylons| 久久天堂av综合合色蜜桃网 | 男女视频一区二区| 成a人片亚洲日本久久| 欧美一区二区私人影院日本| 国产精品毛片久久久久久久| 日韩av在线播放中文字幕| 不卡一区二区三区四区| 日韩一区二区三区四区五区六区| 中文字幕一区三区| 蜜臀精品一区二区三区在线观看 | 欧美日本乱大交xxxxx| 欧美激情一区在线观看| 日本视频在线一区| 97久久超碰国产精品| 日韩精品影音先锋| 亚洲综合免费观看高清在线观看| 精品午夜久久福利影院| 欧美日精品一区视频| 国产精品乱码人人做人人爱| 狂野欧美性猛交blacked| 99国产精品久久久久| 精品久久久久久最新网址| 亚洲一区二区三区四区中文字幕 | 国产成人啪午夜精品网站男同| 欧美色涩在线第一页| 国产精品久久久久久久久果冻传媒| 久久99国产精品麻豆| 欧美日韩国产影片| 亚洲激情第一区| thepron国产精品| 久久久精品国产免费观看同学| 久久精品久久精品| 欧美一区二区视频免费观看| 亚洲成人精品一区| 在线观看亚洲精品视频| 亚洲同性同志一二三专区| 国产乱人伦偷精品视频免下载| 7777精品伊人久久久大香线蕉最新版| 亚洲乱码日产精品bd| aaa亚洲精品| 日韩毛片精品高清免费| 成人免费的视频| 国产婷婷一区二区| 国产精品夜夜嗨| 久久久久久久综合日本| 久久99九九99精品| 精品久久久久久久久久久久久久久 | 国产在线一区观看| 精品久久久久久综合日本欧美 | 91网站在线播放| 中文字幕在线不卡一区 | 99re热这里只有精品免费视频| 欧美猛男gaygay网站| 国产精品久久久久久久第一福利| 国产成都精品91一区二区三| 久久综合中文字幕| 激情小说欧美图片| 2024国产精品视频| 国产在线一区二区| 久久久久青草大香线综合精品| 国产精品一区二区在线看| 国产欧美精品一区| www.欧美精品一二区| 亚洲猫色日本管| 欧美日韩高清一区二区三区| 亚洲va欧美va国产va天堂影院| 777久久久精品| 韩国一区二区三区| 国产精品视频一二三区| 一本久久综合亚洲鲁鲁五月天| 一区二区三区成人| 欧美日韩国产一区二区三区地区| 石原莉奈在线亚洲三区| 26uuu亚洲综合色欧美| 高清成人免费视频| 亚洲欧美日韩在线| 欧美三级电影在线观看| 久久国产夜色精品鲁鲁99| 久久综合999| 91麻豆精东视频| 五月激情丁香一区二区三区| 久久综合九色欧美综合狠狠| 成人黄色片在线观看| 亚洲动漫第一页| 久久久天堂av| 欧美视频你懂的| 另类欧美日韩国产在线| 国产精品伦一区二区三级视频| 色综合久久中文综合久久97| 日韩影视精彩在线| 日本一区二区三区久久久久久久久不 | 日产国产高清一区二区三区 | 综合久久国产九一剧情麻豆| 欧美日韩精品一区二区天天拍小说| 九色综合国产一区二区三区| 最新日韩av在线| 欧美一区二区三区四区视频| 成+人+亚洲+综合天堂| 日韩不卡免费视频| 亚洲人亚洲人成电影网站色| 欧美一区二区在线视频| 91免费在线播放| 久久精品国产一区二区三区免费看| 国产精品不卡在线| 91精品国产综合久久国产大片| 成人高清在线视频| 日本成人中文字幕| 亚洲欧美日韩久久精品| www国产精品av| 欧美三日本三级三级在线播放| 国产另类ts人妖一区二区| 亚洲国产欧美日韩另类综合 | 欧美日韩在线直播| 成人黄色片在线观看| 久久精品国产一区二区三| 亚洲妇女屁股眼交7| 成人免费在线视频|