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