00001
#ifndef CRYPTOPP_MODEXPPC_H
00002
#define CRYPTOPP_MODEXPPC_H
00003
00004
#include "modarith.h"
00005
#include "eprecomp.h"
00006
#include "smartptr.h"
00007
#include "pubkey.h"
00008
00009 NAMESPACE_BEGIN(CryptoPP)
00010
00011 CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl<
Integer>;
00012
00013 class ModExpPrecomputation : public DL_GroupPrecomputation<Integer>
00014 {
00015
public:
00016
00017
bool NeedConversions()
const {
return true;}
00018 Element ConvertIn(
const Element &v)
const {
return m_mr->ConvertIn(v);}
00019
virtual Element ConvertOut(
const Element &v)
const {
return m_mr->ConvertOut(v);}
00020
const AbstractGroup<Element> & GetGroup()
const {
return m_mr->MultiplicativeGroup();}
00021 Element BERDecodeElement(
BufferedTransformation &bt)
const {
return Integer(bt);}
00022
void DEREncodeElement(
BufferedTransformation &bt,
const Element &v)
const {v.DEREncode(bt);}
00023
00024
00025
void SetModulus(
const Integer &v) {m_mr.reset(
new MontgomeryRepresentation(v));}
00026
const Integer & GetModulus()
const {
return m_mr->GetModulus();}
00027
00028
private:
00029 value_ptr<MontgomeryRepresentation> m_mr;
00030 };
00031
00032 NAMESPACE_END
00033
00034
#endif