ehbp 0.0.3 → 0.0.5
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/cjs/client.d.ts +51 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +160 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/identity.d.ts +52 -0
- package/dist/cjs/identity.d.ts.map +1 -0
- package/dist/cjs/identity.js +275 -0
- package/dist/cjs/identity.js.map +1 -0
- package/{src/index.ts → dist/cjs/index.d.ts} +2 -4
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +19 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/protocol.d.ts +19 -0
- package/dist/cjs/protocol.d.ts.map +1 -0
- package/dist/cjs/protocol.js +22 -0
- package/dist/cjs/protocol.js.map +1 -0
- package/dist/esm/client.d.ts +51 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +155 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/example.d.ts +6 -0
- package/dist/esm/example.d.ts.map +1 -0
- package/dist/esm/example.js +115 -0
- package/dist/esm/example.js.map +1 -0
- package/dist/esm/identity.d.ts +52 -0
- package/dist/esm/identity.d.ts.map +1 -0
- package/dist/esm/identity.js +271 -0
- package/dist/esm/identity.js.map +1 -0
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/protocol.d.ts +19 -0
- package/dist/esm/protocol.d.ts.map +1 -0
- package/dist/esm/protocol.js +19 -0
- package/dist/esm/protocol.js.map +1 -0
- package/dist/esm/streaming-test.d.ts +3 -0
- package/dist/esm/streaming-test.d.ts.map +1 -0
- package/dist/esm/streaming-test.js +102 -0
- package/dist/esm/streaming-test.js.map +1 -0
- package/dist/esm/test/client.test.d.ts +2 -0
- package/dist/esm/test/client.test.d.ts.map +1 -0
- package/dist/esm/test/client.test.js +71 -0
- package/dist/esm/test/client.test.js.map +1 -0
- package/dist/esm/test/identity.test.d.ts +2 -0
- package/dist/esm/test/identity.test.d.ts.map +1 -0
- package/dist/esm/test/identity.test.js +39 -0
- package/dist/esm/test/identity.test.js.map +1 -0
- package/dist/esm/test/streaming.test.d.ts +2 -0
- package/dist/esm/test/streaming.test.d.ts.map +1 -0
- package/dist/esm/test/streaming.test.js +71 -0
- package/dist/esm/test/streaming.test.js.map +1 -0
- package/package.json +7 -2
- package/build-browser.js +0 -54
- package/chat.html +0 -285
- package/src/client.ts +0 -181
- package/src/example.ts +0 -126
- package/src/identity.ts +0 -339
- package/src/protocol.ts +0 -19
- package/src/streaming-test.ts +0 -118
- package/src/test/client.test.ts +0 -93
- package/src/test/identity.test.ts +0 -46
- package/src/test/streaming.test.ts +0 -85
- package/test.html +0 -271
- package/tsconfig.cjs.json +0 -8
- package/tsconfig.esm.json +0 -7
- package/tsconfig.json +0 -19
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Identity } from './identity.js';
|
|
2
|
+
/**
|
|
3
|
+
* HTTP transport for EHBP
|
|
4
|
+
*/
|
|
5
|
+
export declare class Transport {
|
|
6
|
+
private clientIdentity;
|
|
7
|
+
private serverHost;
|
|
8
|
+
private serverPublicKey;
|
|
9
|
+
constructor(clientIdentity: Identity, serverHost: string, serverPublicKey: CryptoKey);
|
|
10
|
+
/**
|
|
11
|
+
* Create a new transport by fetching server public key
|
|
12
|
+
*/
|
|
13
|
+
static create(serverURL: string, clientIdentity: Identity): Promise<Transport>;
|
|
14
|
+
/**
|
|
15
|
+
* Get the server public key
|
|
16
|
+
*/
|
|
17
|
+
getServerPublicKey(): CryptoKey;
|
|
18
|
+
/**
|
|
19
|
+
* Get the server public key as hex string
|
|
20
|
+
*/
|
|
21
|
+
getServerPublicKeyHex(): Promise<string>;
|
|
22
|
+
/**
|
|
23
|
+
* Get the client public key
|
|
24
|
+
*/
|
|
25
|
+
getClientPublicKey(): CryptoKey;
|
|
26
|
+
/**
|
|
27
|
+
* Make an encrypted HTTP request
|
|
28
|
+
*/
|
|
29
|
+
request(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
|
|
30
|
+
/**
|
|
31
|
+
* Convenience method for GET requests
|
|
32
|
+
*/
|
|
33
|
+
get(url: string | URL, init?: RequestInit): Promise<Response>;
|
|
34
|
+
/**
|
|
35
|
+
* Convenience method for POST requests
|
|
36
|
+
*/
|
|
37
|
+
post(url: string | URL, body?: BodyInit, init?: RequestInit): Promise<Response>;
|
|
38
|
+
/**
|
|
39
|
+
* Convenience method for PUT requests
|
|
40
|
+
*/
|
|
41
|
+
put(url: string | URL, body?: BodyInit, init?: RequestInit): Promise<Response>;
|
|
42
|
+
/**
|
|
43
|
+
* Convenience method for DELETE requests
|
|
44
|
+
*/
|
|
45
|
+
delete(url: string | URL, init?: RequestInit): Promise<Response>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Create a new transport instance
|
|
49
|
+
*/
|
|
50
|
+
export declare function createTransport(serverURL: string, clientIdentity: Identity): Promise<Transport>;
|
|
51
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,cAAc,CAAW;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAY;gBAEvB,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS;IAMpF;;OAEG;WACU,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;IAwBpF;;OAEG;IACH,kBAAkB,IAAI,SAAS;IAI/B;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ9C;;OAEG;IACH,kBAAkB,IAAI,SAAS;IAI/B;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IA0E9E;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAInE;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIrF;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIpF;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC;CAGvE;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAErG"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Transport = void 0;
|
|
4
|
+
exports.createTransport = createTransport;
|
|
5
|
+
const identity_js_1 = require("./identity.js");
|
|
6
|
+
const protocol_js_1 = require("./protocol.js");
|
|
7
|
+
/**
|
|
8
|
+
* HTTP transport for EHBP
|
|
9
|
+
*/
|
|
10
|
+
class Transport {
|
|
11
|
+
clientIdentity;
|
|
12
|
+
serverHost;
|
|
13
|
+
serverPublicKey;
|
|
14
|
+
constructor(clientIdentity, serverHost, serverPublicKey) {
|
|
15
|
+
this.clientIdentity = clientIdentity;
|
|
16
|
+
this.serverHost = serverHost;
|
|
17
|
+
this.serverPublicKey = serverPublicKey;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Create a new transport by fetching server public key
|
|
21
|
+
*/
|
|
22
|
+
static async create(serverURL, clientIdentity) {
|
|
23
|
+
const url = new URL(serverURL);
|
|
24
|
+
const serverHost = url.host;
|
|
25
|
+
// Fetch server public key
|
|
26
|
+
const keysURL = new URL(protocol_js_1.PROTOCOL.KEYS_PATH, serverURL);
|
|
27
|
+
const response = await fetch(keysURL.toString());
|
|
28
|
+
if (!response.ok) {
|
|
29
|
+
throw new Error(`Failed to get server public key: ${response.status}`);
|
|
30
|
+
}
|
|
31
|
+
const contentType = response.headers.get('content-type');
|
|
32
|
+
if (contentType !== protocol_js_1.PROTOCOL.KEYS_MEDIA_TYPE) {
|
|
33
|
+
throw new Error(`Invalid content type: ${contentType}`);
|
|
34
|
+
}
|
|
35
|
+
const keysData = new Uint8Array(await response.arrayBuffer());
|
|
36
|
+
const serverIdentity = await identity_js_1.Identity.unmarshalPublicConfig(keysData);
|
|
37
|
+
const serverPublicKey = serverIdentity.getPublicKey();
|
|
38
|
+
return new Transport(clientIdentity, serverHost, serverPublicKey);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get the server public key
|
|
42
|
+
*/
|
|
43
|
+
getServerPublicKey() {
|
|
44
|
+
return this.serverPublicKey;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get the server public key as hex string
|
|
48
|
+
*/
|
|
49
|
+
async getServerPublicKeyHex() {
|
|
50
|
+
const exported = await crypto.subtle.exportKey('raw', this.serverPublicKey);
|
|
51
|
+
const keyBytes = new Uint8Array(exported);
|
|
52
|
+
return Array.from(keyBytes)
|
|
53
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
54
|
+
.join('');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get the client public key
|
|
58
|
+
*/
|
|
59
|
+
getClientPublicKey() {
|
|
60
|
+
return this.clientIdentity.getPublicKey();
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Make an encrypted HTTP request
|
|
64
|
+
*/
|
|
65
|
+
async request(input, init) {
|
|
66
|
+
// Extract body from init or original request before creating Request object
|
|
67
|
+
let requestBody = null;
|
|
68
|
+
if (input instanceof Request) {
|
|
69
|
+
// If input is a Request, extract its body
|
|
70
|
+
if (input.body) {
|
|
71
|
+
requestBody = await input.arrayBuffer();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
// If input is URL/string, get body from init
|
|
76
|
+
requestBody = init?.body || null;
|
|
77
|
+
}
|
|
78
|
+
// Create the URL with correct host
|
|
79
|
+
let url;
|
|
80
|
+
let method;
|
|
81
|
+
let headers;
|
|
82
|
+
if (input instanceof Request) {
|
|
83
|
+
url = new URL(input.url);
|
|
84
|
+
method = input.method;
|
|
85
|
+
headers = input.headers;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
url = new URL(input);
|
|
89
|
+
method = init?.method || 'GET';
|
|
90
|
+
headers = init?.headers || {};
|
|
91
|
+
}
|
|
92
|
+
url.host = this.serverHost;
|
|
93
|
+
let request = new Request(url.toString(), {
|
|
94
|
+
method,
|
|
95
|
+
headers,
|
|
96
|
+
body: requestBody,
|
|
97
|
+
duplex: 'half'
|
|
98
|
+
});
|
|
99
|
+
// Encrypt request body if present (check the original requestBody, not request.body)
|
|
100
|
+
if (requestBody !== null && requestBody !== undefined) {
|
|
101
|
+
request = await this.clientIdentity.encryptRequest(request, this.serverPublicKey);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// No body, just set client public key header
|
|
105
|
+
const headers = new Headers(request.headers);
|
|
106
|
+
headers.set(protocol_js_1.PROTOCOL.CLIENT_PUBLIC_KEY_HEADER, await this.clientIdentity.getPublicKeyHex());
|
|
107
|
+
request = new Request(request.url, {
|
|
108
|
+
method: request.method,
|
|
109
|
+
headers,
|
|
110
|
+
body: null
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
// Make the request
|
|
114
|
+
const response = await fetch(request);
|
|
115
|
+
if (!response.ok) {
|
|
116
|
+
console.warn(`Server returned non-OK status: ${response.status}`);
|
|
117
|
+
}
|
|
118
|
+
// Check for encapsulated key header
|
|
119
|
+
const encapKeyHeader = response.headers.get(protocol_js_1.PROTOCOL.ENCAPSULATED_KEY_HEADER);
|
|
120
|
+
if (!encapKeyHeader) {
|
|
121
|
+
throw new Error(`Missing ${protocol_js_1.PROTOCOL.ENCAPSULATED_KEY_HEADER} encapsulated key header`);
|
|
122
|
+
}
|
|
123
|
+
// Decode encapsulated key
|
|
124
|
+
const serverEncapKey = new Uint8Array(encapKeyHeader.match(/.{2}/g).map(byte => parseInt(byte, 16)));
|
|
125
|
+
// Decrypt response
|
|
126
|
+
return await this.clientIdentity.decryptResponse(response, serverEncapKey);
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Convenience method for GET requests
|
|
130
|
+
*/
|
|
131
|
+
async get(url, init) {
|
|
132
|
+
return this.request(url, { ...init, method: 'GET' });
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Convenience method for POST requests
|
|
136
|
+
*/
|
|
137
|
+
async post(url, body, init) {
|
|
138
|
+
return this.request(url, { ...init, method: 'POST', body });
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Convenience method for PUT requests
|
|
142
|
+
*/
|
|
143
|
+
async put(url, body, init) {
|
|
144
|
+
return this.request(url, { ...init, method: 'PUT', body });
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Convenience method for DELETE requests
|
|
148
|
+
*/
|
|
149
|
+
async delete(url, init) {
|
|
150
|
+
return this.request(url, { ...init, method: 'DELETE' });
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
exports.Transport = Transport;
|
|
154
|
+
/**
|
|
155
|
+
* Create a new transport instance
|
|
156
|
+
*/
|
|
157
|
+
async function createTransport(serverURL, clientIdentity) {
|
|
158
|
+
return Transport.create(serverURL, clientIdentity);
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { CipherSuite } from '@hpke/core';
|
|
2
|
+
/**
|
|
3
|
+
* Identity class for managing HPKE key pairs and encryption/decryption
|
|
4
|
+
*/
|
|
5
|
+
export declare class Identity {
|
|
6
|
+
private suite;
|
|
7
|
+
private publicKey;
|
|
8
|
+
private privateKey;
|
|
9
|
+
constructor(suite: CipherSuite, publicKey: CryptoKey, privateKey: CryptoKey);
|
|
10
|
+
/**
|
|
11
|
+
* Generate a new identity with X25519 key pair
|
|
12
|
+
*/
|
|
13
|
+
static generate(): Promise<Identity>;
|
|
14
|
+
/**
|
|
15
|
+
* Create identity from JSON string
|
|
16
|
+
*/
|
|
17
|
+
static fromJSON(json: string): Promise<Identity>;
|
|
18
|
+
/**
|
|
19
|
+
* Convert identity to JSON string
|
|
20
|
+
*/
|
|
21
|
+
toJSON(): Promise<string>;
|
|
22
|
+
/**
|
|
23
|
+
* Get public key as CryptoKey
|
|
24
|
+
*/
|
|
25
|
+
getPublicKey(): CryptoKey;
|
|
26
|
+
/**
|
|
27
|
+
* Get public key as hex string
|
|
28
|
+
*/
|
|
29
|
+
getPublicKeyHex(): Promise<string>;
|
|
30
|
+
/**
|
|
31
|
+
* Get private key as CryptoKey
|
|
32
|
+
*/
|
|
33
|
+
getPrivateKey(): CryptoKey;
|
|
34
|
+
/**
|
|
35
|
+
* Marshal public key configuration for server key distribution
|
|
36
|
+
* Implements RFC 9458 format
|
|
37
|
+
*/
|
|
38
|
+
marshalConfig(): Promise<Uint8Array>;
|
|
39
|
+
/**
|
|
40
|
+
* Unmarshal public configuration from server
|
|
41
|
+
*/
|
|
42
|
+
static unmarshalPublicConfig(data: Uint8Array): Promise<Identity>;
|
|
43
|
+
/**
|
|
44
|
+
* Encrypt request body and set appropriate headers
|
|
45
|
+
*/
|
|
46
|
+
encryptRequest(request: Request, serverPublicKey: CryptoKey): Promise<Request>;
|
|
47
|
+
/**
|
|
48
|
+
* Decrypt response body
|
|
49
|
+
*/
|
|
50
|
+
decryptResponse(response: Response, serverEncapKey: Uint8Array): Promise<Response>;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAgD,MAAM,YAAY,CAAC;AAGvF;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,UAAU,CAAY;gBAElB,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS;IAM3E;;OAEG;WACU,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IAsB1C;;OAEG;WACU,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAwBtD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAY/B;;OAEG;IACH,YAAY,IAAI,SAAS;IAIzB;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAOxC;;OAEG;IACH,aAAa,IAAI,SAAS;IAI1B;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IA0C1C;;OAEG;WACU,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;IAwCvE;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAgDpF;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;CAwFzF"}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Identity = void 0;
|
|
4
|
+
const core_1 = require("@hpke/core");
|
|
5
|
+
const protocol_js_1 = require("./protocol.js");
|
|
6
|
+
/**
|
|
7
|
+
* Identity class for managing HPKE key pairs and encryption/decryption
|
|
8
|
+
*/
|
|
9
|
+
class Identity {
|
|
10
|
+
suite;
|
|
11
|
+
publicKey;
|
|
12
|
+
privateKey;
|
|
13
|
+
constructor(suite, publicKey, privateKey) {
|
|
14
|
+
this.suite = suite;
|
|
15
|
+
this.publicKey = publicKey;
|
|
16
|
+
this.privateKey = privateKey;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate a new identity with X25519 key pair
|
|
20
|
+
*/
|
|
21
|
+
static async generate() {
|
|
22
|
+
const suite = new core_1.CipherSuite({
|
|
23
|
+
kem: new core_1.DhkemX25519HkdfSha256(),
|
|
24
|
+
kdf: new core_1.HkdfSha256(),
|
|
25
|
+
aead: new core_1.Aes256Gcm()
|
|
26
|
+
});
|
|
27
|
+
const { publicKey, privateKey } = await suite.kem.generateKeyPair();
|
|
28
|
+
// Make sure the public key is extractable for serialization
|
|
29
|
+
const extractablePublicKey = await crypto.subtle.importKey('raw', await crypto.subtle.exportKey('raw', publicKey), { name: 'X25519' }, true, // extractable
|
|
30
|
+
[]);
|
|
31
|
+
return new Identity(suite, extractablePublicKey, privateKey);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create identity from JSON string
|
|
35
|
+
*/
|
|
36
|
+
static async fromJSON(json) {
|
|
37
|
+
const data = JSON.parse(json);
|
|
38
|
+
const suite = new core_1.CipherSuite({
|
|
39
|
+
kem: new core_1.DhkemX25519HkdfSha256(),
|
|
40
|
+
kdf: new core_1.HkdfSha256(),
|
|
41
|
+
aead: new core_1.Aes256Gcm()
|
|
42
|
+
});
|
|
43
|
+
// Import public key
|
|
44
|
+
const publicKey = await crypto.subtle.importKey('raw', new Uint8Array(data.publicKey), { name: 'X25519' }, true, // extractable
|
|
45
|
+
[]);
|
|
46
|
+
// Deserialize private key using HPKE library
|
|
47
|
+
const privateKey = await suite.kem.deserializePrivateKey(new Uint8Array(data.privateKey).buffer);
|
|
48
|
+
return new Identity(suite, publicKey, privateKey);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Convert identity to JSON string
|
|
52
|
+
*/
|
|
53
|
+
async toJSON() {
|
|
54
|
+
const publicKeyBytes = new Uint8Array(await crypto.subtle.exportKey('raw', this.publicKey));
|
|
55
|
+
// For X25519, we need to use the HPKE library's serialization for private keys
|
|
56
|
+
const privateKeyBytes = await this.suite.kem.serializePrivateKey(this.privateKey);
|
|
57
|
+
return JSON.stringify({
|
|
58
|
+
publicKey: Array.from(publicKeyBytes),
|
|
59
|
+
privateKey: Array.from(new Uint8Array(privateKeyBytes))
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get public key as CryptoKey
|
|
64
|
+
*/
|
|
65
|
+
getPublicKey() {
|
|
66
|
+
return this.publicKey;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get public key as hex string
|
|
70
|
+
*/
|
|
71
|
+
async getPublicKeyHex() {
|
|
72
|
+
const exported = await crypto.subtle.exportKey('raw', this.publicKey);
|
|
73
|
+
return Array.from(new Uint8Array(exported))
|
|
74
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
75
|
+
.join('');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get private key as CryptoKey
|
|
79
|
+
*/
|
|
80
|
+
getPrivateKey() {
|
|
81
|
+
return this.privateKey;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Marshal public key configuration for server key distribution
|
|
85
|
+
* Implements RFC 9458 format
|
|
86
|
+
*/
|
|
87
|
+
async marshalConfig() {
|
|
88
|
+
const kemId = protocol_js_1.HPKE_CONFIG.KEM;
|
|
89
|
+
const kdfId = protocol_js_1.HPKE_CONFIG.KDF;
|
|
90
|
+
const aeadId = protocol_js_1.HPKE_CONFIG.AEAD;
|
|
91
|
+
// Export public key as raw bytes
|
|
92
|
+
const publicKeyBytes = new Uint8Array(await crypto.subtle.exportKey('raw', this.publicKey));
|
|
93
|
+
// Key ID (1 byte) + KEM ID (2 bytes) + Public Key + Cipher Suites
|
|
94
|
+
const keyId = 0;
|
|
95
|
+
const publicKeySize = publicKeyBytes.length;
|
|
96
|
+
const cipherSuitesSize = 2 + 2; // KDF ID + AEAD ID
|
|
97
|
+
const buffer = new Uint8Array(1 + 2 + publicKeySize + 2 + cipherSuitesSize);
|
|
98
|
+
let offset = 0;
|
|
99
|
+
// Key ID
|
|
100
|
+
buffer[offset++] = keyId;
|
|
101
|
+
// KEM ID
|
|
102
|
+
buffer[offset++] = (kemId >> 8) & 0xFF;
|
|
103
|
+
buffer[offset++] = kemId & 0xFF;
|
|
104
|
+
// Public Key
|
|
105
|
+
buffer.set(publicKeyBytes, offset);
|
|
106
|
+
offset += publicKeySize;
|
|
107
|
+
// Cipher Suites Length (2 bytes)
|
|
108
|
+
buffer[offset++] = (cipherSuitesSize >> 8) & 0xFF;
|
|
109
|
+
buffer[offset++] = cipherSuitesSize & 0xFF;
|
|
110
|
+
// KDF ID
|
|
111
|
+
buffer[offset++] = (kdfId >> 8) & 0xFF;
|
|
112
|
+
buffer[offset++] = kdfId & 0xFF;
|
|
113
|
+
// AEAD ID
|
|
114
|
+
buffer[offset++] = (aeadId >> 8) & 0xFF;
|
|
115
|
+
buffer[offset++] = aeadId & 0xFF;
|
|
116
|
+
return buffer;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Unmarshal public configuration from server
|
|
120
|
+
*/
|
|
121
|
+
static async unmarshalPublicConfig(data) {
|
|
122
|
+
let offset = 0;
|
|
123
|
+
// Read Key ID
|
|
124
|
+
const keyId = data[offset++];
|
|
125
|
+
// Read KEM ID
|
|
126
|
+
const kemId = (data[offset++] << 8) | data[offset++];
|
|
127
|
+
// Read Public Key (32 bytes for X25519)
|
|
128
|
+
const publicKeySize = 32;
|
|
129
|
+
const publicKeyBytes = data.slice(offset, offset + publicKeySize);
|
|
130
|
+
offset += publicKeySize;
|
|
131
|
+
// Read Cipher Suites Length
|
|
132
|
+
const cipherSuitesLength = (data[offset++] << 8) | data[offset++];
|
|
133
|
+
// Read KDF ID
|
|
134
|
+
const kdfId = (data[offset++] << 8) | data[offset++];
|
|
135
|
+
// Read AEAD ID
|
|
136
|
+
const aeadId = (data[offset++] << 8) | data[offset++];
|
|
137
|
+
// Create suite (assuming X25519 for now)
|
|
138
|
+
const suite = new core_1.CipherSuite({
|
|
139
|
+
kem: new core_1.DhkemX25519HkdfSha256(),
|
|
140
|
+
kdf: new core_1.HkdfSha256(),
|
|
141
|
+
aead: new core_1.Aes256Gcm()
|
|
142
|
+
});
|
|
143
|
+
// Import public key using HPKE library
|
|
144
|
+
const publicKey = await suite.kem.deserializePublicKey(publicKeyBytes.buffer);
|
|
145
|
+
// For server config, we only have the public key, no private key
|
|
146
|
+
// We'll create a dummy private key that won't be used
|
|
147
|
+
const dummyPrivateKey = await suite.kem.deserializePrivateKey(new Uint8Array(32).buffer);
|
|
148
|
+
return new Identity(suite, publicKey, dummyPrivateKey);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Encrypt request body and set appropriate headers
|
|
152
|
+
*/
|
|
153
|
+
async encryptRequest(request, serverPublicKey) {
|
|
154
|
+
const body = await request.arrayBuffer();
|
|
155
|
+
if (body.byteLength === 0) {
|
|
156
|
+
// No body to encrypt, just set client public key header
|
|
157
|
+
const headers = new Headers(request.headers);
|
|
158
|
+
headers.set(protocol_js_1.PROTOCOL.CLIENT_PUBLIC_KEY_HEADER, await this.getPublicKeyHex());
|
|
159
|
+
return new Request(request.url, {
|
|
160
|
+
method: request.method,
|
|
161
|
+
headers,
|
|
162
|
+
body: null
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
// Create sender for encryption
|
|
166
|
+
const sender = await this.suite.createSenderContext({
|
|
167
|
+
recipientPublicKey: serverPublicKey
|
|
168
|
+
});
|
|
169
|
+
// Encrypt the body
|
|
170
|
+
const encrypted = await sender.seal(body);
|
|
171
|
+
// Get encapsulated key
|
|
172
|
+
const encapKey = sender.enc;
|
|
173
|
+
// Create chunked format: 4-byte length header + encrypted data
|
|
174
|
+
const chunkLength = new Uint8Array(4);
|
|
175
|
+
const view = new DataView(chunkLength.buffer);
|
|
176
|
+
view.setUint32(0, encrypted.byteLength, false); // Big-endian
|
|
177
|
+
const chunkedData = new Uint8Array(4 + encrypted.byteLength);
|
|
178
|
+
chunkedData.set(chunkLength, 0);
|
|
179
|
+
chunkedData.set(new Uint8Array(encrypted), 4);
|
|
180
|
+
// Create new request with encrypted body and headers
|
|
181
|
+
const headers = new Headers(request.headers);
|
|
182
|
+
headers.set(protocol_js_1.PROTOCOL.CLIENT_PUBLIC_KEY_HEADER, await this.getPublicKeyHex());
|
|
183
|
+
headers.set(protocol_js_1.PROTOCOL.ENCAPSULATED_KEY_HEADER, Array.from(new Uint8Array(encapKey))
|
|
184
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
185
|
+
.join(''));
|
|
186
|
+
return new Request(request.url, {
|
|
187
|
+
method: request.method,
|
|
188
|
+
headers,
|
|
189
|
+
body: chunkedData,
|
|
190
|
+
duplex: 'half'
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Decrypt response body
|
|
195
|
+
*/
|
|
196
|
+
async decryptResponse(response, serverEncapKey) {
|
|
197
|
+
if (!response.body) {
|
|
198
|
+
return response;
|
|
199
|
+
}
|
|
200
|
+
// Create receiver for decryption
|
|
201
|
+
const receiver = await this.suite.createRecipientContext({
|
|
202
|
+
recipientKey: this.privateKey,
|
|
203
|
+
enc: serverEncapKey.buffer
|
|
204
|
+
});
|
|
205
|
+
// Create a readable stream that decrypts chunks as they arrive
|
|
206
|
+
const decryptedStream = new ReadableStream({
|
|
207
|
+
start(controller) {
|
|
208
|
+
const reader = response.body.getReader();
|
|
209
|
+
let buffer = new Uint8Array(0);
|
|
210
|
+
let offset = 0;
|
|
211
|
+
async function pump() {
|
|
212
|
+
try {
|
|
213
|
+
while (true) {
|
|
214
|
+
const { done, value } = await reader.read();
|
|
215
|
+
if (done)
|
|
216
|
+
break;
|
|
217
|
+
// Append new data to buffer
|
|
218
|
+
const newBuffer = new Uint8Array(buffer.length + value.length);
|
|
219
|
+
newBuffer.set(buffer);
|
|
220
|
+
newBuffer.set(value, buffer.length);
|
|
221
|
+
buffer = newBuffer;
|
|
222
|
+
// Process complete chunks
|
|
223
|
+
while (offset + 4 <= buffer.length) {
|
|
224
|
+
// Read chunk length (4 bytes big-endian)
|
|
225
|
+
const chunkLength = (buffer[offset] << 24) |
|
|
226
|
+
(buffer[offset + 1] << 16) |
|
|
227
|
+
(buffer[offset + 2] << 8) |
|
|
228
|
+
buffer[offset + 3];
|
|
229
|
+
offset += 4;
|
|
230
|
+
if (chunkLength === 0) {
|
|
231
|
+
continue; // Empty chunk
|
|
232
|
+
}
|
|
233
|
+
// Check if we have the complete chunk
|
|
234
|
+
if (offset + chunkLength > buffer.length) {
|
|
235
|
+
// Not enough data yet, rewind offset and wait for more
|
|
236
|
+
offset -= 4;
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
// Extract and decrypt the chunk
|
|
240
|
+
const encryptedChunk = buffer.slice(offset, offset + chunkLength);
|
|
241
|
+
offset += chunkLength;
|
|
242
|
+
try {
|
|
243
|
+
const decryptedChunk = await receiver.open(encryptedChunk.buffer);
|
|
244
|
+
controller.enqueue(new Uint8Array(decryptedChunk));
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
controller.error(new Error(`Failed to decrypt chunk: ${error}`));
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
// Remove processed data from buffer
|
|
252
|
+
if (offset > 0) {
|
|
253
|
+
buffer = buffer.slice(offset);
|
|
254
|
+
offset = 0;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
controller.close();
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
controller.error(error);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
pump();
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
// Create new response with decrypted stream
|
|
267
|
+
return new Response(decryptedStream, {
|
|
268
|
+
status: response.status,
|
|
269
|
+
statusText: response.statusText,
|
|
270
|
+
headers: response.headers
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
exports.Identity = Identity;
|
|
275
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* JavaScript client for Encrypted HTTP Body Protocol (EHBP) using HPKE
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* This library provides secure HTTP communication using Hybrid Public Key Encryption (HPKE)
|
|
5
5
|
* as specified in RFC 9180. It automatically encrypts request bodies and decrypts response
|
|
6
6
|
* bodies while preserving HTTP headers for routing.
|
|
7
7
|
*/
|
|
8
|
-
|
|
9
8
|
export { Identity } from './identity.js';
|
|
10
9
|
export { Transport, createTransport } from './client.js';
|
|
11
10
|
export { PROTOCOL, HPKE_CONFIG } from './protocol.js';
|
|
12
|
-
|
|
13
|
-
// Re-export commonly used types
|
|
14
11
|
export type { CipherSuite } from '@hpke/core';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGtD,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* JavaScript client for Encrypted HTTP Body Protocol (EHBP) using HPKE
|
|
4
|
+
*
|
|
5
|
+
* This library provides secure HTTP communication using Hybrid Public Key Encryption (HPKE)
|
|
6
|
+
* as specified in RFC 9180. It automatically encrypts request bodies and decrypts response
|
|
7
|
+
* bodies while preserving HTTP headers for routing.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.HPKE_CONFIG = exports.PROTOCOL = exports.createTransport = exports.Transport = exports.Identity = void 0;
|
|
11
|
+
var identity_js_1 = require("./identity.js");
|
|
12
|
+
Object.defineProperty(exports, "Identity", { enumerable: true, get: function () { return identity_js_1.Identity; } });
|
|
13
|
+
var client_js_1 = require("./client.js");
|
|
14
|
+
Object.defineProperty(exports, "Transport", { enumerable: true, get: function () { return client_js_1.Transport; } });
|
|
15
|
+
Object.defineProperty(exports, "createTransport", { enumerable: true, get: function () { return client_js_1.createTransport; } });
|
|
16
|
+
var protocol_js_1 = require("./protocol.js");
|
|
17
|
+
Object.defineProperty(exports, "PROTOCOL", { enumerable: true, get: function () { return protocol_js_1.PROTOCOL; } });
|
|
18
|
+
Object.defineProperty(exports, "HPKE_CONFIG", { enumerable: true, get: function () { return protocol_js_1.HPKE_CONFIG; } });
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,6CAAyC;AAAhC,uGAAA,QAAQ,OAAA;AACjB,yCAAyD;AAAhD,sGAAA,SAAS,OAAA;AAAE,4GAAA,eAAe,OAAA;AACnC,6CAAsD;AAA7C,uGAAA,QAAQ,OAAA;AAAE,0GAAA,WAAW,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Protocol constants for EHBP (Encrypted HTTP Body Protocol)
|
|
3
|
+
*/
|
|
4
|
+
export declare const PROTOCOL: {
|
|
5
|
+
readonly ENCAPSULATED_KEY_HEADER: "Ehbp-Encapsulated-Key";
|
|
6
|
+
readonly CLIENT_PUBLIC_KEY_HEADER: "Ehbp-Client-Public-Key";
|
|
7
|
+
readonly KEYS_MEDIA_TYPE: "application/ohttp-keys";
|
|
8
|
+
readonly KEYS_PATH: "/.well-known/hpke-keys";
|
|
9
|
+
readonly FALLBACK_HEADER: "Ehbp-Fallback";
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* HPKE suite configuration matching the Go implementation
|
|
13
|
+
*/
|
|
14
|
+
export declare const HPKE_CONFIG: {
|
|
15
|
+
readonly KEM: 32;
|
|
16
|
+
readonly KDF: 1;
|
|
17
|
+
readonly AEAD: 2;
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/protocol.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;CAMX,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;;;;CAId,CAAC"}
|