public override byte[] GetKey(KeyProviderQueryContext ctx) { byte[] key = null; try { KeePassRFIDConfig rfidConfig = KeePassRFIDConfig.GetFromCurrentSession(); ChipAction(new Action <Chip>(delegate(Chip chip) { if (rfidConfig.KeyType == KeyType.NFC) { // Only tag type 4 supported for now. NFCTagCardService nfcsvc = chip.getService(CardServiceType.CST_NFC_TAG) as NFCTagCardService; if (nfcsvc == null) { throw new KeePassRFIDException(Properties.Resources.UnsupportedNFCTag); } NdefMessage msg = nfcsvc.readNDEF(); if (msg.getRecordCount() > 0) { NdefRecordCollection records = msg.getRecords(); if (records.Count > 0) { // Always use first record only NdefRecord record = records[0]; // Don't care about payload type, use whole payload as the key UCharCollection payload = record.getPayload(); if (payload.Count > 0) { key = payload.ToArray(); } } } } else { UCharCollection csn = chip.getChipIdentifier(); if (csn.Count > 0) { key = csn.ToArray(); } } }), rfidConfig); } catch (KeePassRFIDException ex) { MessageBox.Show(ex.Message, Properties.Resources.PluginError, MessageBoxButtons.OK, MessageBoxIcon.Error); } return(key); }
private void linkWriteNFC_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { PasswordForm pwdForm = new PasswordForm(); if (pwdForm.ShowDialog(this) == DialogResult.OK) { try { RFIDKeyProvider.ChipAction(new Action <Chip>(delegate(Chip chip) { NFCTagCardService nfcsvc = chip.getService(CardServiceType.CST_NFC_TAG) as NFCTagCardService; if (nfcsvc == null) { throw new KeePassRFIDException(Properties.Resources.UnsupportedNFCTag); } NdefMessage msg = new NdefMessage(); msg.addTextRecord(pwdForm.Password, "en"); // Special case until new LLA SWIG version get released if (nfcsvc is DESFireEV1NFCTag4CardService) { var storagesvc = chip.getService(CardServiceType.CST_STORAGE) as DESFireStorageCardService; if (storagesvc == null) { throw new KeePassRFIDException(Properties.Resources.UnsupportedNFCTag); } storagesvc.erase(); } else { nfcsvc.eraseNDEF(); } nfcsvc.writeNDEF(msg); }), GetConfiguration()); MessageBox.Show(Properties.Resources.NFCTagWritten, Properties.Resources.Information, MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (KeePassRFIDException ex) { MessageBox.Show(ex.Message, Properties.Resources.PluginError, MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
private void linkWriteNFC_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { PasswordForm pwdForm = new PasswordForm(); if (pwdForm.ShowDialog(this) == DialogResult.OK) { try { RFIDKeyProvider.ChipAction(new Action <Chip>(delegate(Chip chip) { // Only tag type 4 supported for now. NFCTagCardService nfcsvc = chip.getService(CardServiceType.CST_NFC_TAG) as NFCTagCardService; if (nfcsvc == null) { throw new KeePassRFIDException(Properties.Resources.UnsupportedNFCTag); } NdefMessage msg = new NdefMessage(); msg.addTextRecord(pwdForm.Password); StorageCardService storage = chip.getService(CardServiceType.CST_STORAGE) as StorageCardService; if (storage != null) { storage.erase(); } nfcsvc.writeNDEF(msg); }), GetConfiguration()); MessageBox.Show(Properties.Resources.NFCTagWritten, Properties.Resources.Information, MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (KeePassRFIDException ex) { MessageBox.Show(ex.Message, Properties.Resources.PluginError, MessageBoxButtons.OK, MessageBoxIcon.Error); } } }