@@ -458,17 +458,17 @@ 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 ) (transformed * EncryptedKey , err error ) {
461
+ func (e * EncryptedKey ) ProxyTransform (instance ForwardingInstance ) (transformed * EncryptedKey , err error ) {
462
462
if e .Algo != PubKeyAlgoECDH {
463
463
return nil , errors .InvalidArgumentError ("invalid PKESK" )
464
464
}
465
465
466
- if e .KeyId != 0 && e .KeyId != forwarderKeyId {
466
+ if e .KeyId != 0 && e .KeyId != instance . GetForwarderKeyId () {
467
467
return nil , errors .InvalidArgumentError ("invalid key id in PKESK" )
468
468
}
469
469
470
470
ephemeral := e .encryptedMPI1 .Bytes ()
471
- transformedEphemeral , err := ecdh .ProxyTransform (ephemeral , proxyParam )
471
+ transformedEphemeral , err := ecdh .ProxyTransform (ephemeral , instance . ProxyParameter )
472
472
if err != nil {
473
473
return nil , err
474
474
}
@@ -478,16 +478,12 @@ func (e *EncryptedKey) ProxyTransform(proxyParam []byte, forwarderKeyId, forward
478
478
copy (copiedWrappedKey , wrappedKey )
479
479
480
480
transformed = & EncryptedKey {
481
- KeyId : forwardeeKeyId ,
482
- Algo : e .Algo ,
481
+ KeyId : instance . getForwardeeKeyIdOrZero ( e . KeyId ) ,
482
+ Algo : e .Algo ,
483
483
encryptedMPI1 : encoding .NewMPI (transformedEphemeral ),
484
484
encryptedMPI2 : encoding .NewOID (copiedWrappedKey ),
485
485
}
486
486
487
- if e .KeyId == 0 {
488
- e .KeyId = 0
489
- }
490
-
491
487
return transformed , nil
492
488
}
493
489
@@ -636,27 +632,60 @@ func serializeEncryptedKeyAEAD(w io.Writer, rand io.Reader, header [10]byte, pub
636
632
return err
637
633
}
638
634
635
+ << << << < HEAD
639
636
func checksumKeyMaterial (key []byte ) uint16 {
640
637
var checksum uint16
641
638
for _ , v := range key {
642
639
checksum += uint16 (v )
640
+ == == == =
641
+ func (e * EncryptedKey ) ProxyTransform (instance ForwardingInstance ) (transformed * EncryptedKey , err error ) {
642
+ if e .Algo != PubKeyAlgoECDH {
643
+ return nil , errors .InvalidArgumentError ("invalid PKESK" )
644
+ >> >> >> > edf1961 (Use fingerprints instead of KeyIDs )
643
645
}
644
646
return checksum
645
647
}
646
648
649
+ << << << < HEAD
647
650
func decodeChecksumKey (msg []byte ) (key []byte , err error ) {
648
651
key = msg [:len (msg )- 2 ]
649
652
expectedChecksum := uint16 (msg [len (msg )- 2 ])<< 8 | uint16 (msg [len (msg )- 1 ])
650
653
checksum := checksumKeyMaterial (key )
651
654
if checksum != expectedChecksum {
652
655
err = errors .StructuralError ("session key checksum is incorrect" )
656
+ == == == =
657
+ if e .KeyId != 0 && e .KeyId != instance .GetForwarderKeyId () {
658
+ return nil , errors .InvalidArgumentError ("invalid key id in PKESK" )
659
+ >> >> >> > edf1961 (Use fingerprints instead of KeyIDs )
653
660
}
654
661
return
655
662
}
656
663
664
+ << << << < HEAD
657
665
func encodeChecksumKey (buffer []byte , key []byte ) {
658
666
copy (buffer , key )
659
667
checksum := checksumKeyMaterial (key )
660
668
buffer [len (key )] = byte (checksum >> 8 )
661
669
buffer [len (key )+ 1 ] = byte (checksum )
662
670
}
671
+ == == == =
672
+ ephemeral := e .encryptedMPI1 .Bytes ()
673
+ transformedEphemeral , err := ecdh .ProxyTransform (ephemeral , instance .ProxyParameter )
674
+ if err != nil {
675
+ return nil , err
676
+ }
677
+
678
+ wrappedKey := e .encryptedMPI2 .Bytes ()
679
+ copiedWrappedKey := make ([]byte , len (wrappedKey ))
680
+ copy (copiedWrappedKey , wrappedKey )
681
+
682
+ transformed = & EncryptedKey {
683
+ KeyId : instance .getForwardeeKeyIdOrZero (e .KeyId ),
684
+ Algo : e .Algo ,
685
+ encryptedMPI1 : encoding .NewMPI (transformedEphemeral ),
686
+ encryptedMPI2 : encoding .NewOID (copiedWrappedKey ),
687
+ }
688
+
689
+ return transformed , nil
690
+ }
691
+ >> >> >> > edf1961 (Use fingerprints instead of KeyIDs )
0 commit comments