Rebase fixup

ptspec
Andy Wang 1 year ago
parent 0a6846fbfc
commit 018994bfd1
No known key found for this signature in database
GPG Key ID: 181B49F9F38F3374

@ -1,41 +0,0 @@
package browsers
import "encoding/binary"
type ClientHelloFields struct {
Random []byte
SessionId []byte
X25519KeyShare []byte
ServerName string
}
// Browser represents the signature of a browser at a particular version
type Browser interface {
// ComposeClientHello produces the ClientHello message (without TLS record layer) as the mimicking browser would
ComposeClientHello(ClientHelloFields) []byte
}
// addExtensionRecord, add type, length to extension data
func addExtRec(typ []byte, data []byte) []byte {
length := make([]byte, 2)
binary.BigEndian.PutUint16(length, uint16(len(data)))
ret := make([]byte, 2+2+len(data))
copy(ret[0:2], typ)
copy(ret[2:4], length)
copy(ret[4:], data)
return ret
}
func generateSNI(serverName string) []byte {
serverNameListLength := make([]byte, 2)
binary.BigEndian.PutUint16(serverNameListLength, uint16(len(serverName)+3))
serverNameType := []byte{0x00} // host_name
serverNameLength := make([]byte, 2)
binary.BigEndian.PutUint16(serverNameLength, uint16(len(serverName)))
ret := make([]byte, 2+1+2+len(serverName))
copy(ret[0:2], serverNameListLength)
copy(ret[2:3], serverNameType)
copy(ret[3:5], serverNameLength)
copy(ret[5:], serverName)
return ret
}

@ -1,20 +1,13 @@
package client
import (
"crypto"
"encoding/json"
"fmt"
"github.com/cbeuw/Cloak/internal/common"
"github.com/cbeuw/Cloak/libcloak/client/browsers"
"github.com/cbeuw/Cloak/libcloak/client/transports"
"io/ioutil"
"net"
"strings"
"time"
"github.com/cbeuw/Cloak/internal/common"
log "github.com/sirupsen/logrus"
"github.com/cbeuw/Cloak/internal/ecdh"
mux "github.com/cbeuw/Cloak/internal/multiplex"
)
@ -179,17 +172,18 @@ func (raw *Config) Process(worldState common.WorldState) (remote RemoteConnConfi
CDNPort: cdnPort,
}
}
case "direct":
var browser browser
case "direct", "":
var browser transports.Browser
switch strings.ToLower(raw.BrowserSig) {
case "firefox":
browser = firefox
browser = transports.Firefox
case "safari":
browser = safari
case "chrome":
fallthrough
browser = transports.Safari
case "chrome", "":
browser = transports.Chrome
default:
browser = chrome
err = fmt.Errorf("unknown browser signature %v", raw.BrowserSig)
return
}
remote.TransportMaker = func() transports.Transport {
return &transports.DirectTLS{

@ -2,16 +2,11 @@ package transports
import (
"github.com/cbeuw/Cloak/internal/common"
"github.com/cbeuw/Cloak/libcloak/client/browsers"
utls "github.com/refraction-networking/utls"
log "github.com/sirupsen/logrus"
"net"
"github.com/cbeuw/Cloak/internal/common"
)
const appDataMaxLength = 16401
type clientHelloFields struct {
random []byte
sessionId []byte
@ -19,31 +14,30 @@ type clientHelloFields struct {
serverName string
}
type browser int
type Browser int
const (
chrome = iota
firefox
safari
Chrome = iota
Firefox
Safari
)
type DirectTLS struct {
*common.TLSConn
Browser browsers.Browser
browser browser
Browser Browser
}
func buildClientHello(browser browser, fields clientHelloFields) ([]byte, error) {
func buildClientHello(browser Browser, fields clientHelloFields) ([]byte, error) {
// We don't use utls to handle connections (as it'll attempt a real TLS negotiation)
// We only want it to build the ClientHello locally
fakeConn := net.TCPConn{}
var helloID utls.ClientHelloID
switch browser {
case chrome:
case Chrome:
helloID = utls.HelloChrome_Auto
case firefox:
case Firefox:
helloID = utls.HelloFirefox_Auto
case safari:
case Safari:
helloID = utls.HelloSafari_Auto
}
@ -92,7 +86,7 @@ func (tls *DirectTLS) Handshake(rawConn net.Conn, authInfo AuthInfo) (sessionKey
serverName: authInfo.MockDomain,
}
var ch []byte
ch, err = buildClientHello(tls.browser, fields)
ch, err = buildClientHello(tls.Browser, fields)
if err != nil {
return
}

Loading…
Cancel
Save