75
78
testAgentInterface(t, agentClient, testPrivateKeys["rsa"], nil, 0)
82
func TestV1ProtocolMessages(t *testing.T) {
83
c1, c2, err := netPipe()
85
t.Fatalf("netPipe: %v", err)
91
go ServeAgent(NewKeyring(), c2)
93
testV1ProtocolMessages(t, c.(*client))
96
func testV1ProtocolMessages(t *testing.T, c *client) {
97
reply, err := c.call([]byte{agentRequestV1Identities})
99
t.Fatalf("v1 request all failed: %v", err)
101
if msg, ok := reply.(*agentV1IdentityMsg); !ok || msg.Numkeys != 0 {
102
t.Fatalf("invalid request all response: %#v", reply)
105
reply, err = c.call([]byte{agentRemoveAllV1Identities})
107
t.Fatalf("v1 remove all failed: %v", err)
109
if _, ok := reply.(*successAgentMsg); !ok {
110
t.Fatalf("invalid remove all response: %#v", reply)
114
func verifyKey(sshAgent Agent) error {
115
keys, err := sshAgent.List()
117
return fmt.Errorf("listing keys: %v", err)
121
return fmt.Errorf("bad number of keys found. expected 1, got %d", len(keys))
124
buf := make([]byte, 128)
125
if _, err := rand.Read(buf); err != nil {
126
return fmt.Errorf("rand: %v", err)
129
sig, err := sshAgent.Sign(keys[0], buf)
131
return fmt.Errorf("sign: %v", err)
134
if err := keys[0].Verify(buf, sig); err != nil {
135
return fmt.Errorf("verify: %v", err)
140
func addKeyToAgent(key crypto.PrivateKey) error {
141
sshAgent := NewKeyring()
142
if err := sshAgent.Add(AddedKey{PrivateKey: key}); err != nil {
143
return fmt.Errorf("add: %v", err)
145
return verifyKey(sshAgent)
148
func TestKeyTypes(t *testing.T) {
149
for k, v := range testPrivateKeys {
150
if err := addKeyToAgent(v); err != nil {
151
t.Errorf("error adding key type %s, %v", k, err)
153
if err := addCertToAgentSock(v, nil); err != nil {
154
t.Errorf("error adding key type %s, %v", k, err)
159
func addCertToAgentSock(key crypto.PrivateKey, cert *ssh.Certificate) error {
160
a, b, err := netPipe()
164
agentServer := NewKeyring()
165
go ServeAgent(agentServer, a)
167
agentClient := NewClient(b)
168
if err := agentClient.Add(AddedKey{PrivateKey: key, Certificate: cert}); err != nil {
169
return fmt.Errorf("add: %v", err)
171
return verifyKey(agentClient)
174
func addCertToAgent(key crypto.PrivateKey, cert *ssh.Certificate) error {
175
sshAgent := NewKeyring()
176
if err := sshAgent.Add(AddedKey{PrivateKey: key, Certificate: cert}); err != nil {
177
return fmt.Errorf("add: %v", err)
179
return verifyKey(sshAgent)
182
func TestCertTypes(t *testing.T) {
183
for keyType, key := range testPublicKeys {
184
cert := &ssh.Certificate{
185
ValidPrincipals: []string{"gopher1"},
187
ValidBefore: ssh.CertTimeInfinity,
190
CertType: ssh.UserCert,
191
SignatureKey: testPublicKeys["rsa"],
192
Permissions: ssh.Permissions{
193
CriticalOptions: map[string]string{},
194
Extensions: map[string]string{},
197
if err := cert.SignCert(rand.Reader, testSigners["rsa"]); err != nil {
198
t.Fatalf("signcert: %v", err)
200
if err := addCertToAgent(testPrivateKeys[keyType], cert); err != nil {
203
if err := addCertToAgentSock(testPrivateKeys[keyType], cert); err != nil {