/// <summary> /// Decrypts the specified ciphertext. /// </summary> /// <param name="ciphertext"> /// The ciphertext to decrypt. /// </param> /// <param name="key"> /// The cascading key derivation bits and algorithm specifications used to transform the ciphertext. /// </param> /// <returns> /// The resulting plaintext object. /// </returns> /// <exception cref="SecurityException"> /// An exception was raised during decryption or deserialization. /// </exception> public T Decrypt(Byte[] ciphertext, CascadingSymmetricKey key) { try { var keys = key.Keys; var binaryDecryptor = new SymmetricBinaryProcessor(RandomnessProvider); var buffer = ciphertext; for (var i = (key.Depth - 1); i > 0; i--) { buffer = binaryDecryptor.Decrypt(buffer, keys[i]); } return(Decrypt(buffer, keys[0])); } catch { throw new SecurityException("The decryption operation failed."); } }
/// <summary> /// Encrypts the specified plaintext object. /// </summary> /// <param name="plaintextObject"> /// The plaintext object to encrypt. /// </param> /// <param name="key"> /// The cascading key derivation bits and algorithm specifications used to transform the object. /// </param> /// <returns> /// The resulting ciphertext. /// </returns> /// <exception cref="SecurityException"> /// An exception was raised during encryption or serialization. /// </exception> public Byte[] Encrypt(T plaintextObject, CascadingSymmetricKey key) { try { var keys = key.Keys; var binaryEncryptor = new SymmetricBinaryProcessor(RandomnessProvider); var buffer = Encrypt(plaintextObject, keys[0]); for (var i = 1; i < key.Depth; i++) { buffer = binaryEncryptor.Encrypt(buffer, keys[i]); } return(buffer); } catch { throw new SecurityException("The encryption operation failed."); } }