Clients MAY send an empty client_shares vector in order to request group selection from the server at the cost of an additional round trip. (see Section 4.1.4)
struct {
NamedGroup group;
opaque key_exchange<1..2^16-1>;
} KeyShareEntry;
group - The named group for the key being exchanged. Finite Field Diffie-Hellman DH parameters are described in Section 4.2.7.1; Elliptic Curve Diffie-Hellman Ephemeral parameters are described in Section 4.2.7.2.
key_exchange - Key exchange information. The contents of this field are determined by the specified group and its corresponding definition.
The "extension_data" field of this extension contains a "KeyShare" value:
struct {
select (Handshake.msg_type) {
case client_hello:
KeyShareEntry client_shares<0..2^16-1>;
case hello_retry_request:
NamedGroup selected_group;
case server_hello:
KeyShareEntry server_share;
};
} KeyShare;