// Copyright 2020 Google LLC. All Rights Reserved. This file and proprietary // source code may only be used and distributed under the Widevine // License Agreement. #include "oemcrypto_fuzz_helper.h" namespace wvoec { void RedirectStdoutToFile() { freopen("log.txt", "a", stdout); } std::vector> SplitInput(const uint8_t* data, size_t size) { std::vector> result; auto current_pos = data; auto end = data + size; // Using memmem to find separator while (const uint8_t* pos = reinterpret_cast( memmem(current_pos, end - current_pos, kFuzzDataSeparator, sizeof(kFuzzDataSeparator)))) { result.push_back({current_pos, pos}); current_pos = pos + sizeof(kFuzzDataSeparator); } if (current_pos < end) { result.push_back({current_pos, end}); } return result; } void OEMCryptoLicenseAPIFuzz::LoadLicense() { license_messages_.SignAndVerifyRequest(); license_messages_.CreateDefaultResponse(); license_messages_.EncryptAndSignResponse(); OEMCryptoResult sts = license_messages_.LoadResponse(); CheckStatusAndExitFuzzerOnFailure(sts, OEMCrypto_SUCCESS); } void OEMCryptoProvisioningAPIFuzz::LoadProvisioning() { provisioning_messages_.SignAndVerifyRequest(); provisioning_messages_.CreateDefaultResponse(); provisioning_messages_.EncryptAndSignResponse(); OEMCryptoResult sts = provisioning_messages_.LoadResponse(); CheckStatusAndExitFuzzerOnFailure(sts, OEMCrypto_SUCCESS); } void LicenseWithUsageEntryFuzz::CreateUsageTableHeader() { size_t header_buffer_length = 0; OEMCryptoResult sts = OEMCrypto_CreateUsageTableHeader(nullptr, &header_buffer_length); encrypted_usage_header_.resize(header_buffer_length); sts = OEMCrypto_CreateUsageTableHeader(encrypted_usage_header_.data(), &header_buffer_length); CheckStatusAndExitFuzzerOnFailure(sts, OEMCrypto_SUCCESS); } void LicenseWithUsageEntryFuzz::LoadLicense() { license_messages_.SignAndVerifyRequest(); license_messages_.CreateDefaultResponse(); license_messages_.EncryptAndSignResponse(); OEMCryptoResult sts = license_messages_.LoadResponse(); CheckStatusAndExitFuzzerOnFailure(sts, OEMCrypto_SUCCESS); } void CheckStatusAndExitFuzzerOnFailure(OEMCryptoResult result, OEMCryptoResult expected_status) { if (result != expected_status) { abort(); } } } // namespace wvoec