|
@@ -212,6 +212,78 @@ func utlsIdToSpec(id ClientHelloID) (ClientHelloSpec, error) {
|
|
|
&UtlsPaddingExtension{GetPaddingLen: BoringPaddingStyle},
|
|
&UtlsPaddingExtension{GetPaddingLen: BoringPaddingStyle},
|
|
|
},
|
|
},
|
|
|
}, nil
|
|
}, nil
|
|
|
|
|
+ case HelloChrome_83:
|
|
|
|
|
+ return ClientHelloSpec{
|
|
|
|
|
+ CipherSuites: []uint16{
|
|
|
|
|
+ GREASE_PLACEHOLDER,
|
|
|
|
|
+ TLS_AES_128_GCM_SHA256,
|
|
|
|
|
+ TLS_AES_256_GCM_SHA384,
|
|
|
|
|
+ TLS_CHACHA20_POLY1305_SHA256,
|
|
|
|
|
+ TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
|
|
|
|
|
+ TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
|
|
|
|
|
+ TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
|
|
|
|
|
+ TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
|
|
|
|
|
+ TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,
|
|
|
|
|
+ TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,
|
|
|
|
|
+ TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
|
|
|
|
|
+ TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
|
|
|
|
|
+ TLS_RSA_WITH_AES_128_GCM_SHA256,
|
|
|
|
|
+ TLS_RSA_WITH_AES_256_GCM_SHA384,
|
|
|
|
|
+ TLS_RSA_WITH_AES_128_CBC_SHA,
|
|
|
|
|
+ TLS_RSA_WITH_AES_256_CBC_SHA,
|
|
|
|
|
+ },
|
|
|
|
|
+ CompressionMethods: []byte{
|
|
|
|
|
+ 0x00, // compressionNone
|
|
|
|
|
+ },
|
|
|
|
|
+ Extensions: []TLSExtension{
|
|
|
|
|
+ &UtlsGREASEExtension{},
|
|
|
|
|
+ &SNIExtension{},
|
|
|
|
|
+ &UtlsExtendedMasterSecretExtension{},
|
|
|
|
|
+ &RenegotiationInfoExtension{Renegotiation: RenegotiateOnceAsClient},
|
|
|
|
|
+ &SupportedCurvesExtension{[]CurveID{
|
|
|
|
|
+ CurveID(GREASE_PLACEHOLDER),
|
|
|
|
|
+ X25519,
|
|
|
|
|
+ CurveP256,
|
|
|
|
|
+ CurveP384,
|
|
|
|
|
+ }},
|
|
|
|
|
+ &SupportedPointsExtension{SupportedPoints: []byte{
|
|
|
|
|
+ 0x00, // pointFormatUncompressed
|
|
|
|
|
+ }},
|
|
|
|
|
+ &SessionTicketExtension{},
|
|
|
|
|
+ &ALPNExtension{AlpnProtocols: []string{"h2", "http/1.1"}},
|
|
|
|
|
+ &StatusRequestExtension{},
|
|
|
|
|
+ &SignatureAlgorithmsExtension{SupportedSignatureAlgorithms: []SignatureScheme{
|
|
|
|
|
+ ECDSAWithP256AndSHA256,
|
|
|
|
|
+ PSSWithSHA256,
|
|
|
|
|
+ PKCS1WithSHA256,
|
|
|
|
|
+ ECDSAWithP384AndSHA384,
|
|
|
|
|
+ PSSWithSHA384,
|
|
|
|
|
+ PKCS1WithSHA384,
|
|
|
|
|
+ PSSWithSHA512,
|
|
|
|
|
+ PKCS1WithSHA512,
|
|
|
|
|
+ }},
|
|
|
|
|
+ &SCTExtension{},
|
|
|
|
|
+ &KeyShareExtension{[]KeyShare{
|
|
|
|
|
+ {Group: CurveID(GREASE_PLACEHOLDER), Data: []byte{0}},
|
|
|
|
|
+ {Group: X25519},
|
|
|
|
|
+ }},
|
|
|
|
|
+ &PSKKeyExchangeModesExtension{[]uint8{
|
|
|
|
|
+ PskModeDHE,
|
|
|
|
|
+ }},
|
|
|
|
|
+ &SupportedVersionsExtension{[]uint16{
|
|
|
|
|
+ GREASE_PLACEHOLDER,
|
|
|
|
|
+ VersionTLS13,
|
|
|
|
|
+ VersionTLS12,
|
|
|
|
|
+ VersionTLS11,
|
|
|
|
|
+ VersionTLS10,
|
|
|
|
|
+ }},
|
|
|
|
|
+ &FakeCertCompressionAlgsExtension{[]CertCompressionAlgo{
|
|
|
|
|
+ CertCompressionBrotli,
|
|
|
|
|
+ }},
|
|
|
|
|
+ &UtlsGREASEExtension{},
|
|
|
|
|
+ &UtlsPaddingExtension{GetPaddingLen: BoringPaddingStyle},
|
|
|
|
|
+ },
|
|
|
|
|
+ }, nil
|
|
|
case HelloFirefox_55, HelloFirefox_56:
|
|
case HelloFirefox_55, HelloFirefox_56:
|
|
|
return ClientHelloSpec{
|
|
return ClientHelloSpec{
|
|
|
TLSVersMax: VersionTLS12,
|
|
TLSVersMax: VersionTLS12,
|