12 releases

0.0.16 Mar 9, 2024
0.0.15 Feb 29, 2024
0.0.14 Aug 30, 2023
0.0.8 Jul 23, 2023
0.0.6 Mar 22, 2023

#167 in Cryptography

Download history 32/week @ 2024-02-19 137/week @ 2024-02-26 168/week @ 2024-03-04 53/week @ 2024-03-11 2/week @ 2024-03-18 49/week @ 2024-04-01

188 downloads per month

MIT license

115KB
2.5K SLoC

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.74+) 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 quicknet remote beacon, and shows details about it.

dee remote add quicknet https://api.drand.sh/52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971
quicknet
dee remote show --long quicknet
URL       : https://drand.cloudflare.com/52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971
Public Key: 83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a
Period    : 3s
Genesis   : 2023-08-23 15:09:27.0 +00:00:00
Chain Hash: 52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971
Group Hash: f477d5c89f21a17c863a7f937c6a6d15859414d2be09cd448d4279af331c5d3e
Scheme ID : bls-unchained-g1-rfc9380
Beacon ID : quicknet

Retrieve public randomness

Retrieve round 1000 from quicknet.

dee rand -u quicknet --long 1000
Round     : 1000
Relative  : 100:09:43 ago
Absolute  : 2023-08-23 15:59:24
Randomness: fe290beca10872ef2fb164d2aa4442de4566183ec51c56ff3cd603d930e54fdd
Signature : b44679b9a59af2ec876b1a6b1ad52ea9b1615fc3982b19576350f93447cb1125e342b73a8dd2bacbe47e4b6b63ed5e39

Timelock encryption

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

echo 'Hello dee!' | dee crypt -u quicknet -r 30s > data.dee
dee crypt --decrypt data.dee
Hello dee!

Common remotes

ID Remote Timelock encryption
quicknet-cloudflare https://drand.cloudflare.com/52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971 Yes
quicknet-pl https://api.drand.sh/52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971 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.

Dependencies

~21–34MB
~505K SLoC