public PreKeyWhisperMessage(uint messageVersion, uint registrationId, May<uint> preKeyId,
                                    uint signedPreKeyId, ECPublicKey baseKey, IdentityKey identityKey,
                                    WhisperMessage message)
        {
            this.version = messageVersion;
            this.registrationId = registrationId;
            this.preKeyId = preKeyId;
            this.signedPreKeyId = signedPreKeyId;
            this.baseKey = baseKey;
            this.identityKey = identityKey;
            this.message = message;

            WhisperProtos.PreKeyWhisperMessage.Builder builder =
                WhisperProtos.PreKeyWhisperMessage.CreateBuilder()
                                                  .SetSignedPreKeyId(signedPreKeyId)
                                                  .SetBaseKey(ByteString.CopyFrom(baseKey.serialize()))
                                                  .SetIdentityKey(ByteString.CopyFrom(identityKey.serialize()))
                                                  .SetMessage(ByteString.CopyFrom(message.serialize()))
                                                  .SetRegistrationId(registrationId);

            if (preKeyId.HasValue) // .isPresent()
            {
                builder.SetPreKeyId(preKeyId.ForceGetValue()); // get()
            }

            byte[] versionBytes = { ByteUtil.intsToByteHighAndLow((int)this.version, (int)CURRENT_VERSION) };
            byte[] messageBytes = builder.Build().ToByteArray();

            this.serialized = ByteUtil.combine(versionBytes, messageBytes);
        }
Пример #2
0
 public DeviceGroup(byte[] id, May<String> name, IList<String> members, May<TextSecureAttachmentStream> avatar)
 {
     this.id = id;
     this.name = name;
     this.members = members;
     this.avatar = avatar;
 }
Пример #3
0
        private SenderKeyState(uint id, uint iteration, byte[] chainKey,
                              ECPublicKey signatureKeyPublic,
                              May<ECPrivateKey> signatureKeyPrivate)
        {
            SenderKeyStateStructure.Types.SenderChainKey senderChainKeyStructure =
                SenderKeyStateStructure.Types.SenderChainKey.CreateBuilder()
                                                      .SetIteration(iteration)
                                                      .SetSeed(ByteString.CopyFrom(chainKey))
                                                      .Build();

            SenderKeyStateStructure.Types.SenderSigningKey.Builder signingKeyStructure =
                SenderKeyStateStructure.Types.SenderSigningKey.CreateBuilder()
                                                        .SetPublic(ByteString.CopyFrom(signatureKeyPublic.serialize()));

            if (signatureKeyPrivate.HasValue)
            {
                signingKeyStructure.SetPrivate(ByteString.CopyFrom(signatureKeyPrivate.ForceGetValue().serialize()));
            }

            this.senderKeyStateStructure = SenderKeyStateStructure.CreateBuilder()
                                                                  .SetSenderKeyId(id)
                                                                  .SetSenderChainKey(senderChainKeyStructure)
                                                                  .SetSenderSigningKey(signingKeyStructure)
                                                                  .Build();
        }
 public TextSecureAttachmentPointer(ulong id, String contentType, byte[] key, String relay, May<uint> size, May<byte[]> preview)
     : base(contentType)
 {
     this.id = id;
     this.key = key;
     this.relay = new May<String>(relay);
     this.size = size;
     this.preview = preview;
 }
 private TextSecureSyncMessage(May<SentTranscriptMessage> sent,
                               May<TextSecureAttachment> contacts,
                               May<TextSecureAttachment> groups,
                               May<RequestMessage> request)
 {
     this.sent = sent;
     this.contacts = contacts;
     this.groups = groups;
     this.request = request;
 }
Пример #6
0
 /**
  * Construct a group context.
  * @param type The group message type (update, deliver, quit).
  * @param groupId The group ID.
  * @param name The group title.
  * @param members The group membership list.
  * @param avatar The group avatar icon.
  */
 public TextSecureGroup(Type type, byte[] groupId, String name,
                        IList<String> members,
                        TextSecureAttachment avatar)
 {
     this.type = type;
     this.groupId = groupId;
     this.name = new May<String>(name);
     this.members = new May<IList<String>>(members);
     this.avatar = new May<TextSecureAttachment>(avatar);
 }
 /**
  * Construct a TextSecureMessageSender.
  *
  * @param url The URL of the TextSecure server.
  * @param trustStore The trust store containing the TextSecure server's signing TLS certificate.
  * @param user The TextSecure username (eg phone number).
  * @param password The TextSecure user's password.
  * @param store The AxolotlStore.
  * @param eventListener An optional event listener, which fires whenever sessions are
  *                      setup or torn down for a recipient.
  */
 public TextSecureMessageSender(String url, TrustStore trustStore,
                                String user, String password,
                                AxolotlStore store,
                                May<EventListener> eventListener, String userAgent)
 {
     this.socket = new PushServiceSocket(url, trustStore, new StaticCredentialsProvider(user, password, null), userAgent);
     this.store = store;
     this.localAddress = new TextSecureAddress(user);
     this.eventListener = eventListener;
 }
 /**
  * Register/Unregister a Google Cloud Messaging registration ID.
  *
  * @param gcmRegistrationId The GCM id to register.  A call with an absent value will unregister.
  * @throws IOException
  */
 public async Task<bool> setWnsId(May<String> wnsRegistrationId)// throws IOException
 {
     if (wnsRegistrationId.HasValue)
     {
         return await this.pushServiceSocket.registerWnsId(wnsRegistrationId.ForceGetValue());
     }
     else
     {
         return await this.pushServiceSocket.unregisterWnsId();
     }
 }
