go.crypto/ssh: introduce PublicKey interface type.

Public functions affected:
-AgentKey.Key
-AgentClient.SignRequest
-ClientKeyring.Key
-MarshalPublicKey
-ParsePublicKey

R=agl, jpsugar, jmpittman
CC=golang-dev
https://golang.org/cl/13642043
This commit is contained in:
Han-Wen Nienhuys
2013-09-13 14:25:14 -04:00
committed by Adam Langley
parent 6a743c56c7
commit e62b2aead4
12 changed files with 448 additions and 439 deletions
+7 -6
View File
@@ -65,15 +65,15 @@ type keychain struct {
keys []interface{}
}
func (k *keychain) Key(i int) (interface{}, error) {
func (k *keychain) Key(i int) (PublicKey, error) {
if i < 0 || i >= len(k.keys) {
return nil, nil
}
switch key := k.keys[i].(type) {
case *rsa.PrivateKey:
return &key.PublicKey, nil
return NewRSAPublicKey(&key.PublicKey), nil
case *dsa.PrivateKey:
return &key.PublicKey, nil
return NewDSAPublicKey(&key.PublicKey), nil
}
panic("unknown key type")
}
@@ -135,9 +135,10 @@ var (
return user == "testuser" && pass == string(clientPassword)
},
PublicKeyCallback: func(conn *ServerConn, user, algo string, pubkey []byte) bool {
key := &clientKeychain.keys[0].(*rsa.PrivateKey).PublicKey
expected := []byte(serializePublicKey(key))
algoname := algoName(key)
rsaKey := &clientKeychain.keys[0].(*rsa.PrivateKey).PublicKey
key := NewRSAPublicKey(rsaKey)
expected := MarshalPublicKey(key)
algoname := key.PublicKeyAlgo()
return user == "testuser" && algo == algoname && bytes.Equal(pubkey, expected)
},
KeyboardInteractiveCallback: func(conn *ServerConn, user string, client ClientKeyboardInteractive) bool {