1- package envelope_test
1+ package rsa
22
33import (
44 "crypto/rand"
55 "crypto/rsa"
6+ "sync"
67 "testing"
78
89 "github.com/stretchr/testify/require"
10+ )
11+
12+ const testKeyID = "test-key-id"
913
10- "github.com/jetstack/preflight/internal/envelope"
14+ var (
15+ testKeyOnce sync.Once
16+ internalTestKey * rsa.PrivateKey
1117)
1218
19+ // testKey generates and returns a singleton RSA private key for testing purposes,
20+ // to avoid needing to generate a new key for each test.
21+ func testKey () * rsa.PrivateKey {
22+ testKeyOnce .Do (func () {
23+ key , err := rsa .GenerateKey (rand .Reader , minRSAKeySize )
24+ if err != nil {
25+ panic ("failed to generate test RSA key: " + err .Error ())
26+ }
27+
28+ internalTestKey = key
29+ })
30+
31+ return internalTestKey
32+ }
33+
1334func TestNewEncryptor_ValidKeys (t * testing.T ) {
1435 tests := []struct {
1536 name string
@@ -25,7 +46,7 @@ func TestNewEncryptor_ValidKeys(t *testing.T) {
2546 key , err := rsa .GenerateKey (rand .Reader , tt .keySize )
2647 require .NoError (t , err )
2748
28- enc , err := envelope . NewEncryptor (& key .PublicKey )
49+ enc , err := NewEncryptor (testKeyID , & key .PublicKey )
2950 require .NoError (t , err )
3051 require .NotNil (t , enc )
3152 })
@@ -36,24 +57,32 @@ func TestNewEncryptor_RejectsSmallKeys(t *testing.T) {
3657 key , err := rsa .GenerateKey (rand .Reader , 1024 )
3758 require .NoError (t , err )
3859
39- enc , err := envelope . NewEncryptor (& key .PublicKey )
60+ enc , err := NewEncryptor (testKeyID , & key .PublicKey )
4061 require .Error (t , err )
4162 require .Nil (t , enc )
4263 require .Contains (t , err .Error (), "must be at least 2048 bits" )
4364}
4465
4566func TestNewEncryptor_NilKey (t * testing.T ) {
46- enc , err := envelope . NewEncryptor (nil )
67+ enc , err := NewEncryptor (testKeyID , nil )
4768 require .Error (t , err )
4869 require .Nil (t , enc )
4970 require .Contains (t , err .Error (), "cannot be nil" )
5071}
5172
73+ func TestNewEncryptor_EmptyKeyID (t * testing.T ) {
74+ key := testKey ()
75+
76+ enc , err := NewEncryptor ("" , & key .PublicKey )
77+ require .Error (t , err )
78+ require .Nil (t , enc )
79+ require .Contains (t , err .Error (), "keyID cannot be empty" )
80+ }
81+
5282func TestEncrypt_VariousDataSizes (t * testing.T ) {
53- key , err := rsa .GenerateKey (rand .Reader , 2048 )
54- require .NoError (t , err )
83+ key := testKey ()
5584
56- enc , err := envelope . NewEncryptor (& key .PublicKey )
85+ enc , err := NewEncryptor (testKeyID , & key .PublicKey )
5786 require .NoError (t , err )
5887
5988 tests := []struct {
@@ -80,6 +109,10 @@ func TestEncrypt_VariousDataSizes(t *testing.T) {
80109 require .NotEmpty (t , result .EncryptedData )
81110 require .NotEmpty (t , result .Nonce )
82111
112+ // Verify KeyID and KeyAlgorithm are set correctly
113+ require .Equal (t , testKeyID , result .KeyID )
114+ require .Equal (t , keyAlgorithmIdentifier , result .KeyAlgorithm )
115+
83116 // Verify nonce is correct size (12 bytes for GCM)
84117 require .Len (t , result .Nonce , 12 )
85118
@@ -90,10 +123,9 @@ func TestEncrypt_VariousDataSizes(t *testing.T) {
90123}
91124
92125func TestEncrypt_EmptyData (t * testing.T ) {
93- key , err := rsa .GenerateKey (rand .Reader , 2048 )
94- require .NoError (t , err )
126+ key := testKey ()
95127
96- enc , err := envelope . NewEncryptor (& key .PublicKey )
128+ enc , err := NewEncryptor (testKeyID , & key .PublicKey )
97129 require .NoError (t , err )
98130
99131 result , err := enc .Encrypt ([]byte {})
@@ -103,10 +135,9 @@ func TestEncrypt_EmptyData(t *testing.T) {
103135}
104136
105137func TestEncrypt_NonDeterministic (t * testing.T ) {
106- key , err := rsa .GenerateKey (rand .Reader , 2048 )
107- require .NoError (t , err )
138+ key := testKey ()
108139
109- enc , err := envelope . NewEncryptor (& key .PublicKey )
140+ enc , err := NewEncryptor (testKeyID , & key .PublicKey )
110141 require .NoError (t , err )
111142
112143 data := []byte ("test data for encryption" )
@@ -118,6 +149,12 @@ func TestEncrypt_NonDeterministic(t *testing.T) {
118149 result2 , err := enc .Encrypt (data )
119150 require .NoError (t , err )
120151
152+ // Verify KeyID and KeyAlgorithm are set correctly in both results
153+ require .Equal (t , testKeyID , result1 .KeyID )
154+ require .Equal (t , keyAlgorithmIdentifier , result1 .KeyAlgorithm )
155+ require .Equal (t , testKeyID , result2 .KeyID )
156+ require .Equal (t , keyAlgorithmIdentifier , result2 .KeyAlgorithm )
157+
121158 // Nonces should be different (random)
122159 require .NotEqual (t , result1 .Nonce , result2 .Nonce )
123160
@@ -129,10 +166,9 @@ func TestEncrypt_NonDeterministic(t *testing.T) {
129166}
130167
131168func TestEncrypt_AllFieldsPopulated (t * testing.T ) {
132- key , err := rsa .GenerateKey (rand .Reader , 2048 )
133- require .NoError (t , err )
169+ key := testKey ()
134170
135- enc , err := envelope . NewEncryptor (& key .PublicKey )
171+ enc , err := NewEncryptor (testKeyID , & key .PublicKey )
136172 require .NoError (t , err )
137173
138174 data := []byte ("test data" )
@@ -144,6 +180,10 @@ func TestEncrypt_AllFieldsPopulated(t *testing.T) {
144180 require .NotEmpty (t , result .EncryptedData , "EncryptedData should be populated" )
145181 require .NotEmpty (t , result .Nonce , "Nonce should be populated" )
146182
183+ // Verify KeyID and KeyAlgorithm are set correctly
184+ require .Equal (t , testKeyID , result .KeyID , "KeyID should match the encryptor's keyID" )
185+ require .Equal (t , keyAlgorithmIdentifier , result .KeyAlgorithm , "KeyAlgorithm should be the value of keyAlgorithmIdentifier" )
186+
147187 // Verify encrypted key size is appropriate for RSA 2048
148188 require .Equal (t , 256 , len (result .EncryptedKey ), "EncryptedKey should be 256 bytes for RSA 2048" )
149189}
0 commit comments