Ordered, declarative configuration for a TLS ClientHello.
This structure contains policy only. Per-connection random values and fresh key exchange material must be supplied by the later materialization stage.
Summary
Types
@type cipher_suite() :: atom() | 0..65535 | grease_slot()
@type extension_spec() :: {:server_name, :from_connection} | {:supported_groups, [group()]} | {:ec_point_formats, [0..255]} | {:extended_master_secret, binary()} | {:renegotiation_info, binary()} | {:signature_algorithms, [term()]} | {:signature_algorithms_cert, [term()]} | {:alpn, [binary() | grease_slot()]} | {:supported_versions, [version()]} | {:psk_key_exchange_modes, [atom() | 0..255 | grease_slot()]} | {:key_share, [group()]} | {:pre_shared_key, term()} | {:padding, :none | non_neg_integer() | {:fixed, non_neg_integer()}} | {:grease, atom()} | {:raw, 0..65535, binary()}
@type grease_slot() :: {:grease, atom()}
@type group() :: atom() | 0..65535 | grease_slot()
@type session_id_policy() :: :random_32 | :empty | {:fixed, binary()}
@type t() :: %SSL.ClientHello.WireProfile{ cipher_suites: [cipher_suite()], compression_methods: [0], extensions: [extension_spec()], grease: SSL.ClientHello.GreasePolicy.t(), legacy_version: 771, name: atom() | String.t() | nil, record: SSL.ClientHello.RecordPolicy.t(), session_id: session_id_policy() }
@type version() :: atom() | 0..65535 | grease_slot()