Пример #9
0
        BobAxolotlParameters(IdentityKeyPair ourIdentityKey, ECKeyPair ourSignedPreKey,
                             ECKeyPair ourRatchetKey, May<ECKeyPair> ourOneTimePreKey,
                             IdentityKey theirIdentityKey, ECPublicKey theirBaseKey)
        {
            this.ourIdentityKey = ourIdentityKey;
            this.ourSignedPreKey = ourSignedPreKey;
            this.ourRatchetKey = ourRatchetKey;
            this.ourOneTimePreKey = ourOneTimePreKey;
            this.theirIdentityKey = theirIdentityKey;
            this.theirBaseKey = theirBaseKey;

            if (ourIdentityKey == null || ourSignedPreKey == null || ourRatchetKey == null ||
                ourOneTimePreKey == null || theirIdentityKey == null || theirBaseKey == null)
            {
                throw new Exception("Null value!");
            }
        }
Пример #10
0
    public void MayElse()
    {
        var n = May<int>.NoValue;
        var y = new May<int>(1);
        Func<May<int>> throwsM = () => { throw new ArgumentException(); };
        Func<int> throwsT = () => { throw new ArgumentException(); };

        // else T
        Assert.IsTrue(n.Else(2) == 2);
        Assert.IsTrue(y.Else(2) == 1);

        // else Func<T>
        Assert.IsTrue(n.Else(() => 2) == 2);
        Assert.IsTrue(y.Else(() => 2) == 1);
        Assert.IsTrue(y.Else(throwsT) == y);
        TestUtil.AssertThrows<ArgumentException>(() => n.Else(throwsT));

        // else May<T>
        Assert.IsTrue(n.Else(y) == y);
        Assert.IsTrue(y.Else(n) == y);
        Assert.IsTrue(n.Else(2.Maybe()) == 2.Maybe());
        Assert.IsTrue(y.Else(2.Maybe()) == y);
        Assert.IsTrue(n.Else(May.NoValue) == May.NoValue);
        Assert.IsTrue(y.Else(May.NoValue) == y);

        // else Func<May<T>>
        Assert.IsTrue(n.Else(() => y) == y);
        Assert.IsTrue(y.Else(() => n) == y);
        Assert.IsTrue(n.Else(() => 2.Maybe()) == 2.Maybe());
        Assert.IsTrue(y.Else(() => 2.Maybe()) == y);
        Assert.IsTrue(n.Else(() => new May<int>()) == May.NoValue);
        Assert.IsTrue(y.Else(() => new May<int>()) == y);
        Assert.IsTrue(y.Else(throwsM) == y);
        TestUtil.AssertThrows<ArgumentException>(() => n.Else(throwsM));

        // else default
        Assert.IsTrue(n.ElseDefault() == 0);
        Assert.IsTrue(y.ElseDefault() == 1);

        // else action
        var x = 0;
        y.ElseDo(() => { x += 1; });
        Assert.IsTrue(x == 0);
        n.ElseDo(() => { x += 1; });
        Assert.IsTrue(x == 1);
    }
