package main import ( "bytes" "crypto/rand" "encoding/base64" "fmt" "os" "slices" "golang.org/x/term" "roseh.moe/pkg/roseh.moe/internal/pwhash" ) func hashpw() error { fmt.Fprint(os.Stderr, "Enter password: ") password, err := term.ReadPassword(int(os.Stdin.Fd())) fmt.Fprintln(os.Stderr) if err != nil { return err } fmt.Fprint(os.Stderr, "Confirm password: ") pwConfirm, err := term.ReadPassword(int(os.Stdin.Fd())) fmt.Fprintln(os.Stderr) if err != nil { return err } if !bytes.Equal(password, pwConfirm) { return fmt.Errorf("passwords do not match") } salt := make([]byte, pwhash.SaltSize) rand.Read(salt) hash, err := pwhash.Hash(string(password), salt) if err != nil { return err } fmt.Printf("NotepadPassword:%q\n", base64.StdEncoding.EncodeToString(slices.Concat(hash, salt))) return nil } func main() { if err := hashpw(); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } }