Integer DL_GroupParameters_EC<EC>::GetCofactor() const { if (!m_k) { Integer q = GetCurve().FieldSize(); Integer qSqrt = q.SquareRoot(); m_k = (q+2*qSqrt+1)/m_n; } return m_k; }
bool DL_GroupParameters_EC<EC>::ValidateGroup(RandomNumberGenerator &rng, unsigned int level) const { bool pass = GetCurve().ValidateParameters(rng, level); Integer q = GetCurve().FieldSize(); pass = pass && m_n!=q; if (level >= 2) { Integer qSqrt = q.SquareRoot(); pass = pass && m_n>4*qSqrt; pass = pass && VerifyPrime(rng, m_n, level-2); pass = pass && (m_k.IsZero() || m_k == (q+2*qSqrt+1)/m_n); pass = pass && CheckMOVCondition(q, m_n); } return pass; }