1*e7b1675dSTing-Kang Chang// Copyright 2017 Google Inc. 2*e7b1675dSTing-Kang Chang// 3*e7b1675dSTing-Kang Chang// Licensed under the Apache License, Version 2.0 (the "License"); 4*e7b1675dSTing-Kang Chang// you may not use this file except in compliance with the License. 5*e7b1675dSTing-Kang Chang// You may obtain a copy of the License at 6*e7b1675dSTing-Kang Chang// 7*e7b1675dSTing-Kang Chang// http://www.apache.org/licenses/LICENSE-2.0 8*e7b1675dSTing-Kang Chang// 9*e7b1675dSTing-Kang Chang// Unless required by applicable law or agreed to in writing, software 10*e7b1675dSTing-Kang Chang// distributed under the License is distributed on an "AS IS" BASIS, 11*e7b1675dSTing-Kang Chang// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*e7b1675dSTing-Kang Chang// See the License for the specific language governing permissions and 13*e7b1675dSTing-Kang Chang// limitations under the License. 14*e7b1675dSTing-Kang Chang// 15*e7b1675dSTing-Kang Chang//////////////////////////////////////////////////////////////////////////////// 16*e7b1675dSTing-Kang Chang 17*e7b1675dSTing-Kang Chang// Definitions for Elliptic Curve Digital Signature Algorithm (ECDSA). 18*e7b1675dSTing-Kang Changsyntax = "proto3"; 19*e7b1675dSTing-Kang Chang 20*e7b1675dSTing-Kang Changpackage google.crypto.tink; 21*e7b1675dSTing-Kang Chang 22*e7b1675dSTing-Kang Changimport "proto/common.proto"; 23*e7b1675dSTing-Kang Chang 24*e7b1675dSTing-Kang Changoption java_package = "com.google.crypto.tink.proto"; 25*e7b1675dSTing-Kang Changoption java_multiple_files = true; 26*e7b1675dSTing-Kang Changoption go_package = "github.com/google/tink/go/proto/ecdsa_go_proto"; 27*e7b1675dSTing-Kang Chang 28*e7b1675dSTing-Kang Changenum EcdsaSignatureEncoding { 29*e7b1675dSTing-Kang Chang UNKNOWN_ENCODING = 0; 30*e7b1675dSTing-Kang Chang // The signature's format is r || s, where r and s are zero-padded and have 31*e7b1675dSTing-Kang Chang // the same size in bytes as the order of the curve. For example, for NIST 32*e7b1675dSTing-Kang Chang // P-256 curve, r and s are zero-padded to 32 bytes. 33*e7b1675dSTing-Kang Chang IEEE_P1363 = 1; 34*e7b1675dSTing-Kang Chang // The signature is encoded using ASN.1 35*e7b1675dSTing-Kang Chang // (https://tools.ietf.org/html/rfc5480#appendix-A): 36*e7b1675dSTing-Kang Chang // ECDSA-Sig-Value :: = SEQUENCE { 37*e7b1675dSTing-Kang Chang // r INTEGER, 38*e7b1675dSTing-Kang Chang // s INTEGER 39*e7b1675dSTing-Kang Chang // } 40*e7b1675dSTing-Kang Chang DER = 2; 41*e7b1675dSTing-Kang Chang} 42*e7b1675dSTing-Kang Chang 43*e7b1675dSTing-Kang Chang// Protos for Ecdsa. 44*e7b1675dSTing-Kang Changmessage EcdsaParams { 45*e7b1675dSTing-Kang Chang // Required. 46*e7b1675dSTing-Kang Chang HashType hash_type = 1; 47*e7b1675dSTing-Kang Chang // Required. 48*e7b1675dSTing-Kang Chang EllipticCurveType curve = 2; 49*e7b1675dSTing-Kang Chang // Required. 50*e7b1675dSTing-Kang Chang EcdsaSignatureEncoding encoding = 3; 51*e7b1675dSTing-Kang Chang} 52*e7b1675dSTing-Kang Chang 53*e7b1675dSTing-Kang Chang// key_type: type.googleapis.com/google.crypto.tink.EcdsaPublicKey 54*e7b1675dSTing-Kang Changmessage EcdsaPublicKey { 55*e7b1675dSTing-Kang Chang // Required. 56*e7b1675dSTing-Kang Chang uint32 version = 1; 57*e7b1675dSTing-Kang Chang // Required. 58*e7b1675dSTing-Kang Chang EcdsaParams params = 2; 59*e7b1675dSTing-Kang Chang // Affine coordinates of the public key in bigendian representation. The 60*e7b1675dSTing-Kang Chang // public key is a point (x, y) on the curve defined by params.curve. For 61*e7b1675dSTing-Kang Chang // ECDH, it is crucial to verify whether the public key point (x, y) is on the 62*e7b1675dSTing-Kang Chang // private's key curve. For ECDSA, such verification is a defense in depth. 63*e7b1675dSTing-Kang Chang // Required. 64*e7b1675dSTing-Kang Chang bytes x = 3; 65*e7b1675dSTing-Kang Chang // Required. 66*e7b1675dSTing-Kang Chang bytes y = 4; 67*e7b1675dSTing-Kang Chang} 68*e7b1675dSTing-Kang Chang 69*e7b1675dSTing-Kang Chang// key_type: type.googleapis.com/google.crypto.tink.EcdsaPrivateKey 70*e7b1675dSTing-Kang Changmessage EcdsaPrivateKey { 71*e7b1675dSTing-Kang Chang // Required. 72*e7b1675dSTing-Kang Chang uint32 version = 1; 73*e7b1675dSTing-Kang Chang // Required. 74*e7b1675dSTing-Kang Chang EcdsaPublicKey public_key = 2; 75*e7b1675dSTing-Kang Chang // Unsigned big integer in bigendian representation. 76*e7b1675dSTing-Kang Chang // Required. 77*e7b1675dSTing-Kang Chang bytes key_value = 3; 78*e7b1675dSTing-Kang Chang} 79*e7b1675dSTing-Kang Chang 80*e7b1675dSTing-Kang Changmessage EcdsaKeyFormat { 81*e7b1675dSTing-Kang Chang // Required. 82*e7b1675dSTing-Kang Chang EcdsaParams params = 2; 83*e7b1675dSTing-Kang Chang uint32 version = 3; 84*e7b1675dSTing-Kang Chang} 85