public PreKeySignalMessage(uint messageVersion, uint registrationId, May <uint> preKeyId, uint signedPreKeyId, IEcPublicKey baseKey, IdentityKey identityKey, SignalMessage message) { _version = messageVersion; _registrationId = registrationId; _preKeyId = preKeyId; _signedPreKeyId = signedPreKeyId; _baseKey = baseKey; _identityKey = identityKey; _message = message; PreKeySignalMessage preKeySignalMessage = new PreKeySignalMessage { SignedPreKeyId = signedPreKeyId, BaseKey = ByteString.CopyFrom(baseKey.Serialize()), IdentityKey = ByteString.CopyFrom(identityKey.Serialize()), Message = ByteString.CopyFrom(message.Serialize()), RegistrationId = registrationId }; if (preKeyId.HasValue) // .isPresent() { preKeySignalMessage.PreKeyId = preKeyId.ForceGetValue(); // get() } byte[] versionBytes = { ByteUtil.IntsToByteHighAndLow((int)_version, (int)CurrentVersion) }; byte[] messageBytes = preKeySignalMessage.ToByteArray(); _serialized = ByteUtil.Combine(versionBytes, messageBytes); }
public PreKeySignalMessage(byte[] serialized) { try { _version = (uint)ByteUtil.HighBitsToInt(serialized[0]); if (_version > CurrentVersion) { throw new InvalidVersionException("Unknown version: " + _version); } if (_version < CurrentVersion) { throw new LegacyMessageException("Legacy version: " + _version); } PreKeySignalMessage preKeySignalMessage = Parser.ParseFrom(ByteString.CopyFrom(serialized, 1, serialized.Length - 1)); if ( preKeySignalMessage.SignedPreKeyIdOneofCase == SignedPreKeyIdOneofOneofCase.None || preKeySignalMessage.BaseKeyOneofCase == BaseKeyOneofOneofCase.None || preKeySignalMessage.BaseKeyOneofCase == BaseKeyOneofOneofCase.None || preKeySignalMessage.MessageOneofCase == MessageOneofOneofCase.None) { throw new InvalidMessageException("Incomplete message."); } _serialized = serialized; _registrationId = preKeySignalMessage.RegistrationId; _preKeyId = preKeySignalMessage.PreKeyIdOneofCase == PreKeyIdOneofOneofCase.PreKeyId ? new May <uint>(preKeySignalMessage.PreKeyId) : May <uint> .NoValue; _signedPreKeyId = preKeySignalMessage.SignedPreKeyIdOneofCase == SignedPreKeyIdOneofOneofCase.SignedPreKeyId ? preKeySignalMessage.SignedPreKeyId : uint.MaxValue; // -1 _baseKey = Curve.DecodePoint(preKeySignalMessage.BaseKey.ToByteArray(), 0); _identityKey = new IdentityKey(Curve.DecodePoint(preKeySignalMessage.IdentityKey.ToByteArray(), 0)); _message = new SignalMessage(preKeySignalMessage.Message.ToByteArray()); } catch (Exception e) { //(InvalidProtocolBufferException | InvalidKeyException | LegacyMessage throw new InvalidMessageException(e.Message); } }