// 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 "anonymous_tokens/proto/anonymous_tokens.proto";

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

// Contains fields which will be cryptographically linked to a blinded token and
// visible to client, signer, and verifier. Clients should validate/set fields
// contained within such that the values are reasonable for the security and
// privacy constraints of the application.
message PublicMetadata {
  // Contains desired exit IP address's declared location.
  message Location {
    // TODO(b/268354975): fix copybara regex to strip this line automatically

    // All caps ISO 3166-1 alpha-2.
    string country = 1;

    // City region geo id if requested by the client.
    string city_geo_id = 2;
  }

  Location exit_location = 1;

  // Indicates which service this token is associated with.
  string service_type = 2;

  // When the token and metadata expire.
  anonymous_tokens.Timestamp expiration = 3;

  // Indicates the debug context of this payload.
  enum DebugMode {
    UNSPECIFIED_DEBUG_MODE = 0;
    DEBUG_ALL = 1;
    ADMIN = 2;
  }

  DebugMode debug_mode = 4;
}

// Contains PublicMetadata and associated information. Only the public_metadata
// is cryptographically associated with the token.
message PublicMetadataInfo {
  PublicMetadata public_metadata = 1;

  // Earliest validation version that this public metadata conforms to.
  int32 validation_version = 2;
}
