public static XMessage DeserializeMessage(this byte[] message) { var m = new XMessage(); var ser = PocoSerializer.GetDeserializer(message); m.Id = ser.MakeString(0); m.MetaCipher = ser.MakeByteArray(1); m.TextCipher = ser.MakeByteArray(2); m.ImageCipher = ser.MakeByteArray(3); m.DynamicPublicKey = ser.MakeByteArray(4); m.DynamicPublicKeyId = ser.MakeInt64(5); m.PrivateKeyHint = ser.MakeInt64(6); try { m.IsDownloaded = ser.MakeBoolean(7); // backwards compat } catch { m.IsDownloaded = false; } m.SerializedPayload = message; return(m); }
public static byte[] SerializeCore(this XMessage m) { byte[] serialized = PocoSerializer.Begin() .Append(m.Id) .Append(m.MetaCipher) .Append(m.TextCipher) .Append(m.ImageCipher) .Append(m.DynamicPublicKey) .Append(m.DynamicPublicKeyId) .Append(m.PrivateKeyHint) .Append(m.IsDownloaded) // append this new Property at the end, to avoid breaking compatibility with older code/data .Finish(); return(serialized); }
public static bool EqualDeep(this XMessage m1, XMessage m2) { if (ReferenceEquals(m1, m2)) { return(true); } if (m1 == null || m2 == null) { return(false); } if (m1.Id != m2.Id) { return(false); } if (m1.DynamicPublicKeyId != m2.DynamicPublicKeyId) { return(false); } if (m1.PrivateKeyHint != m2.PrivateKeyHint) { return(false); } if (!ByteArrays.AreAllBytesEqualOrBothNull(m1.DynamicPublicKey, m2.DynamicPublicKey)) { return(false); } if (!ByteArrays.AreAllBytesEqualOrBothNull(m1.MetaCipher, m2.MetaCipher)) { return(false); } if (!ByteArrays.AreAllBytesEqualOrBothNull(m1.TextCipher, m2.TextCipher)) { return(false); } if (!ByteArrays.AreAllBytesEqualOrBothNull(m1.ImageCipher, m2.ImageCipher)) { return(false); } return(true); }