class RbNaCl::PasswordHash::Argon2

def digest(password, salt, algo = nil)

Returns:
  • (String) - scrypt digest of the string as raw bytes

Parameters:
  • digest (Symbol) -- algorithm to use (may be :argon2i or :argon2id)
  • salt (String) -- to make the digest unique
  • password (String) -- to be hashed
def digest(password, salt, algo = nil)
  raise ArgumentError, "digest_size is required" unless @digest_size
  digest = Util.zeros(@digest_size)
  salt   = Util.check_string(salt, SALTBYTES, "salt")
  if algo.nil?
    algorithm = ALG_DEFAULT
  elsif algo == :argon2i
    algorithm = ALG_ARGON2I13
  elsif algo == :argon2id && Sodium::Version::ARGON2ID_SUPPORTED
    algorithm = ALG_ARGON2ID13
  else
    raise ArgumentError, "digest algorithm is not supported"
  end
  status = self.class.pwhash(
    digest, @digest_size,
    password, password.bytesize, salt,
    @opslimit, @memlimit, algorithm
  )
  raise CryptoError, ARGON_ERROR_CODES[status] if status.nonzero?
  digest
end