Home

Awesome

This project is no longer maintained and has been archived.

ruby-multihash

Travis CI codecov.io

A simple Multihash implementation for ruby.

A multihash is a digest with an embedded hash function code (and length) ('cause you never know). It was developed primarily for use with IPFS, but is not specific to it.

Install

Add this line to your application's Gemfile:

gem 'multihashes'

And then execute:

$ bundle

Or install it yourself as:

$ gem install multihashes

Usage

This is a low-level library. Bring your own digest. A binary digest goes in, a binary digest goes out. To compute a sha256 multihash that would work nicely with IPFS:

require 'multihashes'
require 'digest'

digest = Digest::SHA256.digest 'Dade Murphy will never figure this one out'
multihash_binary_string = Multihashes.encode digest, 'sha2-256'

multihash_binary_string.unpack('H*').first # hex: "1220142711d38ca7a33c521841..."

out = Multihashes.decode multihash_binary_string
# => {:code=>18, :hash_function=>"sha2-256", :length=>32, :digest=>"\x14'\x11\xD3\x8C\xA7\xA3<R\x18Ao\x8F\xFC\xC6FH\xCAF\x16\xA6%\xB5\xE0\xA0\xAB=\xA1\x91\x1D]z"}

Hash function names (latest is here, current multicodec is here)

codenamecomment
0x00identityraw binary
0x11sha1
0x12sha2-256
0x13sha2-512
0x14sha3-512
0x15sha3-384
0x16sha3-256
0x17sha3-224
0x18shake-128
0x19shake-256
0x1akeccak-224keccak has variable output length. The number specifies the core length
0x1bkeccak-256
0x1ckeccak-384
0x1dkeccak-512
0x22murmur3-128
0x23murmur3-32
0x56dbl-sha2-256
0xd4md4
0xd4md5
0xd6bmtBinary Merkle Tree Hash
0x1100x11
0xb201blake2b-8blake2b consists of 64 output lengths that give different hashes
0xb202blake2b-16
0xb203blake2b-24
...
0xb23fblake2b-504
0xb240blake2b-512
0xb241blake2s-8blake2s consists of 32 output lengths that give different hashes
0xb242blake2s-16
0xb243blake2s-24
...
0xb25fblake2s-248
0xb260blake2s-256
0xb301skein256-8skein256 consists of 32 output lengths that give different hashes
0xb302skein256-16
0xb303skein256-24
...
0xb31fskein256-248
0xb320skein256-256
0xb321skein512-8skein256 consists of 32 output lengths that give different hashes
0xb322skein512-16
0xb323skein512-24
...
0xb35fskein512-504
0xb360skein512-512
0xb361skein1024-8skein1024 consists of 128 output lengths that give different hashes
0xb362skein1024-16
0xb363skein1024-24
...
0xb3dfskein1024-1016
0xb3e0skein1024-1024

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake test to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install.

Maintainers

@kyledrake

Contribute

Bug reports and pull requests are welcome on GitHub at https://github.com/multiformats/ruby-multihash.

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

The gem is available as open source under the terms of the MIT License © 2015 Kyle Drake.