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

📄 eprecomp.cpp

📁 各种加密算法的集合
💻 CPP
字号:
#include "pch.h" 
#include "eprecomp.h" 
#include "algebra.h" 
 
#include <vector> 
 
NAMESPACE_BEGIN(CryptoPP) 
 
template <class T> void ExponentiationPrecomputation<T>::Precompute(const Element &base, unsigned int maxExpBits) 
{ 
	assert(storage <= maxExpBits); 
	exponentBase = Integer::Power2((maxExpBits+storage-1)/storage); 
 
	g[0] = base; 
	for (unsigned i=1; i<storage; i++) 
		g[i] = group.IntMultiply(g[i-1], exponentBase); 
} 
 
template <class T> ExponentiationPrecomputation<T>::Element ExponentiationPrecomputation<T>::Exponentiate(const Integer &exponent) const 
{ 
	std::vector<std::pair<Integer, Element> > eb(storage);	// array of segments of the exponent and precalculated bases 
	Integer temp, e = exponent; 
	unsigned i; 
 
	for (i=0; i+1<storage; i++) 
	{ 
		Integer::Divide(eb[i].first, temp, e, exponentBase); 
		std::swap(temp, e); 
		eb[i].second = g[i]; 
	} 
	eb[i].first = e; 
	eb[i].second = g[i]; 
 
	return GeneralCascadeMultiplication<Element>(group, eb.begin(), eb.end()); 
} 
 
template <class T> ExponentiationPrecomputation<T>::Element  
	ExponentiationPrecomputation<T>::CascadeExponentiate(const Integer &exponent,  
		const ExponentiationPrecomputation<T> &pc2, const Integer &exponent2) const 
{ 
	std::vector<std::pair<Integer, Element> > eb(storage+pc2.storage);	// array of segments of the exponent and precalculated bases 
	Integer temp, e = exponent; 
	unsigned i; 
 
	for (i=0; i+1<storage; i++) 
	{ 
		Integer::Divide(eb[i].first, temp, e, exponentBase); 
		std::swap(temp, e); 
		eb[i].second = g[i]; 
	} 
	eb[i].first = e; 
	eb[i].second = g[i]; 
 
	e = exponent2; 
	for (i=storage; i+1<storage+pc2.storage; i++) 
	{ 
		Integer::Divide(eb[i].first, temp, e, exponentBase); 
		std::swap(temp, e); 
		eb[i].second = pc2.g[i-storage]; 
	} 
	eb[i].first = e; 
	eb[i].second = pc2.g[i-storage]; 
 
	return GeneralCascadeMultiplication<Element>(group, eb.begin(), eb.end()); 
} 
 
NAMESPACE_END 

⌨️ 快捷键说明

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