コード例 #1
0
ファイル: ShowIDViewModel.cs プロジェクト: betsegaw/finalid
        public async override Task NavigatedToAsync()
        {
            if (_challenge == null)
            {
                var challengeScanner = new ScanQRCodeViewModel((result) => { _challenge = result; }, this, "Scan the challenge from your friend's phone");
                await NavigationMaster.Instance.NavigateTo(challengeScanner);
            }
            else if (_showingIdKeyAndSignedChallenge)
            {
                await NavigationMaster.Instance.NavigateTo(_postShowIDTarget);
            }
            else
            {
                _showingIdKeyAndSignedChallenge = true;
                KeyPair keyPair         = (await LocalIdentityStore.Instance.GetCurrentIdentity()).KeyPairsAssertingOwnership.First();
                byte[]  signedChallenge = keyPair.Sign(_challenge);
                byte[]  publicKey       = keyPair.PublicKeyBytes;

                var idDisplay              = new QRDisplayViewModel((await LocalIdentityStore.Instance.GetCurrentIdentity()).IdentityGUID.ToString(), "ID");
                var publicKeyDisplay       = new QRDisplayViewModel(publicKey, "Public Key");
                var signedChallengeDisplay = new QRDisplayViewModel(signedChallenge, "Signed Challenge");

                idDisplay.PostDisplayComplete              = publicKeyDisplay;
                publicKeyDisplay.PostDisplayComplete       = signedChallengeDisplay;
                signedChallengeDisplay.PostDisplayComplete = this;

                await NavigationMaster.Instance.NavigateTo(idDisplay);
            }
        }
コード例 #2
0
ファイル: VerifyIDViewModel.cs プロジェクト: betsegaw/finalid
        public override async Task NavigatedToAsync()
        {
            if (_id != null && _publicKey != null && _signedChallenge != null)
            {
                var friendPublicKey = new KeyPair(_publicKey);

                if (friendPublicKey.Verify(_challenge, _signedChallenge))
                {
                    var verifiedIdentity = new Identity(_id);
                    verifiedIdentity.KeyPairsAssertingOwnership.Add(friendPublicKey);
                    _verifiedPublicKeyReceiver.VerifiedIdImport(verifiedIdentity);
                }

                await NavigationMaster.Instance.NavigateTo(_postVerificationNavigationTarget);
            }
            else
            {
                _challenge = Guid.NewGuid().ToString();

                QRDisplayViewModel qrChallengeDisplay = new QRDisplayViewModel(_challenge, "Challenge");

                var hashScanner = new ScanQRCodeViewModel((signedChallenge) => { _signedChallenge = signedChallenge; }, this, "Scan your friend's signed challenge!");

                var publicKeyScanner = new ScanQRCodeViewModel((publicKey) => { _publicKey = publicKey; }, hashScanner, "Scan your friend's Public key");

                var idScanner = new ScanQRCodeViewModel((id) => { _id = Guid.Parse(id); }, publicKeyScanner, "Scan your friend's id");

                qrChallengeDisplay.PostDisplayComplete = idScanner;

                await NavigationMaster.Instance.NavigateTo(qrChallengeDisplay);
            }
        }
