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 class ModExpPrecomputation : public DL_GroupPrecomputation<
Integer>
00012 {
00013
public:
00014
00015
bool NeedConversions()
const {
return true;}
00016 Element ConvertIn(
const Element &v)
const {
return m_mr->ConvertIn(v);}
00017
virtual Element ConvertOut(
const Element &v)
const {
return m_mr->ConvertOut(v);}
00018
const AbstractGroup<Element> & GetGroup()
const {
return m_mr->MultiplicativeGroup();}
00019 Element BERDecodeElement(
BufferedTransformation &bt)
const {
return Integer(bt);}
00020
void DEREncodeElement(
BufferedTransformation &bt,
const Element &v)
const {v.DEREncode(bt);}
00021
00022
00023
void SetModulus(
const Integer &v) {m_mr.reset(
new MontgomeryRepresentation(v));}
00024
const Integer & GetModulus()
const {
return m_mr->GetModulus();}
00025
00026
private:
00027 value_ptr<MontgomeryRepresentation> m_mr;
00028 };
00029
00030 NAMESPACE_END
00031
00032
#endif