コード例 #1
0
        /// <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.");
            }
        }
コード例 #2
0
        /// <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.");
            }
        }