예제 #1
0
 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
         );
 }
예제 #2
0
        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);
        }
예제 #3
0
        //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));
        }
예제 #4
0
        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));
        }