Module: Multihashes

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

Defined Under Namespace

Classes: DigestLengthError, HashFunctionNotImplemented

Constant Summary collapse

TABLE =
Multicodecs.where(tag: 'multihash')
.map { |codec| [codec.code, codec.name] }
.to_h
VERSION =
"0.2.0"

Class Method Summary collapse

Class Method Details

.decode(multihash) ⇒ Object



20
21
22
23
24
25
26
27
28
# File 'lib/multihashes.rb', line 20

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



13
14
15
16
17
18
# File 'lib/multihashes.rb', line 13

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