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); }
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); }
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); }
public void TestPlaintextCyclic() { var bytes = m.ToByteArray(); var m2 = new Plaintext(bytes); Assert.AreEqual(m, m2); }
public void Setup() { m = new Plaintext("Hello, World"); }