class ClientHello {

  public static ClientHello defaults(final KeyExchange ke, final Extension... exts) {
    final byte[] clientRandom = Rnd.rndBytes(32);
    final byte[] sessionId = new byte[0];
    final List<CipherSuite> cipherSuites = CipherSuite.SUPPORTED;
    final List<Extension> extensions =
        ImmutableList.<Extension>builder()
            .add(
                KeyShare.of(ke.getGroup(), ke.getPublicKey()),
                SignatureAlgorithms.defaults(),
                new SupportedGroups(Group.X25519),
                SupportedVersions.TLS13,
                PskKeyExchangeModes.defaults(),
                new ALPN(List.of("h3-20")))
            .add(exts)
            .build();

    return new ClientHello(clientRandom, sessionId, cipherSuites, extensions);
  }

  public  ClientHello(
      final byte[] clientRandom,
      final byte[] sessionId,
      final List<CipherSuite> cipherSuites,
      final List<Extension> extensions);

}