// 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";
import "quiche/blind_sign_auth/proto/proxy_layer.proto";
import "quiche/blind_sign_auth/proto/public_metadata.proto";
import "anonymous_tokens/proto/anonymous_tokens.proto";

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

// Request data needed to prepare for AuthAndSign.
message GetInitialDataRequest {

  // Whether the client wants to use attestation as part of authentication.
  bool use_attestation = 1;

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

  enum LocationGranularity {
    UNKNOWN = 0;
    COUNTRY = 1;

    // Geographic area with population greater than 1 million.
    CITY_GEOS = 2;
  }

  // The user selected granularity of exit IP location.
  LocationGranularity location_granularity = 3;

  // Indicates what validation rules the client uses for public metadata.
  int64 validation_version = 4;

  // Only set for some service types where multi layer proxies are supported.
  ProxyLayer proxy_layer = 5;
}

// Contains data needed to perform blind signing and prepare for calling
// AuthAndSign.
message GetInitialDataResponse {
  reserved 4;

  anonymous_tokens.RSABlindSignaturePublicKey
      at_public_metadata_public_key = 1;

  // Version will match the validation version in the request.
  privacy.ppn.PublicMetadataInfo public_metadata_info = 2;

  // Data needed to set up attestation, included if use_attestation is true or
  // if the service_type input requires it.
  privacy.ppn.PrepareAttestationData attestation = 3;

  // Data needed to support the privacy pass specification.
  message PrivacyPassData {
    bytes token_key_id = 1;
    bytes public_metadata_extensions = 2;
  }

  PrivacyPassData privacy_pass_data = 5;
}
