code: func (c *client) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) {
  	req := ssh.Marshal(signRequestAgentMsg{
  		KeyBlob: key.Marshal(),
  		Data:    data,
  	})
  
  	msg, err := c.call(req)
  	if err != nil {
  		return nil, err
  	}
  
  	switch msg := msg.(type) {
  	case *signResponseAgentMsg:
  		var sig ssh.Signature
  		if err := ssh.Unmarshal(msg.SigBlob, &sig); err != nil {
  			return nil, err
  		}
  
  		return &sig, nil
  	case *failureAgentMsg:
  		return nil, errors.New("agent: failed to sign challenge")
  	}
  	panic("unreachable")
  }
docs: // Sign has the agent sign the data using a protocol 2 key as defined
  // in [PROTOCOL.agent] section 2.6.2.