public Point EncodeMessage(Plaintext message)
        {
            var m = message.ToBigInteger();

            //Ensure that message is not too long.
            if (m + 1 >= _curve.Prime)
                throw new ArgumentException("Message too large to be encrypted. Must be smaller than p (" + _curve.Prime + ").", "message");

            return IntegerEncoding(m, _k);
        }
Beispiel #2
0
        public Ciphertext Encrypt(PublicKey Q, Plaintext m)
        {
            var M = _encoder.EncodeMessage(m);

            var k = SelectK();

            var c1 = _curve.Generator * k;
            var c2 = M + (Q.Point * k);

            return new ElGamalCiphertext(c1, c2);
        }
Beispiel #3
0
        static void Main(string[] args)
        {
            Console.ReadKey();
            var str = args[0];

            var curve = CurveFactory.secp256k1;
            var encoder = new ProbabilisticWeierstrassMessageEncoder(curve, new BigInteger(7));
            var encryptor = new ElGamalEncryptor(curve, encoder);
            var keys = encryptor.GenerateKeyPair();
            var plaintext = new Plaintext(str);

            var ciphertext = encryptor.Encrypt(keys.PublicKey, plaintext);
            var plaintext2 = encryptor.Decrypt(keys.PrivateKey, ciphertext);
        }
        public void TestElGamalEncryptDecrypt()
        {
            var curve = CurveFactory.secp256k1;
            var encoder = new ProbabilisticWeierstrassMessageEncoder(curve, new BigInteger(7));
            var encryptor = new ElGamalEncryptor(curve, encoder);
            var keys = encryptor.GenerateKeyPair();

            var m = new Plaintext("Hello, World");

            var c = encryptor.Encrypt(keys.PublicKey, m);

            var m2 = encryptor.Decrypt(keys.PrivateKey, c);

            Assert.AreEqual(m, m2);
        }
        public void TestEncoderCyclic()
        {
            var curve = CurveFactory.nistp384;
            var encoder = new ProbabilisticWeierstrassMessageEncoder(curve, new BigInteger(7));

            //Encode
            var m = new Plaintext("A");
            BigInteger encoding_key;
            var M = encoder.EncodeMessage(m);

            //Decode
            var m2 = encoder.DecodeMessage(M);

            Assert.AreEqual(m, m2);
        }
Beispiel #6
0
 public void TestPlaintextCyclic()
 {
     var bytes = m.ToByteArray();
     var m2 = new Plaintext(bytes);
     Assert.AreEqual(m, m2);
 }
Beispiel #7
0
 public void Setup()
 {
     m = new Plaintext("Hello, World");
 }