Skip to content

Commit 842fc6e

Browse files
committed
Split some test for better concurrency
1 parent 9011f18 commit 842fc6e

18 files changed

Lines changed: 1224 additions & 1075 deletions

test/bcrypt/bcrypt_2a_test.dart

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
// Copyright (c) 2023, Sudipto Chandra
2+
// All rights reserved. Check LICENSE file for details.
3+
4+
import 'dart:convert';
5+
6+
import 'package:hashlib/hashlib.dart';
7+
import 'package:test/test.dart';
8+
9+
void main() {
10+
group('bcrypt version 2a', () {
11+
// http://cvsweb.openwall.com/cgi/cvsweb.cgi/Owl/packages/glibc/crypt_blowfish/wrapper.c?rev=HEAD
12+
test(r"$2a$06$DCq7YPn5Rq63x1Lad4cll.TV4S6ytwfsfvkgY8jIucDrjc8deX1s.", () {
13+
const password = r"";
14+
const encoded =
15+
r"$2a$06$DCq7YPn5Rq63x1Lad4cll.TV4S6ytwfsfvkgY8jIucDrjc8deX1s.";
16+
var output = bcrypt(utf8.encode(password), encoded);
17+
expect(output, equals(encoded));
18+
});
19+
20+
// https://stackoverflow.com/a/12761326/774398
21+
test(r"$2a$10$.TtQJ4Jr6isd4Hp.mVfZeuh6Gws4rOQ/vdBczhDx.19NFK0Y84Dle", () {
22+
const password = r"ππππππππ";
23+
const encoded =
24+
r"$2a$10$.TtQJ4Jr6isd4Hp.mVfZeuh6Gws4rOQ/vdBczhDx.19NFK0Y84Dle";
25+
var output = bcrypt(utf8.encode(password), encoded);
26+
expect(output, equals(encoded));
27+
});
28+
29+
// https://bitbucket.org/vadim/bcrypt.net/src/464c41416dc9/BCrypt.Net.Test/TestBCrypt.cs?fileviewer=file-view-default
30+
test(r"$2a$08$HqWuK6/Ng6sg9gQzbLrgb.Tl.ZHfXLhvt/SgVyWhQqgqcZ7ZuUtye", () {
31+
const password = r"";
32+
const encoded =
33+
r"$2a$08$HqWuK6/Ng6sg9gQzbLrgb.Tl.ZHfXLhvt/SgVyWhQqgqcZ7ZuUtye";
34+
var output = bcrypt(utf8.encode(password), encoded);
35+
expect(output, equals(encoded));
36+
});
37+
test(r"$2a$06$m0CrhHm10qJ3lXRY.5zDGO3rS2KdeeWLuGmsfGlMfOxih58VYVfxe", () {
38+
const password = r"a";
39+
const encoded =
40+
r"$2a$06$m0CrhHm10qJ3lXRY.5zDGO3rS2KdeeWLuGmsfGlMfOxih58VYVfxe";
41+
var output = bcrypt(utf8.encode(password), encoded);
42+
expect(output, equals(encoded));
43+
});
44+
test(r"$2a$06$If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8.yx.jNN1ILEf7h0i", () {
45+
const password = r"abc";
46+
const encoded =
47+
r"$2a$06$If6bvum7DFjUnE9p2uDeDu0YHzrHM6tf.iqN8.yx.jNN1ILEf7h0i";
48+
var output = bcrypt(utf8.encode(password), encoded);
49+
expect(output, equals(encoded));
50+
});
51+
test(r"$2a$06$.rCVZVOThsIa97pEDOxvGuRRgzG64bvtJ0938xuqzv18d3ZpQhstC", () {
52+
const password = r"abcdefghijklmnopqrstuvwxyz";
53+
const encoded =
54+
r"$2a$06$.rCVZVOThsIa97pEDOxvGuRRgzG64bvtJ0938xuqzv18d3ZpQhstC";
55+
var output = bcrypt(utf8.encode(password), encoded);
56+
expect(output, equals(encoded));
57+
});
58+
test(r"$2a$06$fPIsBO8qRqkjj273rfaOI.HtSV9jLDpTbZn782DC6/t7qT67P6FfO", () {
59+
const password = r"~!@#$%^&*() ~!@#$%^&*()PNBFRD";
60+
const encoded =
61+
r"$2a$06$fPIsBO8qRqkjj273rfaOI.HtSV9jLDpTbZn782DC6/t7qT67P6FfO";
62+
var output = bcrypt(utf8.encode(password), encoded);
63+
expect(output, equals(encoded));
64+
});
65+
66+
// https://github.com/pyca/bcrypt/blob/main/tests/test_bcrypt.py
67+
test(r"$2a$05$CCCCCCCCCCCCCCCCCCCCC.E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW", () {
68+
var password = "U*U";
69+
var encoded =
70+
r"$2a$05$CCCCCCCCCCCCCCCCCCCCC.E5YPO9kmyuRGyh0XouQYb4YMJKvyOeW";
71+
var output = bcrypt(utf8.encode(password), encoded);
72+
expect(output, equals(encoded));
73+
});
74+
75+
test(r"$2a$05$CCCCCCCCCCCCCCCCCCCCC.VGOzA784oUp/Z0DY336zx7pLYAy0lwK", () {
76+
var password = "U*U*";
77+
var encoded =
78+
r"$2a$05$CCCCCCCCCCCCCCCCCCCCC.VGOzA784oUp/Z0DY336zx7pLYAy0lwK";
79+
var output = bcrypt(utf8.encode(password), encoded);
80+
expect(output, equals(encoded));
81+
});
82+
83+
test(r"$2a$05$XXXXXXXXXXXXXXXXXXXXXOAcXxm9kjPGEMsLznoKqmqw7tc8WCx4a", () {
84+
var password = "U*U*U";
85+
var encoded =
86+
r"$2a$05$XXXXXXXXXXXXXXXXXXXXXOAcXxm9kjPGEMsLznoKqmqw7tc8WCx4a";
87+
var output = bcrypt(utf8.encode(password), encoded);
88+
expect(output, equals(encoded));
89+
});
90+
91+
test(r"$2a$05$abcdefghijklmnopqrstuu5s2v8.iXieOjg/.AySBTTZIIVFJeBui", () {
92+
var password = "0123456789abcdefghijklmnopqrstuvwxyz"
93+
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
94+
"chars after 72 are ignored";
95+
var encoded =
96+
r"$2a$05$abcdefghijklmnopqrstuu5s2v8.iXieOjg/.AySBTTZIIVFJeBui";
97+
var output = bcrypt(utf8.encode(password), encoded);
98+
expect(output, equals(encoded));
99+
});
100+
101+
test(r"$2a$05$/OK.fbVrR/bpIqNJ5ianF.swQOIzjOiJ9GHEPuhEkvqrUyvWhEMx6", () {
102+
var password = "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
103+
"\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
104+
"\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
105+
"\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
106+
"\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
107+
"\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa"
108+
"chars after 72 are ignored as usual";
109+
var encoded =
110+
r"$2a$05$/OK.fbVrR/bpIqNJ5ianF.swQOIzjOiJ9GHEPuhEkvqrUyvWhEMx6";
111+
var output = bcrypt(password.codeUnits, encoded);
112+
expect(output, equals(encoded));
113+
});
114+
115+
test(r"$2a$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq", () {
116+
var password = "\xa3";
117+
var encoded =
118+
r"$2a$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq";
119+
var output = bcrypt(password.codeUnits, encoded);
120+
expect(output, equals(encoded));
121+
});
122+
123+
test(r"$2a$04$tecY.9ylRInW/rAAzXCXPOOlyYeCNzmNTzPDNSIFztFMKbvs/s5XG", () {
124+
var password =
125+
"g7\r\x01\xf3\xd4\xd0\xa9JB^\x18\x007P\xb2N\xc7\x1c\xee\x87&\x83C"
126+
"\x8b\xe8\x18\xc5>\x86\x14/\xd6\xcc\x1cJ\xde\xd7ix\xeb\xdeO\xef"
127+
"\xe1i\xac\xcb\x03\x96v1' \xd6@.m\xa5!\xa0\xef\xc0(";
128+
var encoded =
129+
r"$2a$04$tecY.9ylRInW/rAAzXCXPOOlyYeCNzmNTzPDNSIFztFMKbvs/s5XG";
130+
var output = bcrypt(password.codeUnits, encoded);
131+
expect(output, equals(encoded));
132+
});
133+
});
134+
}

