Skip to content
Multihash implementation in C#
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
src version bump Oct 7, 2018
test/Multiformats.Hash.Tests increase test code coverage Oct 4, 2018
.travis.yml Use BouncyCastle's Blake2B/S implementations (#20) Sep 27, 2018
NuGet.config Upgrade May 10, 2017
multihash fix: scripts, should work now.. sigh Sep 26, 2018

Multiformats.Hash (cs-multihash)

Travis CI AppVeyor NuGet Codecov

Multihash implementation in C# .NET Standard 1.6 compliant.

This is not a general purpose hashing library, but a library to encode/decode Multihashes which is a "container" describing what hash algorithm the digest is calculated with. The library also support calculating the digest, but that is not it's main purpose. If you're looking for a library that supports many algorithms and only want the raw digest, try BouncyCastle or the built-ins of the .net framework.

To be clear, when you calculate a digest (using Sum) with this library, you will get a byte array including a prefix with the properties of the algorithm used (type and length).

There's a CLI version that you can use to compute files or direct input from the command line. This CLI tool passes the sharness tests here.

Table of Contents


PM> Install-Package Multiformats.Hash

dotnet add package Multiformats.Hash


// decode a multihash formatted byte array
Multihash mh = Multihash.Decode(bytes);

// decode a multihash formatted string
Multihash mh = Multihash.Parse(str);
bool ok = Multihash.TryParse(str, out mh);

// encode a digest to multiformat byte array
byte[] bytes = Multihash.Encode(digest, HashType.SHA1);
byte[] bytes = Multihash.Encode<SHA1>(digest);

// calculate digest
Multihash mh = Multihash.Sum<SHA1>(bytes);

// verify
bool isValid = mh.Verify(bytes);

Supported hash algorithms

  • ID
  • MD4
  • MD5
  • SHA1
  • SHA2_256
  • SHA2_512
  • SHA3_224
  • SHA3_256
  • SHA3_384
  • SHA3_512
  • SHAKE_128
  • SHAKE_256
  • KECCAK_224
  • KECCAK_256
  • KECCAK_384
  • KECCAK_512
  • BLAKE2B-(bits) (8-512)
  • BLAKE2S-(bits) (8-256)
  • DBL_SHA2_256
  • MURMUR3_32/128
  • SKEIN256-(bits) (8-256)
  • SKEIN512-(bits) (8-512)
  • SKEIN1024-(bits) (8-1024)


Captain: @tabrath.


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.


MIT © 2017-2018 Trond Bråthen

You can’t perform that action at this time.