code: func (h *encHandshake) makeAuthMsg(prv *ecdsa.PrivateKey) (*authMsgV4, error) {
  	// Generate random initiator nonce.
  	h.initNonce = make([]byte, shaLen)
  	_, err := rand.Read(h.initNonce)
  	if err != nil {
  		return nil, err
  	}
  	// Generate random keypair to for ECDH.
  	h.randomPrivKey, err = ecies.GenerateKey(rand.Reader, crypto.S256(), nil)
  	if err != nil {
  		return nil, err
  	}
  
  	// Sign known message: static-shared-secret ^ nonce
  	token, err := h.staticSharedSecret(prv)
  	if err != nil {
  		return nil, err
  	}
  	signed := xor(token, h.initNonce)
  	signature, err := crypto.Sign(signed, h.randomPrivKey.ExportECDSA())
  	if err != nil {
  		return nil, err
  	}
  
  	msg := new(authMsgV4)
  	copy(msg.Signature[:], signature)
  	copy(msg.InitiatorPubkey[:], crypto.FromECDSAPub(&prv.PublicKey)[1:])
  	copy(msg.Nonce[:], h.initNonce)
  	msg.Version = 4
  	return msg, nil
  }
docs: // makeAuthMsg creates the initiator handshake message.