@ai-ecoverse/slicc-kernel 1.148.1 → 1.149.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 +11 -2
- package/dist/index.js +4 -1
- package/dist/index.js.map +2 -2
- package/dist/kernel-worker.js +299 -13
- package/dist/kernel-worker.js.map +4 -4
- package/dist/node-process-worker.js +209 -75
- package/dist/node-process-worker.js.map +3 -3
- package/dist/node.js +299 -13
- package/dist/node.js.map +4 -4
- package/dist/process-worker.js +209 -75
- package/dist/process-worker.js.map +3 -3
- package/dist/types/kernel/net/tls-client.d.ts +12 -0
- package/dist/types/kernel/net/tls-engine.d.ts +7 -1
- package/dist/types/kernel/net/tls-server.d.ts +34 -0
- package/dist/types/kernel/net/tls-uplink.d.ts +11 -1
- package/dist/types/kernel/socket-syscalls.d.ts +11 -0
- package/dist/types/kernel/socket.d.ts +9 -0
- package/dist/types/process/js/js-net.d.ts +16 -0
- package/package.json +3 -3
|
@@ -38,3 +38,15 @@ export declare function tlsClient(conn: UplinkConn, o: TlsClientOptions, taken?:
|
|
|
38
38
|
conn: UplinkConn;
|
|
39
39
|
info: TlsClientInfo;
|
|
40
40
|
}>;
|
|
41
|
+
export interface TlsServerInfo {
|
|
42
|
+
protocol: 'TLSv1.2' | 'TLSv1.3';
|
|
43
|
+
alpnProtocol: string | false;
|
|
44
|
+
servername: string;
|
|
45
|
+
authorized: boolean;
|
|
46
|
+
authorizationError?: string;
|
|
47
|
+
peerCertificates: Uint8Array[];
|
|
48
|
+
}
|
|
49
|
+
export declare function tlsServer(conn: UplinkConn, session: TlsSession, clientCerts: boolean): Promise<{
|
|
50
|
+
conn: UplinkConn;
|
|
51
|
+
info: TlsServerInfo;
|
|
52
|
+
}>;
|
|
@@ -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' | 'tls_chain_verify';
|
|
3
|
+
type TlsSessionExport = 'tls_leaf_import' | 'tls_server_new' | 'tls_sni' | '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
|
} & {
|
|
@@ -16,6 +16,8 @@ type TlsClientModule = TlsEngineModule & {
|
|
|
16
16
|
export declare const TLS_CLIENT_INSECURE_SKIP_VERIFY = 1;
|
|
17
17
|
export declare const TLS_CLIENT_NO_SNI = 2;
|
|
18
18
|
export declare const TLS_CLIENT_VERIFY_CHAIN_ONLY = 4;
|
|
19
|
+
export declare const TLS_SERVER_REQUEST_CERT = 1;
|
|
20
|
+
export declare const TLS_SERVER_REQUIRE_CERT = 2;
|
|
19
21
|
export declare class TlsError extends Error {
|
|
20
22
|
readonly code: number;
|
|
21
23
|
constructor(code: number, message: string);
|
|
@@ -29,6 +31,9 @@ export declare class TlsEngine {
|
|
|
29
31
|
error(code: number, what: string): TlsError;
|
|
30
32
|
leaf(): TlsLeaf;
|
|
31
33
|
session(leaf: TlsLeaf, host: string): TlsSession;
|
|
34
|
+
get serverSessions(): boolean;
|
|
35
|
+
importLeaf(chain: Uint8Array, key: Uint8Array, pass: Uint8Array): TlsLeaf;
|
|
36
|
+
serverSession(leaf: TlsLeaf, alpn: readonly string[], clientCa: TlsStore | undefined, flags: number): TlsSession;
|
|
32
37
|
withBytes<T>(bytes: Uint8Array, fn: (ptr: number) => T): T;
|
|
33
38
|
withSecret<T>(bytes: Uint8Array, fn: (ptr: number) => T): T;
|
|
34
39
|
intoScratch(fn: (ptr: number, max: number) => number): number | Uint8Array;
|
|
@@ -75,6 +80,7 @@ export declare class TlsSession {
|
|
|
75
80
|
handshake(): boolean;
|
|
76
81
|
get verifyResult(): number;
|
|
77
82
|
get version(): number;
|
|
83
|
+
get sni(): string;
|
|
78
84
|
get alpn(): string | undefined;
|
|
79
85
|
ownCert(chain: Uint8Array, key: Uint8Array, pass: Uint8Array): void;
|
|
80
86
|
get ciphersuite(): number;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { KernelSocket } from '../socket.js';
|
|
2
|
+
import { type TlsEngine, type TlsLeaf, type TlsStore } from './tls-engine.js';
|
|
3
|
+
import { type ClientCertRequest, type SecureProcess } from './tls-uplink.js';
|
|
4
|
+
export interface ServeRequest {
|
|
5
|
+
cert?: ClientCertRequest;
|
|
6
|
+
ca?: string[];
|
|
7
|
+
requestCert?: boolean;
|
|
8
|
+
rejectUnauthorized?: boolean;
|
|
9
|
+
alpn?: string[];
|
|
10
|
+
handshakeTimeout?: number;
|
|
11
|
+
listener?: KernelSocket;
|
|
12
|
+
}
|
|
13
|
+
export interface ServedSession {
|
|
14
|
+
path: 'kernel';
|
|
15
|
+
protocol: 'TLSv1.2' | 'TLSv1.3';
|
|
16
|
+
alpnProtocol: string | false;
|
|
17
|
+
servername: string;
|
|
18
|
+
authorized: boolean;
|
|
19
|
+
authorizationError?: string;
|
|
20
|
+
peerCertificates: string[];
|
|
21
|
+
}
|
|
22
|
+
interface Server {
|
|
23
|
+
engine: TlsEngine;
|
|
24
|
+
leaf: TlsLeaf;
|
|
25
|
+
store: TlsStore | undefined;
|
|
26
|
+
alpn: string[];
|
|
27
|
+
flags: number;
|
|
28
|
+
timeoutMs: number;
|
|
29
|
+
release(): void;
|
|
30
|
+
}
|
|
31
|
+
export declare function serverOf(proc: SecureProcess, req: ServeRequest): Promise<Server>;
|
|
32
|
+
export declare function listenSecure(proc: SecureProcess, socket: KernelSocket, req: ServeRequest): Promise<void>;
|
|
33
|
+
export declare function serveSecure(proc: SecureProcess, socket: KernelSocket, req: ServeRequest): Promise<ServedSession>;
|
|
34
|
+
export {};
|
|
@@ -31,9 +31,13 @@ export interface SecureProcess {
|
|
|
31
31
|
pid: number;
|
|
32
32
|
};
|
|
33
33
|
blocking(): AbortSignal;
|
|
34
|
+
cancelled?: AbortSignal;
|
|
34
35
|
resolve(name: string, family: ResolveFamily, blocking: () => AbortSignal): Promise<string[]>;
|
|
35
36
|
}
|
|
37
|
+
export declare const handshakeAbort: (proc: SecureProcess) => AbortSignal;
|
|
36
38
|
export declare function serverName(name: string): string;
|
|
39
|
+
export declare function base64Der(text: string): Uint8Array;
|
|
40
|
+
export declare function encode(bytes: Uint8Array): string;
|
|
37
41
|
export interface SecureSession {
|
|
38
42
|
path: 'kernel';
|
|
39
43
|
substitutes: boolean;
|
|
@@ -60,8 +64,14 @@ declare function takeCert(req: SecureRequest): {
|
|
|
60
64
|
key: Uint8Array<ArrayBufferLike>;
|
|
61
65
|
pass: Uint8Array<ArrayBuffer>;
|
|
62
66
|
} | undefined;
|
|
63
|
-
|
|
67
|
+
export declare function certBytes(cert: ClientCertRequest): {
|
|
68
|
+
chain: Uint8Array<ArrayBuffer>;
|
|
69
|
+
key: Uint8Array<ArrayBufferLike>;
|
|
70
|
+
pass: Uint8Array<ArrayBuffer>;
|
|
71
|
+
};
|
|
72
|
+
export type ClientCert = NonNullable<ReturnType<typeof takeCert>>;
|
|
64
73
|
export declare function withCert(session: TlsSession, cert: ClientCert | undefined): void;
|
|
74
|
+
export declare function wipe(cert: ClientCert | undefined): void;
|
|
65
75
|
export interface Seal {
|
|
66
76
|
proc: SecureProcess;
|
|
67
77
|
port: number;
|
|
@@ -81,6 +81,16 @@ export type SocketSyscall = {
|
|
|
81
81
|
sni?: false;
|
|
82
82
|
checkHostname?: false;
|
|
83
83
|
clientCert?: ClientCertRequest;
|
|
84
|
+
} | {
|
|
85
|
+
op: 'sock-tls-serve' | 'sock-tls-listen';
|
|
86
|
+
fd: number;
|
|
87
|
+
from?: number;
|
|
88
|
+
cert?: ClientCertRequest;
|
|
89
|
+
ca?: string[];
|
|
90
|
+
requestCert?: boolean;
|
|
91
|
+
rejectUnauthorized?: boolean;
|
|
92
|
+
alpn?: string[];
|
|
93
|
+
handshakeTimeout?: number;
|
|
84
94
|
} | {
|
|
85
95
|
op: 'sock-recvfrom';
|
|
86
96
|
fd: number;
|
|
@@ -93,6 +103,7 @@ export interface SocketProcess {
|
|
|
93
103
|
fds: FdTable;
|
|
94
104
|
net: LoopbackNet;
|
|
95
105
|
blocking(): AbortSignal;
|
|
106
|
+
cancelled?: AbortSignal;
|
|
96
107
|
resolve(name: string, family: ResolveFamily, blocking: () => AbortSignal): Promise<string[]>;
|
|
97
108
|
cred?(): PeerCred;
|
|
98
109
|
stamp?(): Promise<ConnectorStamp>;
|
|
@@ -91,6 +91,15 @@ export declare class KernelSocket implements KernelFile {
|
|
|
91
91
|
connectSecure(addr: Extract<SockAddr, {
|
|
92
92
|
family: 'inet';
|
|
93
93
|
}>, route: UplinkRoute, secure: (conn: SwitchConn) => Promise<void>): Promise<void>;
|
|
94
|
+
serving: {
|
|
95
|
+
release(): void;
|
|
96
|
+
} | undefined;
|
|
97
|
+
private served;
|
|
98
|
+
get loopbackLinked(): boolean;
|
|
99
|
+
secureLink<T>(make: (raw: UplinkConn) => Promise<{
|
|
100
|
+
conn: UplinkConn;
|
|
101
|
+
info: T;
|
|
102
|
+
}>, signal?: AbortSignal): Promise<T>;
|
|
94
103
|
upgradeSecure<T>(make: (raw: UplinkConn) => Promise<{
|
|
95
104
|
conn: UplinkConn;
|
|
96
105
|
info: T;
|
|
@@ -39,6 +39,18 @@ export interface JsTlsOptions {
|
|
|
39
39
|
pfx?: unknown;
|
|
40
40
|
sni?: boolean;
|
|
41
41
|
checkHostname?: boolean;
|
|
42
|
+
server?: boolean;
|
|
43
|
+
requestCert?: boolean;
|
|
44
|
+
handshakeTimeout?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface JsTlsServerSession {
|
|
47
|
+
readonly path: 'kernel';
|
|
48
|
+
readonly protocol: 'TLSv1.2' | 'TLSv1.3';
|
|
49
|
+
readonly alpnProtocol: string | false;
|
|
50
|
+
readonly servername: string;
|
|
51
|
+
readonly authorized: boolean;
|
|
52
|
+
readonly authorizationError?: string;
|
|
53
|
+
readonly peerCertificates: readonly Uint8Array[];
|
|
42
54
|
}
|
|
43
55
|
export interface JsConnection {
|
|
44
56
|
readonly fd: number;
|
|
@@ -62,6 +74,7 @@ export interface JsListenOptions {
|
|
|
62
74
|
port?: number;
|
|
63
75
|
host?: string;
|
|
64
76
|
backlog?: number;
|
|
77
|
+
tls?: JsTlsOptions;
|
|
65
78
|
}
|
|
66
79
|
export interface JsConnectOptions {
|
|
67
80
|
host?: string;
|
|
@@ -77,6 +90,7 @@ export interface JsResolveOptions {
|
|
|
77
90
|
export interface JsNet {
|
|
78
91
|
listen(options?: JsListenOptions): Promise<JsListener>;
|
|
79
92
|
connect(options: JsConnectOptions): Promise<JsConnection>;
|
|
93
|
+
secure(conn: JsConnection, tls: JsTlsOptions): Promise<JsConnection>;
|
|
80
94
|
resolve(name: string, options?: JsResolveOptions): Promise<string[]>;
|
|
81
95
|
}
|
|
82
96
|
export interface NetIo {
|
|
@@ -87,6 +101,8 @@ export interface NetIo {
|
|
|
87
101
|
export interface JsSyncNet {
|
|
88
102
|
listen(options?: JsListenOptions): JsListener;
|
|
89
103
|
}
|
|
104
|
+
export declare const HANDSHAKES_MAX = 64;
|
|
105
|
+
export declare function securedAccepts(plain: (signal: AbortSignal) => Promise<JsConnection>, serve: (conn: JsConnection, signal: AbortSignal) => Promise<JsConnection>, stop: AbortSignal, cap: number): (signal: AbortSignal) => Promise<JsConnection>;
|
|
90
106
|
export declare function netOps(kernel: JsKernel, io: NetIo, sync?: JsSyncKernel): JsNet & {
|
|
91
107
|
sync: JsSyncNet;
|
|
92
108
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-ecoverse/slicc-kernel",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.149.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",
|
|
@@ -64,10 +64,10 @@
|
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
66
|
"@ai-ecoverse/py-numpy": "2.5.4-4",
|
|
67
|
-
"@ai-ecoverse/slicc-cdp": "1.
|
|
67
|
+
"@ai-ecoverse/slicc-cdp": "1.33.1",
|
|
68
68
|
"@ai-ecoverse/slicc-node": "2.5.2",
|
|
69
69
|
"@ai-ecoverse/slicc-scrub": "1.0.0",
|
|
70
|
-
"@ai-ecoverse/slicc-shared-web": "2.11.
|
|
70
|
+
"@ai-ecoverse/slicc-shared-web": "2.11.1",
|
|
71
71
|
"@ai-ecoverse/wasi-cargo": "0.99.0-6",
|
|
72
72
|
"@ai-ecoverse/wasi-pnpm": "12.9.1-21",
|
|
73
73
|
"@ai-ecoverse/wasi-ripgrep": "15.2.0-5",
|