github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/pki/ssh/keys_test.go (about)

     1  // Copyright 2022 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package ssh_test
     5  
     6  import (
     7  	"crypto"
     8  
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/pki/ssh"
    13  )
    14  
    15  type KeySuite struct {
    16  }
    17  
    18  var _ = gc.Suite(&KeySuite{})
    19  
    20  func (s *KeySuite) TestKeyProfilesForErrors(c *gc.C) {
    21  	tests := []struct {
    22  		name    string
    23  		profile ssh.KeyProfile
    24  	}{
    25  		{name: "ecdsa256", profile: ssh.ECDSAP256},
    26  		{name: "ecdsa384", profile: ssh.ECDSAP384},
    27  		{name: "ecdsa521", profile: ssh.ECDSAP521},
    28  		{name: "rsa2048", profile: ssh.RSA2048},
    29  		{name: "rsa3072", profile: ssh.RSA3072},
    30  		{name: "ed25519", profile: ssh.ED25519},
    31  	}
    32  	for _, test := range tests {
    33  		_, err := test.profile()
    34  		c.Check(err, jc.ErrorIsNil, gc.Commentf("profile %s", test.name))
    35  	}
    36  }
    37  
    38  func (s *KeySuite) TestGenerateHostKeys(c *gc.C) {
    39  	keys, err := ssh.GenerateHostKeys()
    40  	c.Assert(err, jc.ErrorIsNil)
    41  	c.Assert(keys, gc.HasLen, 3)
    42  	keys2, err := ssh.GenerateHostKeys()
    43  	c.Assert(err, jc.ErrorIsNil)
    44  	c.Assert(keys2, gc.HasLen, 3)
    45  	for i, key := range keys {
    46  		key2 := keys2[i]
    47  		c.Assert(key, gc.FitsTypeOf, key2)
    48  		typedKey, ok := key.(interface {
    49  			Equal(crypto.PrivateKey) bool
    50  		})
    51  		c.Assert(ok, jc.IsTrue, gc.Commentf("cast %v", key))
    52  		c.Assert(typedKey.Equal(key), jc.IsTrue)
    53  		c.Assert(typedKey.Equal(key2), jc.IsFalse)
    54  	}
    55  }