Пример #11
0
        /*public IncomingTextMessage(SmsMessage message)
        {
            this.message = message.getDisplayMessageBody();
            this.sender = message.getDisplayOriginatingAddress();
            this.senderDeviceId = TextSecureAddress.DEFAULT_DEVICE_ID;
            this.protocol = message.getProtocolIdentifier();
            this.serviceCenterAddress = message.getServiceCenterAddress();
            this.replyPathPresent = message.isReplyPathPresent();
            this.pseudoSubject = message.getPseudoSubject();
            this.sentTimestampMillis = message.getTimestampMillis();
            this.groupId = null;
            this.push = false;
        }*/

        public IncomingTextMessage(String sender, uint senderDeviceId, ulong sentTimestampMillis,
                                   String encodedBody, May<TextSecureGroup> group)
        {
            this.Message = encodedBody;
            this.Sender = sender;
            this.SenderDeviceId = senderDeviceId;
            this.Protocol = 31337;
            this.ServiceCenterAddress = "GCM";
            this.ReplyPathPresent = true;
            this.PseudoSubject = "";
            this.SentTimestampMillis = sentTimestampMillis;
            this.Push = true;

            if (group.HasValue)
            {
                this.GroupId = GroupUtil.getEncodedId(group.ForceGetValue().getGroupId());
            }
            else
            {
                this.GroupId = null;
            }
        }
        public PreKeyWhisperMessage(byte[] serialized)
        {
            try
            {
                this.version = (uint)ByteUtil.highBitsToInt(serialized[0]);

                if (this.version > CiphertextMessage.CURRENT_VERSION)
                {
                    throw new InvalidVersionException("Unknown version: " + this.version);
                }

                WhisperProtos.PreKeyWhisperMessage preKeyWhisperMessage
                    = WhisperProtos.PreKeyWhisperMessage.ParseFrom(ByteString.CopyFrom(serialized, 1,
                                                                                       serialized.Length - 1));

                if ((version == 2 && !preKeyWhisperMessage.HasPreKeyId) ||
                    (version == 3 && !preKeyWhisperMessage.HasSignedPreKeyId) ||
                    !preKeyWhisperMessage.HasBaseKey ||
                    !preKeyWhisperMessage.HasIdentityKey ||
                    !preKeyWhisperMessage.HasMessage)
                {
                    throw new InvalidMessageException("Incomplete message.");
                }

                this.serialized = serialized;
                this.registrationId = preKeyWhisperMessage.RegistrationId;
                this.preKeyId = preKeyWhisperMessage.HasPreKeyId ? new May<uint>(preKeyWhisperMessage.PreKeyId) : May<uint>.NoValue;
                this.signedPreKeyId = preKeyWhisperMessage.HasSignedPreKeyId ? preKeyWhisperMessage.SignedPreKeyId : uint.MaxValue; // -1
                this.baseKey = Curve.decodePoint(preKeyWhisperMessage.BaseKey.ToByteArray(), 0);
                this.identityKey = new IdentityKey(Curve.decodePoint(preKeyWhisperMessage.IdentityKey.ToByteArray(), 0));
                this.message = new WhisperMessage(preKeyWhisperMessage.Message.ToByteArray());
            }
            catch (Exception e)
            {
                //(InvalidProtocolBufferException | InvalidKeyException | LegacyMessage
                throw new InvalidMessageException(e.Message);
            }
        }
        private IList<AttachmentPointer> createAttachmentPointers(May<LinkedList<TextSecureAttachment>> attachments)
        {
            IList<AttachmentPointer> pointers = new List<AttachmentPointer>();

            if (!attachments.HasValue || attachments.ForceGetValue().Count == 0)
            {
                Debug.WriteLine("No attachments present...", TAG);
                return pointers;
            }

            foreach (TextSecureAttachment attachment in attachments.ForceGetValue())
            {
                if (attachment.isStream())
                {
                    Debug.WriteLine("Found attachment, creating pointer...", TAG);
                    pointers.Add(createAttachmentPointer(attachment.asStream()));
                }
            }

            return pointers;
        }
Пример #14
0
		public UnacknowledgedPreKeyMessageItems getUnacknowledgedPreKeyMessageItems()
		{
			try
			{
				May<uint> preKeyId;

				if (sessionStructure.PendingPreKey.HasPreKeyId)
				{
					preKeyId = new May<uint>(sessionStructure.PendingPreKey.PreKeyId);
				}
				else
				{
					preKeyId = May<uint>.NoValue;
				}

				return
					new UnacknowledgedPreKeyMessageItems(preKeyId,
														 sessionStructure.PendingPreKey.SignedPreKeyId,
														 Curve.decodePoint(sessionStructure.PendingPreKey
																						   .BaseKey
																						   .ToByteArray(), 0));
			}
			catch (InvalidKeyException e)
			{
				throw new Exception(e.Message);
			}
		}
