-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.spec.ts
81 lines (75 loc) · 2.11 KB
/
client.spec.ts
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import { expect, test } from "vitest";
import { byteArrayToBigInt, byteArrayToHexString } from "../src/utils";
import {
deriveSessionKey,
deriveClientProof,
generateClientEphemeral,
} from "../src/srp/client";
import {
a,
A,
B,
s,
u,
I,
p,
K,
expectedM1,
parameters,
testDigestRFC5054,
} from "./test-vector-rfc5054";
test("it should generate a proper client ephemeral value", () => {
const { clientPrivateEphemeral, clientPublicEphemeral } =
generateClientEphemeral();
expect(byteArrayToBigInt(clientPrivateEphemeral)).toBeGreaterThan(1n);
expect(byteArrayToBigInt(clientPublicEphemeral)).toBeGreaterThan(1n);
});
// Please let me know if following test fails, since it's a rare event :)
test("it should (almost) never generate the same client ephemeral value", () => {
const { clientPublicEphemeral: clientPublicEphemeral1 } =
generateClientEphemeral();
const { clientPublicEphemeral: clientPublicEphemeral2 } =
generateClientEphemeral();
expect(clientPublicEphemeral1).not.toEqual(clientPublicEphemeral2);
});
test("it should derive session key correctly", async () => {
const sessionKey = await deriveSessionKey({
clientPrivateEphemeral: a,
clientPublicEphemeral: A,
serverPublicEphemeral: B,
sharedHash: u,
salt: s,
username: I,
password: p,
parameters,
digest: testDigestRFC5054,
});
expect(byteArrayToHexString(sessionKey).toLowerCase()).toBe(
byteArrayToHexString(K)
);
});
test("should should derive client proof correctly", async () => {
const sessionKey = await deriveSessionKey({
clientPrivateEphemeral: a,
clientPublicEphemeral: A,
serverPublicEphemeral: B,
sharedHash: u,
salt: s,
username: I,
password: p,
parameters,
digest: testDigestRFC5054,
});
expect(byteArrayToHexString(sessionKey)).toBe(byteArrayToHexString(K));
const clientProof = await deriveClientProof({
username: I,
salt: s,
clientPublicEphemeral: A,
serverPublicEphemeral: B,
sessionKey,
parameters,
});
expect(byteArrayToHexString(clientProof)).toBe(
byteArrayToHexString(expectedM1)
);
});