From b8ca6d953f734900c23f2cfbe79a36e598171553 Mon Sep 17 00:00:00 2001 From: Megamouse Date: Sun, 14 Jun 2026 06:25:39 +0200 Subject: [PATCH] Use std::string_view in crypto code --- rpcs3/Crypto/key_vault.cpp | 2 +- rpcs3/Crypto/key_vault.h | 2 +- rpcs3/Crypto/unedat.cpp | 6 +++--- rpcs3/Crypto/unedat.h | 2 +- rpcs3/Crypto/utils.cpp | 10 ++++------ rpcs3/Crypto/utils.h | 2 +- 6 files changed, 11 insertions(+), 13 deletions(-) diff --git a/rpcs3/Crypto/key_vault.cpp b/rpcs3/Crypto/key_vault.cpp index 6fa9aa0684..92d308e9f8 100644 --- a/rpcs3/Crypto/key_vault.cpp +++ b/rpcs3/Crypto/key_vault.cpp @@ -5,7 +5,7 @@ LOG_CHANNEL(key_vault_log, "KEY_VAULT"); -SELF_KEY::SELF_KEY(u64 ver_start, u64 ver_end, u16 rev, u32 type, const std::string& e, const std::string& r, const std::string& pb, const std::string& pr, u32 ct) +SELF_KEY::SELF_KEY(u64 ver_start, u64 ver_end, u16 rev, u32 type, std::string_view e, std::string_view r, std::string_view pb, std::string_view pr, u32 ct) { version_start = ver_start; version_end = ver_end; diff --git a/rpcs3/Crypto/key_vault.h b/rpcs3/Crypto/key_vault.h index 4dff84992b..36344defe2 100644 --- a/rpcs3/Crypto/key_vault.h +++ b/rpcs3/Crypto/key_vault.h @@ -30,7 +30,7 @@ struct SELF_KEY u8 priv[0x15]{}; u32 curve_type{}; - SELF_KEY(u64 ver_start, u64 ver_end, u16 rev, u32 type, const std::string& e, const std::string& r, const std::string& pb, const std::string& pr, u32 ct); + SELF_KEY(u64 ver_start, u64 ver_end, u16 rev, u32 type, std::string_view e, std::string_view r, std::string_view pb, std::string_view pr, u32 ct); }; constexpr u32 PASSPHRASE_KEY_LEN = 16; diff --git a/rpcs3/Crypto/unedat.cpp b/rpcs3/Crypto/unedat.cpp index 1ffaa33fc3..6fea6c1859 100644 --- a/rpcs3/Crypto/unedat.cpp +++ b/rpcs3/Crypto/unedat.cpp @@ -679,7 +679,7 @@ u128 GetEdatRifKeyFromRapFile(const fs::file& rap_file) return rifkey; } -bool VerifyEDATHeaderWithKLicense(const fs::file& input, const std::string& input_file_name, const u8* custom_klic, NPD_HEADER* npd_out) +bool VerifyEDATHeaderWithKLicense(const fs::file& input, std::string_view input_file_name, const u8* custom_klic, NPD_HEADER* npd_out) { // Setup NPD and EDAT/SDAT structs. NPD_HEADER NPD; @@ -702,7 +702,7 @@ bool VerifyEDATHeaderWithKLicense(const fs::file& input, const std::string& inpu // Perform header validation (EDAT only). char real_file_name[CRYPTO_MAX_PATH]{}; - extract_file_name(input_file_name.c_str(), real_file_name); + extract_file_name(input_file_name, real_file_name); if (!validate_npd_hashes(real_file_name, custom_klic, &NPD, &EDAT, false)) { edat_log.error("NPD hash validation failed!"); @@ -810,7 +810,7 @@ bool EDATADecrypter::ReadHeader() { // extract key from RIF char real_file_name[CRYPTO_MAX_PATH]{}; - extract_file_name(m_file_name.c_str(), real_file_name); + extract_file_name(m_file_name, real_file_name); if (!validate_npd_hashes(real_file_name, reinterpret_cast(&dec_key), &npdHeader, &edatHeader, false)) { diff --git a/rpcs3/Crypto/unedat.h b/rpcs3/Crypto/unedat.h index 31fce60d4e..cc91509a5e 100644 --- a/rpcs3/Crypto/unedat.h +++ b/rpcs3/Crypto/unedat.h @@ -62,7 +62,7 @@ struct EDAT_HEADER extern fs::file DecryptEDAT(const fs::file& input, const std::string& input_file_name, int mode, u8 *custom_klic); extern void read_npd_edat_header(const fs::file* input, NPD_HEADER& NPD, EDAT_HEADER& EDAT); -extern bool VerifyEDATHeaderWithKLicense(const fs::file& input, const std::string& input_file_name, const u8* custom_klic, NPD_HEADER *npd_out = nullptr); +extern bool VerifyEDATHeaderWithKLicense(const fs::file& input, std::string_view input_file_name, const u8* custom_klic, NPD_HEADER *npd_out = nullptr); u128 GetEdatRifKeyFromRapFile(const fs::file& rap_file); diff --git a/rpcs3/Crypto/utils.cpp b/rpcs3/Crypto/utils.cpp index 514bf08580..7913221380 100644 --- a/rpcs3/Crypto/utils.cpp +++ b/rpcs3/Crypto/utils.cpp @@ -136,17 +136,15 @@ void cmac_hash_forge(unsigned char *key, int /*key_len*/, unsigned char *in, usz aes_cmac(&ctx, in_len, in, hash); } -char* extract_file_name(const char* file_path, char real_file_name[CRYPTO_MAX_PATH]) +char* extract_file_name(std::string_view file_path, char real_file_name[CRYPTO_MAX_PATH]) { - std::string_view v(file_path); - - if (const auto pos = v.find_last_of(fs::delim); pos != umax) + if (const auto pos = file_path.find_last_of(fs::delim); pos != umax) { - v.remove_prefix(pos + 1); + file_path.remove_prefix(pos + 1); } std::span r(real_file_name, CRYPTO_MAX_PATH); - strcpy_trunc(r, v); + strcpy_trunc(r, file_path); return real_file_name; } diff --git a/rpcs3/Crypto/utils.h b/rpcs3/Crypto/utils.h index 88f0d8ce6f..780226d3b9 100644 --- a/rpcs3/Crypto/utils.h +++ b/rpcs3/Crypto/utils.h @@ -11,7 +11,7 @@ enum { CRYPTO_MAX_PATH = 4096 }; -char* extract_file_name(const char* file_path, char real_file_name[CRYPTO_MAX_PATH]); +char* extract_file_name(std::string_view file_path, char real_file_name[CRYPTO_MAX_PATH]); std::string sha256_get_hash(const char* data, usz size, bool lower_case);