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
-51
View File
@@ -5,11 +5,6 @@
package ssh
import (
"crypto/dsa"
"crypto/ecdsa"
"crypto/elliptic"
"crypto/rsa"
"errors"
"testing"
)
@@ -29,49 +24,3 @@ func TestSafeString(t *testing.T) {
}
}
}
func TestAlgoNameSupported(t *testing.T) {
supported := map[string]interface{}{
KeyAlgoRSA: new(rsa.PublicKey),
KeyAlgoDSA: new(dsa.PublicKey),
KeyAlgoECDSA256: &ecdsa.PublicKey{Curve: elliptic.P256()},
KeyAlgoECDSA384: &ecdsa.PublicKey{Curve: elliptic.P384()},
KeyAlgoECDSA521: &ecdsa.PublicKey{Curve: elliptic.P521()},
CertAlgoRSAv01: &OpenSSHCertV01{Key: new(rsa.PublicKey)},
CertAlgoDSAv01: &OpenSSHCertV01{Key: new(dsa.PublicKey)},
CertAlgoECDSA256v01: &OpenSSHCertV01{Key: &ecdsa.PublicKey{Curve: elliptic.P256()}},
CertAlgoECDSA384v01: &OpenSSHCertV01{Key: &ecdsa.PublicKey{Curve: elliptic.P384()}},
CertAlgoECDSA521v01: &OpenSSHCertV01{Key: &ecdsa.PublicKey{Curve: elliptic.P521()}},
}
for expected, key := range supported {
actual := algoName(key)
if expected != actual {
t.Errorf("expected: %s, actual: %s", expected, actual)
}
}
}
func TestAlgoNameNotSupported(t *testing.T) {
notSupported := []interface{}{
&ecdsa.PublicKey{Curve: elliptic.P224()},
&OpenSSHCertV01{Key: &ecdsa.PublicKey{Curve: elliptic.P224()}},
}
panicTest := func(key interface{}) (algo string, err error) {
defer func() {
if r := recover(); r != nil {
err = errors.New(r.(string))
}
}()
algo = algoName(key)
return
}
for _, unsupportedKey := range notSupported {
if algo, err := panicTest(unsupportedKey); err == nil {
t.Errorf("Expected a panic, Got: %s (for type %T)", algo, unsupportedKey)
}
}
}