[−][src]Crate roughenough
An implementation of the Roughtime secure time synchronization protocol.
Roughtime aims to achieve rough time synchronisation in a secure way that doesn't depend on any particular time server, and in such a way that, if a time server does misbehave, clients end up with cryptographic proof of it.
Protocol
Roughtime messages are represented by RtMessage
which
implements the mapping of Roughtime u32
tags
to byte-strings.
Keys and Signing
Roughtime uses an Ed25519 key pair as the server's long-term identity and a second key pair (signed by the long-term key) as a delegated on-line (ephemeral) key.
LongTermKey
and OnlineKey
implement these elements of the protocol. The sign
module provides
signing and verification operations.
Client
A Roughtime client can be found in src/bin/client.rs
. To run the client:
$ cargo run --release --bin client roughtime.int08h.com 2002
Consult the client's --help
output for all runtime options.
Server
The core Roughtime server implementation is in src/server.rs
and the server's CLI can
be found in src/bin/roughenough-server.rs
.
The server has multiple ways it can be configured,
see ServerConfig
for the configuration trait and
Modules
config |
Ways to configure the Roughenough server. |
key |
Representations and management of Roughtime's online and long-term Ed25519 keys |
kms |
Protect the server's long-term key with envelope encryption and a key management system. |
merkle |
Merkle Tree implementation using SHA-512 and the Roughtime leaf and node tweak values. |
server |
Implements the Roughenough server functionality. |
sign |
A multi-step (init-update-finish) interface for Ed25519 signing and verification |
Structs
RtMessage |
A Roughtime protocol message; a map of u32 tags to arbitrary byte-strings. |
Enums
Error |
Error types generated by this implementation |
Tag |
An unsigned 32-bit value (key) that maps to a byte-string (value). |
Constants
CERTIFICATE_CONTEXT |
Prefixed to the server's certificate before generating or verifying certificate's signature |
HASH_LENGTH |
Size (in bytes) of a SHA-512 hash |
MIN_REQUEST_LENGTH |
Minimum size (in bytes) of a client request |
MIN_SEED_LENGTH |
Minimum size (in bytes) of seeds used to derive private keys |
NONCE_LENGTH |
Size (in bytes) of the client's nonce |
PUBKEY_LENGTH |
Size (in bytes) of an Ed25519 public key |
RADIUS_LENGTH |
Size (in bytes) of server's time uncertainty value |
SIGNATURE_LENGTH |
Size (in bytes) of an Ed25519 signature |
SIGNED_RESPONSE_CONTEXT |
Prefixed to the server's response before generating or verifying the server's signature |
TIMESTAMP_LENGTH |
Size (in bytes) of server's timestamp value |
TREE_LEAF_TWEAK |
Value prepended to leaves prior to hashing |
TREE_NODE_TWEAK |
Value prepended to nodes prior to hashing |
VERSION |
Version of Roughenough |
Functions
roughenough_version |
Roughenough version string enriched with any compile-time optional features |