// 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.
//
////////////////////////////////////////////////////////////////////////////////

syntax = "proto3";

package google.crypto.tink;

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

// See https://datatracker.ietf.org/doc/html/rfc7518#section-3.4
enum JwtEcdsaAlgorithm {
  ES_UNKNOWN = 0;
  ES256 = 1;  // ECDSA using P-256 and SHA-256
  ES384 = 2;  // ECDSA using P-384 and SHA-384
  ES512 = 3;  // ECDSA using P-521 and SHA-512
}

// key_type: type.googleapis.com/google.crypto.tink.JwtEcdsaPublicKey
message JwtEcdsaPublicKey {
  uint32 version = 1;
  JwtEcdsaAlgorithm algorithm = 2;
  // Affine coordinates of the public key in big-endian representation. The
  // public key is a point (x, y) on the curve defined by algorithm.
  bytes x = 3;
  bytes y = 4;

  // Optional, custom kid header value to be used with "RAW" keys.
  // "TINK" keys with this value set will be rejected.
  message CustomKid {
    string value = 1;
  }
  CustomKid custom_kid = 5;
}

// key_type: type.googleapis.com/google.crypto.tink.JwtEcdsaPrivateKey
message JwtEcdsaPrivateKey {
  uint32 version = 1;
  JwtEcdsaPublicKey public_key = 2;
  // Unsigned big integer in bigendian representation.
  bytes key_value = 3;
}

message JwtEcdsaKeyFormat {
  uint32 version = 1;
  JwtEcdsaAlgorithm algorithm = 2;
}