Пример #15
0
        private async Task <HttpResponseMessage> getConnection(string urlFragment, string method, string body)
        {
            try
            {
                SignalConnectionInformation connectionInformation = getRandom(signalConnectionInformation);
                string       url        = connectionInformation.getUrl();
                May <string> hostHeader = connectionInformation.getHostHeader();
                //TrustManger[] trustManagers = connectionInformation.getTrustManagers();

                /*SSLContext context = SSLContext.getInstance("TLS");
                 * context.init(null, trustManagers, null);*/

                Uri uri = new Uri(string.Format("{0}{1}", url, urlFragment));
                //Log.w(TAG, "Push service URL: " + serviceUrl);
                //Log.w(TAG, "Opening URL: " + url);
                var filter = new HttpBaseProtocolFilter();

                if (HttpClientCertificatePolicyState.Policy == HttpClientCertificatePolicy.DevelopmentMode)
                {
                    filter.IgnorableServerCertificateErrors.Add(Windows.Security.Cryptography.Certificates.ChainValidationResult.Expired);
                    filter.IgnorableServerCertificateErrors.Add(Windows.Security.Cryptography.Certificates.ChainValidationResult.Untrusted);
                    filter.IgnorableServerCertificateErrors.Add(Windows.Security.Cryptography.Certificates.ChainValidationResult.InvalidName);
                }

                //HttpURLConnection connection = (HttpURLConnection)url.openConnection();

                HttpClient connection = new HttpClient(filter);

                /*if (ENFORCE_SSL)
                 * {
                 *  ((HttpsURLConnection)connection).setSSLSocketFactory(context.getSocketFactory());
                 *  ((HttpsURLConnection)connection).setHostnameVerifier(new StrictHostnameVerifier());
                 * }*/

                var headers = connection.DefaultRequestHeaders;

                //connection.setRequestMethod(method);
                //headers.Add("Content-Type", "application/json");

                if (credentialsProvider.GetPassword() != null)
                {
                    headers.Add("Authorization", getAuthorizationHeader());
                }

                if (userAgent != null)
                {
                    headers.Add("X-Signal-Agent", userAgent);
                }

                if (hostHeader.HasValue)
                {
                    headers.Host = new HostName(hostHeader.ForceGetValue());
                }

                /*if (body != null)
                 * {
                 *  connection.setDoOutput(true);
                 * }*/

                //connection.connect();

                HttpStringContent content;
                if (body != null)
                {
                    content = new HttpStringContent(body, Windows.Storage.Streams.UnicodeEncoding.Utf8, "application/json");
                    Debug.WriteLine(body);
                }
                else
                {
                    content = new HttpStringContent("");
                }
                switch (method)
                {
                case "POST":
                    return(await connection.PostAsync(uri, content));

                case "PUT":
                    return(await connection.PutAsync(uri, content));

                case "DELETE":
                    return(await connection.DeleteAsync(uri));

                case "GET":
                    return(await connection.GetAsync(uri));

                default:
                    throw new Exception("Unknown method: " + method);
                }
            }
            catch (UriFormatException e)
            {
                throw new Exception(string.Format("Uri {0} {1} is wrong", "", urlFragment));
            }
            catch (Exception e)
            {
                Debug.WriteLine(string.Format("Other exception {0}{1} is wrong", "", urlFragment));
                throw new PushNetworkException(e);
            }
        }
Пример #16
0
 private bool equals(May<String> one, May<String> two)
 {
     if (one.HasValue) {
         return two.HasValue && one.ForceGetValue().Equals(two.ForceGetValue());
     }
     else return !two.HasValue;
 }
 public Builder setTheirOneTimePreKey(May<ECPublicKey> theirOneTimePreKey)
 {
     this.theirOneTimePreKey = theirOneTimePreKey;
     return this;
 }
Пример #18
0
        private void handleMessage(SignalServiceEnvelope envelope, May <long> smsMessageId)
        {
            try
            {
                SignalProtocolStore  axolotlStore = new TextSecureAxolotlStore();
                SignalServiceAddress localAddress = new SignalServiceAddress(TextSecurePreferences.getLocalNumber());
                SignalServiceCipher  cipher       = new SignalServiceCipher(localAddress, axolotlStore);

                SignalServiceContent content = cipher.decrypt(envelope);

                if (content.getDataMessage().HasValue)
                {
                    SignalServiceDataMessage message = content.getDataMessage().ForceGetValue();

                    if (message.isEndSession())
                    {
                        handleEndSessionMessage(envelope, message, smsMessageId);
                    }
                    else if (message.isGroupUpdate())
                    {
                        handleGroupMessage(envelope, message, smsMessageId);
                    }
                    else if (message.getAttachments().HasValue)
                    {
                        handleMediaMessage(envelope, message, smsMessageId);
                    }
                    else
                    {
                        handleTextMessage(envelope, message, smsMessageId);
                    }
                }

                /*else if (content.getSyncMessage().HasValue) TODO: SYNC enable
                 * {
                 *  TextSecureSyncMessage syncMessage = content.getSyncMessage().ForceGetValue();
                 *
                 *  if (syncMessage.getSent().HasValue) handleSynchronizeSentMessage(masterSecret, syncMessage.getSent().ForceGetValue(), smsMessageId);
                 *  else if (syncMessage.getRequest().HasValue) handleSynchronizeRequestMessage(masterSecret, syncMessage.getRequest().ForceGetValue());
                 * }*/

                if (envelope.isPreKeySignalMessage())
                {
                    App.Current.Worker.AddTaskActivities(new RefreshPreKeysTask());
                    //ApplicationContext.getInstance(context).getJobManager().add(new RefreshPreKeysJob(context));
                }
            }
            catch (InvalidVersionException e)
            {
                Log.Warn(e);
                handleInvalidVersionMessage(envelope, smsMessageId);
            }
            catch (InvalidMessageException e)
            {
                Log.Warn(e);
                handleCorruptMessage(envelope, smsMessageId);
            }
            catch (InvalidKeyIdException e)
            {
                Log.Warn(e);
                handleCorruptMessage(envelope, smsMessageId);
            }
            catch (InvalidKeyException e)
            {
                Log.Warn(e);
                handleCorruptMessage(envelope, smsMessageId);
            }
            catch (NoSessionException e)
            {
                Log.Warn(e);
                handleNoSessionMessage(envelope, smsMessageId);
            }
            catch (LegacyMessageException e)
            {
                Log.Warn(e);
                handleLegacyMessage(envelope, smsMessageId);
            }
            catch (DuplicateMessageException e)
            {
                Log.Warn(e);
                handleDuplicateMessage(envelope, smsMessageId);
            }
            catch (libsignal.exceptions.UntrustedIdentityException e)
            {
                Log.Warn(e);
                handleUntrustedIdentityMessage(envelope, smsMessageId);
            }
            catch (Exception e)
            {
                Log.Warn($"Unexpected Exception");
            }
        }
