@fireproof/core-test 0.23.11 → 0.23.15-dev-windows
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blockstore/keyed-crypto-indexeddb-file.test.js +4 -4
- package/blockstore/keyed-crypto-indexeddb-file.test.js.map +1 -1
- package/blockstore/keyed-crypto.test.js +16 -34
- package/blockstore/keyed-crypto.test.js.map +1 -1
- package/fireproof/attachable-subscription.test.js +16 -7
- package/fireproof/attachable-subscription.test.js.map +1 -1
- package/fireproof/attachable.test.js +3 -3
- package/fireproof/attachable.test.js.map +1 -1
- package/fireproof/query-docs.test.js +18 -1
- package/fireproof/query-docs.test.js.map +1 -1
- package/helpers.js +3 -2
- package/helpers.js.map +1 -1
- package/package.json +28 -25
- package/protocols/cloud/to-cloud.test.d.ts +1 -0
- package/protocols/cloud/to-cloud.test.js +32 -0
- package/protocols/cloud/to-cloud.test.js.map +1 -0
- package/runtime/device-id.test.d.ts +1 -0
- package/runtime/device-id.test.js +359 -0
- package/runtime/device-id.test.js.map +1 -0
- package/runtime/hash.test.d.ts +1 -0
- package/runtime/hash.test.js +202 -0
- package/runtime/hash.test.js.map +1 -0
- package/runtime/key-bag.test.js +244 -20
- package/runtime/key-bag.test.js.map +1 -1
- package/runtime/meta-key-hack.test.js +4 -4
- package/runtime/meta-key-hack.test.js.map +1 -1
- package/runtime/text-en-decoder.test.d.ts +1 -0
- package/runtime/text-en-decoder.test.js +29 -0
- package/runtime/text-en-decoder.test.js.map +1 -0
- package/tsconfig.json +1 -1
- package/vitest.indexeddb.config.js +5 -1
- package/vitest.indexeddb.config.js.map +1 -1
package/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../jsr/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,EAAE,KAAK,EAAwB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACjI,OAAO,EAA4B,KAAK,
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../jsr/helpers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fireproof/core-test",
|
|
3
|
-
"version": "0.23.
|
|
3
|
+
"version": "0.23.15-dev-windows",
|
|
4
4
|
"description": "Live ledger for the web.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./index.js",
|
|
@@ -34,38 +34,41 @@
|
|
|
34
34
|
"react": ">=18.0.0"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@adviser/cement": "^0.4.
|
|
38
|
-
"@fireproof/core": "0.23.
|
|
39
|
-
"@fireproof/core-base": "0.23.
|
|
40
|
-
"@fireproof/core-blockstore": "0.23.
|
|
41
|
-
"@fireproof/core-
|
|
42
|
-
"@fireproof/core-gateways-
|
|
43
|
-
"@fireproof/core-gateways-
|
|
44
|
-
"@fireproof/core-gateways-
|
|
45
|
-
"@fireproof/core-
|
|
46
|
-
"@fireproof/core-
|
|
47
|
-
"@fireproof/core-
|
|
48
|
-
"@fireproof/core-
|
|
49
|
-
"@fireproof/core-
|
|
50
|
-
"@fireproof/core-types-
|
|
51
|
-
"@fireproof/core-types-
|
|
52
|
-
"@fireproof/
|
|
37
|
+
"@adviser/cement": "^0.4.43",
|
|
38
|
+
"@fireproof/core": "0.23.15-dev-windows",
|
|
39
|
+
"@fireproof/core-base": "0.23.15-dev-windows",
|
|
40
|
+
"@fireproof/core-blockstore": "0.23.15-dev-windows",
|
|
41
|
+
"@fireproof/core-device-id": "0.23.15-dev-windows",
|
|
42
|
+
"@fireproof/core-gateways-base": "0.23.15-dev-windows",
|
|
43
|
+
"@fireproof/core-gateways-cloud": "0.23.15-dev-windows",
|
|
44
|
+
"@fireproof/core-gateways-file": "0.23.15-dev-windows",
|
|
45
|
+
"@fireproof/core-gateways-indexeddb": "0.23.15-dev-windows",
|
|
46
|
+
"@fireproof/core-gateways-memory": "0.23.15-dev-windows",
|
|
47
|
+
"@fireproof/core-keybag": "0.23.15-dev-windows",
|
|
48
|
+
"@fireproof/core-protocols-cloud": "0.23.15-dev-windows",
|
|
49
|
+
"@fireproof/core-runtime": "0.23.15-dev-windows",
|
|
50
|
+
"@fireproof/core-types-base": "0.23.15-dev-windows",
|
|
51
|
+
"@fireproof/core-types-blockstore": "0.23.15-dev-windows",
|
|
52
|
+
"@fireproof/core-types-protocols-cloud": "0.23.15-dev-windows",
|
|
53
|
+
"@fireproof/core-types-runtime": "0.23.15-dev-windows",
|
|
54
|
+
"@fireproof/vendor": "0.23.15-dev-windows",
|
|
53
55
|
"@ipld/car": "^5.4.2",
|
|
54
|
-
"@ipld/dag-cbor": "^9.2.
|
|
56
|
+
"@ipld/dag-cbor": "^9.2.5",
|
|
55
57
|
"@ipld/dag-json": "^10.2.5",
|
|
56
|
-
"@types/node": "^24.
|
|
57
|
-
"cborg": "^4.2.
|
|
58
|
+
"@types/node": "^24.7.0",
|
|
59
|
+
"cborg": "^4.2.15",
|
|
58
60
|
"charwise": "^3.0.1",
|
|
59
|
-
"
|
|
61
|
+
"jose": "^6.0.12",
|
|
62
|
+
"use-fireproof": "0.23.15-dev-windows",
|
|
60
63
|
"uuidv7": "^1.0.2"
|
|
61
64
|
},
|
|
62
65
|
"devDependencies": {
|
|
63
|
-
"@fireproof/core-cli": "0.23.
|
|
66
|
+
"@fireproof/core-cli": "0.23.15-dev-windows",
|
|
64
67
|
"@vitest/browser": "^3.2.4",
|
|
65
|
-
"playwright": "^1.
|
|
66
|
-
"playwright-chromium": "^1.
|
|
68
|
+
"playwright": "^1.56.0",
|
|
69
|
+
"playwright-chromium": "^1.56.0",
|
|
67
70
|
"vitest": "^3.2.4",
|
|
68
|
-
"zx": "^8.
|
|
71
|
+
"zx": "^8.8.4"
|
|
69
72
|
},
|
|
70
73
|
"scripts": {
|
|
71
74
|
"build": "core-cli tsc",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { SimpleTokenStrategy } from "@fireproof/core-gateways-cloud";
|
|
2
|
+
import { toCloud } from "use-fireproof";
|
|
3
|
+
import { describe, it, expect } from "vitest";
|
|
4
|
+
describe("toCloud", () => {
|
|
5
|
+
it("should be the same instance", () => {
|
|
6
|
+
const ref = toCloud({
|
|
7
|
+
urls: { base: "memory://test" },
|
|
8
|
+
strategy: new SimpleTokenStrategy(""),
|
|
9
|
+
});
|
|
10
|
+
for (let i = 0; i < 10; i++) {
|
|
11
|
+
const tc = toCloud({
|
|
12
|
+
urls: { base: "memory://test" },
|
|
13
|
+
strategy: new SimpleTokenStrategy(""),
|
|
14
|
+
});
|
|
15
|
+
expect(tc).toBeDefined();
|
|
16
|
+
expect(tc).toBe(ref);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
it("should be other instance", () => {
|
|
20
|
+
const ref = toCloud({
|
|
21
|
+
urls: { base: "memory://test0" },
|
|
22
|
+
strategy: new SimpleTokenStrategy(""),
|
|
23
|
+
});
|
|
24
|
+
const tc = toCloud({
|
|
25
|
+
urls: { base: "memory://test" },
|
|
26
|
+
strategy: new SimpleTokenStrategy(""),
|
|
27
|
+
});
|
|
28
|
+
expect(tc).toBeDefined();
|
|
29
|
+
expect(tc).not.toBe(ref);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
//# sourceMappingURL=to-cloud.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-cloud.test.js","sourceRoot":"","sources":["../../../jsr/protocols/cloud/to-cloud.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC;IACxB,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,OAAO,CAAC;YAClB,IAAI,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;YAC/B,QAAQ,EAAE,IAAI,mBAAmB,CAAC,EAAE,CAAC;SACtC,CAAC,CAAC;QACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,EAAE,GAAG,OAAO,CAAC;gBACjB,IAAI,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;gBAC/B,QAAQ,EAAE,IAAI,mBAAmB,CAAC,EAAE,CAAC;aACtC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAEzB,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IAAA,CACF,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,OAAO,CAAC;YAClB,IAAI,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE;YAChC,QAAQ,EAAE,IAAI,mBAAmB,CAAC,EAAE,CAAC;SACtC,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,OAAO,CAAC;YACjB,IAAI,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;YAC/B,QAAQ,EAAE,IAAI,mBAAmB,CAAC,EAAE,CAAC;SACtC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAAA,CAC1B,CAAC,CAAC;AAAA,CACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, assert } from "vitest";
|
|
2
|
+
import { decodeProtectedHeader, importJWK, jwtVerify } from "jose";
|
|
3
|
+
import { ensureSuperThis } from "@fireproof/core-runtime";
|
|
4
|
+
import { DeviceIdCA, DeviceIdCSR, DeviceIdKey, DeviceIdSignMsg, DeviceIdValidator, DeviceIdVerifyMsg, } from "@fireproof/core-device-id";
|
|
5
|
+
import { CertificatePayloadSchema, } from "@fireproof/core-types-base";
|
|
6
|
+
const sthis = ensureSuperThis();
|
|
7
|
+
describe("DeviceIdKey", () => {
|
|
8
|
+
it("should export private key as JWK", async () => {
|
|
9
|
+
const key = await DeviceIdKey.create();
|
|
10
|
+
const jwk = await key.exportPrivateJWK();
|
|
11
|
+
expect(jwk).toBeDefined();
|
|
12
|
+
expect(jwk.kty).toBe("EC");
|
|
13
|
+
if (jwk.kty !== "EC") {
|
|
14
|
+
assert.fail("Invalid JWK");
|
|
15
|
+
}
|
|
16
|
+
expect(jwk.d).toBeDefined();
|
|
17
|
+
const rImported = await DeviceIdKey.createFromJWK(jwk);
|
|
18
|
+
if (rImported.isErr()) {
|
|
19
|
+
assert.fail(rImported.Err().message);
|
|
20
|
+
}
|
|
21
|
+
const imported = rImported.Ok();
|
|
22
|
+
const jwk2 = await imported.exportPrivateJWK();
|
|
23
|
+
expect(jwk2).toEqual(jwk);
|
|
24
|
+
expect(await key.publicKey()).toEqual(await imported.publicKey());
|
|
25
|
+
expect(await key.publicKey()).toEqual({
|
|
26
|
+
crv: "P-256",
|
|
27
|
+
kty: "EC",
|
|
28
|
+
x: expect.any(String),
|
|
29
|
+
y: expect.any(String),
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe("DeviceIdCSR and DeviceIdValidator integration", () => {
|
|
34
|
+
it("should create and validate a CSR successfully", async () => {
|
|
35
|
+
const key = await DeviceIdKey.create();
|
|
36
|
+
const csr = new DeviceIdCSR(sthis, key);
|
|
37
|
+
const subject = {
|
|
38
|
+
commonName: "test.example.com",
|
|
39
|
+
organization: "Test Corp",
|
|
40
|
+
locality: "San Francisco",
|
|
41
|
+
stateOrProvinceName: "California",
|
|
42
|
+
countryName: "US",
|
|
43
|
+
};
|
|
44
|
+
const extensions = {
|
|
45
|
+
subjectAltName: ["test.example.com", "www.test.example.com"],
|
|
46
|
+
keyUsage: ["digitalSignature", "keyEncipherment"],
|
|
47
|
+
extendedKeyUsage: ["serverAuth", "clientAuth"],
|
|
48
|
+
};
|
|
49
|
+
const rCsrJWS = await csr.createCSR(subject, extensions);
|
|
50
|
+
if (rCsrJWS.isErr()) {
|
|
51
|
+
assert.fail(rCsrJWS.Err().message);
|
|
52
|
+
}
|
|
53
|
+
const csrJWS = rCsrJWS.Ok();
|
|
54
|
+
expect(csrJWS).toBeDefined();
|
|
55
|
+
expect(typeof csrJWS).toBe("string");
|
|
56
|
+
const validator = new DeviceIdValidator();
|
|
57
|
+
const validation = await validator.validateCSR(csrJWS);
|
|
58
|
+
expect(validation.valid).toBe(true);
|
|
59
|
+
if (!validation.valid) {
|
|
60
|
+
throw new Error(`Validation failed: ${validation.error}`);
|
|
61
|
+
}
|
|
62
|
+
expect(validation.payload).toBeDefined();
|
|
63
|
+
expect(validation.publicKey).toBeDefined();
|
|
64
|
+
if (!validation.payload) {
|
|
65
|
+
throw new Error("No payload");
|
|
66
|
+
}
|
|
67
|
+
const payload = validation.payload;
|
|
68
|
+
expect(payload.sub).toBe(subject.commonName);
|
|
69
|
+
expect(payload.iss).toBe("csr-client");
|
|
70
|
+
expect(payload.aud).toBe("certificate-authority");
|
|
71
|
+
expect(payload.csr.subject).toEqual(subject);
|
|
72
|
+
expect(payload.csr.extensions?.subjectAltName).toEqual(extensions.subjectAltName);
|
|
73
|
+
expect(payload.csr.extensions?.keyUsage).toEqual(extensions.keyUsage);
|
|
74
|
+
expect(payload.csr.extensions?.extendedKeyUsage).toEqual(extensions.extendedKeyUsage);
|
|
75
|
+
});
|
|
76
|
+
it("should fail validation for tampered CSR", async () => {
|
|
77
|
+
const key = await DeviceIdKey.create();
|
|
78
|
+
const csr = new DeviceIdCSR(sthis, key);
|
|
79
|
+
const subject = { commonName: "test.example.com" };
|
|
80
|
+
const rCsrJWS = await csr.createCSR(subject);
|
|
81
|
+
if (rCsrJWS.isErr()) {
|
|
82
|
+
assert.fail(rCsrJWS.Err().message);
|
|
83
|
+
}
|
|
84
|
+
const csrJWS = rCsrJWS.Ok();
|
|
85
|
+
const tamperedCSR = csrJWS.slice(0, -10) + "tampered123";
|
|
86
|
+
const validator = new DeviceIdValidator();
|
|
87
|
+
const validation = await validator.validateCSR(tamperedCSR);
|
|
88
|
+
expect(validation.valid).toBe(false);
|
|
89
|
+
if (validation.valid) {
|
|
90
|
+
throw new Error("Validation should have failed");
|
|
91
|
+
}
|
|
92
|
+
expect(validation.error).toBeDefined();
|
|
93
|
+
});
|
|
94
|
+
it("should fail validation for CSR without public key in header", async () => {
|
|
95
|
+
const validator = new DeviceIdValidator();
|
|
96
|
+
const invalidCSR = "eyJhbGciOiJFUzI1NiIsInR5cCI6IkNTUitKV1QifQ.eyJzdWIiOiJ0ZXN0In0.invalid";
|
|
97
|
+
const validation = await validator.validateCSR(invalidCSR);
|
|
98
|
+
expect(validation.valid).toBe(false);
|
|
99
|
+
if (validation.valid) {
|
|
100
|
+
throw new Error("Validation should have failed");
|
|
101
|
+
}
|
|
102
|
+
expect(validation.error).toContain("No public key in CSR header");
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
describe("DeviceIdCA certificate generation and validation", () => {
|
|
106
|
+
it("should generate and validate a certificate from CSR", async () => {
|
|
107
|
+
const caKey = await DeviceIdKey.create();
|
|
108
|
+
const caSubject = {
|
|
109
|
+
commonName: "Test CA",
|
|
110
|
+
organization: "Test CA Corp",
|
|
111
|
+
locality: "San Francisco",
|
|
112
|
+
stateOrProvinceName: "California",
|
|
113
|
+
countryName: "US",
|
|
114
|
+
};
|
|
115
|
+
const mockActions = {
|
|
116
|
+
generateSerialNumber: async () => crypto.randomUUID(),
|
|
117
|
+
};
|
|
118
|
+
const ca = new DeviceIdCA({
|
|
119
|
+
base64: sthis.txt.base64,
|
|
120
|
+
caKey,
|
|
121
|
+
caSubject,
|
|
122
|
+
actions: mockActions,
|
|
123
|
+
});
|
|
124
|
+
const deviceKey = await DeviceIdKey.create();
|
|
125
|
+
const csr = new DeviceIdCSR(sthis, deviceKey);
|
|
126
|
+
const subject = {
|
|
127
|
+
commonName: "device.example.com",
|
|
128
|
+
organization: "Device Corp",
|
|
129
|
+
locality: "New York",
|
|
130
|
+
stateOrProvinceName: "New York",
|
|
131
|
+
countryName: "US",
|
|
132
|
+
};
|
|
133
|
+
const extensions = {
|
|
134
|
+
subjectAltName: ["device.example.com", "alt.device.example.com"],
|
|
135
|
+
keyUsage: ["digitalSignature", "keyEncipherment"],
|
|
136
|
+
extendedKeyUsage: ["serverAuth"],
|
|
137
|
+
};
|
|
138
|
+
const rCsrJWS = await csr.createCSR(subject, extensions);
|
|
139
|
+
if (rCsrJWS.isErr()) {
|
|
140
|
+
assert.fail(rCsrJWS.Err().message);
|
|
141
|
+
}
|
|
142
|
+
const csrJWS = rCsrJWS.Ok();
|
|
143
|
+
const rCertificate = await ca.processCSR(csrJWS);
|
|
144
|
+
if (rCertificate.isErr()) {
|
|
145
|
+
assert.fail(rCertificate.Err().message);
|
|
146
|
+
}
|
|
147
|
+
const certificate = rCertificate.Ok();
|
|
148
|
+
expect(certificate.certificateJWT).toBeDefined();
|
|
149
|
+
expect(certificate.format).toBe("JWS");
|
|
150
|
+
expect(certificate.serialNumber).toBeDefined();
|
|
151
|
+
expect(certificate.issuer).toBe(caSubject.commonName);
|
|
152
|
+
expect(certificate.subject).toBe(subject.commonName);
|
|
153
|
+
expect(certificate.validityPeriod.notBefore).toBeInstanceOf(Date);
|
|
154
|
+
expect(certificate.validityPeriod.notAfter).toBeInstanceOf(Date);
|
|
155
|
+
expect(certificate.publicKey).toBeDefined();
|
|
156
|
+
const caPublicKey = await caKey.publicKey();
|
|
157
|
+
const caKeyForVerification = await importJWK(caPublicKey, "ES256");
|
|
158
|
+
const { payload: certPayload, protectedHeader } = await jwtVerify(certificate.certificateJWT, caKeyForVerification, {
|
|
159
|
+
typ: "CERT+JWT",
|
|
160
|
+
});
|
|
161
|
+
expect(certPayload.iss).toBe(caSubject.commonName);
|
|
162
|
+
expect(certPayload.sub).toBe(subject.commonName);
|
|
163
|
+
expect(certPayload.jti).toBe(certificate.serialNumber);
|
|
164
|
+
expect(certPayload.certificate).toBeDefined();
|
|
165
|
+
const cert = certPayload.certificate;
|
|
166
|
+
expect(cert.subject).toEqual(subject);
|
|
167
|
+
expect(cert.issuer).toEqual(caSubject);
|
|
168
|
+
expect(cert.subjectPublicKeyInfo).toEqual(certificate.publicKey);
|
|
169
|
+
expect(protectedHeader.alg).toBe("ES256");
|
|
170
|
+
expect(protectedHeader.typ).toBe("CERT+JWT");
|
|
171
|
+
expect(protectedHeader.kid).toBe(await caKey.fingerPrint());
|
|
172
|
+
});
|
|
173
|
+
it("should reject invalid CSR", async () => {
|
|
174
|
+
const caKey = await DeviceIdKey.create();
|
|
175
|
+
const caSubject = { commonName: "Test CA" };
|
|
176
|
+
const mockActions = {
|
|
177
|
+
generateSerialNumber: async () => crypto.randomUUID(),
|
|
178
|
+
};
|
|
179
|
+
const ca = new DeviceIdCA({
|
|
180
|
+
base64: sthis.txt.base64,
|
|
181
|
+
caKey,
|
|
182
|
+
caSubject,
|
|
183
|
+
actions: mockActions,
|
|
184
|
+
});
|
|
185
|
+
const invalidCSR = "invalid.csr.string";
|
|
186
|
+
expect((await ca.processCSR(invalidCSR)).Err().message).toContain("Invalid Token");
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
describe("DeviceIdSignMsg", () => {
|
|
190
|
+
let deviceKey;
|
|
191
|
+
let caKey;
|
|
192
|
+
let certificate;
|
|
193
|
+
const { base64 } = ensureSuperThis().txt;
|
|
194
|
+
let ca;
|
|
195
|
+
const caSubject = {
|
|
196
|
+
commonName: "Test CA",
|
|
197
|
+
organization: "Test CA Corp",
|
|
198
|
+
};
|
|
199
|
+
const jwtPayload = {
|
|
200
|
+
iss: "test",
|
|
201
|
+
sub: "test",
|
|
202
|
+
aud: "test",
|
|
203
|
+
iat: Math.floor(Date.now() / 1000),
|
|
204
|
+
nbf: Math.floor(Date.now() / 1000),
|
|
205
|
+
exp: Math.floor(Date.now() / 1000) + 3600,
|
|
206
|
+
jti: "test",
|
|
207
|
+
};
|
|
208
|
+
const mockActions = {
|
|
209
|
+
generateSerialNumber: async () => crypto.randomUUID(),
|
|
210
|
+
};
|
|
211
|
+
beforeEach(async () => {
|
|
212
|
+
caKey = await DeviceIdKey.create();
|
|
213
|
+
deviceKey = await DeviceIdKey.create();
|
|
214
|
+
ca = new DeviceIdCA({
|
|
215
|
+
base64: sthis.txt.base64,
|
|
216
|
+
caKey,
|
|
217
|
+
caSubject,
|
|
218
|
+
actions: mockActions,
|
|
219
|
+
});
|
|
220
|
+
const csr = new DeviceIdCSR(sthis, deviceKey);
|
|
221
|
+
const subject = {
|
|
222
|
+
commonName: "device.example.com",
|
|
223
|
+
organization: "Device Corp",
|
|
224
|
+
};
|
|
225
|
+
const rCsrJWS = await csr.createCSR(subject);
|
|
226
|
+
if (rCsrJWS.isErr()) {
|
|
227
|
+
assert.fail(rCsrJWS.Err().message);
|
|
228
|
+
}
|
|
229
|
+
const csrJWS = rCsrJWS.Ok();
|
|
230
|
+
const rCertResult = await ca.processCSR(csrJWS);
|
|
231
|
+
const caPublicKey = await caKey.publicKey();
|
|
232
|
+
const caKeyForVerification = await importJWK(caPublicKey, "ES256");
|
|
233
|
+
const { payload } = await jwtVerify(rCertResult.Ok().certificateJWT, caKeyForVerification, { typ: "CERT+JWT" });
|
|
234
|
+
certificate = CertificatePayloadSchema.parse(payload);
|
|
235
|
+
});
|
|
236
|
+
it("should sign a payload and include certificate information", async () => {
|
|
237
|
+
const signMsg = new DeviceIdSignMsg(base64, deviceKey, certificate);
|
|
238
|
+
const payload = { ...jwtPayload, message: "test payload", timestamp: Date.now() };
|
|
239
|
+
const jwt = await signMsg.sign(payload);
|
|
240
|
+
expect(jwt).toBeDefined();
|
|
241
|
+
expect(typeof jwt).toBe("string");
|
|
242
|
+
const header = decodeProtectedHeader(jwt);
|
|
243
|
+
expect(header.alg).toBe("ES256");
|
|
244
|
+
expect(header.typ).toBe("JWT");
|
|
245
|
+
expect(header.kid).toBe(await deviceKey.fingerPrint());
|
|
246
|
+
expect(header.x5c).toBeDefined();
|
|
247
|
+
expect(Array.isArray(header.x5c)).toBe(true);
|
|
248
|
+
expect(header.x5c?.length).toBe(1);
|
|
249
|
+
expect(header.x5t).toBeDefined();
|
|
250
|
+
expect(header["x5t#S256"]).toBeDefined();
|
|
251
|
+
});
|
|
252
|
+
it("should verify signed JWT with device public key", async () => {
|
|
253
|
+
const signMsg = new DeviceIdSignMsg(base64, deviceKey, certificate);
|
|
254
|
+
const payload = { ...jwtPayload, message: "verification test", id: 123 };
|
|
255
|
+
const jwt = await signMsg.sign(payload);
|
|
256
|
+
const devicePublicKey = await deviceKey.publicKey();
|
|
257
|
+
const deviceKeyForVerification = await importJWK(devicePublicKey, "ES256");
|
|
258
|
+
const { payload: verifiedPayload } = await jwtVerify(jwt, deviceKeyForVerification);
|
|
259
|
+
expect(verifiedPayload.message).toBe(payload.message);
|
|
260
|
+
expect(verifiedPayload.id).toBe(payload.id);
|
|
261
|
+
expect(verifiedPayload.iat).toBeDefined();
|
|
262
|
+
expect(verifiedPayload.exp).toBeDefined();
|
|
263
|
+
});
|
|
264
|
+
it("should include valid certificate thumbprints", async () => {
|
|
265
|
+
const signMsg = new DeviceIdSignMsg(base64, deviceKey, certificate);
|
|
266
|
+
const payload = { ...jwtPayload, test: "thumbprint validation" };
|
|
267
|
+
const jwt = await signMsg.sign(payload);
|
|
268
|
+
const header = decodeProtectedHeader(jwt);
|
|
269
|
+
expect(typeof header.x5t).toBe("string");
|
|
270
|
+
expect(header.x5t?.length).toBeGreaterThan(0);
|
|
271
|
+
expect(typeof header["x5t#S256"]).toBe("string");
|
|
272
|
+
expect(header["x5t#S256"].length).toBeGreaterThan(0);
|
|
273
|
+
});
|
|
274
|
+
it("should fail verification with wrong key", async () => {
|
|
275
|
+
const signMsg = new DeviceIdSignMsg(base64, deviceKey, certificate);
|
|
276
|
+
const payload = { ...jwtPayload, message: "wrong key test" };
|
|
277
|
+
const jwt = await signMsg.sign(payload);
|
|
278
|
+
const wrongKey = await DeviceIdKey.create();
|
|
279
|
+
const wrongPublicKey = await wrongKey.publicKey();
|
|
280
|
+
const wrongKeyForVerification = await importJWK(wrongPublicKey, "ES256");
|
|
281
|
+
await expect(jwtVerify(jwt, wrongKeyForVerification)).rejects.toThrow();
|
|
282
|
+
});
|
|
283
|
+
it("should verify JWT with valid certificate", async () => {
|
|
284
|
+
const signMsg = new DeviceIdSignMsg(base64, deviceKey, certificate);
|
|
285
|
+
const payload = { ...jwtPayload, message: "verification test", id: 123 };
|
|
286
|
+
const jwt = await signMsg.sign(payload);
|
|
287
|
+
expect(jwt).toBeDefined();
|
|
288
|
+
expect(typeof jwt).toBe("string");
|
|
289
|
+
const caCert = await ca.caCertificate();
|
|
290
|
+
const deviceVerifyMsg = new DeviceIdVerifyMsg(base64, [caCert.Ok()], {
|
|
291
|
+
clockTolerance: 60,
|
|
292
|
+
maxAge: 3600,
|
|
293
|
+
});
|
|
294
|
+
const ret = await deviceVerifyMsg.verifyWithCertificate(jwt);
|
|
295
|
+
expect(ret.valid).toBe(true);
|
|
296
|
+
});
|
|
297
|
+
it.skip("change the caKey", async () => {
|
|
298
|
+
const signMsg = new DeviceIdSignMsg(base64, deviceKey, certificate);
|
|
299
|
+
const payload = { ...jwtPayload, message: "verification test", id: 123 };
|
|
300
|
+
const jwt = await signMsg.sign(payload);
|
|
301
|
+
expect(jwt).toBeDefined();
|
|
302
|
+
expect(typeof jwt).toBe("string");
|
|
303
|
+
const newCaKey = await DeviceIdKey.create();
|
|
304
|
+
const newCa = new DeviceIdCA({
|
|
305
|
+
base64: sthis.txt.base64,
|
|
306
|
+
caKey: newCaKey,
|
|
307
|
+
caSubject,
|
|
308
|
+
actions: mockActions,
|
|
309
|
+
});
|
|
310
|
+
const deviceVerifyMsg = new DeviceIdVerifyMsg(base64, [(await newCa.caCertificate()).Ok()], {
|
|
311
|
+
clockTolerance: 60,
|
|
312
|
+
maxAge: 3600,
|
|
313
|
+
});
|
|
314
|
+
const ret = await deviceVerifyMsg.verifyWithCertificate(jwt);
|
|
315
|
+
expect(ret.valid).toBe(false);
|
|
316
|
+
});
|
|
317
|
+
it("use a new deviceId ", async () => {
|
|
318
|
+
const newDeviceKey = await DeviceIdKey.create();
|
|
319
|
+
const signMsg = new DeviceIdSignMsg(base64, newDeviceKey, certificate);
|
|
320
|
+
const payload = { ...jwtPayload, message: "verification test", id: 123 };
|
|
321
|
+
const jwt = await signMsg.sign(payload);
|
|
322
|
+
expect(jwt).toBeDefined();
|
|
323
|
+
expect(typeof jwt).toBe("string");
|
|
324
|
+
const newCaKey = await DeviceIdKey.create();
|
|
325
|
+
const newCa = new DeviceIdCA({
|
|
326
|
+
base64: sthis.txt.base64,
|
|
327
|
+
caKey: newCaKey,
|
|
328
|
+
caSubject,
|
|
329
|
+
actions: mockActions,
|
|
330
|
+
});
|
|
331
|
+
const deviceVerifyMsg = new DeviceIdVerifyMsg(base64, [(await newCa.caCertificate()).Ok()], {
|
|
332
|
+
clockTolerance: 60,
|
|
333
|
+
maxAge: 3600,
|
|
334
|
+
});
|
|
335
|
+
const ret = await deviceVerifyMsg.verifyWithCertificate(jwt);
|
|
336
|
+
expect(ret.valid).toBe(false);
|
|
337
|
+
});
|
|
338
|
+
it("use a forged caCert", async () => {
|
|
339
|
+
const signMsg = new DeviceIdSignMsg(base64, deviceKey, { ...certificate, nbf: certificate.nbf + 1 });
|
|
340
|
+
const payload = { ...jwtPayload, message: "verification test", id: 123 };
|
|
341
|
+
const jwt = await signMsg.sign(payload);
|
|
342
|
+
expect(jwt).toBeDefined();
|
|
343
|
+
expect(typeof jwt).toBe("string");
|
|
344
|
+
const newCaKey = await DeviceIdKey.create();
|
|
345
|
+
const newCa = new DeviceIdCA({
|
|
346
|
+
base64: sthis.txt.base64,
|
|
347
|
+
caKey: newCaKey,
|
|
348
|
+
caSubject,
|
|
349
|
+
actions: mockActions,
|
|
350
|
+
});
|
|
351
|
+
const deviceVerifyMsg = new DeviceIdVerifyMsg(base64, [(await newCa.caCertificate()).Ok()], {
|
|
352
|
+
clockTolerance: 60,
|
|
353
|
+
maxAge: 3600,
|
|
354
|
+
});
|
|
355
|
+
const ret = await deviceVerifyMsg.verifyWithCertificate(jwt);
|
|
356
|
+
expect(ret.valid).toBe(false);
|
|
357
|
+
});
|
|
358
|
+
});
|
|
359
|
+
//# sourceMappingURL=device-id.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-id.test.js","sourceRoot":"","sources":["../../jsr/runtime/device-id.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|