/// <summary> /// decrypt the response /// </summary> protected void ProcessResponse(ITransportHeaders headers, ref Stream stream) { if (headers[EncryptionRijndael.GetEncryptionName()] != null) { byte[] EncryptionIV = Convert.FromBase64String((String)headers[EncryptionRijndael.GetEncryptionName() + "IV"]); stream = EncryptionRijndael.Decrypt(FEncryptionKey, stream, EncryptionIV); } }
public void EncipherTest() { uint[] keys = { 12, 23, 34, 45, 56, 67, 78, 89, }; byte[] expected = new byte[] { 96, 97, 98, 99 }; var encrypter = new EncryptionRijndael(); byte[] ciphertext = encrypter.Encrypt(expected, keys); byte[] actual = encrypter.Decrypt(ciphertext, keys); CollectionAssert.AreEqual(expected, actual); }
/// <summary> /// decrypt the request /// </summary> protected string ProcessRequest(ITransportHeaders headers, ref Stream stream, ref object state) { if (headers[EncryptionRijndael.GetEncryptionName()] != null) { string ClientGuid = headers["ClientGuid"].ToString(); if (headers[EncryptionRijndael.GetEncryptionName() + "KEY"] != null) { // read the symmetric key, which has been encrypted with our public key RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(); RSA.ImportParameters(FPrivateKey); // this can overwrite the encryption key of another connection? byte[] EncryptionKey = RSA.Decrypt( Convert.FromBase64String((String)headers[EncryptionRijndael.GetEncryptionName() + "KEY"]), false); if (!FEncryptionKeys.ContainsKey(ClientGuid)) { FEncryptionKeys.Add(ClientGuid, EncryptionKey); } else { FEncryptionKeys[ClientGuid] = EncryptionKey; } } byte[] EncryptionIV = Convert.FromBase64String((String)headers[EncryptionRijndael.GetEncryptionName() + "IV"]); stream = EncryptionRijndael.Decrypt(FEncryptionKeys[ClientGuid], stream, EncryptionIV); state = true; return(ClientGuid); } else { throw new Exception("EncryptionServerSink: We cannot allow non encrypted traffic"); } }