js-multiformats icon indicating copy to clipboard operation
js-multiformats copied to clipboard

Proposal: Define `MultihashVerifier` interface

Open Gozala opened this issue 1 year ago • 0 comments

Goal

As per https://github.com/ipld/js-car/issues/123 we do need a solution for verifying hashes in CAR files without shipping all the MultihashHasher-s with the CAR library.

Proposal

Define a separate MultihashVerifier interface that can be implemented by all of our hashers. It could look like this:

export interface MultihashVerifier {
  // Fails if source produces a different multihash
  verify(mustihash: Uint8Array, source: Uint8Array): Await<{}>
}

You may be thinking can't I just use MultihashHasher to create a digest from the source and then compare. While you could there are some subtle cases where having MultihashVerifier would be a better option:

  1. Hashing algorithms like blake3 provide incremental verifiability, allowing a more optimal implementation strategy.
  2. It is possible to implement e.g. trust: (config) => MultihashVerifier that could be leveraged as an explicit opt-out as opposed to subtle option that is easy to miss.

Gozala avatar Apr 18 '23 04:04 Gozala