Skip to content

Commit 87cb126

Browse files
committed
use Map in KeyShareClientHello
1 parent 29f95ed commit 87cb126

File tree

3 files changed

+15
-11
lines changed

3 files changed

+15
-11
lines changed

deno.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@tls/extension",
3-
"version": "0.2.8",
3+
"version": "0.2.9",
44
"exports": "./src/mod.ts",
55
"publish": {
66
"exclude": ["dist/"]

src/keyshare.js

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,29 @@
11
//@ts-self-types = "../type/keyshare.d.ts"
22
import { Constrained, Uint16, NamedGroup, KeyShareEntry } from "./dep.ts";
3+
import { parseItems } from "./utils.js";
34

45
/**
56
* Represents a KeyShare extension in the ClientHello message in TLS handshake.
67
* This class holds multiple KeyShareEntry instances and manages their constraints.
78
*/
89
export class KeyShareClientHello extends Constrained {
9-
10+
keyShareEntries = new Map
1011
static fromKeyShareEntries(...keyShareEntries) {
1112
return new KeyShareClientHello(...keyShareEntries)
1213
}
1314

1415
static from(array) {
1516
const copy = Uint8Array.from(array);
16-
const l = Uint16.from(copy.subarray(0, 2)).value;
17-
const keyShareEntries = []
18-
for (let offset = 2; offset < l;) {
19-
const keyShareEntry = KeyShareEntry.from(copy.subarray(offset));
20-
keyShareEntries.push(keyShareEntry);
21-
offset += keyShareEntry.length
22-
}
17+
const lengthOf = Uint16.from(copy.subarray(0, 2)).value;
18+
const keyShareEntries = parseItems(copy, 2, lengthOf, KeyShareEntry);
2319
return new KeyShareClientHello(...keyShareEntries);
2420
}
2521

2622
constructor(...keyShareEntries) {
2723
super(0, 65535, ...keyShareEntries)
28-
this.keyShareEntries = new Set(keyShareEntries)
24+
for(const {group, key_exchange} of keyShareEntries){
25+
this.keyShareEntries.set(group, key_exchange);
26+
}
2927
}
3028
}
3129

@@ -34,7 +32,7 @@ export class KeyShareClientHello extends Constrained {
3432
* This class manages the NamedGroup for key share negotiation.
3533
*/
3634
export class KeyShareHelloRetryRequest extends Uint16 {
37-
35+
3836
static fromGroup(group) { return new KeyShareHelloRetryRequest(group) }
3937

4038
static from(array) {

test/keyshare_test.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
1+
import { KeyShareClientHello } from "../src/keyshare.js";
12
import { KeyShareServerHello } from "../src/keyshare.js";
3+
import { NamedGroup } from "../src/dep.ts";
24
import { assertEquals } from "@std/assert";
35

46
Deno.test("KeyShareServerHello", () => {
57
const x25519 = Uint8Array.of(0, 29, 0, 32, 201, 130, 136, 118, 17, 32, 149, 254, 102, 118, 43, 219, 247, 198, 114, 225, 86, 214, 204, 37, 59, 131, 61, 241, 221, 105, 177, 176, 78, 117, 31, 15);
68
const back = KeyShareServerHello.from(x25519)
79
assertEquals(x25519.toString(), back.toString())
810
})
11+
12+
const keyShareClientHello = Uint8Array.of(0,36,0,29,0,32,153,56,29,229,96,228,189,67,210,61,142,67,90,125,186,254,179,192,110,81,193,60,174,77,84,19,105,30,82,154,175,44);
13+
14+
const back = KeyShareClientHello.from(keyShareClientHello);

0 commit comments

Comments
 (0)