From 87b06bf6cef4d850e6acf1c5c2ddda6119b802b7 Mon Sep 17 00:00:00 2001 From: weidai Date: Mon, 24 Sep 2007 02:54:22 +0000 Subject: [PATCH] update CheckMOVCondition() according to http://eprint.iacr.org/2007/343 --- trunk/c5/eccrypto.cpp | 10 +++++++--- trunk/c5/validat2.cpp | 6 +++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/trunk/c5/eccrypto.cpp b/trunk/c5/eccrypto.cpp index 91ec54f1..f0ff9eeb 100644 --- a/trunk/c5/eccrypto.cpp +++ b/trunk/c5/eccrypto.cpp @@ -46,12 +46,16 @@ static inline Integer ConvertToInteger(const Integer &x) static bool CheckMOVCondition(const Integer &q, const Integer &r) { - Integer t=1; - unsigned int n=q.BitCount(), m=r.BitCount(); + // see "Updated standards for validating elliptic curves", http://eprint.iacr.org/2007/343 + Integer t = 1; + unsigned int n = q.IsEven() ? 1 : q.BitCount(), m = r.BitCount(); for (unsigned int i=n; DiscreteLogWorkFactor(i)::GetNextRecommendedParametersOID(oid)).m_values.empty()) + while (!(oid = DL_GroupParameters_EC::GetNextRecommendedParametersOID(oid)).m_values.empty()) { - ECParameters params(oid); - bool fail = !params.ValidateParameters(GlobalRNG()); + DL_GroupParameters_EC params(oid); + bool fail = !params.Validate(GlobalRNG(), 2); cout << (fail ? "FAILED" : "passed") << " " << params.GetCurve().GetField().MaxElementBitLength() << " bits" << endl; pass = pass && !fail; }