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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gfpcrypt.cpp

?? 研讀AxCrypt對加解密的處理方法
?? CPP
字號:
// dsa.cpp - written and placed in the public domain by Wei Dai

#include "pch.h"

#ifndef CRYPTOPP_IMPORTS

#include "gfpcrypt.h"
#include "asn.h"
#include "oids.h"
#include "nbtheory.h"

NAMESPACE_BEGIN(CryptoPP)

void TestInstantiations_gfpcrypt()
{
	GDSA<SHA>::Signer test;
	GDSA<SHA>::Verifier test1;
	DSA::Signer test5(NullRNG(), 100);
	DSA::Signer test2(test5);
	NR<SHA>::Signer test3;
	NR<SHA>::Verifier test4;
	DLIES<>::Encryptor test6;
	DLIES<>::Decryptor test7;
}

void DL_GroupParameters_DSA::GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg)
{
	Integer p, q, g;

	if (alg.GetValue("Modulus", p) && alg.GetValue("SubgroupGenerator", g))
	{
		q = alg.GetValueWithDefault("SubgroupOrder", ComputeGroupOrder(p)/2);
	}
	else
	{
		int modulusSize = 1024;
		alg.GetIntValue("ModulusSize", modulusSize) || alg.GetIntValue("KeySize", modulusSize);

		if (!DSA::IsValidPrimeLength(modulusSize))
			throw InvalidArgument("DSA: not a valid prime length");

		SecByteBlock seed(SHA::DIGESTSIZE);
		Integer h;
		int c;

		do
		{
			rng.GenerateBlock(seed, SHA::DIGESTSIZE);
		} while (!DSA::GeneratePrimes(seed, SHA::DIGESTSIZE*8, c, p, modulusSize, q));

		do
		{
			h.Randomize(rng, 2, p-2);
			g = a_exp_b_mod_c(h, (p-1)/q, p);
		} while (g <= 1);
	}

	Initialize(p, q, g);
}

bool DL_GroupParameters_DSA::ValidateGroup(RandomNumberGenerator &rng, unsigned int level) const
{
	bool pass = DL_GroupParameters_GFP::ValidateGroup(rng, level);
	pass = pass && DSA::IsValidPrimeLength(GetModulus().BitCount());
	pass = pass && GetSubgroupOrder().BitCount() == 160;
	return pass;
}

void DL_SignatureMessageEncodingMethod_DSA::ComputeMessageRepresentative(RandomNumberGenerator &rng, 
	const byte *recoverableMessage, unsigned int recoverableMessageLength,
	HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty,
	byte *representative, unsigned int representativeBitLength) const
{
	assert(recoverableMessageLength == 0);
	assert(hashIdentifier.second == 0);
	const unsigned int representativeByteLength = BitsToBytes(representativeBitLength);
	const unsigned int digestSize = hash.DigestSize();
	const unsigned int paddingLength = SaturatingSubtract(representativeByteLength, digestSize);

	memset(representative, 0, paddingLength);
	hash.TruncatedFinal(representative+paddingLength, STDMIN(representativeByteLength, digestSize));

	if (digestSize*8 > representativeBitLength)
	{
		Integer h(representative, representativeByteLength);
		h >>= representativeByteLength*8 - representativeBitLength;
		h.Encode(representative, representativeByteLength);
	}
}

void DL_SignatureMessageEncodingMethod_NR::ComputeMessageRepresentative(RandomNumberGenerator &rng, 
	const byte *recoverableMessage, unsigned int recoverableMessageLength,
	HashTransformation &hash, HashIdentifier hashIdentifier, bool messageEmpty,
	byte *representative, unsigned int representativeBitLength) const
{
	assert(recoverableMessageLength == 0);
	assert(hashIdentifier.second == 0);
	const unsigned int representativeByteLength = BitsToBytes(representativeBitLength);
	const unsigned int digestSize = hash.DigestSize();
	const unsigned int paddingLength = SaturatingSubtract(representativeByteLength, digestSize);

	memset(representative, 0, paddingLength);
	hash.TruncatedFinal(representative+paddingLength, STDMIN(representativeByteLength, digestSize));

	if (digestSize*8 >= representativeBitLength)
	{
		Integer h(representative, representativeByteLength);
		h >>= representativeByteLength*8 - representativeBitLength + 1;
		h.Encode(representative, representativeByteLength);
	}
}

