// 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) } } }