/* 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_SERVER_CONFIG_H_ #define TLS_SERVER_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 TlsServer { 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 EnableExtendedMasterSecret() { return config_ & (1 << 0); }; bool RequestCertificate() { return config_ & (1 << 1); }; bool RequireCertificate() { return config_ & (1 << 2); }; bool EnableDeflate() { return config_ & (1 << 3); }; bool EnableCbcRandomIv() { return config_ & (1 << 4); }; bool RequireSafeNegotiation() { return config_ & (1 << 5); }; bool NoCache() { return config_ & (1 << 6); }; bool EnableGrease() { return config_ & (1 << 7); }; bool SetCertificateCompressionAlgorithm() { return config_ & (1 << 8); }; bool SetVersionRange() { return config_ & (1 << 9); }; bool AddExternalPsk() { return config_ & (1 << 10); }; bool EnableZeroRtt() { return config_ & (1 << 11); }; bool EnableAlpn() { return config_ & (1 << 12); }; bool EnableFallbackScsv() { return config_ & (1 << 13); }; bool EnableSessionTickets() { return config_ & (1 << 14); }; bool NoLocks() { return config_ & (1 << 15); }; bool FailCertificateAuthentication() { return config_ & (1 << 16); } bool EnableTls13BackendEch() { return config_ & (1 << 17); } bool EnableDelegatedCredentials() { return config_ & (1 << 18); }; bool EnableDtlsShortHeader() { return config_ & (1 << 19); }; private: uint32_t config_; SSLVersionRange ssl_version_range_; }; std::ostream& operator<<(std::ostream& out, Config& config); } // namespace TlsServer #endif // TLS_SERVER_CONFIG_H_