26std::string G::Hash::xor_(
const std::string & s1 ,
const std::string & s2 )
28 G_ASSERT( s1.length() == s2.length() ) ;
29 std::string::const_iterator p1 = s1.begin() ;
30 std::string::const_iterator p2 = s2.begin() ;
32 result.reserve( s1.length() ) ;
33 for( ; p1 != s1.end() ; ++p1 , ++p2 )
35 auto c1 =
static_cast<unsigned char>(*p1) ;
36 auto c2 =
static_cast<unsigned char>(*p2) ;
37 auto c =
static_cast<unsigned char>( c1 ^ c2 ) ;
38 result.append( 1U ,
static_cast<char>(c) ) ;
43std::string G::Hash::ipad( std::size_t blocksize )
45 return std::string( blocksize ,
'\066' ) ;
48std::string G::Hash::opad( std::size_t blocksize )
50 return std::string( blocksize ,
'\134' ) ;
56 result.reserve( input.length() * 2U ) ;
57 const char * hex =
"0123456789abcdef" ;
58 const std::size_t n = input.length() ;
59 for( std::size_t i = 0U ; i < n ; i++ )
61 auto c =
static_cast<unsigned char>(input.at(i)) ;
62 result.append( 1U , hex[(c>>4U)&0x0F] ) ;
63 result.append( 1U , hex[(c>>0U)&0x0F] ) ;
65 G_ASSERT( result.size() == (input.size()*2U) ) ;
static std::string printable(const std::string &input)
Converts a binary string into a printable form, using a lowercase hexadecimal encoding.