@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/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.153.0" : "0.0.0-dev";
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 caller = this.caller;
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
- return n > 0 ? this.taken(n) : n;
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
- function flagsOf(req) {
18719
- if (!req.select) return certFlags(req);
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 certFlags(req) | TLS_SERVER_SELECT;
18743
+ return TLS_SERVER_SELECT;
18723
18744
  }
18724
- async function engineOf(proc, select) {
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, select) {
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, select);
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.select) : { engine: await engineOf(proc, true), leaf: void 0 };
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 & ~TLS_SERVER_SELECT ? await defaultStore(engine, supportOf(proc.net).roots) : void 0);
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 & ~TLS_SERVER_SELECT) !== 0;
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
- progress: (line) => void this.complainLine(`${name2}: ${line}`),
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
  }