Esempio n. 1
0
        /*
         *  private static void sendMediaPush(Context context, Recipients recipients, long messageId)
         *  {
         *      JobManager jobManager = ApplicationContext.getInstance(context).getJobManager();
         *      jobManager.add(new PushMediaSendJob(context, messageId, recipients.getPrimaryRecipient().getNumber()));
         *  }
         *
         *  private static void sendGroupPush(Context context, Recipients recipients, long messageId, long filterRecipientId)
         *  {
         *      JobManager jobManager = ApplicationContext.getInstance(context).getJobManager();
         *      jobManager.add(new PushGroupSendJob(context, messageId, recipients.getPrimaryRecipient().getNumber(), filterRecipientId));
         *  }
         *
         *  private static void sendSms(Context context, Recipients recipients, long messageId)
         *  {
         *      JobManager jobManager = ApplicationContext.getInstance(context).getJobManager();
         *      jobManager.add(new SmsSendJob(context, messageId, recipients.getPrimaryRecipient().getName()));
         *  }
         *
         *  private static void sendMms(Context context, long messageId)
         *  {
         *      JobManager jobManager = ApplicationContext.getInstance(context).getJobManager();
         *      jobManager.add(new MmsSendJob(context, messageId));
         *  }
         */
        private async static Task <bool> isPushTextSend(Recipients recipients, bool keyExchange)
        {
            try
            {
                if (!TextSecurePreferences.isPushRegistered())
                {
                    return(false);
                }

                if (keyExchange)
                {
                    return(false);
                }

                Recipient recipient   = recipients.getPrimaryRecipient();
                String    destination = Utils.canonicalizeNumber(recipient.getNumber());

                return(await isPushDestination(destination));
            }
            catch (InvalidNumberException e)
            {
                //Log.w(TAG, e);
                return(false);
            }
        }
Esempio n. 2
0
 public static TextSecureAccountManager createManager()
 {
     return(new TextSecureAccountManager(PUSH_URL,
                                         new TextSecurePushTrustStore(),
                                         TextSecurePreferences.getLocalNumber(),
                                         TextSecurePreferences.getPushServerPassword(), USER_AGENT));
 }
Esempio n. 3
0
        protected override async Task <string> ExecuteAsync()
        {
            //if (!TextSecurePreferences.isPushRegistered()) return;

            int availableKeys = await App.Current.accountManager.getPreKeysCount();

            if (availableKeys >= PREKEY_MINIMUM && TextSecurePreferences.isSignedPreKeyRegistered())
            {
                Debug.WriteLine("Available keys sufficient: " + availableKeys);
                return("");
            }

            List <PreKeyRecord> preKeyRecords = await PreKeyUtil.generatePreKeys(/*context, masterSecret*/);

            PreKeyRecord lastResortKeyRecord = await PreKeyUtil.generateLastResortKey(/*context, masterSecret*/);

            IdentityKeyPair    identityKey        = IdentityKeyUtil.GetIdentityKeyPair(/*context, masterSecret*/);
            SignedPreKeyRecord signedPreKeyRecord = PreKeyUtil.generateSignedPreKey(/*context, masterSecret, */ identityKey);

            Debug.WriteLine("Registering new prekeys...");

            await App.Current.accountManager.setPreKeys(identityKey.getPublicKey(), lastResortKeyRecord, signedPreKeyRecord, preKeyRecords);

            TextSecurePreferences.setSignedPreKeyRegistered(true);

            //App.Current.Worker.AddTaskActivities(new CleanPreKeysTask());

            return("");
        }
Esempio n. 4
0
        /*
         * private static boolean isPushMediaSend(Context context, Recipients recipients)
         * {
         * try
         * {
         *  if (!TextSecurePreferences.isPushRegistered(context))
         *  {
         *      return false;
         *  }
         *
         *  if (recipients.getRecipientsList().size() > 1)
         *  {
         *      return false;
         *  }
         *
         *  Recipient recipient = recipients.getPrimaryRecipient();
         *  String destination = Util.canonicalizeNumber(context, recipient.getNumber());
         *
         *  return isPushDestination(context, destination);
         * }
         * catch (InvalidNumberException e)
         * {
         *  Log.w(TAG, e);
         *  return false;
         * }
         * }
         *
         * private static boolean isGroupPushSend(Recipients recipients)
         * {
         * return GroupUtil.isEncodedGroup(recipients.getPrimaryRecipient().getNumber());
         * }*/

        private static bool isSelfSend(Recipients recipients)
        {
            try
            {
                if (!TextSecurePreferences.isPushRegistered())
                {
                    return(false);
                }

                if (!recipients.IsSingleRecipient)
                {
                    return(false);
                }

                if (recipients.IsGroupRecipient)
                {
                    return(false);
                }

                String e164number = Utils.canonicalizeNumber(recipients.getPrimaryRecipient().getNumber());
                return(TextSecurePreferences.getLocalNumber().Equals(e164number));
            }
            catch (InvalidNumberException e)
            {
                //Log.w("MessageSender", e);
                return(false);
            }
        }
 private void markAsVerified(String number, String password, String signalingKey)
 {
     TextSecurePreferences.setVerifying(false);
     TextSecurePreferences.setPushRegistered(true);
     TextSecurePreferences.setLocalNumber(number);
     TextSecurePreferences.setPushServerPassword(password);
     TextSecurePreferences.setSignalingKey(signalingKey);
     TextSecurePreferences.setSignedPreKeyRegistered(true);
     //TextSecurePreferences.setPromptedPushRegistration(true);
 }
