public ECMParams(CurveType curve, CoordinatesType coordinates, TorsionType torsion, bool autoApprox, int curves, int B1, int B2) { this.curveType = curve; this.coordinatesType = coordinates; this.torsionType = torsion; this.autoApproximation = autoApprox; this.curves = curves; this.B1 = B1; this.B2 = B2; }
}//inverted public static BigInteger GetFactorExtended(BigInteger n, int B1, int B2, TorsionType type) { BigInteger x, y; var E = GenerateCurve(n, out x, out y, type); var P = new PointEdwardsExtended(x, y, E); //STEP 1 var P1 = P as IPoint; var result = StageOneEdwardsProjective(ref P1, n, B1); if (result > 1 || result == 0) { return(result); } //STEP 2 result = StageTwoEdwardsProjective(ref P1, n, B1, B2); return(result); }//extended
public static BigInteger GetFactorProjective(BigInteger n, int B1, int B2, TorsionType type) { BigInteger x; BigInteger y; var E = GenerateCurve(n, out x, out y, type); var P = new PointMontgomery(x, y, E); //STEP 1 var P1 = P as IPoint; var result = StageOneProjective(ref P1, n, B1); if (result > 1 || result == 0) { return(result); } //STEP 2 result = StageTwoProjective2(ref P1, n, B1, B2); return(result); }//Montgomery
}//extended private static EllipticCurveEdwards GenerateCurve(BigInteger n, out BigInteger x, out BigInteger y, TorsionType type) { switch (type) { case TorsionType.RandomCurve: return(EllipticCurveEdwards.GenerateCurveRandom(n, out x, out y)); case TorsionType.Curve12: return(EllipticCurveEdwards.GenerateCurve12(n, out x, out y)); case TorsionType.Curve2x8: return(EllipticCurveEdwards.GenerateCurve2x8(n, out x, out y)); case TorsionType.Curve12FromFile: return(EllipticCurveEdwards.GetCurve(n, out x, out y, "curve12.txt")); case TorsionType.Curve2x8FromFile: return(EllipticCurveEdwards.GetCurve(n, out x, out y, "curve2x8.txt")); default: return(EllipticCurveEdwards.GenerateCurveRandom(n, out x, out y)); } }
}//Montgomery private static EllipticCurveMontgomery GenerateCurve(BigInteger n, out BigInteger x, out BigInteger y, TorsionType type) { switch (type) { case TorsionType.RandomCurve: return(EllipticCurveMontgomery.GenerateCurveRandom(n, out x, out y)); case TorsionType.Curve6: return(EllipticCurveMontgomery.GenerateCurve6(n, out x, out y)); default: return(EllipticCurveMontgomery.GenerateCurveRandom(n, out x, out y)); } }