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
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
|
|
|