Пример #19
0
 public TextSecureAttachmentStream(IInputStream inputStream, String contentType, ulong length, May <byte[]> preview)
     : base(contentType)
 {
     this.inputStream = inputStream;
     this.length      = length;
 }
 /**
  * Construct a PushAddress.
  *
  * @param e164number The TextSecure username of this destination (eg e164 representation of a phone number).
  * @param relay The TextSecure federated server this user is registered with (if not your own server).
  */
 public TextSecureAddress(String e164number, May <String> relay)
 {
     this.e164number = e164number;
     this.relay      = relay;
 }
Пример #21
0
 public SignalServiceContent()
 {
     message            = May.NoValue;
     synchronizeMessage = May.NoValue;
 }
Пример #22
0
        public async Task<bool> sendReceipt(String destination, ulong messageId, May<string> relay)// throws IOException
        {
            String path = string.Format(RECEIPT_PATH, destination, messageId);

            if (relay.HasValue)
            {
                path += "?relay=" + relay.ForceGetValue();
            }

            await makeRequest(path, "PUT", null);
            return true;
        }
 public SignalServiceAttachmentStream(Stream inputStream, String contentType, long length, string fileName, bool voiceNote, May <byte[]> preview, ProgressListener listener)
     : base(contentType)
 {
     this.inputStream = inputStream;
     this.length      = length;
     FileName         = fileName;
     this.listener    = listener;
     VoiceNote        = voiceNote;
     this.preview     = preview;
 }
 /// <summary>
 /// Construct a PushAddress.
 /// </summary>
 /// <param name="e164number">The Signal Service username of this destination (eg e164 representation of a phone number).</param>
 /// <param name="relay">The Signal Service federated server this user is registered with (if not your own server).</param>
 public SignalServiceAddress(String e164number, May <String> relay)
 {
     this.e164number = e164number;
     this.relay      = relay;
 }
Пример #25
0
 public override int GetHashCode()
 {
     return(DetailsId.GetHashCode() ^ DetailsName.GetHashCode() ^ Jan.GetHashCode() ^ Feb.GetHashCode() ^ Apr.GetHashCode() ^ May.GetHashCode() ^ Jun.GetHashCode() ^ Jul.GetHashCode() ^ Aug.GetHashCode() ^ Sep.GetHashCode() ^ Oct.GetHashCode() ^ Nov.GetHashCode()
            ^ Dec.GetHashCode() ^ UOM.GetHashCode() ^ UOMID.GetHashCode());
 }
Пример #26
0
 public SignalServiceUrl(string url, string hostHeader, TrustStore trustStore)
 {
     this.url        = url;
     this.hostHeader = hostHeader == null ? May.NoValue : new May <string>(hostHeader);
     this.trustStore = trustStore;
 }
Пример #27
0
 public Builder SetOurOneTimePreKey(May <EcKeyPair> ourOneTimePreKey)
 {
     _ourOneTimePreKey = ourOneTimePreKey;
     return(this);
 }
Пример #28
0
 public SignalServiceContent(SignalServiceDataMessage message)
 {
     this.message       = new May <SignalServiceDataMessage>(message);
     synchronizeMessage = May.NoValue;
 }