Esempio n. 6
0
        private async Task <bool> handleRegistration(string receivedSmsVerificationCode)
        {
            try
            {
                var registrationId = KeyHelper.generateRegistrationId(false);
                TextSecurePreferences.setLocalRegistrationId((int)registrationId);

                await App.Current.accountManager.verifyAccountWithCode(receivedSmsVerificationCode, signalingKey, registrationId, false);

                //await PushHelper.getInstance().OpenChannelAndUpload(); // also updates push channel id

                Recipient self = DatabaseFactory.getRecipientDatabase().GetSelfRecipient(number);
                IdentityKeyUtil.generateIdentityKeys();
                IdentityKeyPair     identityKey = IdentityKeyUtil.GetIdentityKeyPair();
                List <PreKeyRecord> records     = await PreKeyUtil.generatePreKeys();

                PreKeyRecord lastResort = await PreKeyUtil.generateLastResortKey();

                SignedPreKeyRecord signedPreKey = await PreKeyUtil.generateSignedPreKey(identityKey);

                await App.Current.accountManager.setPreKeys(identityKey.getPublicKey(), lastResort, signedPreKey, records);

                DatabaseFactory.getIdentityDatabase().SaveIdentity(self.getRecipientId(), identityKey.getPublicKey());

                //await DirectoryHelper.refreshDirectory(App.Current.accountManager, TextSecurePreferences.getLocalNumber());


                markAsVerified(number, password, signalingKey);
            }
            catch (RateLimitException ex)
            {
                return(false);
            }
            catch (AuthorizationFailedException ex)
            {
                return(false);
            }
            catch (PushNetworkException ex)
            {
                return(false);
            }
            catch (NonSuccessfulResponseCodeException ex)
            {
                return(false);
            }
            catch (Exception ex)
            {
                return(false);
                //throw new Exception(ex.Message);
            }

            return(true);
        }
Esempio n. 7
0
        protected override async Task <string> ExecuteAsync()
        {
            try
            {
                String             sessionKey = TextSecurePreferences.getSignalingKey();
                TextSecureEnvelope envelope   = new TextSecureEnvelope(data, sessionKey);

                handle(envelope, true);
            }
            catch (/*IOException | InvalidVersion*/ Exception e) {
                Debug.WriteLine($"{this.GetType().Name}: Error: {e.Message}");
            }

            return("");
        }
Esempio n. 8
0
        protected override string Execute()
        {
            if (TextSecurePreferences.isSignedPreKeyRegistered())
            {
                Log.Warn("Signed prekey already registered...");
                return("");
            }

            IdentityKeyPair identityKeyPair    = IdentityKeyUtil.GetIdentityKeyPair();
            var             signedPreKeyRecord = PreKeyUtil.generateSignedPreKey(identityKeyPair);

            App.Current.accountManager.setSignedPreKey(signedPreKeyRecord);
            TextSecurePreferences.setSignedPreKeyRegistered(true);

            return("");
        }
Esempio n. 9
0
        public async Task <Recipients> getGroupMembers(byte[] groupId, bool includeSelf)
        {
            String        localNumber = TextSecurePreferences.getLocalNumber();
            List <String> members     = await getCurrentMembers(groupId);

            List <Recipient> recipients = new List <Recipient>();

            foreach (String member in members)
            {
                if (!includeSelf && member.Equals(localNumber))
                {
                    continue;
                }

                recipients.AddRange(RecipientFactory.getRecipientsFromString(member, false)
                                    .getRecipientsList());
            }

            return(RecipientFactory.getRecipientsFor(recipients, false));
        }
Esempio n. 10
0
 public uint GetLocalRegistrationId()
 {
     return((uint)TextSecurePreferences.GetLocalRegistrationId());
 }
