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

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

?? rw.cpp

?? 300種加密解密算法
?? CPP
字號(hào):
// rw.cpp - written and placed in the public domain by Wei Dai

#include "pch.h"
#include "rw.h"
#include "nbtheory.h"
#include "asn.h"

#include "pubkey.cpp"

NAMESPACE_BEGIN(CryptoPP)

template<> const byte EMSA2DigestDecoration<SHA>::decoration = 0x33;
template<> const byte EMSA2DigestDecoration<RIPEMD160>::decoration = 0x31;

template class DigestSignerTemplate<EMSA2Pad, InvertableRWFunction<IFSSA_R> >;
template class DigestVerifierTemplate<EMSA2Pad, RWFunction<IFSSA_R> >;

void EMSA2Pad::Pad(RandomNumberGenerator &, const byte *input, unsigned int inputLen, byte *emsa2Block, unsigned int emsa2BlockLen) const
{
	assert (inputLen > 0 && inputLen <= MaxUnpaddedLength(emsa2BlockLen));

	// convert from bit length to byte length
	emsa2BlockLen++;
	if (emsa2BlockLen % 8 > 1)
	{
		emsa2Block[0] = 0;
		emsa2Block++;
	}
	emsa2BlockLen /= 8;

	emsa2Block[0] = input[0];			// indicate empty or non-empty message
	memset(emsa2Block+1, 0xbb, emsa2BlockLen-inputLen-2);	// padd with 0xbb
	emsa2Block[emsa2BlockLen-inputLen-1] = 0xba;	// separator
	memcpy(emsa2Block+emsa2BlockLen-inputLen, input+1, inputLen-1);
	emsa2Block[emsa2BlockLen-1] = 0xcc;	// make it congruent to 12 mod 16
}

unsigned int EMSA2Pad::Unpad(const byte *emsa2Block, unsigned int emsa2BlockLen, byte *output) const
{
	// convert from bit length to byte length
	emsa2BlockLen++;
	if (emsa2BlockLen % 8 > 1)
	{
		if (emsa2Block[0] != 0)
			return 0;
		emsa2Block++;
	}
	emsa2BlockLen /= 8;

	// check last byte
	if (emsa2Block[emsa2BlockLen-1] != 0xcc)
		return 0;

	// skip past the padding until we find the seperator
	unsigned i=1;
	while (i<emsa2BlockLen-1 && emsa2Block[i++] != 0xba)
		if (emsa2Block[i-1] != 0xbb)     // not valid padding
			return 0;
	assert(i==emsa2BlockLen-1 || emsa2Block[i-1]==0xba);

	unsigned int outputLen = emsa2BlockLen - i;
	output[0] = emsa2Block[0];
	memcpy (output+1, emsa2Block+i, outputLen-1);
	return outputLen;
}

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

template <word r>
RWFunction<r>::RWFunction(const Integer &n)
	: n(n)
{
}

template <word r>
RWFunction<r>::RWFunction(BufferedTransformation &bt)
{
	BERSequenceDecoder seq(bt);
	n.BERDecode(seq);
}

template <word r>
RWFunction<r>::~RWFunction()
{
}

template <word r>
void RWFunction<r>::DEREncode(BufferedTransformation &bt) const
{
	DERSequenceEncoder seq(bt);
	n.DEREncode(seq);
}

template <word r>
Integer RWFunction<r>::ApplyFunction(const Integer &in) const
{
	Integer out = in.Squared()%n;
	const word r2 = r/2;
	const word r3a = (16 + 5 - r) % 16;	// n%16 could be 5 or 13
	const word r3b = (16 + 13 - r) % 16;
	const word r4 = (8 + 5 - r/2) % 8;	// n%8 == 5
	switch (out % 16)
	{
	case r:
		break;
	case r2:
	case r2+8:
		out <<= 1;
		break;
	case r3a:
	case r3b:
		out.Negate();
		out += n;
		break;
	case r4:
	case r4+8:
		out.Negate();
		out += n;
		out <<= 1;
		break;
	default:
		out = Integer::Zero();
	}
	return out;
}

// *****************************************************************************
// private key operations:

template <word r>
InvertableRWFunction<r>::InvertableRWFunction(const Integer &n, const Integer &p, const Integer &q, const Integer &u)
	: RWFunction<r>(n), p(p), q(q), u(u)
{
	assert(p*q==n);
	assert(u*q%p==1);
}

