syntax = "proto3";
package roughtime.config;

// These protobufs are only used with JSON serialisation so we attempt to emit
// as little C++ code as possible.
option optimize_for = CODE_SIZE;

// ServersJSON represents a JSON format for distributing information about
// Roughtime servers.
message ServersJSON {
  // created contains the RFC3339 time when the JSON file was created.
  string created = 1;
  // expires contains the RFC3339 time when the information in this JSON file
  // expires.
  string expires = 2;
  repeated Server servers = 3;
}

// Server represents a Roughtime server in a JSON configuration.
message Server {
  string name = 1;
  // public_key_type specifies the type of the public key contained in
  // |PublicKey|. Normally this will be "ed25519" but implementations should
  // ignore entries with unknown key types.
  string public_key_type = 2;
  bytes public_key = 3;
  repeated ServerAddress addresses = 4;
}

// ServerAddress represents the address of a Roughtime server in a JSON
// configuration.
message ServerAddress {
  string protocol = 1;
  // address contains a protocol specific address. For the protocol "udp", the
  // address has the form "host:port" where host is either a DNS name, an IPv4
  // literal, or an IPv6 literal in square brackets.
  string address = 2;
}

// Chain represents a history of Roughtime queries where each provably follows
// the previous one.
message Chain {
  repeated Link links = 1;
}

// Link represents an entry in a Chain.
message Link {
  // public_key_type specifies the type of public key contained in
  // |PublicKey|. See the same field in |Server| for details.
  string public_key_type = 1;
  bytes server_public_key = 2;
  // nonce_or_blind contains either the full nonce (only for the first |Link|
  // in a |Chain|) or else contains a blind value that is combined with the
  // previous reply to make the next nonce. In either case, the value is 64
  // bytes long.
  bytes nonce_or_blind = 3;
  // reply contains the reply from the server.
  bytes reply = 4;
}
