5 #ifndef CRYPTOPP_IMPORTS 15 m_base = group.NeedConversions() ? group.ConvertIn(i_base) : i_base;
17 if (m_bases.empty() || !(m_base == m_bases[0]))
23 if (group.NeedConversions())
29 assert(m_bases.size() > 0);
30 assert(storage <= maxExpBits);
34 m_windowSize = (maxExpBits+storage-1)/storage;
38 m_bases.resize(storage);
39 for (
unsigned i=1; i<storage; i++)
40 m_bases[i] = group.GetGroup().ScalarMultiply(m_bases[i-1], m_exponentBase);
47 BERDecodeUnsigned<word32>(seq, version, INTEGER, 1, 1);
48 m_exponentBase.BERDecode(seq);
49 m_windowSize = m_exponentBase.BitCount() - 1;
51 while (!seq.EndReached())
52 m_bases.push_back(group.BERDecodeElement(seq));
53 if (!m_bases.empty() && group.NeedConversions())
54 m_base = group.ConvertOut(m_bases[0]);
61 DEREncodeUnsigned<word32>(seq, 1);
62 m_exponentBase.DEREncode(seq);
63 for (
unsigned i=0; i<m_bases.size(); i++)
64 group.DEREncodeElement(seq, m_bases[i]);
73 bool fastNegate = group.InversionIsFast() && m_windowSize > 1;
76 for (i=0; i+1<m_bases.size(); i++)
80 if (fastNegate && r.
GetBit(m_windowSize-1))
93 std::vector<BaseAndExponent<Element> > eb;
94 eb.reserve(m_bases.size());
95 PrepareCascade(group, eb, exponent);
96 return group.ConvertOut(GeneralCascadeMultiplication<Element>(group.GetGroup(), eb.begin(), eb.end()));
103 std::vector<BaseAndExponent<Element> > eb;
105 eb.reserve(m_bases.size() + pc2.m_bases.size());
106 PrepareCascade(group, eb, exponent);
107 pc2.PrepareCascade(group, eb, exponent2);
108 return group.ConvertOut(GeneralCascadeMultiplication<Element>(group.GetGroup(), eb.begin(), eb.end()));
bool GetBit(size_t i) const
return the i-th bit, i=0 being the least significant bit
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
static Integer Power2(size_t e)
Exponentiates to a power of 2.
Multiple precision integer with arithmetic operations.
Classes and functions for working with ANS.1 objects.
Classes for precomputation in a group.
Crypto++ library namespace.