@@ -212,57 +212,76 @@ func TestKeystore_ConcurrentCreateAndRead(t *testing.T) {
212212}
213213
214214func TestKeystore_ExportImport (t * testing.T ) {
215- t .Parallel ()
216-
217215 ks1 , err := keystore .LoadKeystore (t .Context (), keystore .NewMemoryStorage (), keystore.EncryptionParams {
218216 Password : "ks1" ,
219217 ScryptParams : keystore .FastScryptParams ,
220218 })
221- require .NoError (t , err )
222- _ , err = ks1 .CreateKeys (t .Context (), keystore.CreateKeysRequest {
223- Keys : []keystore.CreateKeyRequest {
224- {KeyName : "key1" , KeyType : keystore .Ed25519 },
225- },
226- })
227- require .NoError (t , err )
228- exportParams := keystore.EncryptionParams {
229- Password : "export-pass" ,
230- ScryptParams : keystore .FastScryptParams ,
231- }
232- exportResponse , err := ks1 .ExportKeys (t .Context (), keystore.ExportKeysRequest {
233- Keys : []keystore.ExportKeyParam {
234- {KeyName : "key1" , Enc : exportParams },
235- },
236- })
237- require .Len (t , exportResponse .Keys , 1 )
238219 ks2 , err := keystore .LoadKeystore (t .Context (), keystore .NewMemoryStorage (), keystore.EncryptionParams {
239220 Password : "ks2" ,
240221 ScryptParams : keystore .FastScryptParams ,
241222 })
242- _ , err = ks2 .ImportKeys (t .Context (), keystore.ImportKeysRequest {
243- Keys : []keystore.ImportKeyRequest {
244- {KeyName : "key1" , Enc : exportParams , Data : exportResponse .Keys [0 ].Data },
245- },
246- })
247- require .NoError (t , err )
248223
249- n1 , err := ks1 .GetKeys (t .Context (), keystore.GetKeysRequest {KeyNames : []string {"key1" }})
250- require .NoError (t , err )
251- n2 , err := ks2 .GetKeys (t .Context (), keystore.GetKeysRequest {KeyNames : []string {"key1" }})
252- require .Equal (t , n1 , n2 )
224+ t .Run ("export and import" , func (t * testing.T ) {
225+ exportParams := keystore.EncryptionParams {
226+ Password : "export-pass" ,
227+ ScryptParams : keystore .FastScryptParams ,
228+ }
229+ _ , err = ks1 .CreateKeys (t .Context (), keystore.CreateKeysRequest {
230+ Keys : []keystore.CreateKeyRequest {
231+ {KeyName : "key1" , KeyType : keystore .Ed25519 },
232+ },
233+ })
234+ require .NoError (t , err )
235+ exportResponse , err := ks1 .ExportKeys (t .Context (), keystore.ExportKeysRequest {
236+ Keys : []keystore.ExportKeyParam {
237+ {KeyName : "key1" , Enc : exportParams },
238+ },
239+ })
240+ require .Len (t , exportResponse .Keys , 1 )
241+ _ , err = ks2 .ImportKeys (t .Context (), keystore.ImportKeysRequest {
242+ Keys : []keystore.ImportKeyRequest {
243+ {KeyName : "key1" , Enc : exportParams , Data : exportResponse .Keys [0 ].Data },
244+ },
245+ })
246+ require .NoError (t , err )
247+ key1ks1 , err := ks1 .GetKeys (t .Context (), keystore.GetKeysRequest {KeyNames : []string {"key1" }})
248+ require .NoError (t , err )
249+ key1ks2 , err := ks2 .GetKeys (t .Context (), keystore.GetKeysRequest {KeyNames : []string {"key1" }})
250+ require .Equal (t , key1ks1 , key1ks2 )
253251
254- testData := []byte ("hello world" )
255- signature , err := ks2 .Sign (t .Context (), keystore.SignRequest {
256- KeyName : "key1" ,
257- Data : testData ,
252+ // We cannot compare private keys directly, so we test that signing with key1 from ks1 and verifying
253+ // with key1 from ks2 works as if two keys are the same.
254+ testData := []byte ("hello world" )
255+ signature , err := ks2 .Sign (t .Context (), keystore.SignRequest {
256+ KeyName : "key1" ,
257+ Data : testData ,
258+ })
259+ require .NoError (t , err )
260+ verifyResp , err := ks1 .Verify (t .Context (), keystore.VerifyRequest {
261+ KeyType : keystore .Ed25519 ,
262+ PublicKey : key1ks1 .Keys [0 ].KeyInfo .PublicKey ,
263+ Data : testData ,
264+ Signature : signature .Signature ,
265+ })
266+ require .NoError (t , err )
267+ require .True (t , verifyResp .Valid )
258268 })
259- require .NoError (t , err )
260- verifyResp , err := ks1 .Verify (t .Context (), keystore.VerifyRequest {
261- KeyType : keystore .Ed25519 ,
262- PublicKey : n1 .Keys [0 ].KeyInfo .PublicKey ,
263- Data : testData ,
264- Signature : signature .Signature ,
269+
270+ t .Run ("export non-existent key" , func (t * testing.T ) {
271+ _ , err = ks1 .ExportKeys (t .Context (), keystore.ExportKeysRequest {
272+ Keys : []keystore.ExportKeyParam {
273+ {KeyName : "key2" , Enc : keystore.EncryptionParams {}},
274+ },
275+ })
276+ require .ErrorIs (t , err , keystore .ErrKeyNotFound )
277+ })
278+
279+ t .Run ("import existing key" , func (t * testing.T ) {
280+ _ , err = ks2 .ImportKeys (t .Context (), keystore.ImportKeysRequest {
281+ Keys : []keystore.ImportKeyRequest {
282+ {KeyName : "key1" , Enc : keystore.EncryptionParams {}, Data : []byte {}},
283+ },
284+ })
285+ require .ErrorIs (t , err , keystore .ErrKeyAlreadyExists )
265286 })
266- require .NoError (t , err )
267- require .True (t , verifyResp .Valid )
268287}
0 commit comments