2020-09-15 15:27:01 +02:00
|
|
|
|
using NUnit.Framework;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using NFC;
|
|
|
|
|
using NFC.Readers.PCSC;
|
2020-09-17 16:07:58 +02:00
|
|
|
|
using System.Threading;
|
|
|
|
|
using NFC.Mifare_DESFire;
|
2020-09-26 18:02:44 +02:00
|
|
|
|
using NFC.Mifare_DESFire.Enums;
|
2020-10-06 15:59:53 +02:00
|
|
|
|
using NFC.ISO7816_4;
|
2020-10-07 19:25:51 +02:00
|
|
|
|
using PCSC.Iso7816;
|
2020-09-15 15:27:01 +02:00
|
|
|
|
|
|
|
|
|
namespace NFC_Test
|
|
|
|
|
{
|
|
|
|
|
[TestFixture, Explicit]
|
|
|
|
|
public class REAL_Windows
|
|
|
|
|
{
|
|
|
|
|
[Test]
|
|
|
|
|
public void GetReaders()
|
|
|
|
|
{
|
2020-09-17 16:07:58 +02:00
|
|
|
|
IHardware hardware = new Hardware();
|
2020-09-15 15:27:01 +02:00
|
|
|
|
string[] readers = hardware.GetReaders();
|
|
|
|
|
|
|
|
|
|
Console.WriteLine("Readers detected: {0}", readers.Length);
|
|
|
|
|
|
|
|
|
|
if(readers.Length > 0)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("List of ReaderIDs:");
|
|
|
|
|
foreach (string readerID in readers)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine("{0}", readerID);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-17 16:07:58 +02:00
|
|
|
|
[TestCase("ACS ACR122U PICC Interface 0")]
|
2020-09-15 15:27:01 +02:00
|
|
|
|
public void Connect(string readerID)
|
|
|
|
|
{
|
2020-09-17 16:07:58 +02:00
|
|
|
|
IHardware hardware = new Hardware();
|
|
|
|
|
IReader reader = hardware.OpenReader(readerID);
|
2020-09-15 15:27:01 +02:00
|
|
|
|
|
2020-09-17 16:07:58 +02:00
|
|
|
|
bool connected_successfully = false;
|
|
|
|
|
|
|
|
|
|
ReaderEventHandler handler = (sender, card) =>
|
|
|
|
|
{
|
|
|
|
|
card.Connect();
|
|
|
|
|
|
|
|
|
|
connected_successfully = true;
|
|
|
|
|
|
|
|
|
|
card.Disconnect();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
reader.CardDiscovered += handler;
|
|
|
|
|
reader.Start();
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(true, connected_successfully);
|
|
|
|
|
|
|
|
|
|
reader.Stop();
|
|
|
|
|
reader.CardDiscovered -= handler;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestCase("ACS ACR122U PICC Interface 0")]
|
|
|
|
|
public void GetApplicationIDs(string readerID)
|
|
|
|
|
{
|
|
|
|
|
IHardware hardware = new Hardware();
|
|
|
|
|
IReader reader = hardware.OpenReader(readerID);
|
|
|
|
|
|
|
|
|
|
bool transmit_successfully = false;
|
|
|
|
|
|
|
|
|
|
ReaderEventHandler handler = (sender, card) =>
|
|
|
|
|
{
|
|
|
|
|
card.Connect();
|
|
|
|
|
|
2020-10-05 18:39:45 +02:00
|
|
|
|
MIFARE_DESFire desfire = new MIFARE_DESFire(card);
|
2020-09-17 16:07:58 +02:00
|
|
|
|
|
2020-10-06 15:59:53 +02:00
|
|
|
|
//APDUCommand cmd = desfire.GetApplicationIDs();
|
2020-09-17 16:07:58 +02:00
|
|
|
|
|
2020-10-06 15:59:53 +02:00
|
|
|
|
//APDUResponse response = card.Transmit(cmd);
|
2020-09-17 16:07:58 +02:00
|
|
|
|
|
2020-10-06 15:59:53 +02:00
|
|
|
|
//if (response.StatusWord == NFC.Mifare_DESFire.APDUStatusWords.OK)
|
|
|
|
|
//{
|
|
|
|
|
// UInt32[] ApplicationIDs = desfire.ConvertApplicationIDs(response);
|
2020-09-17 16:07:58 +02:00
|
|
|
|
|
2020-10-06 15:59:53 +02:00
|
|
|
|
// foreach(UInt32 id in ApplicationIDs)
|
|
|
|
|
// {
|
|
|
|
|
// Console.WriteLine("0x{0:X3}", id);
|
|
|
|
|
// }
|
2020-09-17 16:07:58 +02:00
|
|
|
|
|
2020-10-06 15:59:53 +02:00
|
|
|
|
// transmit_successfully = true;
|
|
|
|
|
//}
|
2020-09-17 16:07:58 +02:00
|
|
|
|
|
|
|
|
|
card.Disconnect();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
reader.CardDiscovered += handler;
|
|
|
|
|
reader.Start();
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(true, transmit_successfully);
|
|
|
|
|
|
|
|
|
|
reader.Stop();
|
|
|
|
|
reader.CardDiscovered -= handler;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestCase("ACS ACR122U PICC Interface 0", (UInt32)0xC0FFEE)]
|
|
|
|
|
public void SelectApplication(string readerID, UInt32 applicationID)
|
|
|
|
|
{
|
|
|
|
|
IHardware hardware = new Hardware();
|
|
|
|
|
IReader reader = hardware.OpenReader(readerID);
|
|
|
|
|
|
|
|
|
|
bool transmit_successfully = false;
|
|
|
|
|
|
|
|
|
|
ReaderEventHandler handler = (sender, card) =>
|
|
|
|
|
{
|
|
|
|
|
card.Connect();
|
|
|
|
|
|
2020-10-06 15:59:53 +02:00
|
|
|
|
//MIFARE_DESFire desfire = new MIFARE_DESFire(card);
|
2020-09-17 16:07:58 +02:00
|
|
|
|
|
2020-10-06 15:59:53 +02:00
|
|
|
|
//APDUCommand cmd = desfire.SelectApplication(applicationID);
|
2020-09-17 16:07:58 +02:00
|
|
|
|
|
2020-10-06 15:59:53 +02:00
|
|
|
|
//cmd.ToArray();
|
2020-09-17 16:07:58 +02:00
|
|
|
|
|
2020-10-06 15:59:53 +02:00
|
|
|
|
//APDUResponse response = card.Transmit(cmd);
|
2020-09-17 16:07:58 +02:00
|
|
|
|
|
2020-10-06 15:59:53 +02:00
|
|
|
|
//if (response.StatusWord == NFC.Mifare_DESFire.APDUStatusWords.OK)
|
|
|
|
|
//{
|
|
|
|
|
// transmit_successfully = true;
|
|
|
|
|
//}
|
2020-09-17 16:07:58 +02:00
|
|
|
|
|
|
|
|
|
card.Disconnect();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
reader.CardDiscovered += handler;
|
|
|
|
|
reader.Start();
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(true, transmit_successfully);
|
|
|
|
|
|
|
|
|
|
reader.Stop();
|
|
|
|
|
reader.CardDiscovered -= handler;
|
2020-09-15 15:27:01 +02:00
|
|
|
|
}
|
2020-09-25 20:23:33 +02:00
|
|
|
|
|
2020-10-06 15:59:53 +02:00
|
|
|
|
[TestCase("ACS ACR122U PICC Interface 0", (UInt32)0xAAFFEE)]
|
|
|
|
|
public void CreateApplication(string readerID, UInt32 applicationID)
|
2020-09-25 20:23:33 +02:00
|
|
|
|
{
|
2020-10-07 19:25:51 +02:00
|
|
|
|
//IHardware hardware = new Hardware();
|
|
|
|
|
//IReader reader = hardware.OpenReader(readerID);
|
2020-09-25 20:23:33 +02:00
|
|
|
|
|
2020-10-07 19:25:51 +02:00
|
|
|
|
//bool transmit_successfully = false;
|
2020-09-25 20:23:33 +02:00
|
|
|
|
|
2020-10-07 19:25:51 +02:00
|
|
|
|
//ReaderEventHandler handler = (sender, card) =>
|
|
|
|
|
//{
|
|
|
|
|
// card.Connect();
|
2020-09-25 20:23:33 +02:00
|
|
|
|
|
2020-10-07 19:25:51 +02:00
|
|
|
|
// MIFARE_DESFire desfire = new MIFARE_DESFire(card);
|
2020-09-25 20:23:33 +02:00
|
|
|
|
|
2020-10-07 19:25:51 +02:00
|
|
|
|
// byte keysetting1 = desfire.GenerateKeySetting1(ChangeApplicationKey.MASTERKEY, ChangeMasterKeySettings.WITHMASTERKEY, CreateDeleteFile.NOKEY, FileDirectoryAccess.NOKEY, ChangeMasterKey.CHANGEABLE);
|
|
|
|
|
// byte keysetting2 = desfire.GenerateKeySetting2(CryptoOperationsType.TDES, FileIdentifies.NOTUSED, 0x03);
|
2020-09-25 20:23:33 +02:00
|
|
|
|
|
2020-10-07 19:25:51 +02:00
|
|
|
|
// APDUCommand cmd = desfire.CreateApplication(applicationID, keysetting1, keysetting2);
|
2020-10-06 15:59:53 +02:00
|
|
|
|
|
2020-10-07 19:25:51 +02:00
|
|
|
|
// Console.WriteLine(cmd.ToArray());
|
2020-09-25 20:23:33 +02:00
|
|
|
|
|
2020-10-07 19:25:51 +02:00
|
|
|
|
// APDUResponse response = card.Transmit(cmd);
|
2020-09-25 20:23:33 +02:00
|
|
|
|
|
2020-10-07 19:25:51 +02:00
|
|
|
|
// if (response.StatusWord == NFC.Mifare_DESFire.APDUStatusWords.OK)
|
|
|
|
|
// {
|
|
|
|
|
// transmit_successfully = true;
|
|
|
|
|
// }
|
2020-09-25 20:23:33 +02:00
|
|
|
|
|
2020-10-07 19:25:51 +02:00
|
|
|
|
// card.Disconnect();
|
|
|
|
|
//};
|
2020-09-25 20:23:33 +02:00
|
|
|
|
|
2020-10-07 19:25:51 +02:00
|
|
|
|
//reader.CardDiscovered += handler;
|
|
|
|
|
//reader.Start();
|
2020-09-25 20:23:33 +02:00
|
|
|
|
|
2020-10-07 19:25:51 +02:00
|
|
|
|
//Assert.AreEqual(true, transmit_successfully);
|
2020-09-25 20:23:33 +02:00
|
|
|
|
|
2020-10-07 19:25:51 +02:00
|
|
|
|
//reader.Stop();
|
|
|
|
|
//reader.CardDiscovered -= handler;
|
2020-09-25 20:23:33 +02:00
|
|
|
|
}
|
|
|
|
|
|
2020-10-06 15:59:53 +02:00
|
|
|
|
[TestCase("ACS ACR122U PICC Interface 0", (UInt32)0xAAFFEE)]
|
|
|
|
|
public void DeleteApplication(string readerID, UInt32 applicationID)
|
2020-09-25 20:23:33 +02:00
|
|
|
|
{
|
|
|
|
|
IHardware hardware = new Hardware();
|
|
|
|
|
IReader reader = hardware.OpenReader(readerID);
|
|
|
|
|
|
|
|
|
|
bool transmit_successfully = false;
|
|
|
|
|
|
|
|
|
|
ReaderEventHandler handler = (sender, card) =>
|
|
|
|
|
{
|
|
|
|
|
card.Connect();
|
|
|
|
|
|
2020-10-05 18:39:45 +02:00
|
|
|
|
MIFARE_DESFire desfire = new MIFARE_DESFire(card);
|
2020-09-25 20:23:33 +02:00
|
|
|
|
|
2020-10-06 15:59:53 +02:00
|
|
|
|
desfire.SelectApplication(0x000000);
|
|
|
|
|
desfire.AuthenticateDES(0x00, GenerateDefaultKey(8));
|
|
|
|
|
desfire.DeleteApplication(applicationID);
|
|
|
|
|
|
|
|
|
|
transmit_successfully = true;
|
2020-09-25 20:23:33 +02:00
|
|
|
|
|
|
|
|
|
card.Disconnect();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
reader.CardDiscovered += handler;
|
|
|
|
|
reader.Start();
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(true, transmit_successfully);
|
|
|
|
|
|
|
|
|
|
reader.Stop();
|
|
|
|
|
reader.CardDiscovered -= handler;
|
|
|
|
|
}
|
2020-10-01 19:06:09 +02:00
|
|
|
|
|
|
|
|
|
public byte[] GenerateDefaultKey(int size)
|
|
|
|
|
{
|
|
|
|
|
List<byte> key = new List<byte>();
|
|
|
|
|
for(int i = 0; i < size; i++)
|
|
|
|
|
{
|
|
|
|
|
key.Add(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return key.ToArray();
|
|
|
|
|
}
|
2020-10-06 15:59:53 +02:00
|
|
|
|
|
2020-10-01 19:06:09 +02:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Used Default PICC Key with PICC authenticate
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="readerID"></param>
|
|
|
|
|
[TestCase("ACS ACR122U PICC Interface 0")]
|
|
|
|
|
public void Authenticate(string readerID)
|
|
|
|
|
{
|
|
|
|
|
IHardware hardware = new Hardware();
|
|
|
|
|
IReader reader = hardware.OpenReader(readerID);
|
|
|
|
|
|
|
|
|
|
bool transmit_successfully = false;
|
|
|
|
|
|
|
|
|
|
ReaderEventHandler handler = (sender, card) =>
|
|
|
|
|
{
|
|
|
|
|
card.Connect();
|
|
|
|
|
|
2020-10-05 18:39:45 +02:00
|
|
|
|
MIFARE_DESFire desfire = new MIFARE_DESFire(card);
|
2020-10-01 19:06:09 +02:00
|
|
|
|
|
2020-10-06 15:59:53 +02:00
|
|
|
|
desfire.SelectApplication(0x000000);
|
|
|
|
|
desfire.AuthenticateDES(0x00, GenerateDefaultKey(8));
|
|
|
|
|
|
|
|
|
|
transmit_successfully = true;
|
|
|
|
|
|
|
|
|
|
card.Disconnect();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
reader.CardDiscovered += handler;
|
|
|
|
|
reader.Start();
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(true, transmit_successfully);
|
|
|
|
|
|
|
|
|
|
reader.Stop();
|
|
|
|
|
reader.CardDiscovered -= handler;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestCase("ACS ACR122U PICC Interface 0")]
|
|
|
|
|
public void ChangeKey(string readerID)
|
|
|
|
|
{
|
|
|
|
|
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(0xAAFFEE);
|
2020-10-05 18:39:45 +02:00
|
|
|
|
desfire.AuthenticateDES(0x00, GenerateDefaultKey(8));
|
2020-10-07 19:25:51 +02:00
|
|
|
|
desfire.ChangeKeyDES(0x00, GenerateDefaultKey(8), new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF });
|
|
|
|
|
|
|
|
|
|
transmit_successfully = true;
|
|
|
|
|
|
|
|
|
|
card.Disconnect();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
reader.CardDiscovered += handler;
|
|
|
|
|
reader.Start();
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(true, transmit_successfully);
|
|
|
|
|
|
|
|
|
|
reader.Stop();
|
|
|
|
|
reader.CardDiscovered -= handler;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[TestCase("ACS ACR122U PICC Interface 0")]
|
|
|
|
|
public void ChangeKey_Test(string readerID)
|
|
|
|
|
{
|
|
|
|
|
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(0xAAFFEE);
|
|
|
|
|
desfire.AuthenticateDES(0x00, GenerateDefaultKey(8));
|
|
|
|
|
|
|
|
|
|
APDUCommand cmd = new APDUCommand(IsoCase.Case4Short)
|
|
|
|
|
{
|
|
|
|
|
CLA = 0x90,
|
|
|
|
|
INS = 0xC4,
|
|
|
|
|
Data = GenerateDefaultKey(1 + 16 + 4 + 4)
|
|
|
|
|
// KEY_NO, KEY, CRC32, PADDING
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
card.Transmit(cmd);
|
2020-10-01 19:06:09 +02:00
|
|
|
|
|
|
|
|
|
transmit_successfully = true;
|
|
|
|
|
|
|
|
|
|
card.Disconnect();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
reader.CardDiscovered += handler;
|
|
|
|
|
reader.Start();
|
|
|
|
|
|
|
|
|
|
Assert.AreEqual(true, transmit_successfully);
|
|
|
|
|
|
|
|
|
|
reader.Stop();
|
|
|
|
|
reader.CardDiscovered -= handler;
|
|
|
|
|
}
|
2020-09-15 15:27:01 +02:00
|
|
|
|
}
|
|
|
|
|
}
|