package main

import (
	"fmt"

	"golang.org/x/crypto/argon2"
)

type argon2idStruct struct {}

func newArgon2id() *argon2idStruct {
	argon2id := &argon2idStruct{}
	return argon2id
}

func (argon2id *argon2idStruct) Id() string {
	return "argon2id.65536.3.1.32"
}

func (*argon2idStruct) SaltSize() int {
	return 16
}

func (argon2id *argon2idStruct) Hash(password string, salt []byte) ([]byte, error) {
	key := argon2.IDKey([]byte(password), salt, 3, 65536, 1, 32)
	return key, nil
}