// Copyright 2020 Google LLC. All Rights Reserved. This file and proprietary // source code may only be used and distributed under the Widevine // License Agreement. #ifndef OEMCRYPTO_FUZZ_STRUCTS_H_ #define OEMCRYPTO_FUZZ_STRUCTS_H_ #include "core_message_types.h" #include "odk.h" namespace wvoec { // OEMCrypto_DestBufferDesc fuzzed properties. struct OEMCrypto_DestBufferDesc_Fuzz { OEMCryptoBufferType type; size_t buffer_config; }; // OEMCrypto_InputOutputPair fuzzed properties. struct OEMCrypto_InputOutputPair_Fuzz { size_t input_data_length; OEMCrypto_DestBufferDesc_Fuzz output_descriptor; }; // OEMCrypto_SampleDescription fuzzed properties. struct OEMCrypto_SampleDescription_Fuzz { OEMCrypto_InputOutputPair_Fuzz buffers; uint8_t iv[16]; size_t subsamples_length; }; struct OEMCrypto_Renewal_Response_Fuzz { // Timer limits in core license response needs to be fuzzed as load renewal // depends on timer limits loaded from license response. ODK_TimerLimits timer_limits; // message(core_response + license_renewal_response) which mimics // response from license renewal server needs to be fuzzed. core_request // will be used to generate serialized core response. oemcrypto_core_message::ODK_RenewalRequest core_request; // Renewal duration seconds needs to be fuzzed which is part of serialized // core message from license renewal server. uint64_t renewal_duration_seconds; // license_renewal_response is of variable length and not included in this // structure. }; struct OEMCrypto_Request_Fuzz { // We would like to fuzz computed signature_length, input core_message_length // that ODK parses and actual message buffer to the request APIs. size_t signature_length; size_t core_message_length; // Request message is of variable length and not included in this structure. }; struct OEMCrypto_Decrypt_Cenc_Fuzz { // Corpus format is as below, let | be separator. // cipher_mode + pattern + sample_data for all samples | // subsample_data for all samples OEMCryptoCipherMode cipher_mode; OEMCrypto_CENCEncryptPatternDesc pattern; // Sample data and subsample data are of variable length and not included in // this structure. }; struct OEMCrypto_Generic_Api_Fuzz { // Corpus format is as below, let | be separator. // cipher_mode + algorithm + iv | buffer with actual data OEMCryptoCipherMode cipher_mode; OEMCrypto_Algorithm algorithm; // iv and buffer data are of variable length and not included in // this structure. }; struct OEMCrypto_Generate_RSA_Signature_Fuzz { // Corpus format is as below, let | be separator. // padding_scheme + signature_length + input buffer RSA_Padding_Scheme padding_scheme; size_t signature_length; // input buffer data is of variable length and not included in // this structure. }; struct OEMCrypto_Copy_Buffer_Fuzz { // Corpus format is as below. // dest_buffer_desc + subsample_flags + input buffer OEMCrypto_DestBufferDesc_Fuzz dest_buffer_desc; uint8_t subsample_flags; // Input buffer of variable length is not included in this structure. }; } // namespace wvoec #endif // OEMCRYPTO_FUZZ_STRUCTS_H_