Module: Multihashes

Defined in:
lib/multihashes.rb,
lib/multihashes/version.rb

Defined Under Namespace

Classes: DigestLengthError, HashFunctionNotImplemented

Constant Summary collapse

TABLE =
{
  0xd5 => 'md5',
  0x11 => 'sha1',
  0x12 => 'sha2-256',
  0x13 => 'sha2-512',
  0x14 => 'sha3',
  0x40 => 'blake2b',
  0x41 => 'blake2s'
}
VERSION =
"0.1.3"

Class Method Summary collapse

Class Method Details

.decode(multihash) ⇒ Object



25
26
27
28
29
30
31
32
33
# File 'lib/multihashes.rb', line 25

def self.decode(multihash)
  integer, length, digest = multihash.unpack('CCA*')

  if length != digest.bytesize
    raise DigestLengthError, 'digest did not match expected multihash length'
  end

  {code: integer, hash_function: TABLE[integer], length: length, digest: digest}
end

.encode(digest, hash_function) ⇒ Object



18
19
20
21
22
23
# File 'lib/multihashes.rb', line 18

def self.encode(digest, hash_function)
  length = digest.bytesize
  key = TABLE.key hash_function
  raise HashFunctionNotImplemented, 'unknown hash function code' if key.nil?
  [TABLE.key(hash_function), length, digest].pack("CCA#{length}")
end