public void Encrypt(BufRef dest, BufLen data, bool zeropad) { if (data == null || data.Length > 222) { throw new InvalidParameterException("ElGamal data length can max be 222 bytes!"); } var hashbuf = new BufRefLen(new byte[255]); hashbuf.Write8(0xFF); hashbuf.Write(I2PHashSHA256.GetHash(data)); hashbuf.Write(data); hashbuf.Reset(); var b = b1.Multiply(new BigInteger(1, hashbuf.ToByteArray())).Mod(I2PConstants.ElGamalP); if (zeropad) { dest.Write8(0); dest.Write(a.ToByteArray(256)); dest.Write8(0); dest.Write(b.ToByteArray(256)); } else { dest.Write(a.ToByteArray(256)); dest.Write(b.ToByteArray(256)); } }
private static void WriteToDest(BufRef dest, BigInteger v, int targetlen) { var vba = v.ToByteArray(); if (vba.Length < targetlen) { dest.Write(new byte[targetlen - vba.Length]); } if (vba.Length > targetlen) { dest.Write(new BufLen(vba, vba.Length - targetlen)); } else { dest.Write(vba); } }