|
|
@ -41,7 +41,7 @@ class CryptokiEngine: public QObject, public openssl::Engine { |
|
|
|
return _privateKey.get(); |
|
|
|
return _privateKey.get(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
cryptoki::Init& cryptoki() { |
|
|
|
cryptoki::Library& cryptoki() { |
|
|
|
return _cryptoki; |
|
|
|
return _cryptoki; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -139,7 +139,7 @@ class CryptokiEngine: public QObject, public openssl::Engine { |
|
|
|
|
|
|
|
|
|
|
|
private: |
|
|
|
private: |
|
|
|
|
|
|
|
|
|
|
|
cryptoki::Init _cryptoki; |
|
|
|
cryptoki::Library _cryptoki; |
|
|
|
std::auto_ptr<cryptoki::Object> _privateKey; |
|
|
|
std::auto_ptr<cryptoki::Object> _privateKey; |
|
|
|
|
|
|
|
|
|
|
|
}; |
|
|
|
}; |
|
|
@ -260,17 +260,17 @@ class SmartCardAuth: public QObject { |
|
|
|
TRC; LOG<<name.c_str(); |
|
|
|
TRC; LOG<<name.c_str(); |
|
|
|
try { |
|
|
|
try { |
|
|
|
pcsc::Connection pcsc; |
|
|
|
pcsc::Connection pcsc; |
|
|
|
pcsc::Connection::Reader& reader(pcsc.reader(name)); |
|
|
|
mrw::Shared<pcsc::Connection::Reader> reader(pcsc.reader(name)); |
|
|
|
#ifndef Q_OS_MAC |
|
|
|
#ifndef Q_OS_MAC |
|
|
|
pcsc::Connection::Reader::Transaction lock(reader); |
|
|
|
pcsc::Connection::Reader::Transaction lock(reader); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
// first try to read version info
|
|
|
|
// first try to read version info
|
|
|
|
if (reader.transmit(0x00, 0xA4, 0x08, 0x0C, "\x3f\x00\x56\x49", 4) |
|
|
|
if (reader->transmit(0x00, 0xA4, 0x08, 0x0C, "\x3f\x00\x56\x49", 4) |
|
|
|
!= std::string("\x90\x00", 2) || !reader) { |
|
|
|
!= std::string("\x90\x00", 2) || !reader) { |
|
|
|
LOG<<"Select File failed"; |
|
|
|
LOG<<"Select File failed"; |
|
|
|
return -2; |
|
|
|
return -2; |
|
|
|
} |
|
|
|
} |
|
|
|
std::string res(reader.transmit(0x00, 0xB0, 0x00, 0x00)); |
|
|
|
std::string res(reader->transmit(0x00, 0xB0, 0x00, 0x00)); |
|
|
|
if (res.substr(res.size()-2)!=std::string("\x90\x00", 2)) { |
|
|
|
if (res.substr(res.size()-2)!=std::string("\x90\x00", 2)) { |
|
|
|
LOG<<"read error"; |
|
|
|
LOG<<"read error"; |
|
|
|
return -2; |
|
|
|
return -2; |
|
|
@ -281,8 +281,8 @@ class SmartCardAuth: public QObject { |
|
|
|
// LOG<<"unsupported card";
|
|
|
|
// LOG<<"unsupported card";
|
|
|
|
// return -2;
|
|
|
|
// return -2;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
if (retCode(reader.transmit(0x00, 0xA4, 0x00, 0x0C)) == 0x9000) { |
|
|
|
if (retCode(reader->transmit(0x00, 0xA4, 0x00, 0x0C)) == 0x9000) { |
|
|
|
int value(retCode(reader.transmit(0x00, 0x20, 0x00, 0x81))); |
|
|
|
int value(retCode(reader->transmit(0x00, 0x20, 0x00, 0x81))); |
|
|
|
if ((value&0x63C0)==0x63C0) return value&0x0F; |
|
|
|
if ((value&0x63C0)==0x63C0) return value&0x0F; |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
LOG<<"**** ERROR in select MF while reading pin status"; |
|
|
|
LOG<<"**** ERROR in select MF while reading pin status"; |
|
|
@ -298,17 +298,17 @@ class SmartCardAuth: public QObject { |
|
|
|
TRC; LOG<<name.c_str(); |
|
|
|
TRC; LOG<<name.c_str(); |
|
|
|
try { |
|
|
|
try { |
|
|
|
pcsc::Connection pcsc; |
|
|
|
pcsc::Connection pcsc; |
|
|
|
pcsc::Connection::Reader& reader(pcsc.reader(name)); |
|
|
|
mrw::Shared<pcsc::Connection::Reader> reader(pcsc.reader(name)); |
|
|
|
#ifndef Q_OS_MAC |
|
|
|
#ifndef Q_OS_MAC |
|
|
|
pcsc::Connection::Reader::Transaction lock(reader); |
|
|
|
pcsc::Connection::Reader::Transaction lock(reader); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
// first try to read version info
|
|
|
|
// first try to read version info
|
|
|
|
if (reader.transmit(0x00, 0xA4, 0x08, 0x0C, "\x3f\x00\x56\x49", 4) |
|
|
|
if (reader->transmit(0x00, 0xA4, 0x08, 0x0C, "\x3f\x00\x56\x49", 4) |
|
|
|
!= std::string("\x90\x00", 2) || !reader) { |
|
|
|
!= std::string("\x90\x00", 2) || !reader) { |
|
|
|
LOG<<"Select File failed"; |
|
|
|
LOG<<"Select File failed"; |
|
|
|
return -2; |
|
|
|
return -2; |
|
|
|
} |
|
|
|
} |
|
|
|
std::string res(reader.transmit(0x00, 0xB0, 0x00, 0x00)); |
|
|
|
std::string res(reader->transmit(0x00, 0xB0, 0x00, 0x00)); |
|
|
|
if (res.substr(res.size()-2)!=std::string("\x90\x00", 2)) { |
|
|
|
if (res.substr(res.size()-2)!=std::string("\x90\x00", 2)) { |
|
|
|
LOG<<"read error"; |
|
|
|
LOG<<"read error"; |
|
|
|
return -2; |
|
|
|
return -2; |
|
|
@ -319,8 +319,8 @@ class SmartCardAuth: public QObject { |
|
|
|
// LOG<<"unsupported card";
|
|
|
|
// LOG<<"unsupported card";
|
|
|
|
// return -2;
|
|
|
|
// return -2;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
if (retCode(reader.transmit(0x00, 0xA4, 0x00, 0x0C)) == 0x9000) { |
|
|
|
if (retCode(reader->transmit(0x00, 0xA4, 0x00, 0x0C)) == 0x9000) { |
|
|
|
int value(retCode(reader.transmit(0x00, 0x20, 0x00, 0x81))); |
|
|
|
int value(retCode(reader->transmit(0x00, 0x20, 0x00, 0x81))); |
|
|
|
if ((value&0x63C0)==0x63C0) return value&0x0F; |
|
|
|
if ((value&0x63C0)==0x63C0) return value&0x0F; |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
LOG<<"**** ERROR in select MF while reading pin status"; |
|
|
|
LOG<<"**** ERROR in select MF while reading pin status"; |
|
|
@ -336,17 +336,17 @@ class SmartCardAuth: public QObject { |
|
|
|
TRC; LOG<<name.c_str(); |
|
|
|
TRC; LOG<<name.c_str(); |
|
|
|
try { |
|
|
|
try { |
|
|
|
pcsc::Connection pcsc; |
|
|
|
pcsc::Connection pcsc; |
|
|
|
pcsc::Connection::Reader& reader(pcsc.reader(name)); |
|
|
|
mrw::Shared<pcsc::Connection::Reader> reader(pcsc.reader(name)); |
|
|
|
#ifndef Q_OS_MAC |
|
|
|
#ifndef Q_OS_MAC |
|
|
|
pcsc::Connection::Reader::Transaction lock(reader); |
|
|
|
pcsc::Connection::Reader::Transaction lock(reader); |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
// first try to read version info
|
|
|
|
// first try to read version info
|
|
|
|
if (reader.transmit(0x00, 0xA4, 0x08, 0x0C, "\x3f\x00\x56\x49", 4) |
|
|
|
if (reader->transmit(0x00, 0xA4, 0x08, 0x0C, "\x3f\x00\x56\x49", 4) |
|
|
|
!= std::string("\x90\x00", 2) || !reader) { |
|
|
|
!= std::string("\x90\x00", 2) || !reader) { |
|
|
|
LOG<<"Select File failed"; |
|
|
|
LOG<<"Select File failed"; |
|
|
|
return -2; |
|
|
|
return -2; |
|
|
|
} |
|
|
|
} |
|
|
|
std::string res(reader.transmit(0x00, 0xB0, 0x00, 0x00)); |
|
|
|
std::string res(reader->transmit(0x00, 0xB0, 0x00, 0x00)); |
|
|
|
if (res.substr(res.size()-2)!=std::string("\x90\x00", 2)) { |
|
|
|
if (res.substr(res.size()-2)!=std::string("\x90\x00", 2)) { |
|
|
|
LOG<<"read error"; |
|
|
|
LOG<<"read error"; |
|
|
|
return -2; |
|
|
|
return -2; |
|
|
@ -357,8 +357,8 @@ class SmartCardAuth: public QObject { |
|
|
|
// LOG<<"unsupported card";
|
|
|
|
// LOG<<"unsupported card";
|
|
|
|
// return -2;
|
|
|
|
// return -2;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
if (retCode(reader.transmit(0x00, 0xA4, 0x00, 0x0C)) == 0x9000) { |
|
|
|
if (retCode(reader->transmit(0x00, 0xA4, 0x00, 0x0C)) == 0x9000) { |
|
|
|
int value(retCode(reader.transmit(0x00, 0x20, 0x00, 0x81))); |
|
|
|
int value(retCode(reader->transmit(0x00, 0x20, 0x00, 0x81))); |
|
|
|
if ((value&0x63C0)==0x63C0) return value&0x0F; |
|
|
|
if ((value&0x63C0)==0x63C0) return value&0x0F; |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
LOG<<"**** ERROR in select MF while reading pin status"; |
|
|
|
LOG<<"**** ERROR in select MF while reading pin status"; |
|
|
|