Hi Stephen,

> Initially, I thought proposal I would be the best, but now I have a
> mild preference for proposal III. I think it makes the language
> simpler over all. It essentially becomes two primitive types
> (`opaque` and `uint8`) and four type definitions:


I like III, too. But I don't want to keep unused labels such as
'server_share'. So, I like the following definition.

   struct {
       KeyShareEntry client_shares<0..2^16-1>;
   } ClientKeyShares;

   struct {
       select (Handshake.msg_type) {
           case client_hello:        ClientKeyShares;
           case hello_retry_request: NamedGroup;
           case server_hello:        KeyShareEntry;
       };
   } KeyShare;


> Neither the current presentation language nor my proposed one above
> gives meaning to `uint16 ProtocolVersion;`. Absent a compelling
> reason for type aliases, I think this should be written as `uint8
> ProtocolVersion[2];`

If I remember correctly, ProtocolVersion is defined:

      struct {
          uint8 major;
          uint8 minor;
      } ProtocolVersion;

And its value is described as { 3, 1 }.

Now, the notation of 0x0301 is used. So, that's why unit16 is used.

--Kazu

_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to