Skip to content

Commit 4061d69

Browse files
committed
test: organize benchmarks better and add test against other libraries
1 parent 7bb08c0 commit 4061d69

File tree

2 files changed

+202
-123
lines changed

2 files changed

+202
-123
lines changed

deno.lock

Lines changed: 81 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/scrypt_bench.ts

Lines changed: 121 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -4,140 +4,140 @@
44
*/
55
import { scrypt as scryptOld } from "https://deno.land/x/scrypt@v4.3.4/lib/scrypt.ts";
66
import { scrypt } from "./scrypt.ts";
7+
import { scrypt as scryptNodeRaw } from "node:crypto";
8+
import { scrypt as scryptoRaw } from "https://deno.land/x/scrypto@v1.0.0/main.ts";
9+
import { scrypt as scryptWasmRaw } from "npm:hash-wasm"
10+
11+
function scryptNode(
12+
password: string,
13+
salt: string,
14+
N: number,
15+
r: number,
16+
p: number,
17+
dklen: number = 64,
18+
) {
19+
return new Promise((resolve) =>
20+
scryptNodeRaw(password, salt, dklen, { N, r, p }, resolve)
21+
);
22+
}
23+
24+
function scrypto(
25+
password: string,
26+
salt: string,
27+
N: number,
28+
r: number,
29+
p: number,
30+
dkLen: number = 64,
31+
) {
32+
return scryptoRaw(password, salt, { N, r, p, dkLen})
33+
}
34+
35+
function scryptWasm (
36+
password: string,
37+
salt: string,
38+
N: number,
39+
r: number,
40+
p: number,
41+
dkLen: number = 64,
42+
) {
43+
return scryptWasmRaw({password, salt, costFactor: N, blockSize: r, parallelism: p, hashLength: dkLen});
44+
}
45+
46+
const scryptImplementations = {
47+
"current": scrypt,
48+
"last version": scryptOld,
49+
"node": scryptNode,
50+
"scrypto": scrypto,
51+
"hash-wasm": scryptWasm,
52+
};
53+
754
const extremeSalt =
855
`IkjpewCbNm4A7cuY1VL9KC3y92blEthtLf9Cet6uEoTxz5cyF660da2zeci42fYwVCVwsKogETMCXupSZZAUh6a80ZnnBTk17B3UTCSVQPpYfL8GktJ2BDokE7ox2hV8OwwUT1hFvCuJqwHZpRvZw1RNCO6HfukPdgMHhq9rWLTXXUNwrIjlmkeydKGFJz2mS1xFcvLQtle4olJVK0SXXXYHAigBfpYxxSC2acvoxuacWcXhzSSRZAMysU2J7zDfXdxnYoqz50rvmvi36g7t2WDSAdzZ44JpxVcc3bYD7xYI3UgfVMPOfeblzwJi455QIurHzDuXEUNS0tZX1kWwZ0XcNSCwGzPs7WSVHxHc0KVUNhwSz16wDYFK4pYeA29ThXgFiFICSLVshiRrCfuzRthW7IZtRa9efcf4nFJsVBk51jpHY0b8CLhARrQU92mlBULwmJKe8DgST3Vn9rva98E9jk4y7NfSb4i9g74OjuFQ8yRO3BHksBZoVtBl4wUppM2hsLt72LZKA0ZsaWW7dG9a1bgWUkBBRG5OwzARenDqQIA2Gp5V4JsXuUUYNDylCelkLUVfS7hB1AZHtnIgwVqTaGDxl7nNZGKpAx6MrOd40laTUhrtZo4prwFZROHPNVJGQk2PQDgwqxX5SWoBTK8cCCzrbGBfHq9r8BwBvSVdeQ7bgjUW2j7NCapHHZ6filzxZaVsLsEITGZNcK0t5DdSnaDLRxyOn21ncKVIyZfOdlvpytvqpQaH5RWu4G50IPkEevue8KenXpGLP0pmEseBf6eX02rlN9arqZ4HJWmD7RbAChs7OJwfKlNIawb0V3G3N0eJeXiRsYOk10GIb91pyZRLSr2AJDtiWCcMuOWZfgLVHIrUVftfh9iXmRk2RAT1sigivbNtdqcF2cVvbTVMUCe7MIPRt4dGqwOQqdReGjPy9p1CNfKfJBIgW0xhYsOGMkcUqSurHxPl4wTOnMBx8vEZQsqJCZomENA1`;
956
const extremePassword =
1057
`TFImeWrtF2kOIvDjG4P0ybmMrNOq0bQ0aERcC69iHflECWrwuSMO4JPD3Ng5HwNXZrCpHyEwviW8zly3WLsQ6zJ60lnfwhVRdkEQCsFiH4NvGl0tCAuty9Rruf47WHeE3GK7qAJwhcXHx3FCJgWN8KHdoy3vn2zUKJlhhjSFGANJdVYQGSaQTmtoJdhcemmYT5hprkALp7Q9vMwCk9hDvV5vB0evXfxqG0dFV3MPJmywwWAUJEi5MyM2Pio7fL50M5ohPWFmUllpa6G5pVBhi26GtOy6sM3GDGHmnohavtsMvTeRcMX1ds4HWA9U3vH7urQ3XGkCUzulB6WxuxHn8Z3fRz3BL6MZI0EReep2qUVaqJn8onzsI6da6pU6iDtRbufWxi0q8XN1S3BCtFGjzaTU12nvfg5js53PiSw1KUnZj2thKxWtnKcpwzbXdTuuZ9GVhZHIMcOXXrDR0rj539ZLAVyJmqwDOMjTsqPN7BY522PcJHoTElSRNRAsAsFx2m7h9brhcZXOgV1PZohJsdQS7RWhAl9EYBkgF8WCgGw9DXidVduIIHDlEd7mAVJfo9HYX85kFcwrLEpuPiFxfNhubeDpeBu2FAbAo6DNHFlqXUUnyKvMbzptcgisSr2V1pwykB6uLVrwx3AceRnyqg5flldmfsSKw0AFZ4PagGMJuFDMGrV29Vmqhv61SRL9in0ngZx0gJ2vKv26qS3jGN72UUsbkysuGNz6ul0D5jIapvIcCTncIiXSY24pPctxFsawcXvSNw4jEKccsHCTZF0gri6iFS7JqqQd87FNowbrug6sIWSwiWHYGN1VfSwuE5plQHVvNCHNZnMBBIoaMWh45lhtlfCWdUwVpjjK5dAUcOtKftJ2hcl4mIlxs7Fy8ASWhYvWAbpp3fRgmAeTRYAFEwMohN9b03iXyDSNFIeZtQoaL7HYFVWoXV4BfBVlR3CvNIwp6OPBAFFSDlSn9CZU06UziY1tSwqBzkCD`;
1158

