31const char TOKEN_CHARS[] =
32 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~";
35wxString randomToken(
size_t aLength )
37 static std::random_device rd;
38 static std::mt19937_64 gen( rd() );
39 std::uniform_int_distribution<size_t> dist( 0,
sizeof( TOKEN_CHARS ) - 2 );
42 token.reserve( aLength );
44 for(
size_t ii = 0; ii < aLength; ++ii )
45 token.Append( TOKEN_CHARS[dist( gen )] );
51wxString base64UrlEncode(
const std::vector<unsigned char>& aBytes )
53 wxString encoded = wxBase64Encode( aBytes.data(), aBytes.size() );
54 encoded.Replace( wxS(
"+" ), wxS(
"-" ) );
55 encoded.Replace( wxS(
"/" ), wxS(
"_" ) );
56 encoded.Replace( wxS(
"=" ), wxEmptyString );
57 encoded.Replace( wxS(
"\n" ), wxEmptyString );
65 return randomToken( 64 );
71 return randomToken( 32 );
77 const std::string verifier = aVerifier.ToStdString();
78 std::vector<unsigned char> digest( picosha2::k_digest_size );
80 picosha2::hash256( verifier.begin(), verifier.end(), digest.begin(), digest.end() );
82 return base64UrlEncode( digest );
static wxString CreateCodeChallenge(const wxString &aVerifier)
static wxString GenerateCodeVerifier()
static wxString GenerateState()