using NUnit.Framework; using NFC; using NFC.Readers.PCSC; using NFC.Mifare_DESFire; using NFC.Mifare_DESFire.Enums; using System; using System.Text; namespace NFC_Test { [TestFixture, Explicit] public class OTA { private string _ReaderID = "ACS ACR122U PICC Interface 0"; [Test] public void Init() { IHardware hardware = new Hardware(); IReader reader = hardware.OpenReader(_ReaderID); bool transmit_successfully = false; ReaderEventHandler handler = (sender, card) => { card.Connect(); MIFARE_DESFire desfire = new MIFARE_DESFire(card); desfire.SelectApplication(0x000000); desfire.AuthenticateISO_DES(0x00, desfire.GenerateEmptyKey(16)); desfire.Format(); desfire.AuthenticateISO_DES(0x00, desfire.GenerateEmptyKey(16)); byte keySetting1 = desfire.GenerateKeySetting1(ChangeApplicationKey.MASTERKEY, ChangeMasterKeySettings.WITHMASTERKEY, CreateDeleteFile.NOKEY, FileDirectoryAccess.NOKEY, ChangeMasterKey.CHANGEABLE); byte keySetting2 = desfire.GenerateKeySetting2(CryptoOperationsType.AES, FileIdentifies.NOTUSED, 0x03); desfire.CreateApplication(0xC0FFEE, keySetting1, keySetting2); desfire.SelectApplication(0xC0FFEE); desfire.AuthenticateISO_AES(0x00, desfire.GenerateEmptyKey(16)); byte[] key_master = desfire.ConvertFromHexString("45eeb8338ae8f49a032e85bb11143530"); byte[] key_1 = desfire.ConvertFromHexString("8db1f942f2d7cc82f6fa1486a30f8c12"); byte[] key_2 = desfire.ConvertFromHexString("77611d170c449df6f294c48581ab315d"); desfire.ChangeKey_AES(0x00, key_master, 0x10); desfire.AuthenticateISO_AES(0x00, key_master); desfire.ChangeOtherKey_AES(0x01, key_1, desfire.GenerateEmptyKey(16), 0x10); desfire.AuthenticateISO_AES(0x00, key_master); desfire.ChangeOtherKey_AES(0x02, key_2, desfire.GenerateEmptyKey(16), 0x10); UInt16 accesRights = desfire.GenerateFileAccessRights((byte)FileAccessRights.FREE, 0x00, 0x00, 0x00); desfire.CreateFile_Standard(0x01, FileCommunication.PLAIN, accesRights, 0x100); desfire.WriteData(0x01, 0, Encoding.ASCII.GetBytes("user@domain.org")); byte[] data = desfire.ReadData(0x01, 0, 32); Console.WriteLine(Encoding.ASCII.GetString(data)); transmit_successfully = true; card.Disconnect(); }; reader.CardDiscovered += handler; reader.Start(); Assert.AreEqual(true, transmit_successfully); reader.Stop(); reader.CardDiscovered -= handler; } } }