コード例 #3
0
        public async void VerifyEndorsement()
        {
            ObservableCollection <ListItemViewModel> identitiesInCommon = new ObservableCollection <ListItemViewModel>();

            ListPageViewModel displayListOfCommonIdentities = new ListPageViewModel(identitiesInCommon, this);

            // Do some endorsement
            ScanQRCodeViewModel scanListOfEndorsedGuids = new ScanQRCodeViewModel(
                (string endorsementsAsString) =>
            {
                List <string> endorsingIDs = JsonConvert.DeserializeObject <List <string> >(endorsementsAsString);

                IEnumerable <Identity> intersectionOfIdentities = LocalIdentityStore.Instance.GetAllIdentities().Result.Where(x => endorsingIDs.Contains(x.IdentityGUID.ToString()));

                foreach (var identity in intersectionOfIdentities)
                {
                    identitiesInCommon.Add(new ListItemViewModel(identity, identity.FriendlyName, () =>
                    {
                        MessagePageViewModel verificationResult = new MessagePageViewModel(string.Empty, displayListOfCommonIdentities);

                        QRDisplayViewModel displaySelectedIdentityQR = new QRDisplayViewModel(
                            ((Identity)identity).IdentityGUID.ToString(),
                            "Display selected identity");

                        ScanQRCodeViewModel scanEndorsement = new ScanQRCodeViewModel(
                            (string endorsement) =>
                        {
                            var endorsementIsValid = identity.IsValidEndorsement(Endorsement.GetFromJSONString(endorsement));
                            if (endorsementIsValid)
                            {
                                verificationResult.Message     = "The endorsement is valid!";
                                verificationResult.MessageIcon = MessagePageViewModel.MessageIcons.Success;
                            }
                            else
                            {
                                verificationResult.Message     = "The endorsement is NOT valid!";
                                verificationResult.MessageIcon = MessagePageViewModel.MessageIcons.Error;
                            }
                        },
                            verificationResult,
                            "Scan endorsement");

                        displaySelectedIdentityQR.PostDisplayComplete = scanEndorsement;

                        NavigationMaster.Instance.NavigateTo(displaySelectedIdentityQR);
                    }));
                }
            },
                displayListOfCommonIdentities,
                "Scan list of endorsements");

            // Navigate back to main page
            await NavigationMaster.Instance.NavigateTo(scanListOfEndorsedGuids);
        }
コード例 #4
0
        public async Task AcceptEndorsement()
        {
            Endorsement endorsement = null;
            KeyPair     publicKey   = null; // assigning here to make compiler happy
            Guid        guid;
            Identity    endorserIdentity = null;

            var getFriendlyName = new InputPageViewModel(
                new List <InputViewModel>()
            {
                new InputViewModel()
            },
                async(content) =>
            {
                endorserIdentity.FriendlyName = content.First().Content;
                if (endorserIdentity.IsValidEndorsement(endorsement))
                {
                    await LocalIdentityStore.Instance.StoreIdentity(endorserIdentity);
                    LocalIdentityStore.Instance.AcceptEndorsement(endorsement);
                }
            },
                new MainPageViewModel());

            var readEndorsement = new ScanQRCodeViewModel(
                async(string result) =>
            {
                endorsement = Endorsement.GetFromJSONString(result);

                endorserIdentity = await LocalIdentityStore.Instance.GetIdentity(guid);

                if (endorserIdentity == null)
                {
                    endorserIdentity = new Identity(guid);
                }

                endorserIdentity.KeyPairsAssertingOwnership.Add(publicKey);
            },
                getFriendlyName,
                "Scan endorsement");

            var readPublicKey = new ScanQRCodeViewModel((byte[] result) => { publicKey = new KeyPair(result); }, readEndorsement, "Scan Public Key");
            var readGuid      = new ScanQRCodeViewModel((string result) => { guid = Guid.Parse(result); }, readPublicKey, "Scan ID");

            await NavigationMaster.Instance.NavigateTo(readGuid);
        }
コード例 #5
0
        public override async Task NavigatedToAsync()
        {
            if (!_waitingForScannerCallback)
            {
                var scannerViewModel =
                    new ScanQRCodeViewModel((userId) => { UserID = Guid.Parse(userId); }, this, "Scan your existing ID");

                _waitingForScannerCallback = true;
                await NavigationMaster.Instance.NavigateTo(scannerViewModel);
            }
            else
            {
                _waitingForScannerCallback = false;
                await NavigationMaster.Instance.NavigateTo(new DeviceKeyGenerationViewModel()
                {
                    UserID = this.UserID
                });
            }
        }
コード例 #6
0
        public async Task ShowEndorsement()
        {
            QRDisplayViewModel endorsementDisplay = new QRDisplayViewModel(string.Empty, "Endorsement");

            endorsementDisplay.PostDisplayComplete = new MainPageViewModel();

            var scanEndorserGUID = new ScanQRCodeViewModel(
                (string endorserGuidAsString) =>
            {
                var endorsement = LocalIdentityStore.Instance.GetCurrentIdentity().Result.Endorsements
                                  .Where(x => x.EndorserGUID == endorserGuidAsString)
                                  .First();
                endorsementDisplay.Content = endorsement.ToString();
            },
                endorsementDisplay,
                "Scan Endorsement GUID");

            await NavigationMaster.Instance.NavigateTo(scanEndorserGUID);
        }