@ai-ecoverse/slicc-kernel 1.135.7 → 1.136.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.
@@ -0,0 +1,9 @@
1
+ import type { TlsEngine } from './tls-engine.js';
2
+ export declare const ANCHORS_MAX = 64;
3
+ export declare const ANCHOR_BYTES_MAX: number;
4
+ export interface Anchors {
5
+ anchors: Uint8Array[];
6
+ pins: string[];
7
+ }
8
+ export declare function anchorsOf(reply: unknown): Anchors | undefined;
9
+ export declare function anchorFor(engine: TlsEngine, chain: readonly Uint8Array[], host: string, found: Anchors): Promise<string | undefined>;
@@ -1,4 +1,5 @@
1
1
  import type { SealedBroker, SealedCaller } from '../sealed.js';
2
+ import type { Anchors } from './sealed-anchor.js';
2
3
  import type { UplinkConn } from './uplink.js';
3
4
  export declare const HEAD_IDLE_MS = 2000;
4
5
  export interface SealedSession {
@@ -11,6 +12,7 @@ export interface SealedSession {
11
12
  verified: boolean;
12
13
  handshakeAt: number;
13
14
  alpn: string | false;
15
+ anchoring?: (found: Anchors) => Promise<string | undefined>;
14
16
  }
15
17
  export declare function substitutes(s: SealedSession): boolean;
16
18
  export declare function sealedConn(conn: UplinkConn, s: SealedSession): UplinkConn;
@@ -1,3 +1,4 @@
1
+ export declare function spkiOf(der: Uint8Array): Uint8Array | undefined;
1
2
  export declare function selfSigned(der: Uint8Array | undefined): Promise<boolean>;
2
3
  export interface ChainShape {
3
4
  leafSelfSigned: boolean;
@@ -1,6 +1,6 @@
1
1
  type TlsExport = 'malloc' | 'free' | 'tls_last_error' | 'tls_strerror' | 'tls_leaf_new' | 'tls_leaf_spki' | 'tls_leaf_add_cert' | 'tls_leaf_free' | 'tls_session_new' | 'tls_feed' | 'tls_feed_eof' | 'tls_in_room' | 'tls_read' | 'tls_write' | 'tls_out_size' | 'tls_out_take' | 'tls_close' | 'tls_alpn_http11' | 'tls_session_free';
2
2
  type TlsClientExport = 'tls_ca_new' | 'tls_ca_add_der' | 'tls_ca_add_bundle' | 'tls_ca_free' | 'tls_client_new' | 'tls_handshake' | 'tls_verify_result' | 'tls_verify_info' | 'tls_alpn' | 'tls_version' | 'tls_peer_count' | 'tls_peer_der';
3
- type TlsSessionExport = 'tls_client_cert' | 'tls_ciphersuite' | 'tls_name_mismatch' | 'tls_last_alert';
3
+ type TlsSessionExport = 'tls_client_cert' | 'tls_ciphersuite' | 'tls_name_mismatch' | 'tls_last_alert' | 'tls_chain_verify';
4
4
  export type TlsEngineModule = {
5
5
  readonly HEAPU8: Uint8Array;
6
6
  } & {
@@ -37,6 +37,8 @@ export declare class TlsEngine {
37
37
  private clientModule;
38
38
  store(): TlsStore;
39
39
  clientSession(store: TlsStore | undefined, servername: string, alpn: readonly string[], flags: number): TlsSession;
40
+ get chainVerify(): boolean;
41
+ chainFlags(store: TlsStore, chain: readonly Uint8Array[], hostname: string): number | undefined;
40
42
  verifyInfo(flags: number): string;
41
43
  }
42
44
  export declare class TlsStore {
@@ -37,6 +37,7 @@ export interface SecureSession {
37
37
  path: 'kernel';
38
38
  substitutes: boolean;
39
39
  verified: boolean;
40
+ verifiedBy: 'bundled' | 'none';
40
41
  protocol: TlsClientInfo['protocol'];
41
42
  alpnProtocol: string | false;
42
43
  authorized: boolean;
@@ -27,7 +27,29 @@ export interface SessionFields {
27
27
  placeholders?: string[];
28
28
  head?: SessionHead;
29
29
  scram?: SessionScram;
30
+ verifiedBy?: 'roots' | 'anchored';
31
+ anchor?: string;
30
32
  }
33
+ export interface SessionAnchorFields {
34
+ stamp: SealedCaller;
35
+ session: string;
36
+ host: string;
37
+ port: number;
38
+ protocol: SessionProtocol;
39
+ exit: string;
40
+ }
41
+ export declare function anchorsAskable(f: SessionAnchorFields): boolean;
42
+ export declare function anchorsRequest(f: SessionAnchorFields): {
43
+ v: 1;
44
+ op: string;
45
+ caller: SealedCaller;
46
+ stamp: SealedCaller;
47
+ session: string;
48
+ host: string;
49
+ port: number;
50
+ protocol: SessionProtocol;
51
+ exit: string;
52
+ };
31
53
  export declare function boundHost(servername: string): string;
32
54
  export declare function sessionAskable(f: SessionFields, now: number): boolean;
33
55
  export declare function sessionRequest(f: SessionFields): {
@@ -41,6 +63,8 @@ export declare function sessionRequest(f: SessionFields): {
41
63
  protocol: SessionProtocol;
42
64
  position: string;
43
65
  verified: boolean;
66
+ verifiedBy: "anchored" | "roots";
67
+ anchor?: string | undefined;
44
68
  handshakeAt: number;
45
69
  exit: string;
46
70
  placeholders?: string[] | undefined;
@@ -2,8 +2,9 @@ import type { UsersMode } from '../fs/types.js';
2
2
  import type { Cred } from './cred.js';
3
3
  import { TicketBook } from './exec-ticket.js';
4
4
  import { type OpenAccess, OpenFile, type PollState } from './fd-table.js';
5
+ import { type Anchors } from './net/sealed-anchor.js';
5
6
  import { SessionScrubs } from './net/sealed-scrubs.js';
6
- import { type SessionFields } from './sealed-session.js';
7
+ import { type SessionAnchorFields, type SessionFields } from './sealed-session.js';
7
8
  export declare const SEALED_PATH = "/dev/sealed";
8
9
  export declare const SEALED_MAX_BYTES: number;
9
10
  export declare const SEALED_TIMEOUT_MS = 10000;
@@ -73,6 +74,7 @@ export declare class SealedBroker {
73
74
  }, cred: Readonly<Cred>, tag: string | undefined): Promise<SealedCaller>;
74
75
  consume(fields: ConsumeFields): Promise<Swap | undefined>;
75
76
  sessionMaterialize(fields: SessionFields, now?: number): Promise<Record<string, string> | undefined>;
77
+ sessionAnchors(fields: SessionAnchorFields): Promise<Anchors | undefined>;
76
78
  private ask;
77
79
  open(access?: OpenAccess): OpenFile;
78
80
  }
@@ -7,6 +7,7 @@ export interface JsTlsSession {
7
7
  readonly path: 'transport' | 'kernel';
8
8
  readonly substitutes: boolean;
9
9
  readonly verified?: boolean;
10
+ readonly verifiedBy?: 'bundled' | 'none';
10
11
  readonly protocol: 'transport' | 'TLSv1.2' | 'TLSv1.3';
11
12
  readonly alpnProtocol: string | false;
12
13
  readonly authorized: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-ecoverse/slicc-kernel",
3
- "version": "1.135.7",
3
+ "version": "1.136.1",
4
4
  "description": "SLICC's wasm-realm kernel: run Emscripten programs in the browser against OPFS, with fork, spawn, pipes and waitpid",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -74,10 +74,10 @@
74
74
  "@ai-ecoverse/wasi-zig": "0.16.0-17",
75
75
  "@ai-ecoverse/wasix-python": "3.15.0-3",
76
76
  "@ai-ecoverse/wasm-bash": "5.3.0-21",
77
- "@ai-ecoverse/wasm-coreutils": "9.12.0-10",
77
+ "@ai-ecoverse/wasm-coreutils": "9.12.0-11",
78
78
  "@ai-ecoverse/wasm-curl": "8.22.0-7",
79
79
  "@ai-ecoverse/wasm-git": "2.55.0-17",
80
- "@ai-ecoverse/wasm-gmake": "4.4.1-7",
80
+ "@ai-ecoverse/wasm-gmake": "4.4.1-8",
81
81
  "@ai-ecoverse/wasm-procps": "4.0.7-4",
82
82
  "@ai-ecoverse/wasm-sqlite3": "3.54.0-6",
83
83
  "@ai-ecoverse/wasm-tar": "1.35.0-8",