blob: 98ec42e800bb07a15ddcd98774e8ac4a5dd8dbd6 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved. Use of
// this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Inputs for various fuzz tests
// NOTE(crbug.com/796717): As for this writing, the tests are
// incomplete, and its not entirely clear what additional tests need
// to be written. The general priority for tests is:
//
// 1. Messages that contain any data passed through the SDK/renderer
// process.
// 2. Messages from Cast devices.
// 3. Messages generated entirely by the native Cast MRP, since they
// are already from privileged code (at least for now).
//
// See also
// https://chromium-coverage.appspot.com/reports/763373_fuzzers_only/linux/chromium/src/components/cast_channel/report.html
// for fuzz test coverage.
syntax = "proto2";
import "cast_channel.proto";
import "revocation.proto";
option optimize_for = LITE_RUNTIME;
package cast_channel.fuzz;
enum TimeBoundCase {
VALID = 0;
INVALID = 1;
OOB = 2;
MISSING = 3;
}
// Inputs for functions in cast_auth_utils.cc
message CastAuthUtilInputs {
message AuthenticateChallengeReplyInput {
// The actual input to the function, parts of which may be
// overridden based on the additional fields below.
required cast.channel.CastMessage cast_message = 1;
required string nonce = 2;
// Values used to set the start and end times.
required TimeBoundCase start_case = 3;
required TimeBoundCase expiry_case = 4;
// Value used to replace the payload of |cast_message| with data
// that is more likely to be valid (and thus exercise more code
// paths).
optional cast.channel.DeviceAuthMessage auth_message = 5;
// Values used to replace the |crl| field of
// |auth_message.response|.
repeated cast.certificate.TbsCrl tbs_crls = 7;
// Flags that force certain fields to have correct values.
required bool nonce_ok = 8;
required bool response_certs_ok = 9;
required bool crl_certs_ok = 10;
required bool crl_signatures_ok = 11;
}
oneof input {
AuthenticateChallengeReplyInput authenticate_challenge_reply_input = 1;
}
}
// Inputs for functions in cast_message_utils.cc
message CastMessageUtilInputs {
message CreateBroadcastRequestInput {
required string source_id = 1;
required int32 request_id = 2;
repeated string app_id = 3;
required string broadcast_namespace = 4;
required string broadcast_message = 5;
}
message CreateLaunchRequestInput {
required string source_id = 1;
required int32 request_id = 2;
required string app_id = 3;
required string locale = 4;
repeated string supported_app_types = 5;
optional JunkValue app_params = 6;
}
message CreateStopRequestInput {
required string source_id = 1;
required int32 request_id = 2;
required string session_id = 3;
}
message CreateCastMessageInput {
required string message_namespace = 1;
required string source_id = 2;
required string destination_id = 3;
required JunkValue body = 4;
}
message CreateMediaRequestInput {
required int32 request_id = 1;
required string source_id = 2;
required string destination_id = 3;
required int32 type = 4;
required JunkValue body = 5;
}
message CreateSetVolumeRequestInput {
required int32 request_id = 1;
required string source_id = 2;
required JunkValue body = 3;
}
message CreateVirtualConnectionRequestInput {
required string source_id = 1;
required string destination_id = 2;
required int32 connection_type = 3;
required string user_agent = 4;
required string browser_version = 5;
}
message CreateGetAppAvailabilityRequestInput {
required string source_id = 1;
required int32 request_id = 2;
required string app_id = 3;
}
message GetRequestIdFromResponseInput {
optional int32 request_id = 1;
required JunkValue payload = 2;
}
message GetAppAvailabilityResultFromResponseInput {
required JunkValue payload = 1;
required string app_id = 2;
}
message GetLaunchSessionResponseInput { required JunkValue payload = 1; }
message IsCastReservedNamespaceInput {
required string message_namespace = 1;
}
message ParseMessageTypeFromPayloadInput {
optional string type = 1;
required JunkValue payload = 2;
}
message CreateReceiverStatusRequestInput {
required string source_id = 1;
required int32 request_id = 2;
}
oneof input {
CreateBroadcastRequestInput create_broadcast_request_input = 1;
CreateLaunchRequestInput create_launch_request_input = 2;
CreateStopRequestInput create_stop_request_input = 3;
CreateCastMessageInput create_cast_message_input = 4;
CreateMediaRequestInput create_media_request_input = 5;
CreateSetVolumeRequestInput create_set_volume_request_input = 6;
int32 int_input = 7;
string string_input = 8;
cast.channel.CastMessage cast_message = 9;
CreateVirtualConnectionRequestInput
create_virtual_connection_request_input = 10;
CreateGetAppAvailabilityRequestInput
create_get_app_availability_request_input = 11;
GetRequestIdFromResponseInput get_request_id_from_response_input = 12;
GetLaunchSessionResponseInput get_launch_session_response_input = 13;
ParseMessageTypeFromPayloadInput parse_message_type_from_payload_input = 14;
CreateReceiverStatusRequestInput create_receiver_status_request_input = 15;
}
}
// Message used to generate a plausible but meaningless instance of
// base::Value.
message JunkValue {
message Field {
required string name = 1;
oneof value {
int32 int_value = 2;
string string_value = 3;
float float_value = 4;
bool bool_value = 5;
}
}
repeated Field field = 1;
}