code: func (c *client) List() ([]*Key, error) {
  	// see [PROTOCOL.agent] section 2.5.2.
  	req := []byte{agentRequestIdentities}
  
  	msg, err := c.call(req)
  	if err != nil {
  		return nil, err
  	}
  
  	switch msg := msg.(type) {
  	case *identitiesAnswerAgentMsg:
  		if msg.NumKeys > maxAgentResponseBytes/8 {
  			return nil, errors.New("agent: too many keys in agent reply")
  		}
  		keys := make([]*Key, msg.NumKeys)
  		data := msg.Keys
  		for i := uint32(0); i < msg.NumKeys; i++ {
  			var key *Key
  			var err error
  			if key, data, err = parseKey(data); err != nil {
  				return nil, err
  			}
  			keys[i] = key
  		}
  		return keys, nil
  	case *failureAgentMsg:
  		return nil, errors.New("agent: failed to list keys")
  	}
  	panic("unreachable")
  }
docs: // List returns the identities known to the agent.