code: func (ch ClientHelloBody) Truncated() ([]byte, error) {
  	if len(ch.Extensions) == 0 {
  		return nil, fmt.Errorf("tls.clienthello.truncate: No extensions")
  	}
  
  	pskExt := ch.Extensions[len(ch.Extensions)-1]
  	if pskExt.ExtensionType != ExtensionTypePreSharedKey {
  		return nil, fmt.Errorf("tls.clienthello.truncate: Last extension is not PSK")
  	}
  
  	body, err := ch.Marshal()
  	if err != nil {
  		return nil, err
  	}
  	chm := &HandshakeMessage{
  		msgType: ch.Type(),
  		body:    body,
  		length:  uint32(len(body)),
  	}
  	chData := chm.Marshal()
  
  	psk := PreSharedKeyExtension{
  		HandshakeType: HandshakeTypeClientHello,
  	}
  	_, err = psk.Unmarshal(pskExt.ExtensionData)
  	if err != nil {
  		return nil, err
  	}
  
  	// Marshal just the binders so that we know how much to truncate
  	binders := struct {
  		Binders []PSKBinderEntry `tls:"head=2,min=33"`
  	}{Binders: psk.Binders}
  	binderData, _ := syntax.Marshal(binders)
  	binderLen := len(binderData)
  
  	chLen := len(chData)
  	return chData[:chLen-binderLen], nil
  }
docs: // TODO: File a spec bug to clarify this