Fix OEMCrypto_GenerateRSASignature fuzzer

Ensure OEMCrypto is in the correct state before invoking
OEMCrypto_GenerateRSASignature.

Merged from https://widevine-internal-review.googlesource.com/168857
Merged from https://widevine-internal-review.googlesource.com/172171
Merged from https://widevine-internal-review.googlesource.com/172410
Merged from https://widevine-internal-review.googlesource.com/173130

Change-Id: I774f59af8044939c5a9618de348f2120a834e043
This commit is contained in:
Ian Benz
2023-03-23 23:01:28 +00:00
committed by Robert Shih
parent 57b391c8b9
commit a66143bec4
3 changed files with 42 additions and 14 deletions

View File

@@ -33,16 +33,24 @@ void InitializeFuzz(SessionUtil& session_util) {
session_util.EnsureTestROT(); session_util.EnsureTestROT();
} }
void OEMCryptoLicenseAPIFuzz::Initialize() { void SessionFuzz::Initialize() {
InitializeFuzz(session_util_); InitializeFuzz(session_util_);
session_.open(); session_.open();
session_util_.InstallTestDrmKey(&session_); }
session_.GenerateNonce();
void SessionFuzz::Terminate() {
session_.close();
OEMCrypto_Terminate();
}
void OEMCryptoLicenseAPIFuzz::Initialize() {
session_fuzz_.Initialize();
session_fuzz_.InstallTestDrmKey();
session_fuzz_.session().GenerateNonce();
} }
void OEMCryptoLicenseAPIFuzz::Terminate() { void OEMCryptoLicenseAPIFuzz::Terminate() {
session_.close(); session_fuzz_.Terminate();
OEMCrypto_Terminate();
} }
void OEMCryptoLicenseAPIFuzz::LoadLicense(bool generic_crypto_keys) { void OEMCryptoLicenseAPIFuzz::LoadLicense(bool generic_crypto_keys) {

View File

@@ -38,9 +38,28 @@ struct FuzzedData {
// OEMCrypto APIs. // OEMCrypto APIs.
void InitializeFuzz(SessionUtil& session_util); void InitializeFuzz(SessionUtil& session_util);
class SessionFuzz {
public:
void Initialize();
void Terminate();
void InstallTestDrmKey() {
session_util_.InstallTestDrmKey(&session_);
}
Session& session() { return session_; }
const Session& session() const { return session_; }
private:
SessionUtil session_util_;
Session session_;
};
class OEMCryptoLicenseAPIFuzz { class OEMCryptoLicenseAPIFuzz {
public: public:
OEMCryptoLicenseAPIFuzz() : license_messages_(&session_) {} OEMCryptoLicenseAPIFuzz() : license_messages_(&session_fuzz_.session()) {}
void Initialize(); void Initialize();
@@ -54,15 +73,14 @@ class OEMCryptoLicenseAPIFuzz {
const LicenseRoundTrip& license_messages() const { return license_messages_; } const LicenseRoundTrip& license_messages() const { return license_messages_; }
Session& session() { return session_; } Session& session() { return session_fuzz_.session(); }
const Session& session() const { return session_; } const Session& session() const { return session_fuzz_.session(); }
private: private:
void LoadLicense(bool generic_crypto_keys); void LoadLicense(bool generic_crypto_keys);
SessionUtil session_util_; SessionFuzz session_fuzz_;
Session session_;
LicenseRoundTrip license_messages_; LicenseRoundTrip license_messages_;
}; };

View File

@@ -23,12 +23,14 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
fuzzed_data.ConsumeRemainingBytes<uint8_t>(); fuzzed_data.ConsumeRemainingBytes<uint8_t>();
std::vector<uint8_t> signature(fuzzed_structure.signature_length); std::vector<uint8_t> signature(fuzzed_structure.signature_length);
wvoec::OEMCryptoLicenseAPIFuzz license_api_fuzz; wvoec::SessionFuzz session_fuzz;
license_api_fuzz.Initialize(); session_fuzz.Initialize();
session_fuzz.InstallTestDrmKey();
OEMCrypto_GenerateRSASignature( OEMCrypto_GenerateRSASignature(
license_api_fuzz.session().session_id(), message.data(), message.size(), session_fuzz.session().session_id(), message.data(), message.size(),
signature.data(), &fuzzed_structure.signature_length, signature.data(), &fuzzed_structure.signature_length,
fuzzed_structure.padding_scheme); fuzzed_structure.padding_scheme);
license_api_fuzz.Terminate(); session_fuzz.Terminate();
return 0; return 0;
} }