# `SSL.ClientHello.WireProfile`
[🔗](https://github.com/gsmlg-dev/http_fetch/blob/v0.16.7/apps/ex_ssl/lib/ssl/client_hello/wire_profile.ex#L1)

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.

# `cipher_suite`

```elixir
@type cipher_suite() :: atom() | 0..65535 | grease_slot()
```

# `extension_spec`

```elixir
@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()}
```

# `grease_slot`

```elixir
@type grease_slot() :: {:grease, atom()}
```

# `group`

```elixir
@type group() :: atom() | 0..65535 | grease_slot()
```

# `session_id_policy`

```elixir
@type session_id_policy() :: :random_32 | :empty | {:fixed, binary()}
```

# `t`

```elixir
@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()
}
```

# `version`

```elixir
@type version() :: atom() | 0..65535 | grease_slot()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
