-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathargo2_test.go
61 lines (51 loc) · 2.18 KB
/
argo2_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package password
import (
"testing"
"github.com/stretchr/testify/assert"
)
func testArgon2idBasic(t *testing.T, plain Plaintext, plaintext string) {
password, err := plain.Password()
assert.NoError(t, err)
t.Logf("password: %s", password)
verifier := NewArgon2idPassword(password)
assert.NoError(t, verifier.Verify(plaintext))
assert.Error(t, verifier.Verify(plaintext+"1"))
}
func TestArgon2idPassword(t *testing.T) {
plain, err := NewArgon2idPlaintext("123456")
assert.NoError(t, err)
testArgon2idBasic(t, plain, "123456")
// incorrect password hash
verifier := NewArgon2idPassword("$argon2id$19$2$65536$1$32$z8nM6bD5jWHGg4/qyPprmA$trqqulUDAjWZ550jfYBiq/0LsZXPcrMxlqBbM1TKhBx")
assert.Error(t, verifier.Verify("123456"))
var errorCases = []struct {
password string
err error
}{
{"$argon$19$2$65536$1$32$z8nM6bD5jWHGg4/qyPprmA$trqqulUDAjWZ550jfYBiq/0LsZXPcrMxlqBbM1TKhBc", ErrNotArgon2idPassword},
{"$argon2id$18$2$65536$1$32$z8nM6bD5jWHGg4/qyPprmA$trqqulUDAjWZ550jfYBiq/0LsZXPcrMxlqBbM1TKhBc", ErrUnsupportedAlgoVersion},
{"$argon2id$19$65536$1$32$z8nM6bD5jWHGg4/qyPprmA$trqqulUDAjWZ550jfYBiq/0LsZXPcrMxlqBbM1TKhBc", ErrMalformedPassword},
}
for i, errorCase := range errorCases {
verifier := NewArgon2idPassword(errorCase.password)
assert.ErrorIs(t, verifier.Verify("123456"), errorCase.err, "case %d", i)
}
}
func TestArgon2idPassword_Options(t *testing.T) {
mySalt, err := RandomSalt(32)
assert.NoError(t, err)
plain, err := NewArgon2idPlaintext("apple123", Argon2Time(1), Argon2Memory(32*1024), Argon2Parallelism(2), Argon2KeyLen(64), Argon2Salt(mySalt))
assert.NoError(t, err)
assert.Equal(t, plain.(*Argon2Password).Time, uint32(1))
assert.Equal(t, plain.(*Argon2Password).Memory, uint32(32*1024))
assert.Equal(t, plain.(*Argon2Password).Parallelism, uint8(2))
assert.Equal(t, plain.(*Argon2Password).KeyLen, uint32(64))
assert.Equal(t, plain.(*Argon2Password).Salt, mySalt)
testArgon2idBasic(t, plain, "apple123")
}
func TestArgon2idPassword_Options_NilSalt(t *testing.T) {
plain, err := NewArgon2idPlaintext("banana123+-*/", Argon2Salt(nil))
assert.NoError(t, err)
assert.Nil(t, plain.(*Argon2Password).Salt)
testArgon2idBasic(t, plain, "banana123+-*/")
}