test/bcrypt/bcrypt_2b_test.dart

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
// Copyright (c) 2023, Sudipto Chandra
2+
// All rights reserved. Check LICENSE file for details.
3+
4+
import 'dart:convert';
5+
6+
import 'package:hashlib/hashlib.dart';
7+
import 'package:test/test.dart';
8+
9+
void main() {
10+
// https://github.com/pyca/bcrypt/blob/main/tests/test_bcrypt.py
11+
group('bcrypt version 2b', () {
12+
test(r"$2b$04$cVWp4XaNU8a4v1uMRum2SO026BWLIoQMD/TXg5uZV.0P.uO8m3YEm", () {
13+
var password = "Kk4DQuMMfZL9o";
14+
var encoded =
15+
r"$2b$04$cVWp4XaNU8a4v1uMRum2SO026BWLIoQMD/TXg5uZV.0P.uO8m3YEm";
16+
var output = bcrypt(utf8.encode(password), encoded);
17+
expect(output, equals(encoded));
18+
});
19+
20+
test(r"$2b$04$pQ7gRO7e6wx/936oXhNjrOUNOHL1D0h1N2IDbJZYs.1ppzSof6SPy", () {
21+
var password = "9IeRXmnGxMYbs";
22+
var encoded =
23+
r"$2b$04$pQ7gRO7e6wx/936oXhNjrOUNOHL1D0h1N2IDbJZYs.1ppzSof6SPy";
24+
var output = bcrypt(utf8.encode(password), encoded);
25+
expect(output, equals(encoded));
26+
});
27+
28+
test(r"$2b$04$SQe9knOzepOVKoYXo9xTteNYr6MBwVz4tpriJVe3PNgYufGIsgKcW", () {
29+
var password = "xVQVbwa1S0M8r";
30+
var encoded =
31+
r"$2b$04$SQe9knOzepOVKoYXo9xTteNYr6MBwVz4tpriJVe3PNgYufGIsgKcW";
32+
var output = bcrypt(utf8.encode(password), encoded);
33+
expect(output, equals(encoded));
34+
});
35+
36+
test(r"$2b$04$eH8zX.q5Q.j2hO1NkVYJQOM6KxntS/ow3.YzVmFrE4t//CoF4fvne", () {
37+
var password = "Zfgr26LWd22Za";
38+
var encoded =
39+
r"$2b$04$eH8zX.q5Q.j2hO1NkVYJQOM6KxntS/ow3.YzVmFrE4t//CoF4fvne";
40+
var output = bcrypt(utf8.encode(password), encoded);
41+
expect(output, equals(encoded));
42+
});
43+
44+
test(r"$2b$04$ahiTdwRXpUG2JLRcIznxc.s1.ydaPGD372bsGs8NqyYjLY1inG5n2", () {
45+
var password = "Tg4daC27epFBE";
46+
var encoded =
47+
r"$2b$04$ahiTdwRXpUG2JLRcIznxc.s1.ydaPGD372bsGs8NqyYjLY1inG5n2";
48+
var output = bcrypt(utf8.encode(password), encoded);
49+
expect(output, equals(encoded));
50+
});
51+
52+
test(r"$2b$04$nQn78dV0hGHf5wUBe0zOFu8n07ZbWWOKoGasZKRspZxtt.vBRNMIy", () {
53+
var password = "xhQPMmwh5ALzW";
54+
var encoded =
55+
r"$2b$04$nQn78dV0hGHf5wUBe0zOFu8n07ZbWWOKoGasZKRspZxtt.vBRNMIy";
56+
var output = bcrypt(utf8.encode(password), encoded);
57+
expect(output, equals(encoded));
58+
});
59+
60+
test(r"$2b$04$cvXudZ5ugTg95W.rOjMITuM1jC0piCl3zF5cmGhzCibHZrNHkmckG", () {
61+
var password = "59je8h5Gj71tg";
62+
var encoded =
63+
r"$2b$04$cvXudZ5ugTg95W.rOjMITuM1jC0piCl3zF5cmGhzCibHZrNHkmckG";
64+
var output = bcrypt(utf8.encode(password), encoded);
65+
expect(output, equals(encoded));
66+
});
67+
68+
test(r"$2b$04$YYjtiq4Uh88yUsExO0RNTuEJ.tZlsONac16A8OcLHleWFjVawfGvO", () {
69+
var password = "wT4fHJa2N9WSW";
70+
var encoded =
71+
r"$2b$04$YYjtiq4Uh88yUsExO0RNTuEJ.tZlsONac16A8OcLHleWFjVawfGvO";
72+
var output = bcrypt(utf8.encode(password), encoded);
73+
expect(output, equals(encoded));
74+
});
75+
76+
test(r"$2b$04$WLTjgY/pZSyqX/fbMbJzf.qxCeTMQOzgL.CimRjMHtMxd/VGKojMu", () {
77+
var password = "uSgFRnQdOgm4S";
78+
var encoded =
79+
r"$2b$04$WLTjgY/pZSyqX/fbMbJzf.qxCeTMQOzgL.CimRjMHtMxd/VGKojMu";
80+
var output = bcrypt(utf8.encode(password), encoded);
81+
expect(output, equals(encoded));
82+
});
83+
84+
test(r"$2b$04$2moPs/x/wnCfeQ5pCheMcuSJQ/KYjOZG780UjA/SiR.KsYWNrC7SG", () {
85+
var password = "tEPtJZXur16Vg";
86+
var encoded =
87+
r"$2b$04$2moPs/x/wnCfeQ5pCheMcuSJQ/KYjOZG780UjA/SiR.KsYWNrC7SG";
88+
var output = bcrypt(utf8.encode(password), encoded);
89+
expect(output, equals(encoded));
90+
});
91+
92+
test(r"$2b$04$HrEYC/AQ2HS77G78cQDZQ.r44WGcruKw03KHlnp71yVQEwpsi3xl2", () {
93+
var password = "vvho8C6nlVf9K";
94+
var encoded =
95+
r"$2b$04$HrEYC/AQ2HS77G78cQDZQ.r44WGcruKw03KHlnp71yVQEwpsi3xl2";
96+
var output = bcrypt(utf8.encode(password), encoded);
97+
expect(output, equals(encoded));
98+
});
99+
100+
test(r"$2b$04$vVYgSTfB8KVbmhbZE/k3R.ux9A0lJUM4CZwCkHI9fifke2.rTF7MG", () {
101+
var password = "5auCCY9by0Ruf";
102+
var encoded =
103+
r"$2b$04$vVYgSTfB8KVbmhbZE/k3R.ux9A0lJUM4CZwCkHI9fifke2.rTF7MG";
104+
var output = bcrypt(utf8.encode(password), encoded);
105+
expect(output, equals(encoded));
106+
});
107+
108+
test(r"$2b$04$JfoNrR8.doieoI8..F.C1OQgwE3uTeuardy6lw0AjALUzOARoyf2m", () {
109+
var password = "GtTkR6qn2QOZW";
110+
var encoded =
111+
r"$2b$04$JfoNrR8.doieoI8..F.C1OQgwE3uTeuardy6lw0AjALUzOARoyf2m";
112+
var output = bcrypt(utf8.encode(password), encoded);
113+
expect(output, equals(encoded));
114+
});
115+
116+
test(r"$2b$04$HP3I0PUs7KBEzMBNFw7o3O7f/uxaZU7aaDot1quHMgB2yrwBXsgyy", () {
117+
var password = "zKo8vdFSnjX0f";
118+
var encoded =
119+
r"$2b$04$HP3I0PUs7KBEzMBNFw7o3O7f/uxaZU7aaDot1quHMgB2yrwBXsgyy";
120+
var output = bcrypt(utf8.encode(password), encoded);
121+
expect(output, equals(encoded));
122+
});
123+
124+
test(r"$2b$04$xnFVhJsTzsFBTeP3PpgbMeMREb6rdKV9faW54Sx.yg9plf4jY8qT6", () {
125+
var password = "I9VfYlacJiwiK";
126+
var encoded =
127+
r"$2b$04$xnFVhJsTzsFBTeP3PpgbMeMREb6rdKV9faW54Sx.yg9plf4jY8qT6";
128+
var output = bcrypt(utf8.encode(password), encoded);
129+
expect(output, equals(encoded));
130+
});
131+
132+
test(r"$2b$04$WQp9.igoLqVr6Qk70mz6xuRxE0RttVXXdukpR9N54x17ecad34ZF6", () {
133+
var password = "VFPO7YXnHQbQO";
134+
var encoded =
135+
r"$2b$04$WQp9.igoLqVr6Qk70mz6xuRxE0RttVXXdukpR9N54x17ecad34ZF6";
136+
var output = bcrypt(utf8.encode(password), encoded);
137+
expect(output, equals(encoded));
138+
});
139+
140+
test(r"$2b$04$xgZtlonpAHSU/njOCdKztOPuPFzCNVpB4LGicO4/OGgHv.uKHkwsS", () {
141+
var password = "VDx5BdxfxstYk";
142+
var encoded =
143+
r"$2b$04$xgZtlonpAHSU/njOCdKztOPuPFzCNVpB4LGicO4/OGgHv.uKHkwsS";
144+
var output = bcrypt(utf8.encode(password), encoded);
145+
expect(output, equals(encoded));
146+
});
147+
148+
test(r"$2b$04$2Siw3Nv3Q/gTOIPetAyPr.GNj3aO0lb1E5E9UumYGKjP9BYqlNWJe", () {
149+
var password = "dEe6XfVGrrfSH";
150+
var encoded =
151+
r"$2b$04$2Siw3Nv3Q/gTOIPetAyPr.GNj3aO0lb1E5E9UumYGKjP9BYqlNWJe";
152+
var output = bcrypt(utf8.encode(password), encoded);
153+
expect(output, equals(encoded));
154+
});
155+
156+
test(r"$2b$04$7/Qj7Kd8BcSahPO4khB8me4ssDJCW3r4OGYqPF87jxtrSyPj5cS5m", () {
157+
var password = "cTT0EAFdwJiLn";
158+
var encoded =
159+
r"$2b$04$7/Qj7Kd8BcSahPO4khB8me4ssDJCW3r4OGYqPF87jxtrSyPj5cS5m";
160+
var output = bcrypt(utf8.encode(password), encoded);
161+
expect(output, equals(encoded));
162+
});
163+
164+
test(r"$2b$04$VvlCUKbTMjaxaYJ.k5juoecpG/7IzcH1AkmqKi.lIZMVIOLClWAk.", () {
165+
var password = "J8eHUDuxBB520";
166+
var encoded =
167+
r"$2b$04$VvlCUKbTMjaxaYJ.k5juoecpG/7IzcH1AkmqKi.lIZMVIOLClWAk.";
168+
var output = bcrypt(utf8.encode(password), encoded);
169+
expect(output, equals(encoded));
170+
});
171+
172+
test(r"$2b$10$keO.ZZs22YtygVF6BLfhGOI/JjshJYPp8DZsUtym6mJV2Eha2Hdd.", () {
173+
var password = [
174+
125, 62, 179, 254, 241, 139, 160, 230, 40, 162, 76, 122, 113, 195, //
175+
80, 127, 204, 200, 98, 123, 249, 20, 246, 246, 96, 129, 71, 53, 236,
176+
29, 135, 16, 191, 167, 225, 125, 73, 55, 32, 150, 223, 99, 242, 191,
177+
179, 86, 104, 223, 77, 136, 113, 247, 255, 27, 130, 126, 122, 19, 221,
178+
233, 132, 0, 221, 52
179+
];
180+
var encoded =
181+
r"$2b$10$keO.ZZs22YtygVF6BLfhGOI/JjshJYPp8DZsUtym6mJV2Eha2Hdd.";
182+
var output = bcrypt(password, encoded);
183+
expect(output, equals(encoded));
184+
});
185+
});
186+
}

