Comments (4)
I just tried to start using this crate and was having issues when decoding a CID, and I just figured the problem is exactly this, the multihash::encode
is hashing my string rather than just prefixing it with hash-code and length, which I thought is what multihash specs defines, at least that's what I understood and saw happening with other implementations like JS that I've been using before, and I looked at Go impl which does the same, i.e. only encoding and no hashing.
from rust-multihash.
I think you are right, having the hashing functions in here makes life much harder than necessary. I think having the following in this crate makes more sense
/// Owned hash.
pub struct Multihash(Hash, Vec<u8>);
/// Referenced version, more similar to what we have currently
pub struct MultihashRef<'a>(Hash, &'a [u8]);
With an api like this
use multihash::{Multihash, MultihashRef, HashTyp};
let hash: Vec<u8> = blake2b("hello world").into();
let mh = Multihash::new(HashTyp::Blake2b, hash).expect("invalid hash size");
let mh_ref = multihash::MultihashRef::new(HashTyp::Blake2b, &hash).expect("invalid hash size");
// Concats the code for the multihash prefix with the actual hash bytes
let mh_bytes: Vec<u8> = mh.to_vec();
from rust-multihash.
Thinking about it some more, most of the code in #30 is good, as the new Multihash
and MultihashRef
in there are mostly working like what I described above. I think a future step is just splitting the encoding functionality either into its own crate or behind a feature flag.
from rust-multihash.
With the introduction of multihash:wrap()
the create can do both, hashing and multihash encoding.
If it turns out to be a problem, we could split it into two crates. But for now I'll keep it a single one, hence closing this issue.
from rust-multihash.
Related Issues (20)
- Implement ripemd160 HOT 3
- CI tries to run `fmt` with unstable feature and will always fail HOT 2
- Nix build is currently broken HOT 3
- Maintain a CHANGELOG.md HOT 3
- Let's make fewer breaking changes HOT 14
- Replace or Upgrade Tarpaulin Code Coverage HOT 2
- Split crate into `multihash`, `multihash-codetable` and `multihash-derive` HOT 5
- Tracking issue: Polish and stabilize the API HOT 5
- Use `sha1` dependency instead of `sha-1`
- Unsafe unwrap could cause an application to panic HOT 12
- Consider removing `MultihashDigest` and `Hasher` traits
- Write docs for transition to new crate structure HOT 6
- Parity Codec bumps MSRV to `1.64.0` HOT 4
- Add `cargo semver-checks` to CI to ensure we don't break the API accidentially HOT 1
- Add Sha3 SHAKE* HOT 12
- Only enforce MSRV if no features are activated
- Release 0.19 HOT 8
- multihash const constructors unusable HOT 5
- Redesign multihash::Error
- regression serde feature does not work with no-std
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rust-multihash.