Exemple #1
0
        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));
            }
        }
Exemple #2
0
        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);
            }
        }