private static BigInteger calculateXDenominator(EllipticCurve curve, EllipticCurvePoint point) { BigInteger xDenominator = 4 * point.y * point.y; return ModulusLogic.inverseModuloN( ModulusLogic.convertToModulus(xDenominator, curve.n), curve.n ); }
public static bool verifyMessage(Signature signature, string message, EllipticCurvePoint publicKey, EllipticCurve theCurve) { //step 2+3 BigInteger z = Common.computeZ(Common.getHash(message), theCurve); //step 4 BigInteger u1 = ModulusLogic.convertToModulus(z * ModulusLogic.inverseModuloN(signature.s, theCurve.p), theCurve.p); BigInteger u2 = ModulusLogic.convertToModulus(signature.r * ModulusLogic.inverseModuloN(signature.s, theCurve.p), theCurve.p); //step 5 return(getPoint(u1, u2, publicKey, theCurve).x == signature.r); }
//step 6 private static BigInteger calculateS(BigInteger privateKey, BigInteger k, BigInteger z, BigInteger r, EllipticCurve theCurve) { BigInteger inverseK = ModulusLogic.inverseModuloN(k, theCurve.p); return(ModulusLogic.convertToModulus(inverseK * (z + (r * privateKey)), theCurve.p)); }
private static BigInteger calculateYDenominator(EllipticCurve curve, EllipticCurvePoint point1, EllipticCurvePoint point2) { BigInteger yDenominator = point2.x - point1.x; return(ModulusLogic.inverseModuloN(ModulusLogic.convertToModulus(yDenominator, curve.n), curve.n)); }