parent
55b7acbbb9
commit
f1a225b03b
|
@ -89,8 +89,45 @@ describe Sodium::Digest::Blake2b do
|
||||||
expect_raises ArgumentError do
|
expect_raises ArgumentError do
|
||||||
Sodium::Digest::Blake2b.new personal: Bytes.new(128)
|
Sodium::Digest::Blake2b.new personal: Bytes.new(128)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
d = Sodium::Digest::Blake2b.new
|
||||||
|
expect_raises ArgumentError do
|
||||||
|
d.hexfinal Bytes.new(1)
|
||||||
|
end
|
||||||
|
expect_raises ArgumentError do
|
||||||
|
d.hexfinal Bytes.new(256)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
pending "dups" do
|
it "can't final twice or update after final" do
|
||||||
|
d = Sodium::Digest::Blake2b.new
|
||||||
|
d.hexfinal
|
||||||
|
|
||||||
|
expect_raises Digest::FinalizedError do
|
||||||
|
d.hexfinal
|
||||||
|
end
|
||||||
|
|
||||||
|
expect_raises Digest::FinalizedError do
|
||||||
|
d.update Bytes.new(0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it "dups" do
|
||||||
|
data = "foo".to_slice
|
||||||
|
d1 = Sodium::Digest::Blake2b.new
|
||||||
|
d2 = d1.dup
|
||||||
|
d3 = d2.dup
|
||||||
|
|
||||||
|
d1.update data
|
||||||
|
h1 = d1.hexfinal
|
||||||
|
|
||||||
|
d2.update data
|
||||||
|
h2 = d2.hexfinal
|
||||||
|
|
||||||
|
d3.update data
|
||||||
|
h3 = d3.hexfinal
|
||||||
|
|
||||||
|
h1.should eq h2
|
||||||
|
h1.should eq h3
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
require "log"
|
||||||
require "spec"
|
require "spec"
|
||||||
|
|
||||||
# require "../src/sodium"
|
# require "../src/sodium"
|
||||||
|
|
|
@ -19,6 +19,8 @@ module Sodium::Digest
|
||||||
class Blake2b < ::Digest::Base
|
class Blake2b < ::Digest::Base
|
||||||
include Wipe
|
include Wipe
|
||||||
|
|
||||||
|
Log = ::Log.for self
|
||||||
|
|
||||||
# 32
|
# 32
|
||||||
KEY_SIZE = LibSodium.crypto_generichash_blake2b_keybytes.to_i
|
KEY_SIZE = LibSodium.crypto_generichash_blake2b_keybytes.to_i
|
||||||
# 16
|
# 16
|
||||||
|
@ -84,6 +86,18 @@ module Sodium::Digest
|
||||||
def hexfinal : String
|
def hexfinal : String
|
||||||
final.hexstring
|
final.hexstring
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def hexfinal(dst : Bytes) : Nil
|
||||||
|
dsize = digest_size
|
||||||
|
unless dst.bytesize == dsize * 2
|
||||||
|
raise ArgumentError.new("Incorrect dst size: #{dst.bytesize}, expected: #{dsize * 2}")
|
||||||
|
end
|
||||||
|
|
||||||
|
sary = uninitialized StaticArray(UInt8, 64)
|
||||||
|
tmp = sary.to_slice[0, dsize]
|
||||||
|
final tmp
|
||||||
|
tmp.hexstring dst
|
||||||
|
end
|
||||||
{% end %}
|
{% end %}
|
||||||
|
|
||||||
# Compatibility with Crystal <= 0.32
|
# Compatibility with Crystal <= 0.32
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
require "log"
|
||||||
require "random/secure"
|
require "random/secure"
|
||||||
require "./error"
|
require "./error"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue