@@ -46,6 +46,47 @@ func TestRedactPassword(t *testing.T) {
46
46
})
47
47
}
48
48
}
49
+
50
+ func TestGenerateHash (t * testing.T ) {
51
+
52
+ tests := []struct {
53
+ name string
54
+ seed []byte
55
+ password string
56
+ out string
57
+ }{
58
+ {
59
+ name : "first password" ,
60
+ seed : []byte {1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },
61
+ password : "password" ,
62
+ out : "c7f42603" ,
63
+ },
64
+ {
65
+ name : "same seed and different password" ,
66
+ seed : []byte {1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },
67
+ password : "otherpassword" ,
68
+ out : "1413a414" ,
69
+ },
70
+ {
71
+ name : "same password but different seed" ,
72
+ seed : []byte {0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },
73
+ password : "password" ,
74
+ out : "4b124f90" ,
75
+ },
76
+ }
77
+
78
+ for _ , tt := range tests {
79
+ t .Run (tt .name , func (t * testing.T ) {
80
+ h := generateHash (tt .seed , tt .password )
81
+
82
+ if ! reflect .DeepEqual (tt .out , h ) {
83
+ t .Fatalf ("got %s, expected %s" , h , tt .out )
84
+ }
85
+
86
+ })
87
+ }
88
+ }
89
+
49
90
func TestReadCsv (t * testing.T ) {
50
91
51
92
tests := []struct {
@@ -149,29 +190,47 @@ func TestShowTable(t *testing.T) {
149
190
out string
150
191
}{
151
192
{
152
- name : "One row" ,
153
- in : [][]string {{"url1" , "user1" , "p******1" , "1" , "5.00" , "instant" }},
154
- out : ` URL | USERNAME | PASSWORD | SCORE (0-4) | ESTIMATED TIME TO CRACK
155
- -------+----------+----------+------------------+--------------------------
156
- url1 | user1 | p******1 | [101m 1 - Bad [0m | instant
193
+ name : "Single row" ,
194
+ in : [][]string {{"url1" , "user1" , "p******1" , "1" , "5.00" , "instant" , "" }},
195
+ out : ` URL | USERNAME | PASSWORD | SCORE (0-4) | ESTIMATED TIME TO CRACK | ALREADY USED
196
+ -------+----------+----------+------------------+-------------------------+-------------- -
197
+ url1 | user1 | p******1 | [101m 1 - Bad [0m | instant |
157
198
` ,
158
199
},
159
200
{
160
- name : "Five rows with different colors " ,
201
+ name : "Multiple rows no duplicates " ,
161
202
in : [][]string {
162
- {"url0" , "user0" , "p******0" , "0" , "5.00" , "instant" },
163
- {"url1" , "user1" , "p******1" , "1" , "5.00" , "instant" },
164
- {"url2" , "user2" , "p******2" , "2" , "5.00" , "instant" },
165
- {"url3" , "user3" , "p******3" , "3" , "5.00" , "instant" },
166
- {"url4" , "user4" , "p******4" , "4" , "5.00" , "instant" },
203
+ {"url0" , "user0" , "p******0" , "0" , "5.00" , "instant" , "" },
204
+ {"url1" , "user1" , "p******1" , "1" , "5.00" , "instant" , "" },
205
+ {"url2" , "user2" , "p******2" , "2" , "5.00" , "instant" , "" },
206
+ {"url3" , "user3" , "p******3" , "3" , "5.00" , "instant" , "" },
207
+ {"url4" , "user4" , "p******4" , "4" , "5.00" , "instant" , "" },
167
208
},
168
- out : ` URL | USERNAME | PASSWORD | SCORE (0-4) | ESTIMATED TIME TO CRACK
169
- -------+----------+----------+------------------+--------------------------
170
- url0 | user0 | p******0 | [41m 0 - Really bad [0m | instant
171
- url1 | user1 | p******1 | [101m 1 - Bad [0m | instant
172
- url2 | user2 | p******2 | [103m 2 - Weak [0m | instant
173
- url3 | user3 | p******3 | [102m 3 - Good [0m | instant
174
- url4 | user4 | p******4 | [42m 4 - Strong [0m | instant
209
+ out : ` URL | USERNAME | PASSWORD | SCORE (0-4) | ESTIMATED TIME TO CRACK | ALREADY USED
210
+ -------+----------+----------+------------------+-------------------------+---------------
211
+ url0 | user0 | p******0 | [41m 0 - Really bad [0m | instant |
212
+ url1 | user1 | p******1 | [101m 1 - Bad [0m | instant |
213
+ url2 | user2 | p******2 | [103m 2 - Weak [0m | instant |
214
+ url3 | user3 | p******3 | [102m 3 - Good [0m | instant |
215
+ url4 | user4 | p******4 | [42m 4 - Strong [0m | instant |
216
+ ` ,
217
+ },
218
+ {
219
+ name : "Multiple rows with duplicates" ,
220
+ in : [][]string {
221
+ {"url0" , "user0" , "p******0" , "0" , "5.00" , "instant" , "aaaaaaaa" },
222
+ {"url1" , "user1" , "p******1" , "1" , "5.00" , "instant" , "bbbbbbbb" },
223
+ {"url2" , "user2" , "p******0" , "0" , "5.00" , "instant" , "aaaaaaaa" },
224
+ {"url3" , "user3" , "p******3" , "3" , "5.00" , "instant" , "" },
225
+ {"url4" , "user4" , "p******1" , "1" , "5.00" , "instant" , "bbbbbbbb" },
226
+ },
227
+ out : ` URL | USERNAME | PASSWORD | SCORE (0-4) | ESTIMATED TIME TO CRACK | ALREADY USED
228
+ -------+----------+----------+------------------+-------------------------+---------------
229
+ url0 | user0 | p******0 | [41m 0 - Really bad [0m | instant | aaaaaaaa
230
+ url1 | user1 | p******1 | [101m 1 - Bad [0m | instant | bbbbbbbb
231
+ url2 | user2 | p******0 | [41m 0 - Really bad [0m | instant | aaaaaaaa
232
+ url3 | user3 | p******3 | [102m 3 - Good [0m | instant |
233
+ url4 | user4 | p******1 | [101m 1 - Bad [0m | instant | bbbbbbbb
175
234
` ,
176
235
},
177
236
}
@@ -209,6 +268,7 @@ func TestShowStats(t *testing.T) {
209
268
------------------------+--------
210
269
Password checked | 1
211
270
Words in dictionaries | 59824
271
+ Duplicated passwords | 0
212
272
Really bad passwords | 0
213
273
Bad passwords | 0
214
274
Weak passwords | 0
@@ -222,12 +282,13 @@ func TestShowStats(t *testing.T) {
222
282
TotCount : 9 ,
223
283
WordsCount : 59824 ,
224
284
ScoreCount : []int {3 , 1 , 2 , 1 , 2 },
225
- DuplicateCount : 0 ,
285
+ DuplicateCount : 2 ,
226
286
},
227
287
out : ` DESCRIPTION | COUNT
228
288
------------------------+--------
229
289
Password checked | 9
230
290
Words in dictionaries | 59824
291
+ Duplicated passwords | 2
231
292
Really bad passwords | 3
232
293
Bad passwords | 1
233
294
Weak passwords | 2
0 commit comments