webmaster128 / drand-rs

Implementation of a drand client in Rust

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

dee: Rust cli for drand

Documentation License crates.io

Retrieve public randomness, and encrypt your files to the future. dee provides a drand client, and support for timelock encryption.

Tables of Content

Features

  • Retrieve drand randomness
  • Manages multiple beacons locally
  • Timelock encryption and decryption
  • Chain and unchained randomness
  • Signatures verification on G1 and G2
  • Customizable output format
  • Cross platform (Linux, Windows, macOS)
  • Interroperability with Go and JS implementation
  • wasm32 compatible library

What's next

  • P2P randomness retrieval
  • Offline timelock decryption

Installation

Environment CLI Command
Cargo (Rust 1.67+) cargo install dee --git https://github.com/thibmeu/drand-rs

On Linux, Windows, or macOS, you can use the pre-built binaries.

Usage

You can use the --help option to get more details about the commands and their options.

dee [OPTIONS] <COMMAND>

Manage remote beacons

Add fastnet remote beacon, and shows details about it.

dee remote add fastnet https://api.drand.sh/dbd506d6ef76e5f386f41c651dcb808c5bcbd75471cc4eafa3f4df7ad4e4c493
fastnet
dee remote show --long fastnet
URL       : https://drand.cloudflare.com/dbd506d6ef76e5f386f41c651dcb808c5bcbd75471cc4eafa3f4df7ad4e4c493
Public Key: a0b862a7527fee3a731bcb59280ab6abd62d5c0b6ea03dc4ddf6612fdfc9d01f01c31542541771903475eb1ec6615f8d0df0b8b6dce385811d6dcf8cbefb8759e5e616a3dfd054c928940766d9a5b9db91e3b697e5d70a975181e007f87fca5e
Period    : 3s
Genesis   : 2023-03-01 15:40:00 UTC
Chain Hash: dbd506d6ef76e5f386f41c651dcb808c5bcbd75471cc4eafa3f4df7ad4e4c493
Group Hash: a81e9d63f614ccdb144b8ff79fbd4d5a2d22055c0bfe4ee9a8092003dab1c6c0
Scheme ID : bls-unchained-on-g1
Beacon ID : fastnet

Retrieve public randomness

Retrieve round 1000 from fastnet.

dee rand -u fastnet --long 1000
Round     : 1000
Relative  : 100:09:43 ago
Absolute  : 2023-03-01 16:29:57
Randomness: aa319fc2547e1bdd306633ff63d34e50be76a157477b066906f4d7d63d4e4964
Signature : b09eacd45767c4d58306b98901ad0d6086e2663766f3a4ec71d00cf26f0f49eaf248abc7151c60cf419c4e8b37e80412

Timelock encryption

Encrypt Hello dee! string to 30 seconds in the future, using fastnet publickey. If you wait 30 seconds before decrypting, the message is decrypted using the new fastnet signature.

echo "Hello dee!" | dee crypt -u fastnet -r 30s > data.dee
dee crypt --decrypt data.dee
Hello dee!

Common remotes

ID Remote Timelock encryption
fastnet-cloudflare https://drand.cloudflare.com/dbd506d6ef76e5f386f41c651dcb808c5bcbd75471cc4eafa3f4df7ad4e4c493 Yes
fastnet-pl https://api.drand.sh/dbd506d6ef76e5f386f41c651dcb808c5bcbd75471cc4eafa3f4df7ad4e4c493 Yes
mainnet-cloudflare https://drand.cloudflare.com No
mainnet-pl https://api.drand.sh No

dee does not come with a default remote beacon. You should decide whichever suit your needs.

More beacons origin are available on drand website.

Security Considerations

This software has not been audited. Please use at your sole discretion. With this in mind, dee security relies on the following:

FAQ

Default configuration path

dee configuration file is available at the following

OS Path
Linux /home/alice/.config/dee/default.toml
Windows C:\Users\Alice\AppData\Roaming\dee\config\default.toml
macOS /Users/Alice/Library/Application Support/rs.dee/default.toml

Other implementations

drand API specification is at drand.love/docs/specification. drand is based on Scalable Bias-Resistant Distributed Randomness by Ewa Syta, Philipp Jovanovic, Eleftherios Kokoris Kogias, Nicolas Gailly, Linus Gasser, Ismail Khoffi, Michael J. Fischer, and Bryan Ford. The reference interroperable Go implementation is available at drand/drand.

timelock encryption was published in tlock: Practical Timelock Encryption from Threshold BLS by Nicolas Gailly, Kelsey Melissaris, and Yolan Romailler. The reference interroperable Go implementation is available at drand/tlock.

Rust libraries

dee focuses on building a cli. It relies on Rust libraries to use drand or perform timelock encryption.

If you're looking to implement your own Rust application on top of drand and/or timelock encryption, you can use the following:

  • drand_core: drand client,
  • tlock: raw tlock implementation, allowing messages up to 16 bytes,
  • tlock_age: hybrid encryption, age phassphrase is encrypted using tlock,

License

This project is under the MIT license.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be MIT licensed as above, without any additional terms or conditions.

About

Implementation of a drand client in Rust

License:MIT License


Languages

Language:Rust 100.0%