Пример #29
0
        private void handleMediaMessage(SignalServiceEnvelope envelope, SignalServiceDataMessage message, May <long> smsMessageId) // throws MmsException
        {
            throw new NotImplementedException("handleMediaMessage");

            /*
             * var database = DatabaseFactory.getMediaMessageDatabase(); //getMmsDatabase(context);
             * String localNumber = TextSecurePreferences.getLocalNumber(context);
             * IncomingMediaMessage mediaMessage = new IncomingMediaMessage(masterSecret, envelope.getSource(),
             *                                                   localNumber, message.getTimestamp(),
             *                                                   Optional.fromNullable(envelope.getRelay()),
             *                                                   message.getBody(),
             *                                                   message.getGroupInfo(),
             *                                                   message.getAttachments());
             *
             * Pair<long, long> messageAndThreadId = database.insertSecureDecryptedMessageInbox(mediaMessage, -1);
             * List<DatabaseAttachment> attachments = DatabaseFactory.getAttachmentDatabase(context).getAttachmentsForMessage(messageAndThreadId.first);
             *
             * for (DatabaseAttachment attachment : attachments)
             * {
             *  ApplicationContext.getInstance(context)
             *                    .getJobManager()
             *                    .add(new AttachmentDownloadJob(context, messageAndThreadId.first,
             *                                                   attachment.getAttachmentId()));
             * }
             *
             * if (smsMessageId.isPresent())
             * {
             *  DatabaseFactory.getSmsDatabase(context).deleteMessage(smsMessageId.get());
             * }
             *
             * MessageNotifier.updateNotification(context, masterSecret.getMasterSecret().orNull(), messageAndThreadId.second);*/
        }
Пример #30
0
 public DeviceContact(String number, May<String> name, May<TextSecureAttachmentStream> avatar)
 {
     this.number = number;
     this.name = name;
     this.avatar = avatar;
 }
Пример #31
0
 public Builder setOurOneTimePreKey(May <ECKeyPair> ourOneTimePreKey)
 {
     this.ourOneTimePreKey = ourOneTimePreKey;
     return(this);
 }
Пример #32
0
 public TextSecureContent(TextSecureSyncMessage synchronizeMessage)
 {
     this.message = May<TextSecureDataMessage>.NoValue;
     this.synchronizeMessage = synchronizeMessage == null ? May<TextSecureSyncMessage>.NoValue : new May<TextSecureSyncMessage>(synchronizeMessage);
 }
Пример #33
0
 /**
  * Construct a PushAddress.
  *
  * @param e164number The TextSecure username of this destination (eg e164 representation of a phone number).
  * @param relay The TextSecure federated server this user is registered with (if not your own server).
  */
 public TextSecureAddress(String e164number, May<String> relay)
 {
     this.e164number = e164number;
     this.relay = relay;
 }
Пример #34
0
 public string this[int indexer]
 {
     get
     {
         switch (indexer)
         {
             case 0:
                 January jan = new January();
                 return jan.ToString();
             case 1:
                 February f = new February();
                 return f.ToString();
             case 2:
                 March m = new March();
                 return m.ToString();
             case 3:
                 April a = new April();
                 return a.ToString();
             case 4:
                 May may = new May();
                 return may.ToString();
             case 5:
                 June j = new June();
                 return j.ToString();
             case 6:
                 July july = new July();
                 return july.ToString();
             case 7:
                 August august = new August();
                 return august.ToString();
             case 8:
                 September s = new September();
                 return s.ToString();
             case 9:
                 October o = new October();
                 return o.ToString();
             case 10:
                 November n = new November();
                 return n.ToString();
             case 11:
                 December d = new December();
                 return d.ToString();
             default: throw new Exception("No such index");
         }
     }
 }
Пример #35
0
        //private readonly TrustManager[] trustManagers;

        public SignalConnectionInformation(SignalServiceUrl signalServiceUrl)
        {
            this.url        = signalServiceUrl.getUrl();
            this.hostHeader = signalServiceUrl.getHostHeader();
            //this.trustManagers = BlacklistingTrustManager.createFor(signalServiceUrl.getTrustStore());
        }
Пример #36
0
 public Builder setTheirOneTimePreKey(May <ECPublicKey> theirOneTimePreKey)
 {
     this.theirOneTimePreKey = theirOneTimePreKey;
     return(this);
 }
Пример #37
0
		public void setUnacknowledgedPreKeyMessage(May<uint> preKeyId, uint signedPreKeyId, ECPublicKey baseKey)
		{
			PendingPreKey.Builder pending = PendingPreKey.CreateBuilder()
														 .SetSignedPreKeyId(signedPreKeyId)
														 .SetBaseKey(ByteString.CopyFrom(baseKey.serialize()));

			if (preKeyId.HasValue)
			{
				pending.SetPreKeyId(preKeyId.ForceGetValue());
			}

			this.sessionStructure = this.sessionStructure.ToBuilder()
														 .SetPendingPreKey(pending.Build())
														 .Build();
		}
Пример #38
0
 public TextSecureAttachmentPointer(ulong id, String contentType, byte[] key, String relay, May <uint> size, May <byte[]> preview)
     : base(contentType)
 {
     this.id      = id;
     this.key     = key;
     this.relay   = new May <String>(relay);
     this.size    = size;
     this.preview = preview;
 }
