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

What's next

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.

bash dee [OPTIONS] <COMMAND>

Manage remote beacons

Add fastnet remote beacon, and shows details about it. bash dee remote add fastnet https://api.drand.sh/dbd506d6ef76e5f386f41c651dcb808c5bcbd75471cc4eafa3f4df7ad4e4c493 fastnet

bash 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.

bash 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: * tlock: Practical Timelock Encryption from Threshold BLS by Nicolas Gailly, Kelsey Melissaris, and Yolan Romailler, and its implementation in thibmeu/tlock-rs, * Identity-Based Encryption by Dan Boneh, and Matthew Franklin, and its implementation in thibmeu/tlock-rs, * The League of Entropy to remain honest, * age encryption protocol, and its implementation in str4d/rage,

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: * drandcore: drand client, * tlock: raw tlock implementation, allowing messages up to 16 bytes, * tlockage: 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.