@ai-ecoverse/slicc-kernel 1.153.0 → 1.154.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.
- package/README.md +2 -1
- package/dist/driver-worker.js.map +2 -2
- package/dist/index.js.map +2 -2
- package/dist/kernel-worker.js +53 -24
- package/dist/kernel-worker.js.map +3 -3
- package/dist/node-driver-worker.js.map +2 -2
- package/dist/node-process-worker.js +11 -4
- package/dist/node-process-worker.js.map +2 -2
- package/dist/node.js +53 -24
- package/dist/node.js.map +3 -3
- package/dist/process-worker.js +11 -4
- package/dist/process-worker.js.map +2 -2
- package/dist/types/kernel/embedder.d.ts +1 -0
- package/dist/types/kernel/net/tls-client.d.ts +4 -1
- package/dist/types/kernel/net/tls-engine.d.ts +5 -2
- package/dist/types/kernel/net/tls-server.d.ts +2 -0
- package/dist/types/kernel/net/tls-uplink.d.ts +2 -0
- package/dist/types/kernel/socket-syscalls.d.ts +3 -0
- package/dist/types/process/js/js-net.d.ts +3 -0
- package/package.json +5 -5
package/dist/node.js
CHANGED
|
@@ -3562,7 +3562,7 @@ function satisfies(version, range2) {
|
|
|
3562
3562
|
}
|
|
3563
3563
|
|
|
3564
3564
|
// src/version.ts
|
|
3565
|
-
var KERNEL_VERSION = true ? "1.
|
|
3565
|
+
var KERNEL_VERSION = true ? "1.154.1" : "0.0.0-dev";
|
|
3566
3566
|
var OS_RELEASE = "6.0.0-slicc";
|
|
3567
3567
|
function procVersion() {
|
|
3568
3568
|
return `Linux version ${OS_RELEASE} (slicc-kernel ${KERNEL_VERSION}) #1 SMP PREEMPT_DYNAMIC
|
|
@@ -8032,9 +8032,9 @@ var EmbedderChannel = class {
|
|
|
8032
8032
|
const hook = this.broker.hookFor(this.caller.client);
|
|
8033
8033
|
const body = new BodyPipe();
|
|
8034
8034
|
this.body = body;
|
|
8035
|
-
const
|
|
8035
|
+
const prefix = this.caller.name;
|
|
8036
8036
|
const progress = (line) => {
|
|
8037
|
-
if (this.throttle.allow(Date.now())) caller.progress(lineOf2(line));
|
|
8037
|
+
if (this.throttle.allow(Date.now())) this.caller.progress(`${prefix}: ${lineOf2(line)}`);
|
|
8038
8038
|
};
|
|
8039
8039
|
const asked = Promise.resolve().then(
|
|
8040
8040
|
() => hook.handle({
|
|
@@ -13427,6 +13427,7 @@ var TLS_SERVER_REQUEST_CERT = 1;
|
|
|
13427
13427
|
var TLS_SERVER_REQUIRE_CERT = 2;
|
|
13428
13428
|
var TLS_SERVER_SELECT = 4;
|
|
13429
13429
|
var TLS_HANDSHAKE_SELECT = 2;
|
|
13430
|
+
var TLS_KEYLOG = 8;
|
|
13430
13431
|
var SCRATCH = 64 * 1024;
|
|
13431
13432
|
var EOF = -1;
|
|
13432
13433
|
var TlsError = class extends Error {
|
|
@@ -13494,6 +13495,9 @@ var TlsEngine = class {
|
|
|
13494
13495
|
if (!ptr) throw this.error(this.m._tls_last_error(), "server certificate");
|
|
13495
13496
|
return new TlsLeaf(this, this.m, ptr);
|
|
13496
13497
|
}
|
|
13498
|
+
get keylogs() {
|
|
13499
|
+
return typeof this.m._tls_keylog === "function";
|
|
13500
|
+
}
|
|
13497
13501
|
get serverSelect() {
|
|
13498
13502
|
return typeof this.m._tls_server_select === "function";
|
|
13499
13503
|
}
|
|
@@ -13524,9 +13528,11 @@ var TlsEngine = class {
|
|
|
13524
13528
|
this.m._free(ptr);
|
|
13525
13529
|
}
|
|
13526
13530
|
}
|
|
13527
|
-
intoScratch(fn) {
|
|
13531
|
+
intoScratch(fn, secret = false) {
|
|
13528
13532
|
const n = fn(this.scratch, SCRATCH);
|
|
13529
|
-
|
|
13533
|
+
const out = n > 0 ? this.taken(n) : n;
|
|
13534
|
+
if (secret && n > 0) this.m.HEAPU8.fill(0, this.scratch, this.scratch + n);
|
|
13535
|
+
return out;
|
|
13530
13536
|
}
|
|
13531
13537
|
get sessionControls() {
|
|
13532
13538
|
return typeof this.m._tls_client_cert === "function";
|
|
@@ -13737,6 +13743,14 @@ var TlsSession = class {
|
|
|
13737
13743
|
get version() {
|
|
13738
13744
|
return this.c._tls_version(this.ptr);
|
|
13739
13745
|
}
|
|
13746
|
+
keylog() {
|
|
13747
|
+
const drain2 = this.m._tls_keylog;
|
|
13748
|
+
const out = this.engine.intoScratch((p, max) => drain2(this.ptr, p, max), true);
|
|
13749
|
+
if (!(out instanceof Uint8Array)) return [];
|
|
13750
|
+
const text = new TextDecoder().decode(out);
|
|
13751
|
+
out.fill(0);
|
|
13752
|
+
return text.split("\n").filter((line) => line.length > 0);
|
|
13753
|
+
}
|
|
13740
13754
|
get sni() {
|
|
13741
13755
|
const out = this.engine.intoScratch(
|
|
13742
13756
|
(p, max) => this.m._tls_sni(this.ptr, p, max)
|
|
@@ -15257,7 +15271,7 @@ function isIP(name2) {
|
|
|
15257
15271
|
return ipv4Bytes(name2) !== void 0 || name2.includes(":") && ipv6Groups(name2) !== void 0;
|
|
15258
15272
|
}
|
|
15259
15273
|
function clientFlags(o) {
|
|
15260
|
-
return (o.insecure ? TLS_CLIENT_INSECURE_SKIP_VERIFY : 0) | (o.sni === false ? TLS_CLIENT_NO_SNI : 0) | (o.checkHostname === false ? TLS_CLIENT_VERIFY_CHAIN_ONLY : 0);
|
|
15274
|
+
return (o.insecure ? TLS_CLIENT_INSECURE_SKIP_VERIFY : 0) | (o.sni === false ? TLS_CLIENT_NO_SNI : 0) | (o.checkHostname === false ? TLS_CLIENT_VERIFY_CHAIN_ONLY : 0) | (o.keylog ? TLS_KEYLOG : 0);
|
|
15261
15275
|
}
|
|
15262
15276
|
function openSession(o) {
|
|
15263
15277
|
return o.engine.clientSession(o.store, o.servername, o.alpn, clientFlags(o));
|
|
@@ -15372,7 +15386,8 @@ async function infoOf(o, session) {
|
|
|
15372
15386
|
peerCertificates: chain2,
|
|
15373
15387
|
...controlsOf(o, session, protocol, chain2, shape),
|
|
15374
15388
|
verified: verdictOf(o, session),
|
|
15375
|
-
handshakeAt: Date.now()
|
|
15389
|
+
handshakeAt: Date.now(),
|
|
15390
|
+
...o.keylog ? { keylog: session.keylog() } : {}
|
|
15376
15391
|
};
|
|
15377
15392
|
}
|
|
15378
15393
|
var FATAL_ALERT = -30592;
|
|
@@ -15492,7 +15507,7 @@ async function serverHandshake(conn, session, inbox, hooks) {
|
|
|
15492
15507
|
}
|
|
15493
15508
|
}
|
|
15494
15509
|
}
|
|
15495
|
-
async function tlsServer(conn, session, clientCerts, select) {
|
|
15510
|
+
async function tlsServer(conn, session, clientCerts, select, keylog = false) {
|
|
15496
15511
|
let first;
|
|
15497
15512
|
const watched = {
|
|
15498
15513
|
...conn,
|
|
@@ -15515,7 +15530,8 @@ async function tlsServer(conn, session, clientCerts, select) {
|
|
|
15515
15530
|
servername: session.sni,
|
|
15516
15531
|
authorized: clientCerts && chain2.length > 0 && code === void 0,
|
|
15517
15532
|
...clientCerts && chain2.length > 0 && code ? { authorizationError: code } : {},
|
|
15518
|
-
peerCertificates: chain2
|
|
15533
|
+
peerCertificates: chain2,
|
|
15534
|
+
...keylog ? { keylog: session.keylog() } : {}
|
|
15519
15535
|
};
|
|
15520
15536
|
return { conn: plaintext(conn, session, inbox), info };
|
|
15521
15537
|
} catch (err) {
|
|
@@ -18408,7 +18424,8 @@ function sessionOf(info, servername) {
|
|
|
18408
18424
|
} : {},
|
|
18409
18425
|
servername,
|
|
18410
18426
|
peerCertificates: info.peerCertificates.map(encode),
|
|
18411
|
-
...controls(info)
|
|
18427
|
+
...controls(info),
|
|
18428
|
+
...info.keylog ? { keylog: info.keylog } : {}
|
|
18412
18429
|
};
|
|
18413
18430
|
}
|
|
18414
18431
|
function controls(info) {
|
|
@@ -18550,11 +18567,14 @@ async function prepareWith(support, req, servername, cert) {
|
|
|
18550
18567
|
insecure: req.insecure === true,
|
|
18551
18568
|
...req.sni === false ? { sni: false } : {},
|
|
18552
18569
|
...req.checkHostname === false ? { checkHostname: false } : {},
|
|
18570
|
+
...req.keylog === true ? { keylog: true } : {},
|
|
18553
18571
|
clientCertificate: cert !== void 0,
|
|
18554
18572
|
bundled: own === void 0
|
|
18555
18573
|
};
|
|
18556
18574
|
let session;
|
|
18557
18575
|
try {
|
|
18576
|
+
if (req.keylog === true && !engine.keylogs)
|
|
18577
|
+
throw new KernelError("ENOTSUP", "the installed tls engine has no key log");
|
|
18558
18578
|
const controls2 = req.sni === false || req.checkHostname === false || cert !== void 0;
|
|
18559
18579
|
if (controls2 && !engine.sessionControls) {
|
|
18560
18580
|
throw new KernelError("ENOTSUP", "the installed tls engine has no client certificates");
|
|
@@ -18602,7 +18622,7 @@ function secure(prepared, seal) {
|
|
|
18602
18622
|
try {
|
|
18603
18623
|
const made2 = await tlsClient(raw2, prepared.options);
|
|
18604
18624
|
const engine = prepared.options.engine;
|
|
18605
|
-
const session = sealing({ ...seal, engine }, raw2, made2.info, prepared.options.servername);
|
|
18625
|
+
const session = prepared.options.keylog ? void 0 : sealing({ ...seal, engine }, raw2, made2.info, prepared.options.servername);
|
|
18606
18626
|
if (!session) return made2;
|
|
18607
18627
|
made2.info.substitutes = substitutes(session);
|
|
18608
18628
|
if (made2.info.substitutes && session.verified)
|
|
@@ -18715,25 +18735,31 @@ function certFlags(req) {
|
|
|
18715
18735
|
if (!req.requestCert) return 0;
|
|
18716
18736
|
return req.rejectUnauthorized === false ? TLS_SERVER_REQUEST_CERT : TLS_SERVER_REQUIRE_CERT;
|
|
18717
18737
|
}
|
|
18718
|
-
|
|
18719
|
-
|
|
18738
|
+
var CERT_FLAGS = TLS_SERVER_REQUEST_CERT | TLS_SERVER_REQUIRE_CERT;
|
|
18739
|
+
function selectFlag(req) {
|
|
18740
|
+
if (!req.select) return 0;
|
|
18720
18741
|
if (req.alpn && req.alpn.length > 0)
|
|
18721
18742
|
throw new KernelError("EINVAL", "ERR_TLS_ALPN_CALLBACK_WITH_PROTOCOLS: alpn with select");
|
|
18722
|
-
return
|
|
18743
|
+
return TLS_SERVER_SELECT;
|
|
18723
18744
|
}
|
|
18724
|
-
|
|
18745
|
+
function flagsOf(req) {
|
|
18746
|
+
return certFlags(req) | selectFlag(req) | (req.keylog ? TLS_KEYLOG : 0);
|
|
18747
|
+
}
|
|
18748
|
+
async function engineOf(proc, { select, keylog }) {
|
|
18725
18749
|
const engine = await supportOf(proc.net).engine();
|
|
18726
18750
|
if (!engine.serverSessions)
|
|
18727
18751
|
throw new KernelError("ENOTSUP", "the installed tls engine has no server sessions");
|
|
18752
|
+
if (keylog && !engine.keylogs)
|
|
18753
|
+
throw new KernelError("ENOTSUP", "the installed tls engine has no key log");
|
|
18728
18754
|
if (select && !engine.serverSelect)
|
|
18729
18755
|
throw new KernelError("ENOTSUP", "the installed tls engine has no server selection");
|
|
18730
18756
|
return engine;
|
|
18731
18757
|
}
|
|
18732
|
-
async function importedLeaf(proc, own,
|
|
18758
|
+
async function importedLeaf(proc, own, needs = {}) {
|
|
18733
18759
|
const cert = certBytes(own);
|
|
18734
18760
|
let engine;
|
|
18735
18761
|
try {
|
|
18736
|
-
engine = await engineOf(proc,
|
|
18762
|
+
engine = await engineOf(proc, needs);
|
|
18737
18763
|
} catch (err) {
|
|
18738
18764
|
wipe(cert);
|
|
18739
18765
|
throw err;
|
|
@@ -18763,12 +18789,12 @@ async function serverOf(proc, req) {
|
|
|
18763
18789
|
delete req.cert;
|
|
18764
18790
|
if (!own && !req.select)
|
|
18765
18791
|
throw new KernelError("EINVAL", "ERR_INVALID_ARG_VALUE: a server needs cert and key");
|
|
18766
|
-
const { engine, leaf } = own ? await importedLeaf(proc, own, req
|
|
18792
|
+
const { engine, leaf } = own ? await importedLeaf(proc, own, req) : { engine: await engineOf(proc, { ...req, select: true }), leaf: void 0 };
|
|
18767
18793
|
let mine;
|
|
18768
18794
|
try {
|
|
18769
18795
|
mine = req.ca && req.ca.length > 0 ? storeOf(engine, req.ca) : void 0;
|
|
18770
18796
|
const flags2 = flagsOf(req);
|
|
18771
|
-
const store = mine ?? (flags2 &
|
|
18797
|
+
const store = mine ?? (flags2 & CERT_FLAGS ? await defaultStore(engine, supportOf(proc.net).roots) : void 0);
|
|
18772
18798
|
return {
|
|
18773
18799
|
engine,
|
|
18774
18800
|
leaf,
|
|
@@ -18802,7 +18828,8 @@ function servedOf(info) {
|
|
|
18802
18828
|
authorized: info.authorized,
|
|
18803
18829
|
...info.authorizationError ? { authorizationError: info.authorizationError } : {},
|
|
18804
18830
|
peerCertificates: info.peerCertificates.map(encode),
|
|
18805
|
-
cipher: info.cipher
|
|
18831
|
+
cipher: info.cipher,
|
|
18832
|
+
...info.keylog ? { keylog: info.keylog } : {}
|
|
18806
18833
|
};
|
|
18807
18834
|
}
|
|
18808
18835
|
var selections = /* @__PURE__ */ new WeakMap();
|
|
@@ -18825,13 +18852,14 @@ async function serveSecure(proc, socket, req) {
|
|
|
18825
18852
|
const { engine, leaf, alpn, store, flags: flags2 } = server;
|
|
18826
18853
|
const limit = handshakeSignal(proc, server.timeoutMs);
|
|
18827
18854
|
const { pausedAt, select } = pausing(limit.signal);
|
|
18828
|
-
const certs = (flags2 &
|
|
18855
|
+
const certs = (flags2 & CERT_FLAGS) !== 0;
|
|
18829
18856
|
const run2 = socket.secureLink(
|
|
18830
18857
|
(raw2) => tlsServer(
|
|
18831
18858
|
raw2,
|
|
18832
18859
|
engine.serverSession(leaf, alpn, store, flags2),
|
|
18833
18860
|
certs,
|
|
18834
|
-
flags2 & TLS_SERVER_SELECT ? select : void 0
|
|
18861
|
+
flags2 & TLS_SERVER_SELECT ? select : void 0,
|
|
18862
|
+
(flags2 & TLS_KEYLOG) !== 0
|
|
18835
18863
|
),
|
|
18836
18864
|
limit.signal,
|
|
18837
18865
|
(reason) => !shared && reason === timedOut
|
|
@@ -19301,7 +19329,7 @@ var NOT_HTTP_PORTS = /* @__PURE__ */ new Set([
|
|
|
19301
19329
|
]);
|
|
19302
19330
|
var HOST_NAME = /^[A-Za-z0-9.-]+$|^\[?[0-9A-Fa-f:.]+\]?$/;
|
|
19303
19331
|
function sessionControls(req) {
|
|
19304
|
-
return req.sni === false || req.checkHostname === false || req.clientCert !== void 0;
|
|
19332
|
+
return req.sni === false || req.checkHostname === false || req.clientCert !== void 0 || req.keylog === true;
|
|
19305
19333
|
}
|
|
19306
19334
|
function wantsKernel(req) {
|
|
19307
19335
|
if (req.path === "kernel") return true;
|
|
@@ -20987,7 +21015,8 @@ var WasmProcess = class {
|
|
|
20987
21015
|
sessionUid: session.uid,
|
|
20988
21016
|
client: session.client,
|
|
20989
21017
|
tags: this.options.embedder?.tagsOf(this.pid),
|
|
20990
|
-
|
|
21018
|
+
name: name2,
|
|
21019
|
+
progress: (line) => void this.complainLine(line),
|
|
20991
21020
|
closing: () => AbortSignal.any([this.interrupt.signal, this.gone.signal])
|
|
20992
21021
|
};
|
|
20993
21022
|
}
|