Skip to content

Commit be12a9b

Browse files
committed
add encryptedExtension to part of Handshake Context
1 parent e3ce818 commit be12a9b

File tree

4 files changed

+37
-8
lines changed

4 files changed

+37
-8
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/enum",
3-
"version": "0.3.7",
3+
"version": "0.3.8",
44
"exports": "./src/mod.ts",
55
"publish": {
66
"exclude": ["dist/"]

src/signaturescheme.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,12 @@ export class SignatureScheme extends Enum {
7777
*/
7878
get Uint16() { return Uint16.fromValue(+this); }
7979

80-
async certificateVerify(clientHelloMsg, serverHelloMsg, certificateMsg, RSAprivateKey) {
81-
const signature = await signatureFrom(clientHelloMsg, serverHelloMsg, certificateMsg, RSAprivateKey)
80+
async certificateVerify(clientHelloMsg, serverHelloMsg, encryptedExtensionsMsg, certificateMsg, RSAprivateKey) {
81+
const signature = await signatureFrom(clientHelloMsg, serverHelloMsg, encryptedExtensionsMsg, certificateMsg, RSAprivateKey)
8282
return new CertificateVerify(this, signature)
8383
}
84-
async certificateVerifyMsg(clientHelloMsg, serverHelloMsg, certificateMsg, RSAprivateKey){
85-
const certificateVerify = await this.certificateVerify(clientHelloMsg, serverHelloMsg, certificateMsg, RSAprivateKey);
84+
async certificateVerifyMsg(clientHelloMsg, serverHelloMsg, encryptedExtensionsMsg, certificateMsg, RSAprivateKey){
85+
const certificateVerify = await this.certificateVerify(clientHelloMsg, serverHelloMsg, encryptedExtensionsMsg, certificateMsg, RSAprivateKey);
8686
return HandshakeType.CERTIFICATE_VERIFY.handshake(certificateVerify);
8787
}
8888
}
@@ -118,7 +118,7 @@ export class Signature extends Constrained {
118118
}
119119
}
120120

121-
async function signatureFrom(clientHelloMsg, serverHelloMsg, certificateMsg, RSAprivateKey) {
121+
async function signatureFrom(clientHelloMsg, serverHelloMsg, encryptedExtensionsMsg, certificateMsg, RSAprivateKey) {
122122
const leading = Uint8Array.of(
123123
//NOTE 64 space characters
124124
32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
@@ -130,6 +130,7 @@ async function signatureFrom(clientHelloMsg, serverHelloMsg, certificateMsg, RSA
130130
const transcriptHash = sha256.create()
131131
.update(clientHelloMsg)
132132
.update(serverHelloMsg)
133+
.update(encryptedExtensionsMsg)
133134
.update(certificateMsg)
134135
.digest();
135136

test/signaturescheme_test.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { SignatureScheme, CertificateVerify, finished, Finished } from "../src/signaturescheme.js";
22
import { assertEquals } from "jsr:@std/assert";
33
import { HexaDecimal, sha256 } from "../src/dep.ts";
4+
import { HandshakeType } from "../src/handshaketype.js"
45

56
console.log(SignatureScheme.ED448);
67

@@ -36,6 +37,11 @@ const serverHelloMsg = HexaDecimal.fromString(
3637
20 95 fe 66 76 2b db f7 c6 72 e1 56 d6 cc 25 3b 83 3d f1 dd 69
3738
b1 b0 4e 75 1f 0f 00 2b 00 02 03 04`).byte
3839

40+
const encryptedExtensionsMsg = HandshakeType.ENCRYPTED_EXTENSIONS.handshake(HexaDecimal.fromString(`00 22 00 0a 00 14 00
41+
12 00 1d 00 17 00 18 00 19 01 00 01 01 01 02 01 03 01 04 00 1c
42+
00 02 40 01 00 00 00 00
43+
`).byte).byte
44+
3945
const certificateMsg = HexaDecimal.fromString(
4046
`0b 00 01 b9 00 00 01 b5 00 01 b0 30 82
4147
01 ac 30 82 01 15 a0 03 02 01 02 02 01 02 30 0d 06 09 2a 86 48
@@ -72,18 +78,19 @@ const rsaKey = await crypto.subtle.generateKey(
7278
)
7379

7480
Deno.test("CertificateVerify", async () => {
75-
const test = await SignatureScheme.RSA_PSS_PSS_SHA256.certificateVerify(clientHelloMsg, serverHelloMsg, certificateMsg, rsaKey.privateKey)
81+
const test = await SignatureScheme.RSA_PSS_PSS_SHA256.certificateVerify(clientHelloMsg, serverHelloMsg, encryptedExtensionsMsg, certificateMsg, rsaKey.privateKey)
7682
const back = CertificateVerify.from(test)
7783
assertEquals(test.toString(), back.toString())
7884
})
7985

8086

8187
Deno.test("Finished", async ()=>{
82-
const test = await SignatureScheme.RSA_PSS_PSS_SHA256.certificateVerifyMsg(clientHelloMsg, serverHelloMsg, certificateMsg, rsaKey.privateKey)
88+
const test = await SignatureScheme.RSA_PSS_PSS_SHA256.certificateVerifyMsg(clientHelloMsg, serverHelloMsg, encryptedExtensionsMsg, certificateMsg, rsaKey.privateKey)
8389
//const back = CertificateVerify.from(test)
8490
const serverHS_secret_fake = crypto.getRandomValues(new Uint8Array(32));
8591
const _finished = await finished(serverHS_secret_fake, test);
8692
const finishedBack = Finished.from(_finished);
8793
assertEquals(_finished.toString(), finishedBack.toString())
8894
})
8995

96+

type/signaturescheme.d.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Constrained, Uint16 } from "../src/dep.ts";
22
import { Enum } from "../src/enum.js";
3+
import type { Handshake } from "../src/handshaketype.js";
34

45
/**
56
* Enumeration of signature schemes as defined in RFC 8446.
@@ -64,16 +65,35 @@ export class SignatureScheme extends Enum {
6465
* Generates a CertificateVerify object.
6566
* @param {Uint8Array} clientHelloMsg - Client Hello message.
6667
* @param {Uint8Array} serverHelloMsg - Server Hello message.
68+
* @param {Uint8Array} encryptedExtensionsMsg - encryptedExtensions message
6769
* @param {Uint8Array} certificateMsg - Certificate message.
6870
* @param {CryptoKey} RSAprivateKey - RSA private key.
6971
* @returns {Promise<CertificateVerify>} CertificateVerify object.
7072
*/
7173
certificateVerify(
7274
clientHelloMsg: Uint8Array,
7375
serverHelloMsg: Uint8Array,
76+
encryptedExtensionsMsg: Uint8Array,
7477
certificateMsg: Uint8Array,
7578
RSAprivateKey: CryptoKey
7679
): Promise<CertificateVerify>;
80+
81+
/**
82+
* Generates a CertificateVerify Handshake object.
83+
* @param {Uint8Array} clientHelloMsg - Client Hello message.
84+
* @param {Uint8Array} serverHelloMsg - Server Hello message.
85+
* @param {Uint8Array} encryptedExtensionsMsg - encryptedExtensions message
86+
* @param {Uint8Array} certificateMsg - Certificate message.
87+
* @param {CryptoKey} RSAprivateKey - RSA private key.
88+
* @returns {Promise<Handshake>} Handshake of CertificateVerify object.
89+
*/
90+
certificateVerifyMsg(
91+
clientHelloMsg: Uint8Array,
92+
serverHelloMsg: Uint8Array,
93+
encryptedExtensionsMsg: Uint8Array,
94+
certificateMsg: Uint8Array,
95+
RSAprivateKey: CryptoKey
96+
): Promise<Handshake>;
7797
}
7898

7999
/**
@@ -133,6 +153,7 @@ export class Signature extends Constrained {
133153
export function signatureFrom(
134154
clientHelloMsg: Uint8Array,
135155
serverHelloMsg: Uint8Array,
156+
encryptedExtensionsMsg: Uint8Array,
136157
certificateMsg: Uint8Array,
137158
RSAprivateKey: CryptoKey
138159
): Promise<Uint8Array>;

0 commit comments

Comments
 (0)