@seriousme/opifex 2.4.0 → 2.4.1

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.
@@ -9,7 +9,7 @@ import { MqttServer } from "../server/mod.ts";
9
9
 
10
10
  logger.level(LogLevel.info);
11
11
 
12
- const { key, cert, caCert } = generateLocalhostCerts();
12
+ const { key, cert, caCert } = await generateLocalhostCerts();
13
13
 
14
14
  test("Deno: Test pubSub using client and server", async () => {
15
15
  const server = new TlsServer(
@@ -1,95 +1,315 @@
1
- import forge from "node-forge";
2
-
3
1
  /**
4
- * Generates a minimal, in-memory TLS certificate bundle for localhost development.
5
- * Includes Root CA, Server Certificate, and Server Private Key with SAN support (IPv4 & IPv6).
2
+ * Generates a minimal TLS certificate bundle for localhost using Web Crypto API.
3
+ * Uses 0 external dependencies (pure JS ASN.1 DER encoding).
4
+ * Do NOT use this in a production setting
6
5
  */
7
- export function generateLocalhostCerts(): {
6
+ export async function generateLocalhostCerts(): Promise<{
8
7
  caCert: string;
9
8
  key: string;
10
9
  cert: string;
11
10
  fullChain: string;
12
- } {
13
- // Generate the keypairs
14
- // 2048-bit RSA is used here for fast generation during local development/testing
15
- const caKeys = forge.pki.rsa.generateKeyPair(2048);
16
- const serverKeys = forge.pki.rsa.generateKeyPair(2048);
17
-
18
- // Create root CA
19
- const caCert = forge.pki.createCertificate();
20
- caCert.publicKey = caKeys.publicKey;
21
- caCert.serialNumber = "01";
22
- caCert.validity.notBefore = new Date();
23
- caCert.validity.notAfter = new Date();
24
- caCert.validity.notAfter.setFullYear(
25
- caCert.validity.notBefore.getFullYear() + 1,
26
- ); // Valid for 1 year
27
-
28
- // Hardcoded CA Attributes
29
- const caAttrs = [{ name: "commonName", value: "Local Dev Root CA" }];
30
- caCert.setSubject(caAttrs);
31
- caCert.setIssuer(caAttrs); // Self-signed: issuer equals subject
32
-
33
- // Critical for CA: Define basic constraints to flag this certificate as a trusted issuer
34
- caCert.setExtensions([
35
- { name: "basicConstraints", cA: true, critical: true },
36
- {
37
- name: "keyUsage",
38
- keyCertSign: true,
39
- digitalSignature: true,
40
- critical: true,
41
- },
11
+ }> {
12
+ const algorithm: RsaHashedKeyGenParams = {
13
+ name: "RSASSA-PKCS1-v1_5",
14
+ hash: "SHA-256",
15
+ modulusLength: 2048,
16
+ publicExponent: new Uint8Array([1, 0, 1]),
17
+ };
18
+
19
+ // 1. Generate Keypairs using Web Crypto
20
+ const caKeys = await crypto.subtle.generateKey(algorithm, true, [
21
+ "sign",
22
+ "verify",
23
+ ]);
24
+ const serverKeys = await crypto.subtle.generateKey(algorithm, true, [
25
+ "sign",
26
+ "verify",
42
27
  ]);
43
28
 
44
- // Sign the CA certificate using its own private key
45
- caCert.sign(caKeys.privateKey, forge.md.sha256.create());
46
-
47
- // Create server certificate for localhost, valid for a year
48
- const serverCert = forge.pki.createCertificate();
49
- serverCert.publicKey = serverKeys.publicKey;
50
- serverCert.serialNumber = "02"; // Unique serial number within this CA scope
51
- serverCert.validity.notBefore = new Date();
52
- serverCert.validity.notAfter = new Date();
53
- serverCert.validity.notAfter.setFullYear(
54
- serverCert.validity.notBefore.getFullYear() + 1,
55
- );
29
+ const now = new Date();
30
+ const nextYear = new Date(now.getTime() + 365 * 24 * 60 * 60 * 1000);
56
31
 
57
- // Hardcoded Server Attributes
58
- serverCert.setSubject([{ name: "commonName", value: "localhost" }]);
59
- serverCert.setIssuer(caCert.subject.attributes); // Issued by our custom Root CA
60
-
61
- // Critical for Modern TLS: X509v3 Extensions containing Subject Alternative Names (SAN)
62
- // Ensures compatibility with strict TLS parsers (like Deno/rustls, Go, Node.js, and modern browsers)
63
- serverCert.setExtensions([
64
- { name: "basicConstraints", cA: false, critical: true },
65
- {
66
- name: "keyUsage",
67
- digitalSignature: true,
68
- keyEncipherment: true,
69
- critical: true,
70
- },
71
- {
72
- name: "subjectAltName",
73
- altNames: [
74
- { type: 2, value: "localhost" }, // type 2 = DNS
75
- { type: 7, ip: "127.0.0.1" }, // type 7 = IPv4 loopback
76
- { type: 7, ip: "::1" }, // type 7 = IPv6 loopback
77
- ],
78
- },
79
- ]);
32
+ // 2. Generate Root CA Certificate (Self-signed)
33
+ const caCertDer = await createX509Cert({
34
+ serialNumber: 1,
35
+ subjectCN: "Local Dev Root CA",
36
+ issuerCN: "Local Dev Root CA",
37
+ notBefore: now,
38
+ notAfter: nextYear,
39
+ publicKey: caKeys.publicKey,
40
+ signingPrivateKey: caKeys.privateKey,
41
+ isCA: true,
42
+ });
80
43
 
81
- // Sign the server certificate using the Root CA's private key
82
- serverCert.sign(caKeys.privateKey, forge.md.sha256.create());
44
+ // 3. Generate Server Certificate (Signed by Root CA)
45
+ const serverCertDer = await createX509Cert({
46
+ serialNumber: 2,
47
+ subjectCN: "localhost",
48
+ issuerCN: "Local Dev Root CA",
49
+ notBefore: now,
50
+ notAfter: nextYear,
51
+ publicKey: serverKeys.publicKey,
52
+ signingPrivateKey: caKeys.privateKey,
53
+ isCA: false,
54
+ sans: [
55
+ { type: "dns", value: "localhost" },
56
+ { type: "ip", value: "127.0.0.1" },
57
+ { type: "ip", value: "::1" },
58
+ ],
59
+ });
83
60
 
84
- // convert data to PEM
85
- const caCertPem = forge.pki.certificateToPem(caCert);
86
- const serverCertPem = forge.pki.certificateToPem(serverCert);
87
- const serverKeyPem = forge.pki.privateKeyToPem(serverKeys.privateKey);
61
+ // Export Server Private Key to PKCS#8 PEM
62
+ const exportedPrivateKey = await crypto.subtle.exportKey(
63
+ "pkcs8",
64
+ serverKeys.privateKey,
65
+ );
66
+ const serverKeyPem = pemEncode(exportedPrivateKey, "PRIVATE KEY");
67
+ const caCertPem = pemEncode(caCertDer, "CERTIFICATE");
68
+ const serverCertPem = pemEncode(serverCertDer, "CERTIFICATE");
88
69
 
89
70
  return {
90
71
  caCert: caCertPem,
91
72
  key: serverKeyPem,
92
73
  cert: serverCertPem,
93
- fullChain: `${serverCertPem}\n${caCertPem}`, // Full certificate chain (Server + CA)
74
+ fullChain: `${serverCertPem}\n${caCertPem}`,
94
75
  };
95
76
  }
77
+
78
+ /* ====================================================================
79
+ Pure ASN.1 / DER Encoders (Zero-Dependency X.509 Construction)
80
+ ==================================================================== */
81
+
82
+ interface CertOptions {
83
+ serialNumber: number;
84
+ subjectCN: string;
85
+ issuerCN: string;
86
+ notBefore: Date;
87
+ notAfter: Date;
88
+ publicKey: CryptoKey;
89
+ signingPrivateKey: CryptoKey;
90
+ isCA: boolean;
91
+ sans?: Array<{ type: "dns" | "ip"; value: string }>;
92
+ }
93
+
94
+ async function createX509Cert(opts: CertOptions): Promise<ArrayBuffer> {
95
+ const spkiBuffer = await crypto.subtle.exportKey("spki", opts.publicKey);
96
+
97
+ // Building Extensions
98
+ const extensionsList: Uint8Array[] = [];
99
+
100
+ // 1. Basic Constraints
101
+ const basicConstraintsValue = derSequence([
102
+ ...(opts.isCA ? [derBoolean(true)] : []),
103
+ ]);
104
+ extensionsList.push(
105
+ derSequence([
106
+ derOid("2.5.29.19"), // id-ce-basicConstraints
107
+ derBoolean(true), // Critical
108
+ derOctetString(basicConstraintsValue),
109
+ ]),
110
+ );
111
+
112
+ // 2. Key Usage (Fixed BitString unused bits padding)
113
+ if (opts.isCA) {
114
+ // keyCertSign (bit 5) | digitalSignature (bit 0) -> 0x84, 1 unused bit in last byte (0x01)
115
+ extensionsList.push(
116
+ derSequence([
117
+ derOid("2.5.29.15"),
118
+ derBoolean(true),
119
+ derOctetString(derBitString(new Uint8Array([0x84]), 1)),
120
+ ]),
121
+ );
122
+ } else {
123
+ // digitalSignature (bit 0) | keyEncipherment (bit 2) -> 0xa0, 5 unused bits (0x05)
124
+ extensionsList.push(
125
+ derSequence([
126
+ derOid("2.5.29.15"),
127
+ derBoolean(true),
128
+ derOctetString(derBitString(new Uint8Array([0xa0]), 5)),
129
+ ]),
130
+ );
131
+ }
132
+
133
+ // 3. Extended Key Usage (Required for TLS Server Authentication)
134
+ if (!opts.isCA) {
135
+ const ekuValue = derSequence([
136
+ derOid("1.3.6.1.5.5.7.3.1"), // id-kp-serverAuth
137
+ ]);
138
+ extensionsList.push(
139
+ derSequence([
140
+ derOid("2.5.29.37"), // id-ce-extKeyUsage
141
+ derOctetString(ekuValue),
142
+ ]),
143
+ );
144
+ }
145
+
146
+ // 4. Subject Alternative Names (SAN)
147
+ if (opts.sans && opts.sans.length > 0) {
148
+ const sanEntries: Uint8Array[] = opts.sans.map((san) => {
149
+ if (san.type === "dns") {
150
+ return derTag(0x82, new TextEncoder().encode(san.value)); // dNSName [2]
151
+ } else {
152
+ const ipParts = san.value.includes(":")
153
+ ? parseIPv6(san.value)
154
+ : san.value.split(".").map((v) => parseInt(v, 10));
155
+ return derTag(0x87, new Uint8Array(ipParts)); // iPAddress [7]
156
+ }
157
+ });
158
+
159
+ const sanValue = derSequence(sanEntries);
160
+ extensionsList.push(
161
+ derSequence([
162
+ derOid("2.5.29.17"), // id-ce-subjectAltName
163
+ derOctetString(sanValue),
164
+ ]),
165
+ );
166
+ }
167
+
168
+ const extensionsContainer = derTag(0xa3, derSequence(extensionsList));
169
+
170
+ // TBSCertificate (To Be Signed)
171
+ const tbsCert = derSequence([
172
+ derTag(0xa0, derInteger(2)), // Version v3 (2)
173
+ derInteger(opts.serialNumber),
174
+ derSequence([derOid("1.2.840.113549.1.1.11")]), // sha256WithRSAEncryption
175
+ derSequence([
176
+ derSet([
177
+ derSequence([derOid("2.5.4.3"), derPrintableString(opts.issuerCN)]),
178
+ ]),
179
+ ]),
180
+ derSequence([derUTCTime(opts.notBefore), derUTCTime(opts.notAfter)]),
181
+ derSequence([
182
+ derSet([
183
+ derSequence([derOid("2.5.4.3"), derPrintableString(opts.subjectCN)]),
184
+ ]),
185
+ ]),
186
+ new Uint8Array(spkiBuffer),
187
+ extensionsContainer,
188
+ ]);
189
+
190
+ // Sign TBSCertificate
191
+ const tbsBuffer = tbsCert.buffer.slice(
192
+ tbsCert.byteOffset,
193
+ tbsCert.byteOffset + tbsCert.byteLength,
194
+ );
195
+
196
+ const signature = await crypto.subtle.sign(
197
+ { name: "RSASSA-PKCS1-v1_5" },
198
+ opts.signingPrivateKey,
199
+ tbsBuffer as unknown as ArrayBuffer,
200
+ );
201
+
202
+ // Final X.509 Certificate
203
+ const finalSequence = derSequence([
204
+ tbsCert,
205
+ derSequence([derOid("1.2.840.113549.1.1.11")]),
206
+ derBitString(new Uint8Array(signature), 0),
207
+ ]);
208
+
209
+ return finalSequence.buffer.slice(
210
+ finalSequence.byteOffset,
211
+ finalSequence.byteOffset + finalSequence.byteLength,
212
+ ) as unknown as ArrayBuffer;
213
+ }
214
+
215
+ /* --- DER Primitive Encoding Helpers --- */
216
+
217
+ function concatBuffers(bufs: Uint8Array[]): Uint8Array {
218
+ const total = bufs.reduce((sum, b) => sum + b.length, 0);
219
+ const res = new Uint8Array(new ArrayBuffer(total));
220
+ let offset = 0;
221
+ for (const b of bufs) {
222
+ res.set(b, offset);
223
+ offset += b.length;
224
+ }
225
+ return res;
226
+ }
227
+
228
+ function derTag(tag: number, payload: Uint8Array): Uint8Array {
229
+ const len = payload.length;
230
+ let lenBytes: Uint8Array;
231
+ if (len < 128) {
232
+ lenBytes = new Uint8Array([len]);
233
+ } else if (len < 256) {
234
+ lenBytes = new Uint8Array([0x81, len]);
235
+ } else {
236
+ lenBytes = new Uint8Array([0x82, (len >> 8) & 0xff, len & 0xff]);
237
+ }
238
+ return concatBuffers([new Uint8Array([tag]), lenBytes, payload]);
239
+ }
240
+
241
+ function derSequence(items: Uint8Array[]): Uint8Array {
242
+ return derTag(0x30, concatBuffers(items));
243
+ }
244
+
245
+ function derSet(items: Uint8Array[]): Uint8Array {
246
+ return derTag(0x31, concatBuffers(items));
247
+ }
248
+
249
+ function derBoolean(val: boolean): Uint8Array {
250
+ return derTag(0x01, new Uint8Array([val ? 0xff : 0x00]));
251
+ }
252
+
253
+ function derInteger(val: number): Uint8Array {
254
+ return derTag(0x02, new Uint8Array([val]));
255
+ }
256
+
257
+ function derOctetString(val: Uint8Array): Uint8Array {
258
+ return derTag(0x04, val);
259
+ }
260
+
261
+ function derPrintableString(val: string): Uint8Array {
262
+ return derTag(0x13, new TextEncoder().encode(val));
263
+ }
264
+
265
+ function derOid(oidStr: string): Uint8Array {
266
+ const parts = oidStr.split(".").map((v) => parseInt(v, 10));
267
+ const bytes = [parts[0]! * 40 + parts[1]!];
268
+ for (let i = 2; i < parts.length; i++) {
269
+ let v = parts[i] || 0;
270
+ const stack: number[] = [];
271
+ stack.push(v & 0x7f);
272
+ while ((v >>= 7) > 0) {
273
+ stack.push((v & 0x7f) | 0x80);
274
+ }
275
+ bytes.push(...stack.reverse());
276
+ }
277
+ return derTag(0x06, new Uint8Array(bytes));
278
+ }
279
+
280
+ function derBitString(val: Uint8Array, unusedBits = 0): Uint8Array {
281
+ return derTag(0x03, concatBuffers([new Uint8Array([unusedBits]), val]));
282
+ }
283
+
284
+ function derUTCTime(date: Date): Uint8Array {
285
+ const pad = (n: number) => n.toString().padStart(2, "0");
286
+ const str = date.getUTCFullYear().toString().slice(-2) +
287
+ pad(date.getUTCMonth() + 1) +
288
+ pad(date.getUTCDate()) +
289
+ pad(date.getUTCHours()) +
290
+ pad(date.getUTCMinutes()) +
291
+ pad(date.getUTCSeconds()) +
292
+ "Z";
293
+ return derTag(0x17, new TextEncoder().encode(str));
294
+ }
295
+
296
+ function parseIPv6(ip: string): number[] {
297
+ const parts = ip.split("::");
298
+ const head = parts[0] ? parts[0].split(":").map((h) => parseInt(h, 16)) : [];
299
+ const tail = parts[1] ? parts[1].split(":").map((h) => parseInt(h, 16)) : [];
300
+ const missing = 8 - (head.length + tail.length);
301
+ const words = [...head, ...Array(missing).fill(0), ...tail];
302
+ const bytes: number[] = [];
303
+ for (const w of words) {
304
+ bytes.push((w >> 8) & 0xff, w & 0xff);
305
+ }
306
+ return bytes;
307
+ }
308
+
309
+ function pemEncode(buffer: ArrayBuffer, label: string): string {
310
+ const base64 = btoa(String.fromCharCode(...new Uint8Array(buffer)));
311
+ const lines = base64.match(/.{1,64}/g) || [];
312
+ return `-----BEGIN ${label}-----\n${
313
+ lines.join("\n")
314
+ }\n-----END ${label}-----`;
315
+ }
@@ -1,11 +1,12 @@
1
1
  /**
2
- * Generates a minimal, in-memory TLS certificate bundle for localhost development.
3
- * Includes Root CA, Server Certificate, and Server Private Key with SAN support (IPv4 & IPv6).
2
+ * Generates a minimal TLS certificate bundle for localhost using Web Crypto API.
3
+ * Uses 0 external dependencies (pure JS ASN.1 DER encoding).
4
+ * Do NOT use this in a production setting
4
5
  */
5
- export declare function generateLocalhostCerts(): {
6
+ export declare function generateLocalhostCerts(): Promise<{
6
7
  caCert: string;
7
8
  key: string;
8
9
  cert: string;
9
10
  fullChain: string;
10
- };
11
+ }>;
11
12
  //# sourceMappingURL=generateCert.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateCert.d.ts","sourceRoot":"","sources":["../../dev_utils/generateCert.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAmFA"}
1
+ {"version":3,"file":"generateCert.d.ts","sourceRoot":"","sources":["../../dev_utils/generateCert.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAiED"}
@@ -1,76 +1,241 @@
1
- import forge from "node-forge";
2
1
  /**
3
- * Generates a minimal, in-memory TLS certificate bundle for localhost development.
4
- * Includes Root CA, Server Certificate, and Server Private Key with SAN support (IPv4 & IPv6).
2
+ * Generates a minimal TLS certificate bundle for localhost using Web Crypto API.
3
+ * Uses 0 external dependencies (pure JS ASN.1 DER encoding).
4
+ * Do NOT use this in a production setting
5
5
  */
6
- export function generateLocalhostCerts() {
7
- // Generate the keypairs
8
- // 2048-bit RSA is used here for fast generation during local development/testing
9
- const caKeys = forge.pki.rsa.generateKeyPair(2048);
10
- const serverKeys = forge.pki.rsa.generateKeyPair(2048);
11
- // Create root CA
12
- const caCert = forge.pki.createCertificate();
13
- caCert.publicKey = caKeys.publicKey;
14
- caCert.serialNumber = "01";
15
- caCert.validity.notBefore = new Date();
16
- caCert.validity.notAfter = new Date();
17
- caCert.validity.notAfter.setFullYear(caCert.validity.notBefore.getFullYear() + 1); // Valid for 1 year
18
- // Hardcoded CA Attributes
19
- const caAttrs = [{ name: "commonName", value: "Local Dev Root CA" }];
20
- caCert.setSubject(caAttrs);
21
- caCert.setIssuer(caAttrs); // Self-signed: issuer equals subject
22
- // Critical for CA: Define basic constraints to flag this certificate as a trusted issuer
23
- caCert.setExtensions([
24
- { name: "basicConstraints", cA: true, critical: true },
25
- {
26
- name: "keyUsage",
27
- keyCertSign: true,
28
- digitalSignature: true,
29
- critical: true,
30
- },
6
+ export async function generateLocalhostCerts() {
7
+ const algorithm = {
8
+ name: "RSASSA-PKCS1-v1_5",
9
+ hash: "SHA-256",
10
+ modulusLength: 2048,
11
+ publicExponent: new Uint8Array([1, 0, 1]),
12
+ };
13
+ // 1. Generate Keypairs using Web Crypto
14
+ const caKeys = await crypto.subtle.generateKey(algorithm, true, [
15
+ "sign",
16
+ "verify",
31
17
  ]);
32
- // Sign the CA certificate using its own private key
33
- caCert.sign(caKeys.privateKey, forge.md.sha256.create());
34
- // Create server certificate for localhost, valid for a year
35
- const serverCert = forge.pki.createCertificate();
36
- serverCert.publicKey = serverKeys.publicKey;
37
- serverCert.serialNumber = "02"; // Unique serial number within this CA scope
38
- serverCert.validity.notBefore = new Date();
39
- serverCert.validity.notAfter = new Date();
40
- serverCert.validity.notAfter.setFullYear(serverCert.validity.notBefore.getFullYear() + 1);
41
- // Hardcoded Server Attributes
42
- serverCert.setSubject([{ name: "commonName", value: "localhost" }]);
43
- serverCert.setIssuer(caCert.subject.attributes); // Issued by our custom Root CA
44
- // Critical for Modern TLS: X509v3 Extensions containing Subject Alternative Names (SAN)
45
- // Ensures compatibility with strict TLS parsers (like Deno/rustls, Go, Node.js, and modern browsers)
46
- serverCert.setExtensions([
47
- { name: "basicConstraints", cA: false, critical: true },
48
- {
49
- name: "keyUsage",
50
- digitalSignature: true,
51
- keyEncipherment: true,
52
- critical: true,
53
- },
54
- {
55
- name: "subjectAltName",
56
- altNames: [
57
- { type: 2, value: "localhost" }, // type 2 = DNS
58
- { type: 7, ip: "127.0.0.1" }, // type 7 = IPv4 loopback
59
- { type: 7, ip: "::1" }, // type 7 = IPv6 loopback
60
- ],
61
- },
18
+ const serverKeys = await crypto.subtle.generateKey(algorithm, true, [
19
+ "sign",
20
+ "verify",
62
21
  ]);
63
- // Sign the server certificate using the Root CA's private key
64
- serverCert.sign(caKeys.privateKey, forge.md.sha256.create());
65
- // convert data to PEM
66
- const caCertPem = forge.pki.certificateToPem(caCert);
67
- const serverCertPem = forge.pki.certificateToPem(serverCert);
68
- const serverKeyPem = forge.pki.privateKeyToPem(serverKeys.privateKey);
22
+ const now = new Date();
23
+ const nextYear = new Date(now.getTime() + 365 * 24 * 60 * 60 * 1000);
24
+ // 2. Generate Root CA Certificate (Self-signed)
25
+ const caCertDer = await createX509Cert({
26
+ serialNumber: 1,
27
+ subjectCN: "Local Dev Root CA",
28
+ issuerCN: "Local Dev Root CA",
29
+ notBefore: now,
30
+ notAfter: nextYear,
31
+ publicKey: caKeys.publicKey,
32
+ signingPrivateKey: caKeys.privateKey,
33
+ isCA: true,
34
+ });
35
+ // 3. Generate Server Certificate (Signed by Root CA)
36
+ const serverCertDer = await createX509Cert({
37
+ serialNumber: 2,
38
+ subjectCN: "localhost",
39
+ issuerCN: "Local Dev Root CA",
40
+ notBefore: now,
41
+ notAfter: nextYear,
42
+ publicKey: serverKeys.publicKey,
43
+ signingPrivateKey: caKeys.privateKey,
44
+ isCA: false,
45
+ sans: [
46
+ { type: "dns", value: "localhost" },
47
+ { type: "ip", value: "127.0.0.1" },
48
+ { type: "ip", value: "::1" },
49
+ ],
50
+ });
51
+ // Export Server Private Key to PKCS#8 PEM
52
+ const exportedPrivateKey = await crypto.subtle.exportKey("pkcs8", serverKeys.privateKey);
53
+ const serverKeyPem = pemEncode(exportedPrivateKey, "PRIVATE KEY");
54
+ const caCertPem = pemEncode(caCertDer, "CERTIFICATE");
55
+ const serverCertPem = pemEncode(serverCertDer, "CERTIFICATE");
69
56
  return {
70
57
  caCert: caCertPem,
71
58
  key: serverKeyPem,
72
59
  cert: serverCertPem,
73
- fullChain: `${serverCertPem}\n${caCertPem}`, // Full certificate chain (Server + CA)
60
+ fullChain: `${serverCertPem}\n${caCertPem}`,
74
61
  };
75
62
  }
63
+ async function createX509Cert(opts) {
64
+ const spkiBuffer = await crypto.subtle.exportKey("spki", opts.publicKey);
65
+ // Building Extensions
66
+ const extensionsList = [];
67
+ // 1. Basic Constraints
68
+ const basicConstraintsValue = derSequence([
69
+ ...(opts.isCA ? [derBoolean(true)] : []),
70
+ ]);
71
+ extensionsList.push(derSequence([
72
+ derOid("2.5.29.19"), // id-ce-basicConstraints
73
+ derBoolean(true), // Critical
74
+ derOctetString(basicConstraintsValue),
75
+ ]));
76
+ // 2. Key Usage (Fixed BitString unused bits padding)
77
+ if (opts.isCA) {
78
+ // keyCertSign (bit 5) | digitalSignature (bit 0) -> 0x84, 1 unused bit in last byte (0x01)
79
+ extensionsList.push(derSequence([
80
+ derOid("2.5.29.15"),
81
+ derBoolean(true),
82
+ derOctetString(derBitString(new Uint8Array([0x84]), 1)),
83
+ ]));
84
+ }
85
+ else {
86
+ // digitalSignature (bit 0) | keyEncipherment (bit 2) -> 0xa0, 5 unused bits (0x05)
87
+ extensionsList.push(derSequence([
88
+ derOid("2.5.29.15"),
89
+ derBoolean(true),
90
+ derOctetString(derBitString(new Uint8Array([0xa0]), 5)),
91
+ ]));
92
+ }
93
+ // 3. Extended Key Usage (Required for TLS Server Authentication)
94
+ if (!opts.isCA) {
95
+ const ekuValue = derSequence([
96
+ derOid("1.3.6.1.5.5.7.3.1"), // id-kp-serverAuth
97
+ ]);
98
+ extensionsList.push(derSequence([
99
+ derOid("2.5.29.37"), // id-ce-extKeyUsage
100
+ derOctetString(ekuValue),
101
+ ]));
102
+ }
103
+ // 4. Subject Alternative Names (SAN)
104
+ if (opts.sans && opts.sans.length > 0) {
105
+ const sanEntries = opts.sans.map((san) => {
106
+ if (san.type === "dns") {
107
+ return derTag(0x82, new TextEncoder().encode(san.value)); // dNSName [2]
108
+ }
109
+ else {
110
+ const ipParts = san.value.includes(":")
111
+ ? parseIPv6(san.value)
112
+ : san.value.split(".").map((v) => parseInt(v, 10));
113
+ return derTag(0x87, new Uint8Array(ipParts)); // iPAddress [7]
114
+ }
115
+ });
116
+ const sanValue = derSequence(sanEntries);
117
+ extensionsList.push(derSequence([
118
+ derOid("2.5.29.17"), // id-ce-subjectAltName
119
+ derOctetString(sanValue),
120
+ ]));
121
+ }
122
+ const extensionsContainer = derTag(0xa3, derSequence(extensionsList));
123
+ // TBSCertificate (To Be Signed)
124
+ const tbsCert = derSequence([
125
+ derTag(0xa0, derInteger(2)), // Version v3 (2)
126
+ derInteger(opts.serialNumber),
127
+ derSequence([derOid("1.2.840.113549.1.1.11")]), // sha256WithRSAEncryption
128
+ derSequence([
129
+ derSet([
130
+ derSequence([derOid("2.5.4.3"), derPrintableString(opts.issuerCN)]),
131
+ ]),
132
+ ]),
133
+ derSequence([derUTCTime(opts.notBefore), derUTCTime(opts.notAfter)]),
134
+ derSequence([
135
+ derSet([
136
+ derSequence([derOid("2.5.4.3"), derPrintableString(opts.subjectCN)]),
137
+ ]),
138
+ ]),
139
+ new Uint8Array(spkiBuffer),
140
+ extensionsContainer,
141
+ ]);
142
+ // Sign TBSCertificate
143
+ const tbsBuffer = tbsCert.buffer.slice(tbsCert.byteOffset, tbsCert.byteOffset + tbsCert.byteLength);
144
+ const signature = await crypto.subtle.sign({ name: "RSASSA-PKCS1-v1_5" }, opts.signingPrivateKey, tbsBuffer);
145
+ // Final X.509 Certificate
146
+ const finalSequence = derSequence([
147
+ tbsCert,
148
+ derSequence([derOid("1.2.840.113549.1.1.11")]),
149
+ derBitString(new Uint8Array(signature), 0),
150
+ ]);
151
+ return finalSequence.buffer.slice(finalSequence.byteOffset, finalSequence.byteOffset + finalSequence.byteLength);
152
+ }
153
+ /* --- DER Primitive Encoding Helpers --- */
154
+ function concatBuffers(bufs) {
155
+ const total = bufs.reduce((sum, b) => sum + b.length, 0);
156
+ const res = new Uint8Array(new ArrayBuffer(total));
157
+ let offset = 0;
158
+ for (const b of bufs) {
159
+ res.set(b, offset);
160
+ offset += b.length;
161
+ }
162
+ return res;
163
+ }
164
+ function derTag(tag, payload) {
165
+ const len = payload.length;
166
+ let lenBytes;
167
+ if (len < 128) {
168
+ lenBytes = new Uint8Array([len]);
169
+ }
170
+ else if (len < 256) {
171
+ lenBytes = new Uint8Array([0x81, len]);
172
+ }
173
+ else {
174
+ lenBytes = new Uint8Array([0x82, (len >> 8) & 0xff, len & 0xff]);
175
+ }
176
+ return concatBuffers([new Uint8Array([tag]), lenBytes, payload]);
177
+ }
178
+ function derSequence(items) {
179
+ return derTag(0x30, concatBuffers(items));
180
+ }
181
+ function derSet(items) {
182
+ return derTag(0x31, concatBuffers(items));
183
+ }
184
+ function derBoolean(val) {
185
+ return derTag(0x01, new Uint8Array([val ? 0xff : 0x00]));
186
+ }
187
+ function derInteger(val) {
188
+ return derTag(0x02, new Uint8Array([val]));
189
+ }
190
+ function derOctetString(val) {
191
+ return derTag(0x04, val);
192
+ }
193
+ function derPrintableString(val) {
194
+ return derTag(0x13, new TextEncoder().encode(val));
195
+ }
196
+ function derOid(oidStr) {
197
+ const parts = oidStr.split(".").map((v) => parseInt(v, 10));
198
+ const bytes = [parts[0] * 40 + parts[1]];
199
+ for (let i = 2; i < parts.length; i++) {
200
+ let v = parts[i] || 0;
201
+ const stack = [];
202
+ stack.push(v & 0x7f);
203
+ while ((v >>= 7) > 0) {
204
+ stack.push((v & 0x7f) | 0x80);
205
+ }
206
+ bytes.push(...stack.reverse());
207
+ }
208
+ return derTag(0x06, new Uint8Array(bytes));
209
+ }
210
+ function derBitString(val, unusedBits = 0) {
211
+ return derTag(0x03, concatBuffers([new Uint8Array([unusedBits]), val]));
212
+ }
213
+ function derUTCTime(date) {
214
+ const pad = (n) => n.toString().padStart(2, "0");
215
+ const str = date.getUTCFullYear().toString().slice(-2) +
216
+ pad(date.getUTCMonth() + 1) +
217
+ pad(date.getUTCDate()) +
218
+ pad(date.getUTCHours()) +
219
+ pad(date.getUTCMinutes()) +
220
+ pad(date.getUTCSeconds()) +
221
+ "Z";
222
+ return derTag(0x17, new TextEncoder().encode(str));
223
+ }
224
+ function parseIPv6(ip) {
225
+ const parts = ip.split("::");
226
+ const head = parts[0] ? parts[0].split(":").map((h) => parseInt(h, 16)) : [];
227
+ const tail = parts[1] ? parts[1].split(":").map((h) => parseInt(h, 16)) : [];
228
+ const missing = 8 - (head.length + tail.length);
229
+ const words = [...head, ...Array(missing).fill(0), ...tail];
230
+ const bytes = [];
231
+ for (const w of words) {
232
+ bytes.push((w >> 8) & 0xff, w & 0xff);
233
+ }
234
+ return bytes;
235
+ }
236
+ function pemEncode(buffer, label) {
237
+ const base64 = btoa(String.fromCharCode(...new Uint8Array(buffer)));
238
+ const lines = base64.match(/.{1,64}/g) || [];
239
+ return `-----BEGIN ${label}-----\n${lines.join("\n")}\n-----END ${label}-----`;
240
+ }
76
241
  //# sourceMappingURL=generateCert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateCert.js","sourceRoot":"","sources":["../../dev_utils/generateCert.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generateCert.js","sourceRoot":"","sources":["../../dev_utils/generateCert.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ test("Test pubSub using TLS client and a TCP client", async function () {
11
11
  // the localhost certs generate here are great for testing but lack securiity
12
12
  // use something like LetsEncrypt for any serious server
13
13
  // generateLocalhostCerts is a dev tool and relies on node-forge as a (dev)dependency
14
- const { key, cert, caCert } = generateLocalhostCerts();
14
+ const { key, cert, caCert } = await generateLocalhostCerts();
15
15
  // first create the mqttServer, so we can pass it to multiple protocol servers
16
16
  const mqttServer = new MqttServer({});
17
17
  const tlsServer = new TlsServer({ port: 0, key, cert }, mqttServer);
@@ -1 +1 @@
1
- {"version":3,"file":"mqtt+mqtts.test.js","sourceRoot":"","sources":["../../examples/mqtt+mqtts.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mqtt+mqtts.test.js","sourceRoot":"","sources":["../../examples/mqtt+mqtts.test.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ test("Test pubSub using TLS client and server and sqlitePersistence", async func
10
10
  // the localhost certs generate here are great for testing but lack securiity
11
11
  // use something like LetsEncrypt for any serious server
12
12
  // generateLocalhostCerts is a dev tool and relies on node-forge as a (dev)dependency
13
- const { key, cert, caCert } = generateLocalhostCerts();
13
+ const { key, cert, caCert } = await generateLocalhostCerts();
14
14
  const dbFile = ":memory:";
15
15
  // .start() combines instance creation and async initialization
16
16
  const persistence = await SqlitePersistence.start(dbFile);
@@ -1 +1 @@
1
- {"version":3,"file":"mqtts.test.js","sourceRoot":"","sources":["../../examples/mqtts.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mqtts.test.js","sourceRoot":"","sources":["../../examples/mqtts.test.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ test("Test pubSub using TLS client and a TCP client", async function () {
14
14
  // the localhost certs generate here are great for testing but lack securiity
15
15
  // use something like LetsEncrypt for any serious server
16
16
  // generateLocalhostCerts is a dev tool and relies on node-forge as a (dev)dependency
17
- const { key, cert, caCert } = generateLocalhostCerts();
17
+ const { key, cert, caCert } = await generateLocalhostCerts();
18
18
  // first create the mqttServer, so we can pass it to multiple protocol servers
19
19
  const mqttServer = new MqttServer({});
20
20
 
@@ -13,7 +13,7 @@ test("Test pubSub using TLS client and server and sqlitePersistence", async func
13
13
  // the localhost certs generate here are great for testing but lack securiity
14
14
  // use something like LetsEncrypt for any serious server
15
15
  // generateLocalhostCerts is a dev tool and relies on node-forge as a (dev)dependency
16
- const { key, cert, caCert } = generateLocalhostCerts();
16
+ const { key, cert, caCert } = await generateLocalhostCerts();
17
17
  const dbFile = ":memory:";
18
18
  // .start() combines instance creation and async initialization
19
19
  const persistence = await SqlitePersistence.start(dbFile);
@@ -9,7 +9,7 @@ import { MqttServer } from "../server/mod.ts";
9
9
 
10
10
  logger.level(LogLevel.info);
11
11
 
12
- const { key, cert, caCert } = generateLocalhostCerts();
12
+ const { key, cert, caCert } = await generateLocalhostCerts();
13
13
 
14
14
  test("Test pubSub using client and server", async () => {
15
15
  const server = new TlsServer({ port: 0, key, cert }, {});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seriousme/opifex",
3
- "version": "2.4.0",
3
+ "version": "2.4.1",
4
4
  "description": "MQTT client & server for Deno & NodeJS and Bun",
5
5
  "author": "Hans Klunder",
6
6
  "license": "MIT",
@@ -100,8 +100,6 @@
100
100
  }
101
101
  },
102
102
  "devDependencies": {
103
- "@types/node": "^26.6.5",
104
- "@types/node-forge": "^1.3.14",
105
- "node-forge": "^1.4.0"
103
+ "@types/node": "^26.6.5"
106
104
  }
107
105
  }