code: func newContext(clientPublicKey, serverPublicKey []byte) []byte {
  	// The context format is:
  	// 0x00 || length(clientPublicKey) || clientPublicKey ||
  	//         length(serverPublicKey) || serverPublicKey
  	// The lengths are 16-bit, Big Endian, unsigned integers so take 2 bytes each.
  	cplen := uint16(len(clientPublicKey))
  	cplenbuf := make([]byte, 2)
  	binary.BigEndian.PutUint16(cplenbuf, cplen)
  
  	splen := uint16(len(serverPublicKey))
  	splenbuf := make([]byte, 2)
  	binary.BigEndian.PutUint16(splenbuf, splen)
  
  	var ctx []byte
  	ctx = append(ctx, 0)
  	ctx = append(ctx, cplenbuf...)
  	ctx = append(ctx, []byte(clientPublicKey)...)
  	ctx = append(ctx, splenbuf...)
  	ctx = append(ctx, []byte(serverPublicKey)...)
  
  	return ctx
  }
docs: // Creates a context for deriving encyption parameters, as described in
  // https://tools.ietf.org/html/draft-ietf-httpbis-encryption-encoding-00.
  // The 'context' in this case is just the public keys of both client and server.
  // The keys should always be 65 bytes each. The format of the keys is
  // described in section 4.3.6 of the (sadly not freely linkable) ANSI X9.62
  // specification.