Пример #39
0
			public UnacknowledgedPreKeyMessageItems(May<uint> preKeyId,
													uint signedPreKeyId,
													ECPublicKey baseKey)
			{
				this.preKeyId = preKeyId;
				this.signedPreKeyId = signedPreKeyId;
				this.baseKey = baseKey;
			}
Пример #40
0
 public int CapNhatMay(May may)
 {
     return(mayData.CapNhatMay(may));
 }
        private byte[] createSentTranscriptMessage(byte[] content, May<TextSecureAddress> recipient, ulong timestamp)
        {
            {
                try
                {
                    Content.Builder container = Content.CreateBuilder();
                    SyncMessage.Builder syncMessage = SyncMessage.CreateBuilder();
                    SyncMessage.Types.Sent.Builder sentMessage = SyncMessage.Types.Sent.CreateBuilder();

                    sentMessage.SetTimestamp(timestamp);
                    sentMessage.SetMessage(DataMessage.ParseFrom(content));

                    if (recipient.HasValue)
                    {
                        sentMessage.SetDestination(recipient.ForceGetValue().getNumber());
                    }

                    return container.SetSyncMessage(syncMessage.SetSent(sentMessage)).Build().ToByteArray(); ;
                }
                catch (InvalidProtocolBufferException e)
                {
                    throw new Exception(e.Message);
                }
            }
        }
Пример #42
0
        private void handleSynchronizeSentMessage(SignalServiceEnvelope envelope, SentTranscriptMessage message, May <long> smsMessageId) // throws MmsException
        {
            long threadId;

            if (message.getMessage().isGroupUpdate())
            {
                throw new NotImplementedException("GROUP handleSynchronizeSentMessage");
                //threadId = GroupMessageProcessor.process(context, masterSecret, envelope, message.getMessage(), true); // TODO: Group enable
            }
            else if (message.getMessage().getAttachments().HasValue)
            {
                threadId = handleSynchronizeSentMediaMessage(message, smsMessageId);
            }
            else
            {
                threadId = handleSynchronizeSentTextMessage(message, smsMessageId);
            }

            if (threadId == 0L)
            {
                return;
            }

            DatabaseFactory.getThreadDatabase().SetRead(threadId);
            //MessageNotifier.updateNotification(getContext(), masterSecret.getMasterSecret().orNull());
        }
Пример #43
0
 public SignalServiceContent(SignalServiceSyncMessage synchronizeMessage)
 {
     message = May.NoValue;
     this.synchronizeMessage = new May <SignalServiceSyncMessage>(synchronizeMessage);
 }
Пример #44
0
        private void handleMessage(TextSecureEnvelope envelope, May<long> smsMessageId)
        {
            try
            {
                AxolotlStore axolotlStore = new TextSecureAxolotlStore();
                TextSecureAddress localAddress = new TextSecureAddress(TextSecurePreferences.getLocalNumber());
                TextSecureCipher cipher = new TextSecureCipher(localAddress, axolotlStore);

                TextSecureContent content = cipher.decrypt(envelope);

                if (content.getDataMessage().HasValue)
                {
                    TextSecureDataMessage message = content.getDataMessage().ForceGetValue();

                    if (message.isEndSession()) handleEndSessionMessage(envelope, message, smsMessageId);
                    else if (message.isGroupUpdate()) handleGroupMessage(envelope, message, smsMessageId);
                    else if (message.getAttachments().HasValue) handleMediaMessage(envelope, message, smsMessageId);
                    else handleTextMessage(envelope, message, smsMessageId);
                }
                /*else if (content.getSyncMessage().HasValue) TODO: SYNC enable
                {
                    TextSecureSyncMessage syncMessage = content.getSyncMessage().ForceGetValue();

                    if (syncMessage.getSent().HasValue) handleSynchronizeSentMessage(masterSecret, syncMessage.getSent().ForceGetValue(), smsMessageId);
                    else if (syncMessage.getRequest().HasValue) handleSynchronizeRequestMessage(masterSecret, syncMessage.getRequest().ForceGetValue());
                }*/

                if (envelope.isPreKeyWhisperMessage())
                {
                    App.Current.Worker.AddTaskActivities(new RefreshPreKeysTask());
                    //ApplicationContext.getInstance(context).getJobManager().add(new RefreshPreKeysJob(context));
                }
            }
            catch (InvalidVersionException e)
            {
                Log.Warn(e);
                handleInvalidVersionMessage(envelope, smsMessageId);
            }
            catch (InvalidMessageException e)
            {
                Log.Warn(e);
                handleCorruptMessage(envelope, smsMessageId);
            }
            catch (InvalidKeyIdException e)
            {
                Log.Warn(e);
                handleCorruptMessage(envelope, smsMessageId);
            }
            catch (InvalidKeyException e)
            {
                Log.Warn(e);
                handleCorruptMessage(envelope, smsMessageId);
            }
            catch (NoSessionException e)
            {
                Log.Warn(e);
                handleNoSessionMessage(envelope, smsMessageId);
            }
            catch (LegacyMessageException e)
            {
                Log.Warn(e);
                handleLegacyMessage(envelope, smsMessageId);
            }
            catch (DuplicateMessageException e)
            {
                Log.Warn(e);
                handleDuplicateMessage(envelope, smsMessageId);
            }
            catch (libaxolotl.exceptions.UntrustedIdentityException e)
            {
                Log.Warn(e);
                handleUntrustedIdentityMessage(envelope, smsMessageId);
            }
            catch (Exception e)
            {
                Log.Warn($"Unexpected Exception");
            }
        }
