38 releases
0.19.2 | Oct 24, 2024 |
---|---|
0.19.1 | Sep 7, 2023 |
0.19.0 | Jun 6, 2023 |
0.18.0 | Dec 6, 2022 |
0.1.0 | Dec 28, 2015 |
#45 in Encoding
1,017,461 downloads per month
Used in 1,064 crates
(125 directly)
34KB
602 lines
rust-multihash
multihash implementation in Rust.
Table of Contents
Install
First add this to your Cargo.toml
[dependencies]
multihash = "*"
Then run cargo build
.
MSRV
The minimum supported Rust version for this library is 1.64.0
.
This is only guaranteed without additional features activated.
Usage
The multihash
crate exposes a basic data structure for encoding and decoding multihash.
It does not provide any hashing functionality itself.
Multihash
uses const-generics to define the internal buffer size.
You should set this to the maximum size of the digest you want to support.
use multihash::Multihash;
const SHA2_256: u64 = 0x12;
fn main() {
let hash = Multihash::<64>::wrap(SHA2_256, b"my digest");
println!("{:?}", hash);
}
Using a custom code table
You can derive your own application specific code table using the multihash-derive
crate.
The multihash-codetable
provides predefined hasher implementations if you don't want to implement your own.
use multihash_derive::MultihashDigest;
#[derive(Clone, Copy, Debug, Eq, MultihashDigest, PartialEq)]
#[mh(alloc_size = 64)]
pub enum Code {
#[mh(code = 0x01, hasher = multihash_codetable::Sha2_256)]
Foo,
#[mh(code = 0x02, hasher = multihash_codetable::Sha2_512)]
Bar,
}
fn main() {
let hash = Code::Foo.digest(b"my hash");
println!("{:02x?}", hash);
}
Supported Hash Types
SHA1
SHA2-256
SHA2-512
SHA3
/Keccak
Blake2b-256
/Blake2b-512
/Blake2s-128
/Blake2s-256
Blake3
Strobe
Maintainers
Captain: @dignifiedquire.
Contribute
Contributions welcome. Please check out the issues.
Check out our contributing document for more information on how we work, and about contributing in general. Please be aware that all interactions related to multiformats are subject to the IPFS Code of Conduct.
Small note: If editing the README, please conform to the standard-readme specification.
License
Dependencies
~0.3–1.2MB
~21K SLoC