From 54a7c6a2a5321eb10473aac0e2edcd85b4523efb Mon Sep 17 00:00:00 2001 From: 9seconds Date: Tue, 6 Apr 2021 11:09:37 +0300 Subject: [PATCH] Small subtle optimizations of faketls --- mtglib/internal/faketls/client_hello.go | 12 ++++-------- mtglib/internal/faketls/init.go | 6 +++++- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/mtglib/internal/faketls/client_hello.go b/mtglib/internal/faketls/client_hello.go index 62d3278..51e1fe5 100644 --- a/mtglib/internal/faketls/client_hello.go +++ b/mtglib/internal/faketls/client_hello.go @@ -3,6 +3,7 @@ package faketls import ( "crypto/hmac" "crypto/sha256" + "crypto/subtle" "encoding/binary" "fmt" "time" @@ -39,10 +40,7 @@ func ParseClientHello(secret, handshake []byte) (ClientHello, error) { } copy(hello.Random[:], handshake[ClientHelloRandomOffset:]) - - for i := ClientHelloRandomOffset; i < ClientHelloRandomOffset+RandomLen; i++ { - handshake[i] = 0 - } + copy(handshake[ClientHelloRandomOffset:], clientHelloEmptyRandom) rec := record.AcquireRecord() defer record.ReleaseRecord(rec) @@ -62,10 +60,8 @@ func ParseClientHello(secret, handshake []byte) (ClientHello, error) { computedRandom[i] ^= hello.Random[i] } - for i := 0; i < RandomLen-4; i++ { - if computedRandom[i] != 0 { - return hello, ErrBadDigest - } + if subtle.ConstantTimeCompare(clientHelloEmptyRandom[:RandomLen-4], computedRandom[:RandomLen-4]) != 1 { + return hello, ErrBadDigest } timestamp := int64(binary.LittleEndian.Uint32(computedRandom[RandomLen-4:])) diff --git a/mtglib/internal/faketls/init.go b/mtglib/internal/faketls/init.go index dfa269b..5bbf6f3 100644 --- a/mtglib/internal/faketls/init.go +++ b/mtglib/internal/faketls/init.go @@ -1,6 +1,9 @@ package faketls -import "errors" +import ( + "bytes" + "errors" +) const ( RandomLen = 32 @@ -34,4 +37,5 @@ var ( 0x00, 0x1d, // x25519 curve 0x00, 0x20, // 32 bytes of key } + clientHelloEmptyRandom = bytes.Repeat([]byte{0}, RandomLen) )