Method: Oydid.multi_hash

Defined in:
lib/oydid/basic.rb

.multi_hash(message, options) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/oydid/basic.rb', line 36

def self.multi_hash(message, options)
    method = options[:digest] || DEFAULT_DIGEST
    case method.to_s
    when "sha2-256"
        digest = RbNaCl::Hash.sha256(message)
    when "sha2-512"
        digest = RbNaCl::Hash.sha512(message)
    when "sha3-224", "sha3-256", "sha3-384", "sha3-512"
        digest = OpenSSL::Digest.digest(method, message)
    when "blake2b-16"
        digest = RbNaCl::Hash.blake2b(message, {digest_size: 16})
    when "blake2b-32"
        digest = RbNaCl::Hash.blake2b(message, {digest_size: 32})
    when "blake2b-64"
        digest = RbNaCl::Hash.blake2b(message)
    else
        return [nil, "unsupported digest: '" + method.to_s + "'"]
    end
    code = Multicodecs[method].code
    length = digest.bytesize
    encoded = multi_encode([code, length, digest].pack("CCa#{length}"), options)
    # encoded = multi_encode(Multihashes.encode(digest, method.to_s), options)
    if encoded.first.nil?
        return [nil, encoded.last]
    else
        return [encoded.first, ""]
    end
end