#include #include "dispatcher.h" #include "marshaller_base.h" #include "transport_interface.h" namespace wvoec { void InitializeODKMessage(ODK_Message* message, uint8_t* data, size_t size) { ODK_Message_Impl* impl = (ODK_Message_Impl*)message; impl->base = data; impl->size = size; impl->capacity = size; impl->read_offset = 0; impl->status = MESSAGE_STATUS_OK; } void OpenOEMCryptoTASession() { ODK_Message request; ODK_Message* response = NULL; uint8_t response_buffer[0x1000]; uint8_t request_body[] = { 0x06, // TAG_UINT32 0x09, 0x00, 0x00, 0x00, // API value (0x09) 0x01, // TAG_BOOL 0x00, // value (false) 0x0a // TAG_EOM }; InitializeODKMessage(&request, request_body, sizeof(request_body)); ODK_DispatchMessage(&request, &response); if (response != NULL) ODK_Transport_DeallocateMessage(response); } void InitializeOEMCryptoTA() { ODK_Message init_request; ODK_Message* init_response = NULL; uint8_t response_buffer[0x1000]; uint8_t init_request_body[] = { 0x06, // TAG_UINT32 0x01, 0x00, 0x00, 0x00, // API value(0x01) 0x0a // TAG_EOM }; InitializeODKMessage(&init_request, init_request_body, sizeof(init_request_body)); ODK_DispatchMessage(&init_request, &init_response); if (init_response != NULL) ODK_Transport_DeallocateMessage(init_response); } extern "C" int LLVMFuzzerInitialize(int* argc, char*** argv) { ODK_InitializeDispatcher(); InitializeOEMCryptoTA(); OpenOEMCryptoTASession(); return 0; } extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { ODK_Message request; ODK_Message* response = NULL; unsigned char response_buffer[0x1000]; uint8_t* input = new uint8_t[size]; memcpy(input, data, size); InitializeODKMessage(&request, input, size); ODK_DispatchMessage(&request, &response); if (response != NULL) ODK_Transport_DeallocateMessage(response); delete[] input; return 0; } } // namespace wvoec