Module: Crypto::GenericHash

Extended by:
FFI::Library, Sodium::Utils
Defined in:
lib/crypto/generic_hash.rb

Defined Under Namespace

Classes: State

Constant Summary collapse

PRIMITIVE =
primitive.freeze
BYTES_MIN =
bytes_min.freeze
BYTES_MAX =
bytes_max.freeze
BYTES =
bytes.freeze
KEYBYTES_MIN =
keybytes_min.freeze
KEYBYTES_MAX =
keybytes_max.freeze
KEYBYTES =
keybytes.freeze

Constants included from Sodium::Utils

Sodium::Utils::HEXY, Sodium::Utils::ZERO

Class Method Summary collapse

Methods included from Sodium::Utils

bin2hex, check_length, get_size, hex2bin, zeros

Class Method Details

.final(state, blake2b) ⇒ Object



87
88
89
90
91
92
93
# File 'lib/crypto/generic_hash.rb', line 87

def final(state, blake2b)
  if crypto_generichash_final(state, blake2b, blake2b.bytesize) == -1
    raise Sodium::CryptoError
  end

  blake2b
end

.generichash(message, hash_size = BYTES, key = nil) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/crypto/generic_hash.rb', line 47

def generichash(message, hash_size = BYTES, key = nil)
  if key
    key_len = get_size(key)
  else
    key_len = 0
  end

  blake2b = zeros(hash_size)
  key.readonly if key.is_a?(Sodium::SecretBuffer)
  if crypto_generichash(blake2b, hash_size, message, get_size(message), key, key_len) == -1
    raise Sodium::CryptoError
  end

  blake2b
ensure
  key.noaccess if key.is_a?(Sodium::SecretBuffer)
end

.init(key = nil, hash_size = BYTES) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/crypto/generic_hash.rb', line 65

def init(key = nil, hash_size = BYTES)
  if key
    key_len = get_size(key)
  else
    key_len = 0
  end

  state = State.new
  key.readonly if key.is_a?(Sodium::SecretBuffer)
  if crypto_generichash_init(state, key, key_len, hash_size) == -1
    raise Sodium::CryptoError
  end

  [state, zeros(hash_size)]
ensure
  key.noaccess if key.is_a?(Sodium::SecretBuffer)
end

.update(state, message) ⇒ Object



83
84
85
# File 'lib/crypto/generic_hash.rb', line 83

def update(state, message)
  crypto_generichash_update(state, message, get_size(message))
end