Simplify MarshalAuthorizedKey by using the algoName func. Make the algoName func be very specific about supported key types in openssh certs. Generalize some of the commentary that previously mentioned specific key types. R=agl, dave CC=golang-dev https://golang.org/cl/6938067
78 lines
2.1 KiB
Go
78 lines
2.1 KiB
Go
// Copyright 2011 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package ssh
|
|
|
|
import (
|
|
"crypto/dsa"
|
|
"crypto/ecdsa"
|
|
"crypto/elliptic"
|
|
"crypto/rsa"
|
|
"errors"
|
|
"testing"
|
|
)
|
|
|
|
func TestSafeString(t *testing.T) {
|
|
strings := map[string]string{
|
|
"\x20\x0d\x0a": "\x20\x0d\x0a",
|
|
"flibble": "flibble",
|
|
"new\x20line": "new\x20line",
|
|
"123456\x07789": "123456 789",
|
|
"\t\t\x10\r\n": "\t\t \r\n",
|
|
}
|
|
|
|
for s, expected := range strings {
|
|
actual := safeString(s)
|
|
if expected != actual {
|
|
t.Errorf("expected: %v, actual: %v", []byte(expected), []byte(actual))
|
|
}
|
|
}
|
|
}
|
|
|
|
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)
|
|
}
|
|
}
|
|
}
|