// generate a random private key
template <word r>
InvertableRWFunction<r>::InvertableRWFunction(RandomNumberGenerator &rng, unsigned int keybits)
{
	assert(keybits >= 16);
	// generate 2 random primes of suitable size
	if (keybits%2==0)
	{
		const Integer minP = Integer(182) << (keybits/2-8);
		const Integer maxP = Integer::Power2(keybits/2)-1;
		p.Randomize(rng, minP, maxP, Integer::PRIME, 3, 8);
		q.Randomize(rng, minP, maxP, Integer::PRIME, 7, 8);
	}
	else
	{
		const Integer minP = Integer::Power2((keybits-1)/2);
		const Integer maxP = Integer(181) << ((keybits+1)/2-8);
		p.Randomize(rng, minP, maxP, Integer::PRIME, 3, 8);
		q.Randomize(rng, minP, maxP, Integer::PRIME, 7, 8);
	}

	n = p * q;
	assert(n.BitCount() == keybits);
	u = EuclideanMultiplicativeInverse(q, p);
	assert(u*q%p==1);
}

template <word r>
InvertableRWFunction<r>::InvertableRWFunction(BufferedTransformation &bt)
{
	BERSequenceDecoder seq(bt);
	n.BERDecode(seq);
	p.BERDecode(seq);
	q.BERDecode(seq);
	u.BERDecode(seq);
}

template <word r>
InvertableRWFunction<r>::~InvertableRWFunction()
{
}

template <word r>
void InvertableRWFunction<r>::DEREncode(BufferedTransformation &bt) const
{
	DERSequenceEncoder seq(bt);
	n.DEREncode(seq);
	p.DEREncode(seq);
	q.DEREncode(seq);
	u.DEREncode(seq);
}

template <word r>
Integer InvertableRWFunction<r>::CalculateInverse(const Integer &in) const
{
	Integer cp=in%p, cq=in%q;

	if (Jacobi(cp, p) * Jacobi(cq, q) != 1)
	{
		cp = cp%2 ? (cp+p) >> 1 : cp >> 1;
		cq = cq%2 ? (cq+q) >> 1 : cq >> 1;
	}

	cp = ModularSquareRoot(cp, p);
	cq = ModularSquareRoot(cq, q);

	Integer out = CRT(cq, q, cp, p, u);

	return STDMIN(out, n-out);
}

template class RWFunction<IFSSA_R>;
template class InvertableRWFunction<IFSSA_R>;

