blob: 0d8f93905ee1db7549c093cb8e80d2bb579b07ae [file] [log] [blame]
// 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)
}
}
}