Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }