49 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*! @file
 | |
| 
 | |
|     @id $Id$
 | |
| */
 | |
| //       1         2         3         4         5         6         7         8
 | |
| // 45678901234567890123456789012345678901234567890123456789012345678901234567890
 | |
| 
 | |
| #include <cryptoki.hxx>
 | |
| #include <pcsc.hxx>
 | |
| #include <mrw/args.hxx>
 | |
| #include <mrw/vector.hxx>
 | |
| 
 | |
| #include <stdexcept>
 | |
| #include <iostream>
 | |
| 
 | |
| int main(int argc, char** argv) try {
 | |
|   
 | |
|   std::string lib("libcvP11.so");
 | |
|   mrw::args::parse(argc, argv,
 | |
|                    "Sign a text (optionally several times for performance"
 | |
|                    " measurements).",
 | |
|                    mrw::args::list()
 | |
|                    <<mrw::args::decl("h", "help", "show help",
 | |
|                                      mrw::args::decl::param_list()
 | |
|                                      <<mrw::args::help()
 | |
|                                      <<mrw::args::exit())
 | |
|                    <<mrw::args::decl("l", "library", "cryptoki lirary to load",
 | |
|                                      mrw::args::decl::param_list()
 | |
|                                      <<mrw::args::param(lib, "lib")));
 | |
| 
 | |
|   pcsc::Connection pcsc;
 | |
|   cryptoki::Init cryptoki(lib);
 | |
| 
 | |
|   // Scan for a Post SuisseID
 | |
|   pcsc::Connection::Strings readers
 | |
|     (pcsc.getReadersWithAtr("4b53776973735369676e"));
 | |
|   std::cout<<"found "<<readers.size()<<" readers"<<std::endl;
 | |
|   for (pcsc::Connection::Strings::iterator reader(readers.begin());
 | |
|        reader!=readers.end(); ++reader) {
 | |
|     std::cout<<"Found SuisseID in reader: "<<*reader<<std::endl;
 | |
|     // Each PCSC reader has exactly one corresponding Cryptoki slot; find it
 | |
|     cryptoki::SlotList slots(cryptoki.slotList(true, *reader));
 | |
|     if (slots.size()!=1) throw std::runtime_error("error scanning cryptoki");
 | |
|   }
 | |
|   return 0;
 | |
|  } catch (std::exception& x) {
 | |
|   std::cerr<<"**** ERROR in "<<*argv<<": "<<x.what()<<std::endl;
 | |
|  }
 |