1#ifndef CRYPTOPP_MODEXPPC_H 2#define CRYPTOPP_MODEXPPC_H 3 4#include "modarith.h" 5#include "eprecomp.h" 6#include "smartptr.h" 7#include "pubkey.h" 8 9NAMESPACE_BEGIN(CryptoPP) 10 11CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl<Integer>; 12 13class ModExpPrecomputation : public DL_GroupPrecomputation<Integer> 14{ 15public: 16 // DL_GroupPrecomputation 17 bool NeedConversions() const {return true;} 18 Element ConvertIn(const Element &v) const {return m_mr->ConvertIn(v);} 19 virtual Element ConvertOut(const Element &v) const {return m_mr->ConvertOut(v);} 20 const AbstractGroup<Element> & GetGroup() const {return m_mr->MultiplicativeGroup();} 21 Element BERDecodeElement(BufferedTransformation &bt) const {return Integer(bt);} 22 void DEREncodeElement(BufferedTransformation &bt, const Element &v) const {v.DEREncode(bt);} 23 24 // non-inherited 25 void SetModulus(const Integer &v) {m_mr.reset(new MontgomeryRepresentation(v));} 26 const Integer & GetModulus() const {return m_mr->GetModulus();} 27 28private: 29 value_ptr<MontgomeryRepresentation> m_mr; 30}; 31 32NAMESPACE_END 33 34#endif 35