Pick widevine oemcrypto-v18 change
No-Typo-Check: From a third party header file Bug: 260918793 Test: unit tests Test: atp v2/widevine-eng/drm_compliance Change-Id: I36effd6a10a99bdb2399ab1f4a0fad026d607c70
This commit is contained in:
@@ -20,9 +20,16 @@ extern "C" size_t LLVMFuzzerMutate(uint8_t* Data, size_t Size, size_t MaxSize)
|
||||
__attribute__((weak));
|
||||
|
||||
const size_t KB = 1024;
|
||||
// Maximum signature length. If fuzzed signature length is greater that this,
|
||||
// this value will be used for signature length.
|
||||
const size_t MAX_FUZZ_SIGNATURE_LENGTH = 5 * KB;
|
||||
|
||||
// Default maximum length of fuzzing output parameters.
|
||||
const size_t MAX_FUZZ_OUTPUT_LENGTH = 5 * KB;
|
||||
|
||||
// Fuzzed data region.
|
||||
struct FuzzedData {
|
||||
const uint8_t* data;
|
||||
size_t size;
|
||||
};
|
||||
|
||||
// Initial setup to create a valid OEMCrypto state such as initializing crypto
|
||||
// firmware/hardware, installing golden key box etc. in order to fuzz
|
||||
// OEMCrypto APIs.
|
||||
@@ -32,7 +39,8 @@ class InitializeFuzz : public SessionUtil {
|
||||
wvoec::global_features.Initialize();
|
||||
OEMCrypto_SetSandbox(kTestSandbox, sizeof(kTestSandbox));
|
||||
OEMCrypto_Initialize();
|
||||
EnsureTestKeys();
|
||||
OEMCrypto_EnterTestMode();
|
||||
EnsureTestROT();
|
||||
}
|
||||
|
||||
~InitializeFuzz() { OEMCrypto_Terminate(); }
|
||||
@@ -42,7 +50,7 @@ class OEMCryptoLicenseAPIFuzz : public InitializeFuzz {
|
||||
public:
|
||||
OEMCryptoLicenseAPIFuzz() : license_messages_(&session_) {
|
||||
session_.open();
|
||||
InstallTestRSAKey(&session_);
|
||||
InstallTestDrmKey(&session_);
|
||||
session_.GenerateNonce();
|
||||
}
|
||||
|
||||
@@ -113,20 +121,27 @@ class LicenseWithUsageEntryFuzz : public InitializeFuzz {
|
||||
Session session_;
|
||||
};
|
||||
|
||||
// Convert data to valid enum value.
|
||||
// Convert data from FuzzedDataProvider to valid enum value.
|
||||
template <typename T>
|
||||
T ConvertDataToValidEnum(FuzzedDataProvider& fuzzed_data, T max_enum_value) {
|
||||
return static_cast<T>(fuzzed_data.ConsumeIntegralInRange<uint32_t>(
|
||||
0, static_cast<uint32_t>(max_enum_value)));
|
||||
}
|
||||
|
||||
// Convert data to valid enum value in place.
|
||||
template <typename T>
|
||||
void ConvertDataToValidEnum(T max_enum_value, T* t) {
|
||||
FuzzedDataProvider fuzzed_enum_data(reinterpret_cast<uint8_t*>(t), sizeof(T));
|
||||
*t = static_cast<T>(fuzzed_enum_data.ConsumeIntegralInRange<uint32_t>(
|
||||
0, static_cast<uint32_t>(max_enum_value)));
|
||||
*t = ConvertDataToValidEnum(fuzzed_enum_data, max_enum_value);
|
||||
}
|
||||
|
||||
// Redirect printf and log statements from oemcrypto functions to a file to
|
||||
// reduce noise
|
||||
void RedirectStdoutToFile();
|
||||
|
||||
// Function to split fuzzer input using delimiter "-_^_".
|
||||
std::vector<std::vector<uint8_t>> SplitInput(const uint8_t* data, size_t size);
|
||||
// Split fuzzed data using delimiter "-_^_".
|
||||
std::vector<FuzzedData> SplitFuzzedData(const uint8_t* data, size_t size);
|
||||
|
||||
// Check the status and exit fuzzer if arguments do not match. This is usually
|
||||
// called to check status of APIs which are called to setup state for fuzzers.
|
||||
void CheckStatusAndExitFuzzerOnFailure(OEMCryptoResult result,
|
||||
|
||||
Reference in New Issue
Block a user