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); } }
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); } }
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); }
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); }
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 }); } }
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); }