Esempio n. 11
0
 private bool IsFirstLaunch()
 {
     return(TextSecurePreferences.getLocalNumber() == String.Empty);
 }
 public String GetSignalingKey()
 {
     return(TextSecurePreferences.getSignalingKey());
 }
 public String GetPassword()
 {
     return(TextSecurePreferences.getPushServerPassword());
 }
 public String GetUser()
 {
     return(TextSecurePreferences.getLocalNumber());
 }
 public static SignalServiceAccountManager createManager()
 {
     return(new SignalServiceAccountManager(PUSH_URLS,
                                            TextSecurePreferences.getLocalNumber(),
                                            TextSecurePreferences.getPushServerPassword(), USER_AGENT));
 }
Esempio n. 16
0
        public static String canonicalizeNumber(String number)
        {
            String localNumber = TextSecurePreferences.getLocalNumber();

            return(PhoneNumberFormatter.formatNumber(number, localNumber));
        }
Esempio n. 17
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");
            }
        }
Esempio n. 18
0
        private void handleMessage(/*MasterSecretUnion masterSecret, */ TextSecureEnvelope envelope /*, Optional<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(/*masterSecret, */ envelope, message /*, smsMessageId*/);
                    }
                    //else if (message.isGroupUpdate()) handleGroupMessage(masterSecret, envelope, message, smsMessageId);
                    //else if (message.getAttachments().isPresent()) handleMediaMessage(masterSecret, envelope, message, smsMessageId);
                    else
                    {
                        handleTextMessage(/*masterSecret, */ 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.w(TAG, e);
                //handleInvalidVersionMessage(masterSecret, envelope, smsMessageId);
            }

            /* catch (InvalidMessageException | InvalidKeyIdException | InvalidKeyException | MmsException e) {
             *   Log.w(TAG, e);
             *   handleCorruptMessage(masterSecret, envelope, smsMessageId);
             * } catch (NoSessionException e)
             * {
             *   Log.w(TAG, e);
             *   handleNoSessionMessage(masterSecret, envelope, smsMessageId);
             * }
             * catch (LegacyMessageException e)
             * {
             *   Log.w(TAG, e);
             *   handleLegacyMessage(masterSecret, envelope, smsMessageId);
             * }
             * catch (DuplicateMessageException e)
             * {
             *   Log.w(TAG, e);
             *   handleDuplicateMessage(masterSecret, envelope, smsMessageId);
             * }
             * catch (UntrustedIdentityException e)
             * {
             *   Log.w(TAG, e);
             *   handleUntrustedIdentityMessage(masterSecret, envelope, smsMessageId);
             * }*/
        }
Esempio n. 19
0
        /// <summary>
        /// Invoked when the application is launched normally by the end user.  Other entry points
        /// will be used such as when the application is launched to open a specific file.
        /// </summary>
        /// <param name="e">Details about the launch request and process.</param>
        protected override async void OnLaunched(LaunchActivatedEventArgs e)
        {
#if DEBUG
            if (System.Diagnostics.Debugger.IsAttached)
            {
                this.DebugSettings.EnableFrameRateCounter = false;
            }
#endif
            DispatcherHelper.Initialize();

            if (TextSecurePreferences.getLocalNumber() == string.Empty)
            {
                Debug.WriteLine("Launching first launch experience");
                OnFirstLaunched(e);
                return;
            }

            Debug.WriteLine("Launching...");

            /*if (TextSecurePreferences.isPushRegistered() == true)
             * {
             *  TaskHelper.getInstance().RegisterPushReceiver();
             *
             *  if (channel == null)
             *  {
             *      var response = await PushHelper.getInstance().OpenChannelAndUpload();
             *      channel = response.Channel;
             *  }
             *
             * }*/

            accountManager = TextSecureCommunicationFactory.createManager();


            Worker = new TaskWorker();
            Worker.Start();

            //await DirectoryHelper.refreshDirectory();

            // var task = new EchoActivity("ASDFFDSA");
            var websocketTask = new WebsocketTask();
            Task.Factory.StartNew(() =>
            {
                try
                {
                    var messageReceiver   = TextSecureCommunicationFactory.createReceiver();
                    var pipe              = messageReceiver.createMessagePipe();
                    pipe.MessageReceived += OnMessageRecevied;
                }
                catch (Exception ex) { Debug.WriteLine("Failed asd:" + ex.Message); }
            });
            //Worker.AddTaskActivities(websocketTask);



            /*if (rootFrame.Content == null)
             * {
             *  // When the navigation stack isn't restored navigate to the first page,
             *  // configuring the new page by passing required information as a navigation
             *  // parameter
             *  rootFrame.Navigate(typeof(MainPage), e.Arguments);
             * }*/
            // Ensure the current window is active

            Frame rootFrame = Window.Current.Content as Frame;


            _frame = rootFrame;

            if (rootFrame == null)
            {
                rootFrame = new Frame();
            }

            rootFrame.Navigate(typeof(ExtendedSplash), e.Arguments);
            Window.Current.Content = rootFrame;
            Window.Current.Activate();

            BackButtonManager.RegisterFrame(rootFrame, true, true, true);
        }