This repository was archived by the owner on Feb 5, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathspecs.go
More file actions
84 lines (76 loc) · 3.07 KB
/
specs.go
File metadata and controls
84 lines (76 loc) · 3.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package legitagent
import (
"github.com/SyNdicateFoundation/fastrand"
utls "github.com/refraction-networking/utls"
)
func shuffleExtensions(extensions []utls.TLSExtension) []utls.TLSExtension {
shuffled := make([]utls.TLSExtension, len(extensions))
copy(shuffled, extensions)
fastrand.Shuffle(len(shuffled), func(i, j int) {
shuffled[i], shuffled[j] = shuffled[j], shuffled[i]
})
final := make([]utls.TLSExtension, 0, len(shuffled)+3)
final = append(final, &utls.UtlsGREASEExtension{})
final = append(final, shuffled...)
final = append(final, &utls.UtlsGREASEExtension{})
final = append(final, &utls.UtlsPaddingExtension{GetPaddingLen: utls.BoringPaddingStyle})
return final
}
func ChromeLatestSpec() *utls.ClientHelloSpec {
extensions := []utls.TLSExtension{
&utls.SNIExtension{},
&utls.ExtendedMasterSecretExtension{},
&utls.RenegotiationInfoExtension{Renegotiation: utls.RenegotiateOnceAsClient},
&utls.SupportedCurvesExtension{Curves: []utls.CurveID{
utls.GREASE_PLACEHOLDER, utls.X25519, utls.CurveP256, utls.CurveP384,
}},
&utls.SupportedPointsExtension{SupportedPoints: []byte{0}},
&utls.SessionTicketExtension{},
&utls.ALPNExtension{AlpnProtocols: []string{"h2", "http/1.1"}},
&utls.StatusRequestExtension{},
&utls.SignatureAlgorithmsExtension{SupportedSignatureAlgorithms: []utls.SignatureScheme{
utls.ECDSAWithP256AndSHA256, utls.PSSWithSHA256, utls.PKCS1WithSHA256,
utls.ECDSAWithP384AndSHA384, utls.PSSWithSHA384, utls.PKCS1WithSHA384,
utls.PSSWithSHA512, utls.PKCS1WithSHA512,
}},
&utls.SCTExtension{},
&utls.KeyShareExtension{KeyShares: []utls.KeyShare{
{Group: utls.CurveID(utls.GREASE_PLACEHOLDER), Data: []byte{0}},
{Group: utls.X25519},
}},
&utls.PSKKeyExchangeModesExtension{Modes: []uint8{utls.PskModeDHE}},
&utls.SupportedVersionsExtension{Versions: []uint16{
utls.GREASE_PLACEHOLDER, utls.VersionTLS13, utls.VersionTLS12,
}},
&utls.UtlsCompressCertExtension{Algorithms: []utls.CertCompressionAlgo{utls.CertCompressionBrotli}},
}
cipherSuites := []uint16{
utls.GREASE_PLACEHOLDER,
utls.TLS_AES_128_GCM_SHA256,
utls.TLS_AES_256_GCM_SHA384,
utls.TLS_CHACHA20_POLY1305_SHA256,
utls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
utls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
utls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
utls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
utls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
utls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
utls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
utls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
utls.TLS_RSA_WITH_AES_128_GCM_SHA256,
utls.TLS_RSA_WITH_AES_256_GCM_SHA384,
utls.TLS_RSA_WITH_AES_128_CBC_SHA,
utls.TLS_RSA_WITH_AES_256_CBC_SHA,
}
shuffledCiphers := make([]uint16, len(cipherSuites))
copy(shuffledCiphers, cipherSuites)
fastrand.Shuffle(len(shuffledCiphers), func(i, j int) {
shuffledCiphers[i], shuffledCiphers[j] = shuffledCiphers[j], shuffledCiphers[i]
})
return &utls.ClientHelloSpec{
CipherSuites: shuffledCiphers,
CompressionMethods: []byte{0x00},
Extensions: shuffleExtensions(extensions),
GetSessionID: nil,
}
}