login

local lud = require "ludweb"

local function get_pass(prompt)
    io.write(prompt)
    os.execute("stty -echo")
    local pass = io.read()
    os.execute("stty echo")
    io.write("\n")
    return pass
end

local function get_salt()
    return lud.crypt.urandom(32)
end

local function hash_pass(pass, salt)
    return lud.crypt.pbkdf2(pass, salt, 10000, 64)
end

if arg[0] ~= "hash.lua" then
    return {get_salt=get_salt, hash_pass=hash_pass}
end

local pass, pass2

repeat
    pass  = get_pass("password: ")
    pass2 = get_pass("repeat  : ")
until pass2 == pass

local salt = get_salt()
local hash = hash_pass(pass, salt)

local salt_b64 = lud.crypt.b64_enc(salt)
local hash_b64 = lud.crypt.b64_enc(hash)

print("salt: " .. salt_b64)
print("hash: " .. hash_b64)