test/bcrypt/bcrypt_2y_test.dart

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// Copyright (c) 2023, Sudipto Chandra
2+
// All rights reserved. Check LICENSE file for details.
3+
4+
import 'package:hashlib/hashlib.dart';
5+
import 'package:test/test.dart';
6+
7+
void main() {
8+
group('bcrypt version 2y', () {
9+
test(r"$2y$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq", () {
10+
var password = "\xa3";
11+
var encoded =
12+
r"$2y$05$/OK.fbVrR/bpIqNJ5ianF.Sa7shbm4.OzKpvFnX1pQLmQW96oUlCq";
13+
var output = bcrypt(password.codeUnits, encoded);
14+
expect(output, equals(encoded));
15+
});
16+
test(r"$2y$05$/OK.fbVrR/bpIqNJ5ianF.CE5elHaaO4EbggVDjb8P19RukzXSM3e", () {
17+
var password = "\xff\xff\xa3";
18+
var encoded =
19+
r"$2y$05$/OK.fbVrR/bpIqNJ5ianF.CE5elHaaO4EbggVDjb8P19RukzXSM3e";
20+
var output = bcrypt(password.codeUnits, encoded);
21+
expect(output, equals(encoded));
22+
});
23+
});
24+
}

0 commit comments

Comments
 (0)