public static SignatureMessage FromSignatureMessageBlock(ArraySegment <byte> message, IExchangeDecrypt privateKey) { if (message.Array == null) { throw new ArgumentNullException("message.Array"); } if (privateKey == null) { throw new ArgumentNullException("privateKey"); } try { using (Stream typeStream = new MemoryStream(message.Array, message.Offset, message.Count)) using (Stream cryptoStream = ContentConverter.RemoveType(typeStream, "SignatureMessage")) using (Stream hashStream = ContentConverter.Decrypt(cryptoStream, privateKey)) using (Stream paddingStream = ContentConverter.RemoveHash(hashStream)) using (Stream compressStream = ContentConverter.RemovePadding(paddingStream)) using (Stream messageStream = ContentConverter.Decompress(compressStream)) { return(SignatureMessage.Import(messageStream, _bufferManager)); } } catch (Exception) { return(null); } }
public static ArraySegment <byte> ToSignatureMessageBlock(SignatureMessage message, IExchangeEncrypt publicKey) { if (message == null) { throw new ArgumentNullException("message"); } if (publicKey == null) { throw new ArgumentNullException("publicKey"); } ArraySegment <byte> value; using (Stream messageStream = message.Export(_bufferManager)) using (Stream compressStream = ContentConverter.Compress(messageStream)) using (Stream paddingStream = ContentConverter.AddPadding(compressStream, 1024 * 256)) using (Stream hashStream = ContentConverter.AddHash(paddingStream)) using (Stream cryptostream = ContentConverter.Encrypt(hashStream, publicKey)) using (Stream typeStream = ContentConverter.AddType(cryptostream, "SignatureMessage")) { value = new ArraySegment <byte>(_bufferManager.TakeBuffer((int)typeStream.Length), 0, (int)typeStream.Length); typeStream.Read(value.Array, value.Offset, value.Count); } return(value); }