/// <summary> /// Serializes and encrypts the message into a byte array. /// </summary> /// <param name="sharedKey">The shared encryption key.</param> /// <returns>The serialized message.</returns> public byte[] ToArray(SymmetricKey sharedKey) { if (this.HostEntry == null) { throw new InvalidOperationException("HostEntry property cannot be null."); } using (var ms = new EnhancedMemoryStream(2048)) { ms.WriteInt32Le(Magic); ms.WriteByte((byte)FormatVer); ms.WriteInt64Le(TimeStampUtc.Ticks); ms.WriteInt32Le((int)Flags); ms.WriteString16(this.HostEntry.ToString()); ms.WriteBytesNoLen(Crypto.GetSalt4()); return(Crypto.Encrypt(ms.ToArray(), sharedKey)); } }
/// <summary> /// Serializes and encrypts the message into a byte array. /// </summary> /// <param name="sharedKey">The shared encryption key.</param> /// <returns>The serialized message.</returns> public byte[] ToArray(SymmetricKey sharedKey) { using (var ms = new EnhancedMemoryStream(2048)) { var addressBytes = SourceAddress.GetAddressBytes(); if (addressBytes.Length != 4) { throw new InvalidOperationException("UdpBroadcastMessage supports only IPv4 address."); } ms.WriteInt32Le(Magic); ms.WriteInt64Le(TimeStampUtc.Ticks); ms.WriteBytesNoLen(SourceAddress.GetAddressBytes()); ms.WriteByte((byte)MessageType); ms.WriteByte((byte)BroadcastGroup); ms.WriteBytes16(Payload); ms.WriteBytesNoLen(Crypto.GetSalt4()); return(Crypto.Encrypt(ms.ToArray(), sharedKey)); } }