// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS-IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package privacy.ppn;

import "quiche/blind_sign_auth/proto/attestation.proto";

option java_multiple_files = true;
option java_package = "com.google.privacy.ppn.proto";

// Client is requesting to auth using the provided auth token.
// Next ID: 6
message AttestAndSignRequest {

  // A string uniquely identifying the strategy this client should be
  // authenticated with.
  string service_type = 1;

  // A set of blinded tokens to be signed by phosphor, passed as raw binary
  // bytes.
  repeated bytes blinded_tokens = 2;

  privacy.ppn.AttestationData attestation = 3;

  // Indicates which key to use for signing.
  uint64 key_version = 4;

  // Uses IETF privacy pass extensions spec for format.
  bytes public_metadata_extensions = 5;
}

message AttestAndSignResponse {
  // A set of signatures corresponding by index to `blinded_tokens` in the
  // request, as raw binary bytes.
  repeated bytes blinded_token_signatures = 1;
}
