| // Copyright 2016 The Roughtime Authors. |
| // |
| // 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. */ |
| |
| // Package config contains JSON structs for encoding information about |
| // Roughtime servers. |
| package config |
| |
| // ServersJSON represents a JSON format for distributing information about |
| // Roughtime servers. |
| type ServersJSON struct { |
| Servers []Server `json:"servers"` |
| } |
| |
| // Server represents a Roughtime server in a JSON configuration. |
| type Server struct { |
| Name string `json:"name"` |
| // PublicKeyType specifies the type of the public key contained in |
| // |PublicKey|. Normally this will be "ed25519" but implementations |
| // should ignore entries with unknown key types. |
| PublicKeyType string `json:"publicKeyType"` |
| PublicKey []byte `json:"publicKey"` |
| Addresses []ServerAddress `json:"addresses"` |
| } |
| |
| // ServerAddress represents the address of a Roughtime server in a JSON |
| // configuration. |
| type ServerAddress struct { |
| Protocol string `json:"protocol"` |
| // 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. |
| Address string `json:"address"` |
| } |
| |
| // Chain represents a history of Roughtime queries where each provably follows |
| // the previous one. |
| type Chain struct { |
| Links []Link `json:"links"` |
| } |
| |
| // Link represents an entry in a Chain. |
| type Link struct { |
| // PublicKeyType specifies the type of public key contained in |
| // |PublicKey|. See the same field in |Server| for details. |
| PublicKeyType string `json:"publicKeyType"` |
| PublicKey []byte `json:"serverPublicKey"` |
| // NonceOrBlind 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. |
| NonceOrBlind []byte `json:"nonceOrBlind"` |
| // Reply contains the reply from the server. |
| Reply []byte `json:"reply"` |
| } |