Пример #45
0
 public TextSecureContent()
 {
     this.message = May<TextSecureDataMessage>.NoValue;
     this.synchronizeMessage = May<TextSecureSyncMessage>.NoValue;
 }
        /**
         * Construct a TextSecureMessage.s
         *
         * @param timestamp The sent timestamp.
         * @param group The group information (or null if none).
         * @param attachments The attachments (or null if none).
         * @param body The message contents.
         * @param endSession Flag indicating whether this message should close a session.
         */
        public TextSecureDataMessage(ulong timestamp, TextSecureGroup group, LinkedList<TextSecureAttachment> attachments, String body, bool endSession)
        {
            this.timestamp = timestamp;
            this.body = new May<String>(body);
            this.group = group == null ? May<TextSecureGroup>.NoValue : new May<TextSecureGroup>(group);
            //this.syncContext = syncContext == null ? May<TextSecureSyncContext>.NoValue : new May<TextSecureSyncContext>(syncContext);
            this.endSession = endSession;

            if (attachments != null && !(attachments.Count == 0))
            {
                this.attachments = new May<LinkedList<TextSecureAttachment>>(attachments);
            }
            else
            {
                this.attachments = May<LinkedList<TextSecureAttachment>>.NoValue;
            }
        }
Пример #47
0
 public string this[string indexer]
 {
     get
     {
         switch (indexer)
         {
             case "January": 
                 January jan= new January();
                 return jan.ToString();
             case "February":
                 February f = new February();
                 return f.ToString();
             case "March":
                 March m = new March();
                 return m.ToString();
             case "April":
                 April a = new April();
                 return a.ToString();
             case "May":
                 May may = new May();
                 return may.ToString();
             case "June":
                 June j = new June();
                 return j.ToString();
             case "July":
                 July july = new July();
                 return july.ToString();
             case "August":
                 August august = new August();
                 return august.ToString();
             case "September":
                 September s = new September();
                 return s.ToString();
             case "October":
                 October o = new October();
                 return o.ToString();
             case "November":
                 November n = new November();
                 return n.ToString();
             case "December":
                 December d = new December();
                 return d.ToString();
             default: throw new Exception("No such index");
         }
     }
 }
Пример #48
0
 public ResponseContext()
 {
     Data = new May <T>();
 }
Пример #49
0
 public Builder setOurOneTimePreKey(May<ECKeyPair> ourOneTimePreKey)
 {
     this.ourOneTimePreKey = ourOneTimePreKey;
     return this;
 }
Пример #50
0
 public RequestContext()
 {
     Data = new May <T>();
 }
Пример #51
0
 public DialogViewModel Bind(IApplicationBar applicationBar)
 {
     _applicationBar = applicationBar.Maybe();
     return(this);
 }
Пример #52
0
        private void handleGroupMessage(SignalServiceEnvelope envelope, SignalServiceDataMessage message, May <long> smsMessageId)
        {
            //GroupMessageProcessor.process(envelope, message, false); // TODO: GROUP enable

            if (smsMessageId.HasValue)
            {
                DatabaseFactory.getTextMessageDatabase().DeleteThread(smsMessageId.ForceGetValue()); //getSmsDatabase(context).deleteMessage(smsMessageId.get());
            }
        }
Пример #53
0
        private async void LoadListsFor(IUpdatableBoard board, May<string> selectedId)
        {
            _progress.Show("Loading lists...");
            try
            {
                var lists = (await _api.Lists.ForBoard(new BoardId(board.Id))).ToList();
                Lists.Clear();
                Lists.AddRange(lists);

                selectedId
                    .Else(lists.Take(1).Select(l => l.Id).MayFirst())
                    .IfHasValueThenDo(id => { SelectedList = lists.FirstOrDefault(l => l.Id == id); });
            }
            catch (Exception ex)
            {
                Analytics.LogException(ex);
                MessageBox.Show("The lists for that board were unable to be loaded.  Please " +
                                "ensure that you have an active internet connection.");
            }
            finally
            {
                _progress.Hide();
            }
        }
Пример #54
0
 public int ThemMoi(May may)
 {
     return(mayData.ThemMoi(may));
 }