This library provides a simple and nice C++ wrapper around these libraries, so that programmers can concentrate on functionality. It offers general support for PCSC-lite, OpenSSL, PKCS#11, plus specific functionality for the SuisseID.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

72 lines
2.1 KiB

/*! @file
@id $Id$
*/
// 1 2 3 4 5 6 7 8
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
#ifndef __CRYPTAUX_HXX__
#define __CRYPTAUX_HXX__
#include <string>
#include <sstream>
#include <iomanip>
/*! @defgroup gcrypto Auxiliary Crypto-Functions */
//@{
//! @see gcrypto
namespace crypto {
static const std::string LETTER_CHARS
("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
static const std::string NUMBER_CHARS
("0123456789");
//! Contains @c @ in addition to standard characters.
static const std::string GRAFIC_CHARS
("!\"#%&'()*+,-./:;<=>?[\\]^_{|}~@");
static const std::string BLANK_CHARS
(" ");
static const std::string VALID_CHARS
(LETTER_CHARS+NUMBER_CHARS+GRAFIC_CHARS+BLANK_CHARS);
inline std::string hex(const std::string& data) {
std::stringstream res;
for (std::string::const_iterator it(data.begin()); it!=data.end(); ++it)
res<<std::hex<<std::setfill('0')<<std::setw(2)
<<(unsigned int)(unsigned char)*it;
return res.str();
}
inline std::string hexTxt(const std::string& data,
std::string::size_type len=20) {
std::stringstream res;
std::string::size_type pos(0);
for (std::string::const_iterator it(data.begin()); it!=data.end(); ++it) {
res<<std::hex<<std::setfill('0')<<std::setw(2)
<<(unsigned int)(unsigned char)*it;
++pos;
if (pos%len==0 || pos==data.size()) {
res<<std::string(2*(len-(pos-1)%len), ' ');
for (std::string::size_type i(pos-(pos-1)%len-1); i<pos; ++i)
res<<(VALID_CHARS.find(data[i])==std::string::npos?'.':data[i]);
if (pos!=data.size()) res<<std::endl;
}
}
return res.str();
}
inline std::string readable(const std::string& data,
std::string::size_type len=20) {
if (!data.size())
return "<empty>";
else if (data.find_first_not_of(VALID_CHARS)<data.size())
return hexTxt(data);
else
return "\""+data+"\"";
}
}
//@}
#endif