Crate roughenough

Source
Expand description

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.
grease
Adds deliberate errors to client responses as part of the Roughtime Ecosystem.
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
stats
Facilities for tracking client requests to the server

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
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
SEED_LENGTH
Size (in bytes) of seeds used to derive private keys
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