@@ -463,27 +463,37 @@ func SerializeEncryptedKeyWithHiddenOption(w io.Writer, pub *PublicKey, cipherFu
463
463
return SerializeEncryptedKeyAEADwithHiddenOption (w , pub , cipherFunc , config .AEAD () != nil , key , hidden , config )
464
464
}
465
465
466
- func (e * EncryptedKey ) ProxyTransform (proxyParam []byte , forwarderKeyId , forwardeeKeyId uint64 ) error {
466
+ func (e * EncryptedKey ) ProxyTransform (proxyParam []byte , forwarderKeyId , forwardeeKeyId uint64 ) ( transformed * EncryptedKey , err error ) {
467
467
if e .Algo != PubKeyAlgoECDH {
468
- return errors .InvalidArgumentError ("invalid PKESK" )
468
+ return nil , errors .InvalidArgumentError ("invalid PKESK" )
469
469
}
470
470
471
471
if e .KeyId != 0 && e .KeyId != forwarderKeyId {
472
- return errors .InvalidArgumentError ("invalid key id in PKESK" )
472
+ return nil , errors .InvalidArgumentError ("invalid key id in PKESK" )
473
473
}
474
474
475
475
ephemeral := e .encryptedMPI1 .Bytes ()
476
- transformed , err := ecdh .ProxyTransform (ephemeral , proxyParam )
476
+ transformedEphemeral , err := ecdh .ProxyTransform (ephemeral , proxyParam )
477
477
if err != nil {
478
- return err
478
+ return nil , err
479
479
}
480
480
481
- e .encryptedMPI1 = encoding .NewMPI (transformed )
482
- if e .KeyId != 0 {
483
- e .KeyId = forwardeeKeyId
481
+ wrappedKey := e .encryptedMPI2 .Bytes ()
482
+ copiedWrappedKey := make ([]byte , len (wrappedKey ))
483
+ copy (copiedWrappedKey , wrappedKey )
484
+
485
+ transformed = & EncryptedKey {
486
+ KeyId : forwardeeKeyId ,
487
+ Algo : e .Algo ,
488
+ encryptedMPI1 : encoding .NewMPI (transformedEphemeral ),
489
+ encryptedMPI2 : encoding .NewOID (copiedWrappedKey ),
484
490
}
485
491
486
- return nil
492
+ if e .KeyId == 0 {
493
+ e .KeyId = 0
494
+ }
495
+
496
+ return transformed , nil
487
497
}
488
498
489
499
func serializeEncryptedKeyRSA (w io.Writer , rand io.Reader , header []byte , pub * rsa.PublicKey , keyBlock []byte ) error {
0 commit comments