12-
Deno.bench("small scrypt - last version", { group: "small scrypt" }, () => {
13-
scryptOld("password", "salt", 1024, 8, 1, 64);
14-
});
15-
Deno.bench("small scrypt", { group: "small scrypt", baseline: true }, () => {
16-
scrypt("password", "salt", 1024, 8, 1, 64);
17-
});
18-
19-
Deno.bench("small scrypt - last version (longer password and salt)", {
20-
group: "small scrypt (longer password and salt)",
21-
}, () => {
22-
scryptOld(
23-
"long password to test that",
24-
"long salt to test that",
25-
1024,
26-
8,
27-
1,
28-
64,
29-
);
30-
});
31-
Deno.bench("small scrypt (longer password and salt)", {
32-
group: "small scrypt (longer password and salt)",
33-
baseline: true,
34-
}, () => {
35-
scrypt(
36-
"long password to test that",
37-
"long salt to test that",
38-
1024,
39-
8,
40-
1,
41-
64,
42-
);
43-
});
44-
45-
Deno.bench("small scrypt - last version (extremely long password and salt)", {
46-
group: "small scrypt (extremely long password and salt)",
47-
}, () => {
48-
scryptOld(extremePassword, extremeSalt, 1024, 8, 1, 64);
49-
});
50-
Deno.bench("small scrypt (extremely long password and salt)", {
51-
group: "small scrypt (extremely long password and salt)",
52-
baseline: true,
53-
}, () => {
54-
scrypt(extremePassword, extremeSalt, 1024, 8, 1, 64);
55-
});
56-
57-
Deno.bench("standard scrypt - last version", { group: "scrypt" }, () => {
58-
scryptOld("password", "salt", 16384, 8, 1, 64);
59-
});
60-
Deno.bench("standard scrypt", { group: "scrypt", baseline: true }, () => {
61-
scrypt("password", "salt", 16384, 8, 1, 64);
62-
});
59+
for (const [name, implementation] of Object.entries(scryptImplementations)) {
60+
Deno.bench(`small scrypt - ${name}`, {
61+
group: "small scrypt",
62+
baseline: name === "current",
63+
}, async () => {
64+
await implementation("password", "salt", 1024, 8, 1, 64);
65+
});
6366

64-
Deno.bench(
65-
"standard scrypt - last version (longer password and salt)",
66-
{ group: "scrypt (longer password and salt)" },
67-
() => {
68-
scryptOld(
67+
Deno.bench(`small scrypt - ${name} (longer password and salt)`, {
68+
group: "small scrypt (longer password and salt)",
69+
baseline: name === "current",
70+
}, async () => {
71+
await implementation(
6972
"long password to test that",
7073
"long salt to test that",
71-
16384,
74+
1024,
7275
8,
7376
1,
7477
64,
7578
);
76-
},
77-
);
78-
Deno.bench(
79-
"standard scrypt (longer password and salt)",
80-
{ group: "scrypt (longer password and salt)", baseline: true },
81-
() => {
82-
scrypt(
83-
"long password to test that",
84-
"long salt to test that",
85-
16384,
86-
8,
87-
1,
88-
64,
89-
);
90-
},
91-
);
79+
});
80+
81+
Deno.bench(`small scrypt - ${name} (extremely long password and salt)`, {
82+
group: "small scrypt (extremely long password and salt)",
83+
baseline: name === "current",
84+
}, async () => {
85+
await implementation(extremePassword, extremeSalt, 1024, 8, 1, 64);
86+
});
9287

93-
Deno.bench(
94-
"standard scrypt - last version (extremely long password and salt)",
95-
{
96-
group: "scrypt (extremely long password and salt)",
97-
},
98-
() => {
99-
scryptOld(extremePassword, extremeSalt, 16384, 8, 1, 64);
100-
},
101-
);
102-
Deno.bench("standard scrypt (extremely long password and salt)", {
103-
group: "scrypt (extremely long password and salt)",
104-
baseline: true,
105-
}, () => {
106-
scrypt(extremePassword, extremeSalt, 16384, 8, 1, 64);
107-
});
88+
Deno.bench(`standard scrypt - ${name}`, {
89+
group: "scrypt",
90+
baseline: name === "current",
91+
}, async () => {
92+
await implementation("password", "salt", 16384, 8, 1, 64);
93+
});
94+
Deno.bench(
95+
`standard scrypt - ${name} (longer password and salt)`,
96+
{
97+
group: "scrypt (longer password and salt)",
98+
baseline: name === "current",
99+
},
100+
async () => {
101+
await implementation(
102+
"long password to test that",
103+
"long salt to test that",
104+
16384,
105+
8,
106+
1,
107+
64,
108+
);
109+
},
110+
);
111+
112+
Deno.bench(
113+
`standard scrypt - ${name} (extremely long password and salt)`,
114+
{
115+
group: "scrypt (extremely long password and salt)",
116+
baseline: name === "current",
117+
},
118+
async () => {
119+
await implementation(extremePassword, extremeSalt, 16384, 8, 1, 64);
120+
},
121+
);
108122

109-
Deno.bench("large n scrypt - last version (4x standard)", {
110-
group: "large n scrypt",
111-
}, () => {
112-
scryptOld("password", "salt", 65536, 8, 1, 64);
113-
});
114-
Deno.bench("large n scrypt (4x standard)", {
115-
group: "large n scrypt",
116-
baseline: true,
117-
}, () => {
118-
scrypt("password", "salt", 65536, 8, 1, 64);
119-
});
123+
Deno.bench(`large n scrypt - ${name} (4x standard)`, {
124+
group: "large n scrypt",
125+
baseline: name === "current",
126+
}, async () => {
127+
await implementation("password", "salt", 65536, 8, 1, 64);
128+
});
120129

121-
Deno.bench("large r scrypt - last version (4x standard)", {
122-
group: "large r scrypt",
123-
}, () => {
124-
scryptOld("password", "salt", 16384, 32, 1, 64);
125-
});
126-
Deno.bench("large r scrypt (4x standard)", {
127-
group: "large r scrypt",
128-
baseline: true,
129-
}, () => {
130-
scrypt("password", "salt", 16384, 32, 1, 64);
131-
});
130+
Deno.bench(`large r scrypt - ${name} (4x standard)`, {
131+
group: "large r scrypt",
132+
baseline: name === "current",
133+
}, async () => {
134+
await implementation("password", "salt", 16384, 32, 1, 64);
135+
});
132136

133-
Deno.bench("large p scrypt - last version (4x standard)", {
134-
group: "large p scrypt",
135-
}, () => {
136-
scryptOld("password", "salt", 16384, 8, 4, 64);
137-
});
138-
Deno.bench("large p scrypt (4x standard)", {
139-
group: "large p scrypt",
140-
baseline: true,
141-
}, () => {
142-
scrypt("password", "salt", 16384, 8, 4, 64);
143-
});
137+
Deno.bench(`large p scrypt - ${name} (4x standard)`, {
138+
group: "large p scrypt",
139+
baseline: name === "current",
140+
}, async () => {
141+
await implementation("password", "salt", 16384, 8, 4, 64);
142+
});
143+
}

0 commit comments

Comments
 (0)