syntax = "proto3";
package cosmos.crypto.secp256k1;

import "amino/amino.proto";
import "gogoproto/gogo.proto";

option go_package = "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1";

// PubKey defines a secp256k1 public key
// Key is the compressed form of the pubkey. The first byte depends is a 0x02 byte
// if the y-coordinate is the lexicographically largest of the two associated with
// the x-coordinate. Otherwise the first byte is a 0x03.
// This prefix is followed with the x-coordinate.
message PubKey {
  option (amino.name) = "tendermint/PubKeySecp256k1";
  // The Amino encoding is simply the inner bytes field, and not the Amino
  // encoding of the whole PubKey struct.
  //
  // Example (JSON):
  // s := PubKey{Key: []byte{0x01}}
  // out := AminoJSONEncoder(s)
  //
  // Then we have:
  // out == `"MQ=="`
  // out != `{"key":"MQ=="}`
  option (amino.message_encoding)     = "key_field";
  option (gogoproto.goproto_stringer) = false;

  bytes key = 1;
}

// PrivKey defines a secp256k1 private key.
message PrivKey {
  option (amino.name)             = "tendermint/PrivKeySecp256k1";
  option (amino.message_encoding) = "key_field";

  bytes key = 1;
}