Example #1
0
        public void SetKeys(TanksCommon.Encryption.EncryptioinKeys key)
        {
            var aes = new AesCryptoServiceProvider();
            var iv  = aes.IV;

            // Encrypt the session key
            RSAOAEPKeyExchangeFormatter keyFormatter = new RSAOAEPKeyExchangeFormatter(key.RsaKey);
            var encryptedSessionKey = keyFormatter.CreateKeyExchange(aes.Key, typeof(Aes));

            key.SetIvAndSessionKey(iv, encryptedSessionKey);

            this._cryptoTransform = aes.CreateEncryptor();
        }
Example #2
0
        public void EncryptDecryptTest()
        {
            byte[] messageBytes = null;
            using (var stream = new System.IO.MemoryStream())
            {
                var theObject = new TanksCommon.SharedObjects.GameMove()
                {
                    MessageId = 8
                };
                var messageStream = TanksCommon.MessageEncoder.EncodeMessage(stream, theObject);
                messageStream.Seek(0, System.IO.SeekOrigin.Begin);
                messageBytes = messageStream.ToArray();
            }

            //can only encrypt messages, only has public key
            TanksCommon.Encryption.EncryptioinKeys clientKey = new TanksCommon.Encryption.EncryptioinKeys();
            //can decrypt messages, has public and private key
            TanksCommon.Encryption.EncryptioinKeys serverKey = new TanksCommon.Encryption.EncryptioinKeys();

            //server provides public RSA keys and client imports them
            clientKey.ImportPublicKey(serverKey.ExportPublicKey());

            //client can encrypt AES keys with the provided RSA keys
            var clientEncryptor = new GameCom.Encrypt(clientKey);

            //server sets public AES keys
            serverKey.SetIvAndSessionKey(clientKey.Iv, clientKey.SessionKey);

            var e1 = clientEncryptor.EncryptBytes(messageBytes);

            var d1 = GameCom.Encrypt.DecryptBytes(serverKey, e1);

            Assert.IsFalse(messageBytes.SequenceEqual(e1));

            Assert.IsTrue(messageBytes.SequenceEqual(d1));

            //serverKey.SetIvAndSessionKey(clientKey.Iv, clientKey.SessionKey);

            /*var serverEncrypter = new GameCom.Encrypt(serverKey);
             *
             * var e2 = serverEncrypter.EncryptBytes(messageBytes);
             *
             * var d2 = GameCom.Encrypt.DecryptBytes(clientKey, e2);
             *
             * Assert.IsTrue(d2.SequenceEqual(messageBytes));*/
        }
Example #3
0
        public static byte[] DecryptBytes(TanksCommon.Encryption.EncryptioinKeys key, byte[] toDecrypt)
        {
            byte[] result = null;
            using (Aes aes = new AesCryptoServiceProvider())
            {
                aes.IV = key.Iv;

                RSAOAEPKeyExchangeDeformatter keyDeformatter = new RSAOAEPKeyExchangeDeformatter(key.RsaKey);
                aes.Key = keyDeformatter.DecryptKeyExchange(key.SessionKey);

                // Decrypt the message
                using (System.IO.MemoryStream plaintext = new System.IO.MemoryStream())
                {
                    using (CryptoStream cs = new CryptoStream(plaintext, aes.CreateDecryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(toDecrypt, 0, toDecrypt.Length);
                        cs.Close();
                    }
                    plaintext.Close();
                    result = plaintext.ToArray();
                }
            }
            return(result);
        }
Example #4
0
 public Encrypt(TanksCommon.Encryption.EncryptioinKeys key)
 {
     SetKeys(key);
 }