// Copyright 2018 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 RSA SSA (Signature Schemes with Appendix) using PKCS1-v1_5
// encoding (https://tools.ietf.org/html/rfc8017#section-8.2).
syntax = "proto3";

package google.crypto.tink;
import "proto/common.proto";

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/rsa_ssa_pkcs1_go_proto";

message RsaSsaPkcs1Params {
  // Hash function used in computing hash of the signing message
  // (see https://tools.ietf.org/html/rfc8017#section-9.2).
  // Required.
  HashType hash_type = 1;
}

// key_type: type.googleapis.com/google.crypto.tink.RsaSsaPkcs1PublicKey
message RsaSsaPkcs1PublicKey {
  // Required.
  uint32 version = 1;
  // Required.
  RsaSsaPkcs1Params params = 2;
  // Modulus.
  // Unsigned big integer in bigendian representation.
  bytes n = 3;
  // Public exponent.
  // Unsigned big integer in bigendian representation.
  bytes e = 4;
}

// key_type: type.googleapis.com/google.crypto.tink.RsaSsaPkcs1PrivateKey
message RsaSsaPkcs1PrivateKey {
  // Required.
  uint32 version = 1;
  // Required.
  RsaSsaPkcs1PublicKey public_key = 2;
  // Private exponent.
  // Unsigned big integer in bigendian representation.
  // Required.
  bytes d = 3;

  // The following parameters are used to optimize RSA signature computation.
  // The prime factor p of n.
  // Unsigned big integer in bigendian representation.
  // Required.
  bytes p = 4;
  // The prime factor q of n.
  // Unsigned big integer in bigendian representation.
  // Required.
  bytes q = 5;
  // d mod (p - 1).
  // Unsigned big integer in bigendian representation.
  // Required.
  bytes dp = 6;
  // d mod (q - 1).
  // Unsigned big integer in bigendian representation.
  // Required.
  bytes dq = 7;
  // Chinese Remainder Theorem coefficient q^(-1) mod p.
  // Unsigned big integer in bigendian representation.
  // Required.
  bytes crt = 8;
}

message RsaSsaPkcs1KeyFormat {
  // Required.
  RsaSsaPkcs1Params params = 1;
  // Required.
  uint32 modulus_size_in_bits = 2;
  // Required.
  bytes public_exponent = 3;
}
