Crate roughenough [] [src]

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 represetned by RtMessage which implements the mapping of Roughtime u32 tags to byte-strings.

Server

A Roughtime server implementation is in src/bin/server.rs. The server is configured via a yaml file:

interface: 127.0.0.1
port: 8686
seed: f61075c988feb9cb700a4a6a3291bfbc9cab11b9c9eca8c802468eb38a43d7d3

Where:

  • interface - IP address or interface name for listening to client requests
  • port - UDP port to listen to requests
  • seed - A 32-byte hexadecimal value used as the seed to generate the server's long-term key pair. This is a secret value, treat it with care.

To run the server:

$ cargo run --release --bin server /path/to/config.file

Modules

hex

Hex binary-to-text encoding

sign

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

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