MCPcopy
hub / github.com/smallstep/cli / TestCompare

Function TestCompare

internal/kdf/kdf_test.go:50–101  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

48}
49
50func TestCompare(t *testing.T) {
51 tests := []struct {
52 phc string
53 err string
54 }{
55 // No errors
56 {"$scrypt$ln=15,r=8,p=1$3ZHBQhuxmarEmhzCdQ0JRQ$FzNGtwDLay5mHJIfc+L8qzOQrOG8RhR865Dr8GfyEK4", ""},
57 {"$2a$10$73EPXSX148BO6fNUh6OEJee2.BbL2A.UhEPmI3.adgzacMULpIoum", ""},
58 {"$argon2i$v=19$m=32768,t=3,p=4$kAaLk++2eObkl3QhDhabKA$IiL7+VDQV/YbDQMREkAhsWjX7GQy1ks0QiJ0YfkeA+w", ""},
59 {"$argon2id$v=19$m=65536,t=1,p=4$mm6faLHx88uYB5m+04udUg$9deA/VOr2HEOb5JSZ0E6t+SVzV1iPpOuyr+jUhcPAWY", ""},
60 // invalid hash
61 {"", "error decoding hash: cannot decode password hash"},
62 {"foo", "error decoding hash: cannot decode password hash"},
63 {"$bar$mm6faLHx88uYB5m+04udUg$9deA/VOr2HEOb5JSZ0E6t+SVzV1iPpOuyr+jUhcPAWY", "invalid or unsupported hash method with id 'bar'"},
64 // params
65 {"$scrypt$ln=0,r=8,p=1$3ZHBQhuxmarEmhzCdQ0JRQ$FzNGtwDLay5mHJIfc+L8qzOQrOG8RhR865Dr8GfyEK4", "invalid scrypt parameter ln=0"},
66 {"$scrypt$ln=15,r=0,p=1$3ZHBQhuxmarEmhzCdQ0JRQ$FzNGtwDLay5mHJIfc+L8qzOQrOG8RhR865Dr8GfyEK4", "invalid scrypt parameter r=0"},
67 {"$scrypt$ln=15,r=8,p=0$3ZHBQhuxmarEmhzCdQ0JRQ$FzNGtwDLay5mHJIfc+L8qzOQrOG8RhR865Dr8GfyEK4", "invalid scrypt parameter p=0"},
68 {"$scrypt$ln=21,r=8,p=1$3ZHBQhuxmarEmhzCdQ0JRQ$FzNGtwDLay5mHJIfc+L8qzOQrOG8RhR865Dr8GfyEK4", "invalid scrypt parameter ln=21"},
69 {"$scrypt$ln=16,r=33,p=1$3ZHBQhuxmarEmhzCdQ0JRQ$FzNGtwDLay5mHJIfc+L8qzOQrOG8RhR865Dr8GfyEK4", "invalid scrypt parameter r=33"},
70 {"$scrypt$ln=16,r=8,p=33$3ZHBQhuxmarEmhzCdQ0JRQ$FzNGtwDLay5mHJIfc+L8qzOQrOG8RhR865Dr8GfyEK4", "invalid scrypt parameter p=33"},
71 {"$scrypt$ln=a,r=8,p=1$3ZHBQhuxmarEmhzCdQ0JRQ$FzNGtwDLay5mHJIfc+L8qzOQrOG8RhR865Dr8GfyEK4", "invalid scrypt parameter ln=a"},
72 {"$scrypt$ln=16,r=b,p=1$3ZHBQhuxmarEmhzCdQ0JRQ$FzNGtwDLay5mHJIfc+L8qzOQrOG8RhR865Dr8GfyEK4", "invalid scrypt parameter r=b"},
73 {"$scrypt$ln=16,r=8,p=c$3ZHBQhuxmarEmhzCdQ0JRQ$FzNGtwDLay5mHJIfc+L8qzOQrOG8RhR865Dr8GfyEK4", "invalid scrypt parameter p=c"},
74 // version
75 {"$argon2i$v=10$m=32768,t=3,p=4$kAaLk++2eObkl3QhDhabKA$IiL7+VDQV/YbDQMREkAhsWjX7GQy1ks0QiJ0YfkeA+w", "unsupported argon2 version '10'"},
76 {"$argon2id$v=10$m=65536,t=1,p=4$mm6faLHx88uYB5m+04udUg$9deA/VOr2HEOb5JSZ0E6t+SVzV1iPpOuyr+jUhcPAWY", "unsupported argon2 version '10'"},
77 // params
78 {"$argon2i$v=19$m=0,t=3,p=4$kAaLk++2eObkl3QhDhabKA$IiL7+VDQV/YbDQMREkAhsWjX7GQy1ks0QiJ0YfkeA+w", "invalid argon2 parameter m=0"},
79 {"$argon2id$v=19$m=32768,t=0,p=4$kAaLk++2eObkl3QhDhabKA$IiL7+VDQV/YbDQMREkAhsWjX7GQy1ks0QiJ0YfkeA+w", "invalid argon2 parameter t=0"},
80 {"$argon2i$v=19$m=32768,t=3,p=0$kAaLk++2eObkl3QhDhabKA$IiL7+VDQV/YbDQMREkAhsWjX7GQy1ks0QiJ0YfkeA+w", "invalid argon2 parameter p=0"},
81 {"$argon2id$v=19$m=16777217,t=3,p=4$kAaLk++2eObkl3QhDhabKA$IiL7+VDQV/YbDQMREkAhsWjX7GQy1ks0QiJ0YfkeA+w", "invalid argon2 parameter m=16777217"},
82 {"$argon2id$v=19$m=65536,t=129,p=1$kAaLk++2eObkl3QhDhabKA$IiL7+VDQV/YbDQMREkAhsWjX7GQy1ks0QiJ0YfkeA+w", "invalid argon2 parameter t=129"},
83 {"$argon2id$v=19$m=65536,t=1,p=33$kAaLk++2eObkl3QhDhabKA$IiL7+VDQV/YbDQMREkAhsWjX7GQy1ks0QiJ0YfkeA+w", "invalid argon2 parameter p=33"},
84 {"$argon2i$v=19$m=a,t=3,p=4$kAaLk++2eObkl3QhDhabKA$IiL7+VDQV/YbDQMREkAhsWjX7GQy1ks0QiJ0YfkeA+w", "invalid argon2 parameter m=a"},
85 {"$argon2i$v=19$m=32768,t=b,p=4$kAaLk++2eObkl3QhDhabKA$IiL7+VDQV/YbDQMREkAhsWjX7GQy1ks0QiJ0YfkeA+w", "invalid argon2 parameter t=b"},
86 {"$argon2i$v=19$m=32768,t=3,p=c$kAaLk++2eObkl3QhDhabKA$IiL7+VDQV/YbDQMREkAhsWjX7GQy1ks0QiJ0YfkeA+w", "invalid argon2 parameter p=c"},
87 {"$argon2id$v=19$m=a,t=1,p=4$mm6faLHx88uYB5m+04udUg$9deA/VOr2HEOb5JSZ0E6t+SVzV1iPpOuyr+jUhcPAWY", "invalid argon2 parameter m=a"},
88 {"$argon2id$v=19$m=65536,t=b,p=4$mm6faLHx88uYB5m+04udUg$9deA/VOr2HEOb5JSZ0E6t+SVzV1iPpOuyr+jUhcPAWY", "invalid argon2 parameter t=b"},
89 {"$argon2id$v=19$m=65536,t=1,p=c$mm6faLHx88uYB5m+04udUg$9deA/VOr2HEOb5JSZ0E6t+SVzV1iPpOuyr+jUhcPAWY", "invalid argon2 parameter p=c"},
90 }
91
92 for i, tc := range tests {
93 ok, err := CompareString("password", tc.phc)
94 assert.False(t, ok, tc.phc)
95 if tc.err == "" {
96 assert.NoError(t, err, i, err)
97 } else if assert.Error(t, err) {
98 assert.Equals(t, tc.err, err.Error(), i, tc.err, err.Error())
99 }
100 }
101}
102
103func TestVectors(t *testing.T) {
104 tests := []struct {

Callers

nothing calls this directly

Calls 2

CompareStringFunction · 0.85
ErrorMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…