diff --git a/pwhash/argon2.go b/pwhash/argon2.go index 09294107d7cd972c0a087946144f464944128a5b..fef03caa0c001faace0d16123b23e53e5f0626ec 100644 --- a/pwhash/argon2.go +++ b/pwhash/argon2.go @@ -6,6 +6,7 @@ import ( "encoding/hex" "errors" "fmt" + "log" "strconv" "strings" @@ -54,6 +55,16 @@ func NewArgon2WithParams(time, mem uint32, threads uint8) PasswordHash { return newArgon2PasswordHash(time, mem, threads, &a2Codec{}) } +// NewArgon2Std returns an Argon2i-based PasswordHash that conforms +// to the reference implementation encoding, using default parameters. +func NewArgon2Std() PasswordHash { + return NewArgon2StdWithParams( + defaultArgon2Params.Time, + defaultArgon2Params.Memory, + defaultArgon2Params.Threads, + ) +} + // NewArgon2StdWithParams returns an Argon2i-based PasswordHash using // the specified parameters for time, memory, and number of // threads. This will use the string encoding ("$argon2$") documented @@ -204,5 +215,7 @@ func (*argon2StdCodec) decodeArgon2Hash(s string) (params argon2Params, salt []b return } dk, err = base64.RawStdEncoding.DecodeString(parts[3]) + + log.Printf("params: %+v", params) return } diff --git a/pwhash/password.go b/pwhash/password.go index 86412954153eed8b988c59d01fb3a19e1b9e071a..07b093d412991e5bb07f78e9e400b94aad6ae60a 100644 --- a/pwhash/password.go +++ b/pwhash/password.go @@ -49,11 +49,12 @@ func getRandomBytes(n int) []byte { // A registry of default handlers for decoding passwords. var prefixRegistry = map[string]PasswordHash{ - "$1$": NewSystemCrypt(), - "$5$": NewSystemCrypt(), - "$6$": NewSystemCrypt(), - "$s$": NewScrypt(), - "$a2$": NewArgon2(), + "$1$": NewSystemCrypt(), + "$5$": NewSystemCrypt(), + "$6$": NewSystemCrypt(), + "$s$": NewScrypt(), + "$a2$": NewArgon2(), + "$argon2i$": NewArgon2Std(), } // ComparePassword returns true if the given password matches the diff --git a/pwhash/password_test.go b/pwhash/password_test.go index c6d8d7286f9e625416412dcfaf05b6f830c537e2..e1cbfdeffcb7143d65b0baf9abbb0714a8035a91 100644 --- a/pwhash/password_test.go +++ b/pwhash/password_test.go @@ -65,6 +65,14 @@ func testImpl(t *testing.T, h PasswordHash) { } } +func TestStandardArgon2Password(t *testing.T) { + enc := "$argon2i$v=19$m=32768,t=4,p=1$DG0B56zlrrx+VMVaM6wvsw$8iV+HwTKmofjrb+q9I2zZGQnGXzXtiIXv8VdHdvbbX8" + pw := "idontmindbirds" + if !ComparePassword(enc, pw) { + t.Fatal("comparison failed") + } +} + func BenchmarkArgon2(b *testing.B) { var testParams []argon2Params for iTime := 1; iTime <= 5; iTime++ {