Skip to content

Commit efc97ad

Browse files
phoddiemkellner
authored andcommitted
reduce peak stack use of handshake packetize
1 parent 691dcb3 commit efc97ad

File tree

1 file changed

+28
-23
lines changed

1 file changed

+28
-23
lines changed

modules/crypt/ssl/ssl_handshake.js

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -297,17 +297,18 @@ let handshakeProtocol = {
297297
}
298298
},
299299
packetize(session, cipherSuites, compressionMethods, msgType) {
300-
var s = new SSLStream();
300+
let s = new SSLStream();
301301
s.writeChars(session.protocolVersion, 2);
302-
var random = this.random.serialize();
302+
let random = this.random.serialize();
303+
let sessionID;
303304
s.writeChunk(random);
304305
if (msgType == client_hello) {
305306
session.clientRandom = random;
306-
var sessionID = session.clientSessionID;
307+
sessionID = session.clientSessionID;
307308
}
308309
else {
309310
session.serverRandom = random;
310-
var sessionID = session.serverSessionID;
311+
sessionID = session.serverSessionID;
311312
}
312313
if (!sessionID || !sessionID.byteLength)
313314
s.writeChar(0);
@@ -317,69 +318,73 @@ let handshakeProtocol = {
317318
}
318319
if (msgType == client_hello) {
319320
s.writeChars(cipherSuites.length * 2, 2);
320-
for (var i = 0; i < cipherSuites.length; i++) {
321-
var val = cipherSuites[i].value;
321+
for (let i = 0; i < cipherSuites.length; i++) {
322+
let val = cipherSuites[i].value;
322323
s.writeChar(val[0]);
323324
s.writeChar(val[1]);
324325
}
325326
s.writeChar(compressionMethods.length);
326-
for (var i = 0; i < compressionMethods.length; i++)
327+
for (let i = 0; i < compressionMethods.length; i++)
327328
s.writeChar(compressionMethods[i]);
328329
//
329330
// TLS extensions
330331
//
331-
var es = new SSLStream();
332-
for (var i in session.options) {
332+
let es = new SSLStream();
333+
for (let i in session.options) {
333334
if (!(i in extension_type))
334335
continue;
335-
var type = extension_type[i];
336-
var ext = session.options[i];
336+
let type = extension_type[i];
337+
let ext = session.options[i];
337338
switch (type) {
338-
case extension_type.tls_server_name:
339+
case extension_type.tls_server_name: {
339340
es.writeChars(type, 2);
340-
var len = 1 + 2 + ext.length;
341+
let len = 1 + 2 + ext.length;
341342
es.writeChars(2 + len, 2);
342343
es.writeChars(len, 2);
343344
es.writeChar(0); // name_type, 0 -- host_name
344345
es.writeChars(ext.length, 2);
345346
es.writeString(ext);
347+
}
346348
break;
347-
case extension_type.tls_max_fragment_length:
349+
case extension_type.tls_max_fragment_length: {
348350
es.writeChars(type, 2);
349351
es.writeChars(2 + 1, 2);
350352
es.writeChars(1, 2);
351-
var j;
353+
let j;
352354
for (j = 1; j <= 4; j++) {
353-
var e = j + 9; // start with 2^9
355+
let e = j + 9; // start with 2^9
354356
if ((ext >>> e) == 0)
355357
break;
356358
}
357359
if (j > 4)
358360
j = 4;
359361
es.writeChar(j);
362+
}
360363
break;
361-
case extension_type.tls_signature_algorithms:
364+
case extension_type.tls_signature_algorithms: {
362365
es.writeChars(type, 2);
363366
es.writeChars(2 + ext.length * 2, 2);
364367
es.writeChars(ext.length, 2);
365368
for (let j = 0; j < ext.length; j++) {
366369
es.writeChar(ext[j].hash);
367370
es.writeChar(ext[j].sig);
368371
}
372+
}
369373
break;
370-
case extension_type.tls_application_layer_protocol_negotiation:
374+
case extension_type.tls_application_layer_protocol_negotiation: {
371375
es.writeChars(type, 2);
372-
var len = 0;
376+
let len = 0;
373377
if (typeof ext == 'string') ext = ext.split(':');
374-
for (var j = 0; j < ext.length; j++)
378+
for (let j = 0; j < ext.length; j++)
375379
len += ext[j].length + 1;
376380
es.writeChars(len + 2, 2);
377381
es.writeChars(len, 2);
378-
for (var j = 0; j < ext.length; j++) {
379-
var name = ext[j];
382+
for (let j = 0; j < ext.length; j++) {
383+
let name = ext[j];
380384
es.writeChars(name.length, 1);
381385
es.writeString(name);
382386
}
387+
}
383388
break;
384389
default:
385390
// not supported yet
@@ -392,7 +397,7 @@ let handshakeProtocol = {
392397
}
393398
}
394399
else {
395-
var val = cipherSuites[0].value;
400+
let val = cipherSuites[0].value;
396401
s.writeChar(val[0]);
397402
s.writeChar(val[1]);
398403
s.writeChar(compressionMethods[0]);

0 commit comments

Comments
 (0)