bool DL_GroupParameters_IntegerBased::ValidateGroup(RandomNumberGenerator &rng, unsigned int level) const
{
	const Integer &p = GetModulus(), &q = GetSubgroupOrder();

	bool pass = true;
	pass = pass && p > Integer::One() && p.IsOdd();
	pass = pass && q > Integer::One() && q.IsOdd();

	if (level >= 1)
		pass = pass && GetCofactor() > Integer::One() && GetGroupOrder() % q == Integer::Zero();
	if (level >= 2)
		pass = pass && VerifyPrime(rng, q, level-2) && VerifyPrime(rng, p, level-2);

	return pass;
}

bool DL_GroupParameters_IntegerBased::ValidateElement(unsigned int level, const Integer &g, const DL_FixedBasePrecomputation<Integer> *gpc) const
{
	const Integer &p = GetModulus(), &q = GetSubgroupOrder();

	bool pass = true;
	pass = pass && GetFieldType() == 1 ? g.IsPositive() : g.NotNegative();
	pass = pass && g < p && !IsIdentity(g);

	if (level >= 1)
	{
		if (gpc)
			pass = pass && gpc->Exponentiate(GetGroupPrecomputation(), Integer::One()) == g;
	}
	if (level >= 2)
	{
		if (GetFieldType() == 2)
			pass = pass && Jacobi(g*g-4, p)==-1;

		// verifying that Lucas((p+1)/2, w, p)==2 is omitted because it's too costly
		// and at most 1 bit is leaked if it's false
		bool fullValidate = (GetFieldType() == 2 && level >= 3) || !FastSubgroupCheckAvailable();

		if (fullValidate)
			pass = pass && IsIdentity(gpc ? gpc->Exponentiate(GetGroupPrecomputation(), q) : ExponentiateElement(g, q));
		else if (GetFieldType() == 1)
			pass = pass && Jacobi(g, p) == 1;
	}

	return pass;
}

void DL_GroupParameters_IntegerBased::GenerateRandom(RandomNumberGenerator &rng, const NameValuePairs &alg)
{
	Integer p, q, g;
	
	if (alg.GetValue("Modulus", p) && alg.GetValue("SubgroupGenerator", g))
	{
		q = alg.GetValueWithDefault("SubgroupOrder", ComputeGroupOrder(p)/2);
	}
	else
	{
		int modulusSize, subgroupOrderSize;

		if (!alg.GetIntValue("ModulusSize", modulusSize))
			modulusSize = alg.GetIntValueWithDefault("KeySize", 2048);

		if (!alg.GetIntValue("SubgroupOrderSize", subgroupOrderSize))
			subgroupOrderSize = GetDefaultSubgroupOrderSize(modulusSize);

		PrimeAndGenerator pg;
		pg.Generate(GetFieldType() == 1 ? 1 : -1, rng, modulusSize, subgroupOrderSize);
		p = pg.Prime();
		q = pg.SubPrime();
		g = pg.Generator();
	}

	Initialize(p, q, g);
}

Integer DL_GroupParameters_IntegerBased::DecodeElement(const byte *encoded, bool checkForGroupMembership) const
{
	Integer g(encoded, GetModulus().ByteCount());
	if (!ValidateElement(1, g, NULL))
		throw DL_BadElement();
	return g;
}

void DL_GroupParameters_IntegerBased::BERDecode(BufferedTransformation &bt)
{
	BERSequenceDecoder parameters(bt);
		Integer p(parameters);
		Integer q(parameters);
		Integer g;
		if (parameters.EndReached())
		{
			g = q;
			q = ComputeGroupOrder(p) / 2;
		}
		else
			g.BERDecode(parameters);
	parameters.MessageEnd();

	SetModulusAndSubgroupGenerator(p, g);
	SetSubgroupOrder(q);
}

void DL_GroupParameters_IntegerBased::DEREncode(BufferedTransformation &bt) const
{
	DERSequenceEncoder parameters(bt);
		GetModulus().DEREncode(parameters);
		m_q.DEREncode(parameters);
		GetSubgroupGenerator().DEREncode(parameters);
	parameters.MessageEnd();
}

bool DL_GroupParameters_IntegerBased::GetVoidValue(const char *name, const std::type_info &valueType, void *pValue) const
{
	return GetValueHelper<DL_GroupParameters<Element> >(this, name, valueType, pValue)
		CRYPTOPP_GET_FUNCTION_ENTRY(Modulus);
}

