1 #ifndef CRYPTOPP_MODEXPPC_H 2 #define CRYPTOPP_MODEXPPC_H 3 4 #include "cryptlib.h" 5 #include "modarith.h" 6 #include "integer.h" 7 #include "algebra.h" 8 #include "eprecomp.h" 9 #include "smartptr.h" 10 #include "pubkey.h" 11 12 #if CRYPTOPP_MSC_VERSION 13 # pragma warning(push) 14 # pragma warning(disable: 4231 4275) 15 #endif 16 17 NAMESPACE_BEGIN(CryptoPP) 18 19 CRYPTOPP_DLL_TEMPLATE_CLASS DL_FixedBasePrecomputationImpl<Integer>; 20 21 class ModExpPrecomputation : public DL_GroupPrecomputation<Integer> 22 { 23 public: ~ModExpPrecomputation()24 virtual ~ModExpPrecomputation() {} 25 26 // DL_GroupPrecomputation NeedConversions()27 bool NeedConversions() const {return true;} ConvertIn(const Element & v)28 Element ConvertIn(const Element &v) const {return m_mr->ConvertIn(v);} ConvertOut(const Element & v)29 virtual Element ConvertOut(const Element &v) const {return m_mr->ConvertOut(v);} GetGroup()30 const AbstractGroup<Element> & GetGroup() const {return m_mr->MultiplicativeGroup();} BERDecodeElement(BufferedTransformation & bt)31 Element BERDecodeElement(BufferedTransformation &bt) const {return Integer(bt);} DEREncodeElement(BufferedTransformation & bt,const Element & v)32 void DEREncodeElement(BufferedTransformation &bt, const Element &v) const {v.DEREncode(bt);} 33 34 // non-inherited SetModulus(const Integer & v)35 void SetModulus(const Integer &v) {m_mr.reset(new MontgomeryRepresentation(v));} GetModulus()36 const Integer & GetModulus() const {return m_mr->GetModulus();} 37 38 private: 39 value_ptr<MontgomeryRepresentation> m_mr; 40 }; 41 42 NAMESPACE_END 43 44 #if CRYPTOPP_MSC_VERSION 45 # pragma warning(pop) 46 #endif 47 48 #endif 49