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