// Copyright 2016 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;
package trunks;

// The messages in this file correspond to the trunksd IPC interface. Each
// exported method is represented here by a request and response protobuf.

// Inputs for the SendCommand method.
message SendCommandRequest {
  // The raw bytes of a TPM command.
  optional bytes command = 1;
  // The sender ID. We reuse the value of hwsec_foundation::TpmMetricsClientID.
  optional uint64 sender_id = 2;
}

// Outputs for the SendCommand method.
message SendCommandResponse {
  // The raw bytes of a TPM response.
  optional bytes response = 1;
}

// Inputs for the StartEvent method.
message StartEventRequest {
  optional string event = 1;
  // The sender ID. We reuse the value of hwsec_foundation::TpmMetricsClientID.
  optional uint64 sender_id = 2;
}

// Outputs for the StartEvent method.
message StartEventResponse {}

// Inputs for the StopEvent method.
message StopEventRequest {
  optional string event = 1;
  // The sender ID. We reuse the value of hwsec_foundation::TpmMetricsClientID.
  optional uint64 sender_id = 2;
}

// Outputs for the StopEvent method.
message StopEventResponse {}
