/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef TLS_CLIENT_CONFIG_H_ #define TLS_CLIENT_CONFIG_H_ #include #include #include #include "prio.h" #include "sslt.h" #ifdef IS_DTLS_FUZZ #define SSL_VERSION_RANGE_MIN_VALID 0x0302 #else #define SSL_VERSION_RANGE_MIN_VALID 0x0301 #endif #define SSL_VERSION_RANGE_MAX_VALID 0x0304 namespace TlsClient { class Config { public: Config(const uint8_t* data, size_t len); void SetCallbacks(PRFileDesc* fd); void SetSocketOptions(PRFileDesc* fd); SSLHashType PskHashType() { if (config_ % 2) return ssl_hash_sha256; return ssl_hash_sha384; }; SSLVersionRange SslVersionRange() { return ssl_version_range_; }; // NOTE: When adding more config options here, don't forget to print // them in the "<<"-overloaded operator. bool FailCertificateAuthentication() { return config_ & (1 << 0); }; bool EnableExtendedMasterSecret() { return config_ & (1 << 1); }; bool RequireDhNamedGroups() { return config_ & (1 << 2); }; bool EnableFalseStart() { return config_ & (1 << 3); }; bool EnableDeflate() { return config_ & (1 << 4); }; bool CbcRandomIv() { return config_ & (1 << 5); }; bool RequireSafeNegotiation() { return config_ & (1 << 6); }; bool NoCache() { return config_ & (1 << 7); }; bool EnableGrease() { return config_ & (1 << 8); }; bool EnableCHExtensionPermutation() { return config_ & (1 << 9); }; bool SetCertificateCompressionAlgorithm() { return config_ & (1 << 10); }; bool SetClientEchConfigs() { return config_ & (1 << 11); }; bool SetVersionRange() { return config_ & (1 << 12); }; bool AddExternalPsk() { return config_ & (1 << 13); }; bool EnablePostHandshakeAuth() { return config_ & (1 << 14); }; bool EnableZeroRtt() { return config_ & (1 << 15); }; bool EnableAlpn() { return config_ & (1 << 16); }; bool EnableFallbackScsv() { return config_ & (1 << 17); }; bool EnableOcspStapling() { return config_ & (1 << 18); }; bool EnableSessionTickets() { return config_ & (1 << 19); }; bool EnableTls13CompatMode() { return config_ & (1 << 20); }; bool NoLocks() { return config_ & (1 << 21); }; bool EnableTls13GreaseEch() { return config_ & (1 << 22); }; bool SetDtls13VersionWorkaround() { return config_ & (1 << 23); }; bool EnableDelegatedCredentials() { return config_ & (1 << 24); }; bool EnableDtlsShortHeader() { return config_ & (1 << 25); }; private: uint32_t config_; SSLVersionRange ssl_version_range_; }; std::ostream& operator<<(std::ostream& out, Config& config); } // namespace TlsClient #endif // TLS_CLIENT_CONFIG_H_