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

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

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

// PubKey is an ed25519 public key for handling Tendermint keys in SDK.
// It's needed for Any serialization and SDK compatibility.
// It must not be used in a non Tendermint key context because it doesn't implement
// ADR-28. Nevertheless, you will like to use ed25519 in app user level
// then you must create a new proto message and follow ADR-28 for Address construction.
message PubKey {
  option (amino.name) = "tendermint/PubKeyEd25519";
  // 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 [(gogoproto.casttype) = "crypto/ed25519.PublicKey"];
}

// PrivKey defines a ed25519 private key.
// NOTE: ed25519 keys must not be used in SDK apps except in a tendermint validator context.
message PrivKey {
  option (amino.name)             = "tendermint/PrivKeyEd25519";
  option (amino.message_encoding) = "key_field";

  bytes key = 1 [(gogoproto.casttype) = "crypto/ed25519.PrivateKey"];
}