void DL_GroupParameters_IntegerBased::AssignFrom(const NameValuePairs &source)
{
	AssignFromHelper(this, source)
		CRYPTOPP_SET_FUNCTION_ENTRY2(Modulus, SubgroupGenerator)
		CRYPTOPP_SET_FUNCTION_ENTRY(SubgroupOrder)
		;
}

OID DL_GroupParameters_IntegerBased::GetAlgorithmID() const
{
	return ASN1::id_dsa();
}

void DL_GroupParameters_GFP::SimultaneousExponentiate(Element *results, const Element &base, const Integer *exponents, unsigned int exponentsCount) const
{
	ModularArithmetic ma(GetModulus());
	ma.SimultaneousExponentiate(results, base, exponents, exponentsCount);
}

DL_GroupParameters_GFP::Element DL_GroupParameters_GFP::MultiplyElements(const Element &a, const Element &b) const
{
	return a_times_b_mod_c(a, b, GetModulus());
}

DL_GroupParameters_GFP::Element DL_GroupParameters_GFP::CascadeExponentiate(const Element &element1, const Integer &exponent1, const Element &element2, const Integer &exponent2) const
{
	ModularArithmetic ma(GetModulus());
	return ma.CascadeExponentiate(element1, exponent1, element2, exponent2);
}

Integer DL_GroupParameters_IntegerBased::GetMaxExponent() const
{
	return STDMIN(GetSubgroupOrder()-1, Integer::Power2(2*DiscreteLogWorkFactor(GetFieldType()*GetModulus().BitCount())));
}

unsigned int DL_GroupParameters_IntegerBased::GetDefaultSubgroupOrderSize(unsigned int modulusSize) const
{
	return 2*DiscreteLogWorkFactor(GetFieldType()*modulusSize);
}

