RustCrypto / hashes

Collection of cryptographic hash functions written in pure Rust
1.82k stars 247 forks source link

docs for hasher states could use a reference to the `Digest` trait #441

Open izik1 opened 1 year ago

izik1 commented 1 year ago

For someone new to the ecosystem it might be hard to tell how to use a... For example, sha3::Keccak256 (https://docs.rs/sha3/latest/sha3/type.Keccak256.html), it's just a type alias with no real info about what it is (other than some nebulous "hasher state") or how to use it. I'd recommend linking to the Digest trait in the docs as a way of explaining "how to use it"

Additionally (if I should move this to a separate issue, let me know and I will do so) I would recommend an example specifically showing how to sha3::Keccak256::digest(b"a message") in one go. Finally, the example(s) that use update should add more than one message. This would be so that show new user why you would use new and then update rather than digest ("because you can add more than one thing").

I would be willing to create the examples / documentation if this would be agreeable

newpavlov commented 1 year ago

Yes, we will appreciate documentation improvement PRs.

jselig-rigetti commented 8 months ago

Related, I couldn't get https://github.com/RustCrypto/hashes?tab=readme-ov-file#examples working correctly, had to use the following:

use sha2::{Sha256, Digest};

// from the example
// no such associated item (E0599)
let digest = Sha256::digest(b"hello");

// my usage
// this works
let digest = <Sha256 as Digest>::digest(b"hello");
tarcieri commented 8 months ago

@jselig-rigetti works fine here: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=67a52089d26fccb4f956fc397079b343

It's possible you have another trait in scope which defines a digest method and thus requires you disambiguate

newpavlov commented 8 months ago

@jselig-rigetti Are you sure it's not this rust-analyzer issue?

jselig-rigetti commented 8 months ago

Ah, it could have been, thanks for the link!