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