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)
if encoded.first.nil?
return [nil, encoded.last]
else
return [encoded.first, ""]
end
end
|