int Run(string[] args) { ConsoleTitle(ProgName); if (!ParseArgs(args)) { Console.WriteLine("Try " + ProgName + " --help"); return(1); } if (Action == ActionE.Help) { Usage(); return(0); } if (!AppleVasLicense.AutoLoad()) { Logger.Info("No license file"); } if (Action == ActionE.Version) { ConsoleColor(ConsoleColorScheme.Info); Console.WriteLine("SpringCard.AppleVAS library version: {0}", SpringCard.AppleVas.Library.ModuleInfo.LongVersion); ConsoleColor(); return(0); } if (Action == ActionE.SelfTest) { if (!AppleVasTerminal.SelfTest()) { ConsoleColor(ConsoleColorScheme.Error); Console.WriteLine("SpringCard.AppleVAS self-test failed"); ConsoleColor(); return(1); } else { ConsoleColor(ConsoleColorScheme.Success); Console.WriteLine("SpringCard.AppleVAS self-test OK"); ConsoleColor(); return(0); } } if (Action == ActionE.KeyId) { uint keyId = AppleVasCrypto.ECC.ComputeKeyIdFromPem(KeyInputFile); Console.WriteLine("{0:X08}", keyId); return(0); } Logger.Debug("Loading the list of PC/SC readers"); string[] ReaderNames = (new SCardReaderList()).Readers; if (Action == ActionE.ListReaders) { Console.WriteLine(string.Format("{0} PC/SC Reader(s) found", ReaderNames.Length)); for (int i = 0; i < ReaderNames.Length; i++) { Console.WriteLine(string.Format("{0}: {1}", i, ReaderNames[i])); } return(0); } if (!File.Exists(ConfigFile)) { ConsoleColor(ConsoleColorScheme.Error); Console.WriteLine("File {0} not found", ConfigFile); ConsoleColor(); return(1); } try { terminalConfig = AppleVasTerminalConfig.LoadFromJsonFile(ConfigFile); } catch (Exception e) { ConsoleColor(ConsoleColorScheme.Error); Console.WriteLine("Failed to load the configuration"); Console.WriteLine("Error: {0}", e.Message); ConsoleColor(); return(1); } ConsoleColor(ConsoleColorScheme.Info); Console.WriteLine(terminalConfig.Description); ConsoleColor(); if (ReaderName == null) { if (ReaderIndex < 0) { ReaderIndex = 0; } Logger.Debug("Selecting the PC/SC reader at index {0}", ReaderIndex); if ((ReaderIndex >= ReaderNames.Length)) { ConsoleColor(ConsoleColorScheme.Error); Console.WriteLine("No PC/SC Reader at index {0}", ReaderIndex); Console.WriteLine("Use " + ProgName + " --list-readers to show the available reader(s)"); ConsoleColor(); return(1); } ReaderName = ReaderNames[ReaderIndex]; } Logger.Debug("Using PC/SC reader {0}", ReaderName); if (Stress) { timerFieldOff = new System.Timers.Timer(1000 * FieldOffAfter); timerFieldOff.Elapsed += RfFieldOff; timerFieldOff.AutoReset = true; timerFieldOff.Enabled = false; timerFieldOn = new System.Timers.Timer(1000 * FieldOffLength); timerFieldOn.Elapsed += RfFieldOn; timerFieldOn.AutoReset = true; timerFieldOn.Enabled = false; } SCardChannel directChannel = new SCardChannel(ReaderName); if (directChannel.ConnectDirect()) { directChannel.Control(new byte[] { 0x58, 0x23, 0x00 }); directChannel.DisconnectLeave(); } terminalReader = new SCardReader(ReaderName); terminalReader.StartWaitCard(new SCardReader.CardConnectedCallback(CardConnectedCallback), new SCardReader.CardRemovedCallback(CardRemovedCallback)); Console.WriteLine("Press any key to exit."); Console.ReadKey(true); Console.WriteLine("Exit required..."); terminalReader.StopWaitCard(); Console.WriteLine("Bye."); return(0); }
public bool LoadAppleConfigFromFile(string FileName) { appleConfig = AppleVasTerminalConfig.LoadFromJsonFile(FileName); return(true); }