/*! @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