NAMESPACE_END

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品888| 色婷婷综合久久久久中文一区二区 | 亚洲人成精品久久久久| 宅男在线国产精品| av福利精品导航| 蜜臀av性久久久久av蜜臀妖精| 国产精品久久久久aaaa樱花| 日韩视频国产视频| 欧美视频在线观看一区| 国产一区二区毛片| 日本女优在线视频一区二区| 亚洲精选在线视频| 国产精品久久久久久久久快鸭 | 日本一不卡视频| 专区另类欧美日韩| 国产欧美日韩麻豆91| 日韩一区二区在线免费观看| 欧美网站大全在线观看| 99久久国产综合精品麻豆| 精品亚洲成a人在线观看| 五月天激情综合网| 亚洲尤物在线视频观看| 国产精品乱人伦| 久久久亚洲综合| 日韩一区二区三区高清免费看看 | 国产欧美一区二区三区网站| 日韩精品影音先锋| 欧美精品三级在线观看| 欧美日韩一区在线| 91极品视觉盛宴| 色94色欧美sute亚洲线路一ni| 国产成人精品一区二区三区四区 | 天天色天天爱天天射综合| 亚洲激情欧美激情| 亚洲欧美日韩在线不卡| 亚洲欧洲性图库| 国产精品麻豆网站| 日韩一区有码在线| 亚洲欧美一区二区不卡| 国产精品传媒视频| 亚洲日韩欧美一区二区在线| 亚洲免费av高清| 亚洲午夜一二三区视频| 亚洲观看高清完整版在线观看| 亚洲在线免费播放| 亚洲国产乱码最新视频 | 久久久亚洲精品石原莉奈| 亚洲精品一区二区三区香蕉| 久久夜色精品国产噜噜av| 久久综合久色欧美综合狠狠| 久久午夜免费电影| 久久久久久久久久电影| 国产日韩精品一区二区三区| 国产精品久久一级| 亚洲欧美激情插| 亚洲成av人片一区二区三区| 青娱乐精品视频| 国产一区999| av中文字幕在线不卡| 欧洲一区二区三区免费视频| 欧美日本在线播放| 日韩免费成人网| 国产欧美精品一区| 一区二区三区精品久久久| 午夜av电影一区| 国产一区欧美一区| 99久久99久久精品免费看蜜桃| 在线看国产一区二区| 日韩写真欧美这视频| 久久精品视频一区二区三区| 亚洲欧美综合另类在线卡通| 亚洲一二三四在线| 国内成人自拍视频| 91小视频在线| 日韩精品影音先锋| 91精品久久久久久久99蜜桃| 国产日韩影视精品| 亚洲午夜久久久久| 国产自产v一区二区三区c| 91丨porny丨国产入口| 欧美日韩一区二区三区不卡| 久久久久久久久久久久久夜| 亚洲精品福利视频网站| 老司机精品视频导航| 91美女福利视频| 精品福利二区三区| 亚洲一区在线电影| 国产一区二区三区香蕉| 在线视频一区二区三| 精品国产青草久久久久福利| 亚洲人成网站影音先锋播放| 开心九九激情九九欧美日韩精美视频电影| 粉嫩一区二区三区在线看| 欧美精品v日韩精品v韩国精品v| 国产欧美日韩在线看| 日本欧美一区二区三区乱码| 成人av在线资源| 日韩欧美一区二区免费| 亚洲免费在线观看视频| 国产一区二区在线免费观看| 欧洲一区二区三区免费视频| 国产片一区二区三区| 美女视频黄久久| 欧美亚洲禁片免费| 国产精品婷婷午夜在线观看| 日本成人在线视频网站| 91电影在线观看| 国产精品久久久久久久久免费樱桃| 蜜臀av一区二区在线免费观看| 欧美性大战久久久久久久| 国产精品网站一区| 黑人巨大精品欧美黑白配亚洲| 欧美日韩国产成人在线免费| ...中文天堂在线一区| 韩国精品在线观看| 欧美一区二区视频在线观看2022| 亚洲欧美日本韩国| proumb性欧美在线观看| 久久久久国产成人精品亚洲午夜| 午夜久久久久久| 在线观看国产一区二区| 日韩一区在线看| 成人av先锋影音| 国产欧美视频一区二区| 国产精品66部| 欧美va天堂va视频va在线| 蜜桃视频一区二区三区在线观看| 精品视频在线视频| 亚洲成人av一区二区三区| 欧美又粗又大又爽| 一区二区三区四区在线免费观看 | 色婷婷综合在线| 亚洲乱码中文字幕| 色8久久人人97超碰香蕉987| 亚洲色图视频网站| 99精品国产视频| 亚洲三级电影全部在线观看高清| 91在线视频免费91| 国产精品福利一区二区| 99精品视频中文字幕| 亚洲天堂2016| 日本韩国一区二区| 亚洲成人中文在线| 欧美精品精品一区| 午夜影院在线观看欧美| 7777精品伊人久久久大香线蕉| 奇米影视在线99精品| 日韩精品一区二区三区中文精品| 青娱乐精品在线视频| 久久久久高清精品| av资源网一区| 亚洲成av人影院在线观看网| 欧美一区二区三区免费| 黑人巨大精品欧美黑白配亚洲| 国产精品美女久久久久久2018| 色域天天综合网| 欧美aa在线视频| 国产亚洲一二三区| 色久优优欧美色久优优| 亚洲高清免费视频| 欧美α欧美αv大片| 成人午夜私人影院| 亚洲一线二线三线视频| 91.xcao| 国产精品性做久久久久久| 国产精品久久久久桃色tv| 91久久线看在观草草青青| 亚洲高清在线精品| 久久久国产综合精品女国产盗摄| 成人av电影在线网| 五月天欧美精品| 国产欧美视频一区二区| 欧美三电影在线| 国产一区二区精品在线观看| 一区二区三区在线播放| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 久久综合资源网| 在线视频中文字幕一区二区| 激情成人午夜视频| 亚洲在线免费播放| 久久精品一区二区三区四区| 91丨国产丨九色丨pron| 蜜桃传媒麻豆第一区在线观看| 国产精品成人免费| 欧美大肚乱孕交hd孕妇| 91尤物视频在线观看| 激情综合色丁香一区二区| 亚洲欧美电影一区二区| 久久免费看少妇高潮| 在线观看视频一区| 国产丶欧美丶日本不卡视频| 日韩avvvv在线播放| 国产精品久久久久天堂| 精品国产欧美一区二区| 欧美色图免费看| 懂色av一区二区三区蜜臀| 日韩电影免费在线看| 一区二区三区欧美激情| 日本一区二区免费在线| 精品日韩一区二区三区|