// Copyright 2017 Google Inc.
//
// 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
//
//      http://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.
//
////////////////////////////////////////////////////////////////////////////////

// Definitions for configuring Tink runtime environment.
syntax = "proto3";

package google.crypto.tink;

option java_package = "com.google.crypto.tink.proto";
option java_multiple_files = true;
option objc_class_prefix = "TINKPB";
option go_package = "github.com/google/tink/proto/config_go_proto";

// An entry that describes a key type to be used with Tink library,
// specifying the corresponding primitive, key manager, and deprecation status.
// All fields are required.
message KeyTypeEntry {
  // KeyTypeEntry is no longer supported.
  option deprecated = true;

  string primitive_name = 1;       // E.g. “Aead”, “Mac”, ... (case-insensitive)
  string type_url = 2;             // Name of the key type.
  uint32 key_manager_version = 3;  // Minimum required version of key manager.
  bool new_key_allowed = 4;        // Can the key manager create new keys?
  string catalogue_name = 5;    // Catalogue to be queried for key manager,
                                // e.g. "Tink", "Custom", ... (case-insensitive)
}

// A complete configuration of Tink library: a list of key types
// to be available via the Registry after initialization.
// All fields are required.
message RegistryConfig {
  // RegistryConfig is no longer supported.
  option deprecated = true;

  string config_name = 1;
  repeated KeyTypeEntry entry = 2;
}
