// g++ -I ../../src -I /usr/include/opencryptoki cryptoki-demo.cpp ../../src/cryptoki.cxx -ldl -ggdb3
# include <cryptoki.hxx>
# include <iostream>
template < typename Array > void print ( const std : : vector < Array > & v ) {
for ( typename std : : vector < Array > : : const_iterator it ( v . begin ( ) ) ;
it ! = v . end ( ) ; + + it )
std : : cout < < " Item: " < < * it < < std : : endl ;
}
int main ( int argc , char const * const * const argv ) try {
// //std::vector<int> v(toVector<4>((int[]){1,2,3,4}));
// std::vector<int> v(VECTOR(((int[]){1,2,3,4})));
// print(v);
cryptoki : : Init init ( argc = = 2 ? argv [ 1 ] : " onepin-opensc-pkcs11.so " ) ;
cryptoki : : Info inf ( init . info ( ) ) ;
std : : cout < < " ##################### INFO ##################### " < < std : : endl
< < " cryptokiVersion: \" " < < ( int ) inf . cryptokiVersion . major
< < ' . ' < < ( int ) inf . cryptokiVersion . minor < < ' " ' < < std : : endl
< < " manufacturerID: \" " < < inf . manufacturerID < < ' " ' < < std : : endl
< < " flags: \" " < < inf . flags < < ' " ' < < std : : endl
< < " libraryDescription: \" " < < inf . libraryDescription < < ' " ' < < std : : endl
< < " libraryVersion: \" " < < ( int ) inf . libraryVersion . major
< < ' . ' < < ( int ) inf . libraryVersion . minor < < ' " ' < < std : : endl ;
cryptoki : : SlotList slots ( init . slotList ( ) ) ;
for ( cryptoki : : SlotList : : iterator it ( slots . begin ( ) ) ; it ! = slots . end ( ) ; + + it )
try {
cryptoki : : SlotInfo slotInfo ( it - > slotinfo ( ) ) ;
std : : cout < < " ##################### S-CARD ##################### " < < std : : endl
< < " slotDescription: \" " < < slotInfo . slotDescription < < ' " ' < < std : : endl
< < " manufacturerID: \" " < < slotInfo . manufacturerID < < ' " ' < < std : : endl
< < " flags: \" " < < slotInfo . flags < < ' " ' < < std : : endl
< < " hardwareVersion: \" " < < ( int ) slotInfo . hardwareVersion . major
< < ' . ' < < ( int ) slotInfo . hardwareVersion . minor < < ' " ' < < std : : endl
< < " firmwareVersion: \" " < < ( int ) slotInfo . firmwareVersion . major
< < ' . ' < < ( int ) slotInfo . firmwareVersion . minor < < ' " ' < < std : : endl ;
cryptoki : : TokenInfo info ( it - > tokeninfo ( ) ) ;
std : : cout < < " --------------------- Token ---------------------- " < < std : : endl
< < " label: \" " < < info . label < < ' " ' < < std : : endl
< < " manufacturerID: \" " < < info . manufacturerID < < ' " ' < < std : : endl
< < " model: \" " < < info . model < < ' " ' < < std : : endl
< < " serialNumber: \" " < < crypto : : readable ( info . serialNumber )
< < ' " ' < < std : : endl
< < " flags: \" " < < info . flags < < ' " ' < < std : : endl
< < " maxSessionCount: \" " < < info . maxSessionCount < < ' " ' < < std : : endl
< < " sessionCount: \" " < < info . sessionCount < < ' " ' < < std : : endl
< < " maxRwSessionCount: \" " < < info . maxRwSessionCount < < ' " ' < < std : : endl
< < " rwSessionCount: \" " < < info . rwSessionCount < < ' " ' < < std : : endl
< < " maxPinLen: \" " < < info . maxPinLen < < ' " ' < < std : : endl
< < " minPinLen: \" " < < info . minPinLen < < ' " ' < < std : : endl
< < " totalPublicMemory: \" " < < info . totalPublicMemory < < ' " ' < < std : : endl
< < " freePublicMemory: \" " < < info . freePublicMemory < < ' " ' < < std : : endl
< < " totalPrivateMemory: \" " < < info . totalPrivateMemory < < ' " '
< < std : : endl
< < " freePrivateMemory: \" " < < info . freePrivateMemory < < ' " ' < < std : : endl
< < " hardwareVersion: \" " < < ( int ) info . hardwareVersion . major
< < ' . ' < < ( int ) info . hardwareVersion . minor < < ' " ' < < std : : endl
< < " firmwareVersion: \" " < < ( int ) info . firmwareVersion . major
< < ' . ' < < ( int ) info . firmwareVersion . minor < < ' " ' < < std : : endl
< < " utcTime: \" " < < crypto : : readable ( info . utcTime )
< < ' " ' < < std : : endl ;
cryptoki : : MechanismList mechs ( it - > mechanismlist ( ) ) ;
for ( cryptoki : : MechanismList : : iterator it2 ( mechs . begin ( ) ) ;
it2 ! = mechs . end ( ) ; + + it2 ) {
cryptoki : : MechanismInfo mechinfo ( it - > mechanisminfo ( * it2 ) ) ;
std : : cout < < " -------------------- Mechanism ----------------- " < < std : : endl
< < " id: \" " < < mechinfo . id < < ' " ' < < std : : endl
< < " name: \" " < < mechinfo . name < < ' " ' < < std : : endl
< < " minKeySize: \" " < < mechinfo . minKeySize < < ' " ' < < std : : endl
< < " maxKeySize: \" " < < mechinfo . maxKeySize < < ' " ' < < std : : endl
< < " flags: \" " < < mechinfo . flags < < ' " ' < < std : : endl ;
}
cryptoki : : Session session ( * it ) ;
cryptoki : : ObjectList objs ( session . find ( ) ) ;
std : : cout < < " Objects Found: " < < objs . size ( ) < < std : : endl ;
for ( cryptoki : : ObjectList : : iterator it ( objs . begin ( ) ) ;
it ! = objs . end ( ) ; + + it ) {
std : : cout < < " -------------------- Object ----------------- " < < std : : endl ;
cryptoki : : AttributeMap attrs ( it - > attributes ( ) ) ;
for ( cryptoki : : AttributeMap : : iterator it ( attrs . begin ( ) ) ;
it ! = attrs . end ( ) ; + + it ) {
std : : cout < < " - attribute: " < < it - > second . name ( ) < < " = \" "
< < crypto : : readable ( it - > second . value ) < < ' " ' < < std : : endl ;
}
}
std : : cout < < " **** Success " < < std : : endl ;
} catch ( std : : exception & x ) {
std : : cerr < < " **** FEHLER in " < < * argv < < " : " < < x . what ( ) < < std : : endl ;
}
return 0 ;
} catch ( std : : exception & x ) {
std : : cerr < < " **** FEHLER in " < < * argv < < " : " < < x . what ( ) < < std : : endl ;
}