modexppc.h 1.3 KB

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