5 #ifndef CRYPTOPP_IMPORTS 16 m_base = group.NeedConversions() ? group.ConvertIn(i_base) : i_base;
18 if (m_bases.empty() || !(m_base == m_bases[0]))
24 if (group.NeedConversions())
35 m_windowSize = (maxExpBits+storage-1)/storage;
39 m_bases.resize(storage);
40 for (
unsigned i=1; i<storage; i++)
41 m_bases[i] = group.GetGroup().ScalarMultiply(m_bases[i-1], m_exponentBase);
48 BERDecodeUnsigned<word32>(seq, version, INTEGER, 1, 1);
49 m_exponentBase.BERDecode(seq);
50 m_windowSize = m_exponentBase.BitCount() - 1;
52 while (!seq.EndReached())
53 m_bases.push_back(group.BERDecodeElement(seq));
54 if (!m_bases.empty() && group.NeedConversions())
55 m_base = group.ConvertOut(m_bases[0]);
62 DEREncodeUnsigned<word32>(seq, 1);
63 m_exponentBase.DEREncode(seq);
64 for (
unsigned i=0; i<m_bases.size(); i++)
65 group.DEREncodeElement(seq, m_bases[i]);
77 for (i=0; i+1<m_bases.size(); i++)
81 if (fastNegate && r.
GetBit(m_windowSize-1))
94 std::vector<BaseAndExponent<Element> > eb;
95 eb.reserve(m_bases.size());
96 PrepareCascade(group, eb, exponent);
97 return group.ConvertOut(GeneralCascadeMultiplication<Element>(group.GetGroup(), eb.begin(), eb.end()));
104 std::vector<BaseAndExponent<Element> > eb;
106 eb.reserve(m_bases.size() + pc2.m_bases.size());
107 PrepareCascade(group, eb, exponent);
108 pc2.PrepareCascade(group, eb, exponent2);
109 return group.ConvertOut(GeneralCascadeMultiplication<Element>(group.GetGroup(), eb.begin(), eb.end()));
static void DivideByPowerOf2(Integer &r, Integer &q, const Integer &a, unsigned int n)
returns same result as Divide(r, q, a, Power2(n)), but faster
Classes for performing mathematics over different fields.
virtual bool InversionIsFast() const
Determine if inversion is fast.
static Integer Power2(size_t e)
Exponentiates to a power of 2.
Multiple precision integer with arithmetic operations.
virtual const Element & Inverse(const Element &a) const =0
Inverts the element in the group.
#define CRYPTOPP_ASSERT(exp)
Debugging and diagnostic assertion.
Classes and functions for working with ANS.1 objects.
Classes for precomputation in a group.
Multiple precision integer with arithmetic operations.
Crypto++ library namespace.
bool GetBit(size_t i) const
Provides the i-th bit of the Integer.