public void Run(string readerName) { using (var reader = new SmartCardReader(readerName)) { try { ConsoleWriter.Instance.PrintSplitter(); ConsoleWriter.Instance.PrintTask($"Connecting to {reader.PcscReaderName}"); ReaderHelper.ConnectToReader(reader); ConsoleWriter.Instance.PrintMessage($"Connected\nConnection Mode: {reader.ConnectionMode}"); ExecuteExample(reader); ConsoleWriter.Instance.PrintSplitter(); } catch (Exception e) { ConsoleWriter.Instance.PrintError(e.Message); } finally { if (reader.IsConnected) { reader.Disconnect(CardDisposition.Unpower); ConsoleWriter.Instance.PrintMessage("Reader connection closed"); } ConsoleWriter.Instance.PrintSplitter(); } } }
public void Run(string readerName) { var reader = new SmartCardReader(readerName); try { ConsoleWriter.Instance.PrintSplitter(); ConsoleWriter.Instance.PrintTask($"Connecting to {reader.PcscReaderName}"); ReaderHelper.ConnectToReaderWithCard(reader); ConsoleWriter.Instance.PrintMessage($"Connected\nConnection Mode: {reader.ConnectionMode}"); ReaderHelper.GetDataCommand(reader, "Get Historical Bytes", GetDataCommand.Type.Specific); ConsoleWriter.Instance.PrintSplitter(); } catch (Exception e) { ConsoleWriter.Instance.PrintError(e.Message); } finally { if (reader.IsConnected) { reader.Disconnect(CardDisposition.Unpower); ConsoleWriter.Instance.PrintMessage("Reader connection closed"); } ConsoleWriter.Instance.PrintSplitter(); } }
public static string GetSerialNumber(string readerName) { string readerSerialNumber; using (var reader = new SmartCardReader(readerName)) { var getSerialNumberCommand = new Readers.AViatoR.Components.SerialNumber(); ConnectToReader(reader); try { var response = SendCommand(reader, getSerialNumberCommand.GetApdu); readerSerialNumber = getSerialNumberCommand.TranslateResponse(response); } catch (Exception) { // TODO Currently errors are suppressed, maybe should add some way to indicate the reason why serial number is not read return(string.Empty); } finally { if (reader.IsConnected) { reader.Disconnect(CardDisposition.Unpower); } } } return(readerSerialNumber); }
public void Run(string readerName) { var reader = new SmartCardReader(readerName); try { ConsoleWriter.Instance.PrintSplitter(); ConsoleWriter.Instance.PrintTask($"Connecting to {reader.PcscReaderName}"); ReaderHelper.ConnectToReaderWithCard(reader); ConsoleWriter.Instance.PrintMessage($"Connected\nConnection Mode: {reader.ConnectionMode}"); ReaderHelper.ConnectToReaderWithCard(reader); SendUpdateBinaryCommand(reader, UpdateBinaryCommand.Type.Plain, 0x00, "ABCDEF01"); ConsoleWriter.Instance.PrintSplitter(); } catch (Exception e) { ConsoleWriter.Instance.PrintError(e.Message); } finally { if (reader.IsConnected) { reader.Disconnect(CardDisposition.Unpower); ConsoleWriter.Instance.PrintMessage("Reader connection closed"); } ConsoleWriter.Instance.PrintSplitter(); } }
public void Run(string readerName) { var reader = new SmartCardReader(readerName); var secureChannel = new Readers.SecureSession.SecureChannel(reader); try { ConsoleWriter.Instance.PrintSplitter(); ConsoleWriter.Instance.PrintTask("Establishing Secure Session"); if (!IsValidSessionKeyFormat(EncKey) || !IsValidSessionKeyFormat(MacKey)) { throw new ArgumentException("Secure session key format is incorrect, correct format of session key string is 32 character long hexadecimal string without hex specifier. Example: \"00000000000000000000000000000000\""); } secureChannel.Establish(EncKey + MacKey, KeyRelatedAccesRight); if (secureChannel.IsSessionActive) { ConsoleWriter.Instance.PrintMessage("Session established"); ConsoleWriter.Instance.PrintSplitter(); ReaderHelper.GeneralAuthenticateiClass(secureChannel, "Authenticate without implicit selection. Key from slot: ", BookNumber.Book0, PageNumber.Page0, GeneralAuthenticateCommand.ImplicitSelection.Off, GeneralAuthenticateCommand.iClassKeyType.PicoPassCreditKeyKC, 0x21); ReaderHelper.UpdateBinaryCommand(secureChannel, "Update binary, target block nr: ", UpdateBinaryCommand.Type.Plain, 0x14, "BACDEF0122345678"); ConsoleWriter.Instance.PrintSplitter(); } else { ConsoleWriter.Instance.PrintError("Failed to establish session"); } } catch (Exception e) { ConsoleWriter.Instance.PrintError(e.Message); } finally { if (secureChannel.IsSessionActive) { secureChannel.Terminate(); ConsoleWriter.Instance.PrintMessage("Secure Session terminated."); } if (reader.IsConnected) { reader.Disconnect(CardDisposition.Unpower); ConsoleWriter.Instance.PrintMessage("Reader connection closed"); } ConsoleWriter.Instance.PrintSplitter(); } }
public void Run(string readerName) { var reader = new SmartCardReader(readerName); var secureChannel = new Readers.SecureSession.SamSecureSession.SamSecureSession(reader); try { ConsoleWriter.Instance.PrintSplitter(); ConsoleWriter.Instance.PrintTask("Establishing SAM Secure Session"); secureChannel.Establish(SamSecureSessionMasterKey, SamSecureSessionKeyNumber); if (secureChannel.IsSessionActive) { ConsoleWriter.Instance.PrintMessage("Session established"); LoadKeyCommand(secureChannel, "Load Mifare Key: ", 0x00, Readers.AViatoR.Components.LoadKeyCommand.KeyType.CardKey, Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent, Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain, Readers.AViatoR.Components.LoadKeyCommand.KeyLength._6Bytes, "FFFFFFFFFFFF"); LoadKeyCommand(secureChannel, "Load iCLASS key, book 0 page 7 App 2: ", 0x31, Readers.AViatoR.Components.LoadKeyCommand.KeyType.CardKey, Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent, Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain, Readers.AViatoR.Components.LoadKeyCommand.KeyLength._8Bytes, "FFFFFFFFFFFFFFFF"); ConsoleWriter.Instance.PrintSplitter(); } else { ConsoleWriter.Instance.PrintError("Failed to establish session"); } } catch (Exception e) { ConsoleWriter.Instance.PrintError(e.Message); } finally { if (secureChannel.IsSessionActive) { secureChannel.Terminate(); ConsoleWriter.Instance.PrintMessage("SAM Secure Session terminated."); } if (reader.IsConnected) { reader.Disconnect(CardDisposition.Unpower); ConsoleWriter.Instance.PrintMessage("Reader connection closed"); } ConsoleWriter.Instance.PrintSplitter(); } }
public void Run(string readerName) { var reader = new SmartCardReader(readerName); try { ConsoleWriter.Instance.PrintSplitter(); ConsoleWriter.Instance.PrintTask($"Connecting to {reader.PcscReaderName}"); ReaderHelper.ConnectToReaderWithCard(reader); ConsoleWriter.Instance.PrintMessage($"Connected\nConnection Mode: {reader.ConnectionMode}"); ConsoleWriter.Instance.PrintSplitter(); ReaderHelper.GeneralAuthenticateMifare(reader, "Authenticate with key from slot nr ", 0x04, GeneralAuthenticateCommand.MifareKeyType.MifareKeyA, 0x02); ReaderHelper.ReadBinaryMifareCommand(reader, "Read Binary block nr ", 0x04, 0x00); ReaderHelper.GeneralAuthenticateMifare(reader, "Authenticate with key from slot nr ", 0x05, GeneralAuthenticateCommand.MifareKeyType.MifareKeyA, 0x02); ReaderHelper.ReadBinaryMifareCommand(reader, "Read Binary block nr ", 0x05, 0x00); ReaderHelper.GeneralAuthenticateMifare(reader, "Authenticate with key from slot nr ", 0x06, GeneralAuthenticateCommand.MifareKeyType.MifareKeyA, 0x02); ReaderHelper.ReadBinaryMifareCommand(reader, "Read Binary block nr ", 0x06, 0x00); ReaderHelper.GeneralAuthenticateMifare(reader, "Authenticate with key from slot nr ", 0x07, GeneralAuthenticateCommand.MifareKeyType.MifareKeyA, 0x02); ReaderHelper.ReadBinaryMifareCommand(reader, "Read Binary block nr ", 0x07, 0x00); ConsoleWriter.Instance.PrintSplitter(); } catch (Exception e) { ConsoleWriter.Instance.PrintError(e.Message); } finally { if (reader.IsConnected) { reader.Disconnect(CardDisposition.Unpower); ConsoleWriter.Instance.PrintMessage("Reader connection closed"); } ConsoleWriter.Instance.PrintSplitter(); } }
public void Run(string readerName) { var reader = new SmartCardReader(readerName); try { ConsoleWriter.Instance.PrintSplitter(); ConsoleWriter.Instance.PrintTask($"Connecting to {reader.PcscReaderName}"); ReaderHelper.ConnectToReaderWithCard(reader); ConsoleWriter.Instance.PrintMessage($"Connected\nConnection Mode: {reader.ConnectionMode}"); ConsoleWriter.Instance.PrintSplitter(); ReaderHelper.GeneralAuthenticateMifare(reader, "Authenticate with key from slot nr ", 0x04, GeneralAuthenticateCommand.MifareKeyType.MifareKeyA, 0x02); // Update block 4 with write operation in value block format: // 4 byte value LSByte first, 4 byte bit inverted represetaton of value LSByte first, 4 byte value LSByte first, 1 byte block address, 1 byte bit inverted block address, 1 byte block address, 1 byte bit inverted block address string valueTypeData = GetMifareValueTypeData(1234567, 0x04); ReaderHelper.UpdateBinaryCommand(reader, "Create value type in block nr ", UpdateBinaryCommand.Type.Plain, 0x04, valueTypeData); SendDecrementCommand(reader, "Decrement value in block nr: ", 1, 0x04); ConsoleWriter.Instance.PrintSplitter(); } catch (Exception e) { ConsoleWriter.Instance.PrintError(e.Message); } finally { if (reader.IsConnected) { reader.Disconnect(CardDisposition.Unpower); ConsoleWriter.Instance.PrintMessage("Reader connection closed"); } ConsoleWriter.Instance.PrintSplitter(); } }
public void Run(string readerName) { var reader = new SmartCardReader(readerName); try { ConsoleWriter.Instance.PrintSplitter(); ConsoleWriter.Instance.PrintTask($"Connecting to {reader.PcscReaderName}"); ReaderHelper.ConnectToReaderWithCard(reader); ConsoleWriter.Instance.PrintMessage($"Connected\nConnection Mode: {reader.ConnectionMode}"); ConsoleWriter.Instance.PrintSplitter(); ReaderHelper.GeneralAuthenticateiClass(reader, "Authenticate with implicit selection. Key from slot: ", BookNumber.Book0, PageNumber.Page0, GeneralAuthenticateCommand.ImplicitSelection.On, GeneralAuthenticateCommand.iClassKeyType.PicoPassCreditKeyKC, 0x23); ReaderHelper.ReadBinaryiClassCommand(reader, "Read block without select, block: ", ReadBinaryCommand.ReadOption.WithoutSelect, 0x14, 0x00); ConsoleWriter.Instance.PrintSplitter(); } catch (Exception e) { ConsoleWriter.Instance.PrintError(e.Message); } finally { if (reader.IsConnected) { reader.Disconnect(CardDisposition.Unpower); ConsoleWriter.Instance.PrintMessage("Reader connection closed"); } ConsoleWriter.Instance.PrintSplitter(); } }
public void Run(string readerName) { var reader = new SmartCardReader(readerName); try { ConsoleWriter.Instance.PrintSplitter(); ConsoleWriter.Instance.PrintTask($"Connecting to { reader.PcscReaderName}"); ReaderHelper.ConnectToReader(reader); ConsoleWriter.Instance.PrintMessage($"Connected\nConnection Mode: {reader.ConnectionMode}"); ConsoleWriter.Instance.PrintSplitter(); LoadKeyCommand(reader, "Load Mifare Key: ", 0x00, Readers.AViatoR.Components.LoadKeyCommand.KeyType.CardKey, Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent, Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain, Readers.AViatoR.Components.LoadKeyCommand.KeyLength._6Bytes, "FFFFFFFFFFFF"); ConsoleWriter.Instance.PrintSplitter(); } catch (Exception e) { ConsoleWriter.Instance.PrintError(e.Message); } finally { if (reader.IsConnected) { reader.Disconnect(CardDisposition.Unpower); ConsoleWriter.Instance.PrintMessage("Reader connection closed"); } ConsoleWriter.Instance.PrintSplitter(); } }
public void Run(string readerName) { var reader = new SmartCardReader(readerName); var secureChannel = new Readers.SecureSession.SecureChannel(reader); try { ConsoleWriter.Instance.PrintSplitter(); ConsoleWriter.Instance.PrintTask("Establishing SAM Secure Session"); if (!IsValidSessionKeyFormat(EncKey) || !IsValidSessionKeyFormat(MacKey)) { throw new ArgumentException("Secure session key format is incorrect, correct format of session key string is 32 character long hexadecimal string without hex specifier. Example: \"00000000000000000000000000000000\""); } secureChannel.Establish(EncKey + MacKey, KeyRelatedAccessRight); if (secureChannel.IsSessionActive) { ConsoleWriter.Instance.PrintMessage("Session established"); ConsoleWriter.Instance.PrintSplitter(); LoadKeyCommand(secureChannel, "Load Mifare Key: ", 0x00, Readers.AViatoR.Components.LoadKeyCommand.KeyType.CardKey, Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent, Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain, Readers.AViatoR.Components.LoadKeyCommand.KeyLength._6Bytes, "FFFFFFFFFFFF"); LoadKeyCommand(secureChannel, "Load iCLASS volatile key: ", 0x41, Readers.AViatoR.Components.LoadKeyCommand.KeyType.CardKey, Readers.AViatoR.Components.LoadKeyCommand.Persistence.Volatile, Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain, Readers.AViatoR.Components.LoadKeyCommand.KeyLength._8Bytes, "FFFFFFFFFFFFFFFF"); LoadKeyCommand(secureChannel, "Load Secure Session ReadOnlyAccess Enc key: ", 0x48, Readers.AViatoR.Components.LoadKeyCommand.KeyType.ReaderKey, Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent, Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain, Readers.AViatoR.Components.LoadKeyCommand.KeyLength._16Bytes, "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC"); LoadKeyCommand(secureChannel, "Load Secure Session ReadOnlyAccess Mac key: ", 0x49, Readers.AViatoR.Components.LoadKeyCommand.KeyType.ReaderKey, Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent, Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain, Readers.AViatoR.Components.LoadKeyCommand.KeyLength._16Bytes, "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD"); LoadKeyCommand(secureChannel, "Load Secure Session ReadWriteAccess Enc key: ", 0x46, Readers.AViatoR.Components.LoadKeyCommand.KeyType.ReaderKey, Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent, Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain, Readers.AViatoR.Components.LoadKeyCommand.KeyLength._16Bytes, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); LoadKeyCommand(secureChannel, "Load Secure Session ReadWriteAccess Mac key: ", 0x47, Readers.AViatoR.Components.LoadKeyCommand.KeyType.ReaderKey, Readers.AViatoR.Components.LoadKeyCommand.Persistence.Persistent, Readers.AViatoR.Components.LoadKeyCommand.Transmission.Plain, Readers.AViatoR.Components.LoadKeyCommand.KeyLength._16Bytes, "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"); ConsoleWriter.Instance.PrintSplitter(); } else { ConsoleWriter.Instance.PrintError("Failed to establish session"); } } catch (Exception e) { ConsoleWriter.Instance.PrintError(e.Message); } finally { if (secureChannel.IsSessionActive) { secureChannel.Terminate(); ConsoleWriter.Instance.PrintMessage("SAM Secure Session terminated."); } if (reader.IsConnected) { reader.Disconnect(CardDisposition.Unpower); ConsoleWriter.Instance.PrintMessage("Reader connection closed"); } ConsoleWriter.Instance.PrintSplitter(); } }