/// <summary> /// Encrypts the specified plain data. /// </summary> /// <param name="plainData">The plain data.</param> /// <param name="remotePublicKeyXML">The remote public key XML.</param> /// <returns> /// The encrypted data. /// </returns> /// <externalUnit/> /// <revision revisor="dev01" date="1/26/2009" version="1.0.5.7"> /// Member Created /// </revision> public byte[] Encrypt( byte[] plainData, string remotePublicKeyXML) { // Ecnrypted data placeholder byte[] encryptedData = null; //Calculate the hash and append it to the data byte[] dataPlusHash = SequoiaCryptoProvider.AppendArrays( this.CalculateHash(plainData), plainData); // Symmetrically Encrypt data and hash with random key and IV byte[] encryptedDataPlusHash = this.SymmetricallyEncryptContent(dataPlusHash); // Create an Encrypted transport Key var transKey = new TransportKey( this.SymmetricCrypto.Key, this.SymmetricCrypto.IV, this); // Add transport Key to ecnrypted data encryptedData = SequoiaCryptoProvider.AppendArrays( transKey.GenerateTransportKey(remotePublicKeyXML), encryptedDataPlusHash); return(encryptedData); }
/// <summary> /// Generates the transport key. /// </summary> /// <param name="remotePublicKeyXML">The remote public key XML.</param> /// <returns> /// The transport key. /// </returns> /// <externalUnit cref="AsymmetricAlgorithm"/> /// <revision revisor="dev01" date="1/30/2009" version="1.0.5.11"> /// Member Created /// </revision> public byte[] GenerateTransportKey(string remotePublicKeyXML) { if (encrypted == false) { this.encryptedData = SequoiaCryptoProvider.AppendArrays( this.AsymmetricallyEncryptContent( this.key, remotePublicKeyXML), this.AsymmetricallyEncryptContent( this.initializationVector, remotePublicKeyXML)); encrypted = true; } return(this.encryptedData); }