NAMESPACE_END

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美影音先锋| 91在线无精精品入口| 日韩影院精彩在线| 久久青草欧美一区二区三区| 亚洲精品成人少妇| 中文字幕一区二区不卡| 欧美激情中文字幕一区二区| 日韩午夜av电影| 欧美一区二区三区免费观看视频 | 国产精品资源网| 亚洲国产美国国产综合一区二区| 亚洲精品日产精品乱码不卡| 亚洲精品自拍动漫在线| 一区二区日韩电影| 亚洲高清免费观看高清完整版在线观看| 亚洲欧美另类小说视频| 一区二区三区四区在线| 亚洲在线视频一区| 日韩在线播放一区二区| 免费高清在线一区| 国产经典欧美精品| 91在线高清观看| 精品视频在线免费| 精品奇米国产一区二区三区| 久久久久久一级片| 亚洲免费观看在线观看| 亚洲电影中文字幕在线观看| 视频一区在线播放| 黄网站免费久久| 成人av手机在线观看| 色久优优欧美色久优优| 欧美高清dvd| 久久久精品综合| 亚洲天堂网中文字| 日本亚洲欧美天堂免费| 国产高清精品久久久久| 色婷婷综合久久久久中文一区二区| 欧美午夜电影网| 精品日韩一区二区三区 | 麻豆91免费观看| 99精品国产99久久久久久白柏| 国产ts人妖一区二区| 91蜜桃传媒精品久久久一区二区| 欧美色男人天堂| 久久久五月婷婷| 亚洲一区二区视频在线| 国产一区在线不卡| 91无套直看片红桃| 日韩欧美中文一区二区| 国产精品色呦呦| 日日夜夜免费精品| 成人免费高清在线观看| 欧美日韩一卡二卡三卡 | 欧美成人艳星乳罩| 亚洲三级电影网站| 久久精品国产77777蜜臀| 不卡视频一二三| 日韩精品中午字幕| 一区二区三区日韩精品视频| 韩国精品免费视频| 欧美视频三区在线播放| 精品区一区二区| 亚洲成人激情自拍| 成人理论电影网| 日韩精品一区二区在线| 亚洲免费资源在线播放| 激情综合网最新| 欧美精品久久一区| 亚洲免费观看在线观看| 国产成人在线电影| 91精品国模一区二区三区| 欧美日韩一区二区三区高清| 国产精品你懂的在线欣赏| 麻豆91免费观看| 777色狠狠一区二区三区| 亚洲靠逼com| 成人蜜臀av电影| 精品国产露脸精彩对白| 午夜精品福利视频网站| 色诱亚洲精品久久久久久| 国产亚洲欧美在线| 精品一区二区三区免费视频| 精品视频色一区| 亚洲一级电影视频| 91老师片黄在线观看| 欧美国产综合色视频| 久久成人免费网| 91精品久久久久久蜜臀| 亚洲高清免费观看高清完整版在线观看| 91在线精品秘密一区二区| 国产目拍亚洲精品99久久精品| 久久精品国产一区二区| 91精品婷婷国产综合久久性色| 亚洲最大成人网4388xx| 色婷婷亚洲精品| 日韩一区日韩二区| 白白色 亚洲乱淫| 国产精品你懂的| av综合在线播放| 亚洲欧洲av一区二区三区久久| 国产99久久久久久免费看农村| 精品国产乱码久久久久久老虎| 麻豆一区二区99久久久久| 欧美疯狂做受xxxx富婆| 婷婷综合另类小说色区| 欧美精品粉嫩高潮一区二区| 视频一区中文字幕| 日韩欧美国产系列| 老司机免费视频一区二区三区| 日韩欧美国产成人一区二区| 久久国内精品自在自线400部| 日韩精品在线一区二区| 黄色小说综合网站| 欧美国产国产综合| av成人动漫在线观看| 亚洲视频小说图片| 欧洲一区在线电影| 日本成人超碰在线观看| 日韩欧美高清一区| 国产精品亚洲一区二区三区妖精| 欧美激情一区二区三区不卡| 99久久免费精品高清特色大片| 一区二区三区在线视频观看58| 欧美性感一类影片在线播放| 日精品一区二区三区| 精品蜜桃在线看| 成人综合在线观看| 亚洲最新视频在线观看| 在线综合视频播放| 国产乱码精品一品二品| 国产精品国产精品国产专区不蜜| 一本色道久久综合亚洲aⅴ蜜桃 | 不卡的看片网站| 国产女同互慰高潮91漫画| 99久久99久久免费精品蜜臀| 一区二区三区在线观看网站| 欧美精三区欧美精三区| 国产精品白丝jk白祙喷水网站| 成人欧美一区二区三区视频网页| 欧美午夜精品一区二区三区| 免费高清在线一区| 中文字幕一区二区在线观看| 久久久久久电影| 欧美三级在线看| 国产一区二区三区美女| 亚洲欧美日韩中文播放| 91精品国产aⅴ一区二区| 国产成人av一区二区三区在线观看| 亚洲欧美日韩久久| 日韩欧美高清dvd碟片| 99久久精品免费看国产| 男女男精品视频网| 亚洲视频在线观看三级| 日韩欧美一级二级三级久久久| 成人激情午夜影院| 日韩中文字幕av电影| 国产精品婷婷午夜在线观看| 欧美日韩国产片| 国产69精品久久99不卡| 午夜私人影院久久久久| 中文字幕+乱码+中文字幕一区| 欧美日本在线视频| 97国产一区二区| 久久福利资源站| 亚洲资源中文字幕| 中文字幕高清一区| 精品日韩成人av| 欧美精品vⅰdeose4hd| 成人国产精品免费观看视频| 午夜一区二区三区在线观看| 国产精品青草综合久久久久99| 欧美一级日韩不卡播放免费| 91在线观看成人| 国产馆精品极品| 麻豆精品国产91久久久久久| 一区二区三区四区在线| 国产欧美一区二区精品婷婷| 欧美一区二区精品久久911| 日本久久电影网| 高清成人免费视频| 免费成人在线网站| 偷窥少妇高潮呻吟av久久免费| 中文字幕亚洲精品在线观看 | 美女网站色91| 亚洲国产综合视频在线观看| 国产精品久久久久三级| 久久在线免费观看| 日韩视频在线观看一区二区| 欧洲人成人精品| 91原创在线视频| 波多野结衣的一区二区三区| 国产一区不卡视频| 久久超碰97中文字幕| 日日夜夜一区二区| 视频一区中文字幕| 日韩成人精品在线观看| 午夜婷婷国产麻豆精品| 五月婷婷色综合| 午夜精品一区二区三区电影天堂| 亚洲国产va精品久久久不卡综合|