public static BigInteger computeZ(byte[] bytes, EllipticCurve theCurve) { BitArray hashBitArray = new BitArray(bytes); hashBitArray.RightShift(hashBitArray.Length - BitOperations.getBits(theCurve.p).Length); hashBitArray.CopyTo(bytes, 0); return(new BigInteger(bytes)); }
public static EllipticCurvePoint multiplyPoint(BigInteger prk, EllipticCurvePoint point, EllipticCurve curve) { if (prk == 0) { return new EllipticCurvePoint { x = 0, y = 0 } } ; int[] bits = BitOperations.getBits(prk); int index = 0; EllipticCurvePoint initial = point; while (bits[index] == 0) { initial = PointDoubling.doublePoint(curve, initial); index++; } return(getResult(bits, index + 1, curve, initial)); }