private BigInteger CalculateE(BigInteger n, byte[] message) { int messageBitLength = message.Length * 8; BigInteger trunc = new BigInteger(message.Reverse().Concat(new byte[1]).ToArray()); if (n.GetBitLength() < messageBitLength) { trunc >>= messageBitLength - n.GetBitLength(); } return trunc; }
private static ECPoint SumOfTwoMultiplies(ECPoint P, BigInteger k, ECPoint Q, BigInteger l) { int m = Math.Max(k.GetBitLength(), l.GetBitLength()); ECPoint Z = P + Q; ECPoint R = P.Curve.Infinity; for (int i = m - 1; i >= 0; --i) { R = R.Twice(); if (k.TestBit(i)) { if (l.TestBit(i)) R = R + Z; else R = R + P; } else { if (l.TestBit(i)) R = R + Q; } } return R; }