|
|
|
@ -22,7 +22,7 @@ |
|
|
|
#include <shellapi.h>
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include <mbedtls/base64.h>
|
|
|
|
#include <openssl/evp.h>
|
|
|
|
#include "common/common_types.h"
|
|
|
|
#include "common/detached_tasks.h"
|
|
|
|
#include "common/fs/file.h"
|
|
|
|
@ -84,15 +84,11 @@ static constexpr char BanListMagic[] = "YuzuRoom-BanList-1"; |
|
|
|
static constexpr char token_delimiter{':'}; |
|
|
|
|
|
|
|
static void PadToken(std::string& token) { |
|
|
|
std::size_t outlen = 0; |
|
|
|
|
|
|
|
std::array<unsigned char, 512> output{}; |
|
|
|
std::array<unsigned char, 2048> roundtrip{}; |
|
|
|
for (size_t i = 0; i < 3; i++) { |
|
|
|
mbedtls_base64_decode(output.data(), output.size(), &outlen, |
|
|
|
reinterpret_cast<const unsigned char*>(token.c_str()), |
|
|
|
token.length()); |
|
|
|
mbedtls_base64_encode(roundtrip.data(), roundtrip.size(), &outlen, output.data(), outlen); |
|
|
|
EVP_DecodeBlock(output.data(), reinterpret_cast<const unsigned char*>(token.c_str()), token.size()); |
|
|
|
EVP_EncodeBlock(output.data(), roundtrip.data(), roundtrip.size()); |
|
|
|
if (memcmp(roundtrip.data(), token.data(), token.size()) == 0) { |
|
|
|
break; |
|
|
|
} |
|
|
|
@ -101,23 +97,17 @@ static void PadToken(std::string& token) { |
|
|
|
} |
|
|
|
|
|
|
|
static std::string UsernameFromDisplayToken(const std::string& display_token) { |
|
|
|
std::size_t outlen; |
|
|
|
|
|
|
|
std::size_t outlen = 4 * ((display_token.length() + 2) / 3); |
|
|
|
std::array<unsigned char, 512> output{}; |
|
|
|
mbedtls_base64_decode(output.data(), output.size(), &outlen, |
|
|
|
reinterpret_cast<const unsigned char*>(display_token.c_str()), |
|
|
|
display_token.length()); |
|
|
|
EVP_DecodeBlock(output.data(), reinterpret_cast<const unsigned char*>(display_token.c_str()), display_token.length()); |
|
|
|
std::string decoded_display_token(reinterpret_cast<char*>(&output), outlen); |
|
|
|
return decoded_display_token.substr(0, decoded_display_token.find(token_delimiter)); |
|
|
|
} |
|
|
|
|
|
|
|
static std::string TokenFromDisplayToken(const std::string& display_token) { |
|
|
|
std::size_t outlen; |
|
|
|
|
|
|
|
std::size_t outlen = 4 * ((display_token.length() + 2) / 3); |
|
|
|
std::array<unsigned char, 512> output{}; |
|
|
|
mbedtls_base64_decode(output.data(), output.size(), &outlen, |
|
|
|
reinterpret_cast<const unsigned char*>(display_token.c_str()), |
|
|
|
display_token.length()); |
|
|
|
EVP_DecodeBlock(output.data(), reinterpret_cast<const unsigned char*>(display_token.c_str()), display_token.length()); |
|
|
|
std::string decoded_display_token(reinterpret_cast<char*>(&output), outlen); |
|
|
|
return decoded_display_token.substr(decoded_display_token.find(token_delimiter) + 1); |
|
|
|
} |
|
|
|
|