* Copyright 2016-2017 Gary Kramlich <grim@reaperworld.com> * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. "github.com/aphistic/sweet" . "github.com/onsi/gomega" "golang.org/x/crypto/ssh" "golang.org/x/crypto/ssh/agent" func (s *sshSuite) setupAgent(keys []agent.AddedKey) net.Conn { for _, key := range keys { err := agent.ServeAgent(a, c2) func (s *sshSuite) generateKey() *ecdsa.PrivateKey { priv, err := ecdsa.GenerateKey(elliptic.P384(), rand.Reader) func (s *sshSuite) TestKeysAvailableEmpty(t sweet.T) { avail, err := keysAvailable( s.setupAgent([]agent.AddedKey{}), Expect(avail).To(BeFalse()) Expect(err).To(Not(BeNil())) func (s *sshSuite) TestKeysAvailableWildcardNoKeys(t sweet.T) { avail, err := keysAvailable( s.setupAgent([]agent.AddedKey{}), Expect(avail).To(BeFalse()) Expect(err).To(Not(BeNil())) func (s *sshSuite) TestKeysAvailableWildcardWithKeys(t sweet.T) { avail, err := keysAvailable( s.setupAgent([]agent.AddedKey{ agent.AddedKey{PrivateKey: s.generateKey()}, Expect(avail).To(BeTrue()) func (s *sshSuite) TestKeysAvailableUnknownFingerprint(t sweet.T) { avail, err := keysAvailable( s.setupAgent([]agent.AddedKey{ agent.AddedKey{PrivateKey: s.generateKey()}, []string{"SHA256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b"}, Expect(avail).To(BeFalse()) Expect(err).To(Not(BeNil())) func (s *sshSuite) TestKeysAvailableFingerprintMD5NoPrefix(t sweet.T) { sshPub, err := ssh.NewPublicKey(pub) avail, err := keysAvailable( s.setupAgent([]agent.AddedKey{ agent.AddedKey{PrivateKey: key}, []string{ssh.FingerprintLegacyMD5(sshPub)}, Expect(avail).To(BeTrue()) func (s *sshSuite) TestKeysAvailableFingerprintMD5Prefix(t sweet.T) { sshPub, err := ssh.NewPublicKey(pub) avail, err := keysAvailable( s.setupAgent([]agent.AddedKey{ agent.AddedKey{PrivateKey: key}, []string{"MD5:" + ssh.FingerprintLegacyMD5(sshPub)}, Expect(avail).To(BeTrue()) func (s *sshSuite) TestKeysAvailableFingerprintSHA256Prefix(t sweet.T) { sshPub, err := ssh.NewPublicKey(pub) avail, err := keysAvailable( s.setupAgent([]agent.AddedKey{ agent.AddedKey{PrivateKey: key}, []string{ssh.FingerprintSHA256(sshPub)}, Expect(avail).To(BeTrue()) func (s *sshSuite) TestKeysAvailableFingerprintSHA256NoPrefix(t sweet.T) { sshPub, err := ssh.NewPublicKey(pub) // FingerprintSHA256 always has the prefix so we strip it off for testing avail, err := keysAvailable( s.setupAgent([]agent.AddedKey{ agent.AddedKey{PrivateKey: key}, []string{ssh.FingerprintSHA256(sshPub)[7:]}, Expect(avail).To(BeTrue())