class Argon2::Engine

def self.hash_argon2i_encode(password, salt, t_cost, m_cost)

def self.hash_argon2i_encode(password, salt, t_cost, m_cost)
  result = ''
  if salt.length != Constants::SALT_LEN
    raise ArgonHashFail.new("Invalid salt size") 
  end
  FFI::MemoryPointer.new(:char, 300) do |buffer|
    ret = Ext.argon2_wrap(buffer, password, salt, t_cost, (1<<m_cost), 1)
    raise ArgonHashFail.new(ERRORS[ret]) unless ret == 0
    result = buffer.read_string(300)
  end
  result.gsub("\0", '')
end