@@ -405,7 +405,7 @@ func SerializeEncryptedKeyAEADwithHiddenOption(w io.Writer, pub *PublicKey, ciph
405
405
406
406
var keyBlock []byte
407
407
switch pub .PubKeyAlgo {
408
- case PubKeyAlgoRSA , PubKeyAlgoRSAEncryptOnly , PubKeyAlgoElGamal , PubKeyAlgoECDH :
408
+ case PubKeyAlgoRSA , PubKeyAlgoRSAEncryptOnly , PubKeyAlgoElGamal , PubKeyAlgoECDH , ExperimentalPubKeyAlgoAEAD :
409
409
lenKeyBlock := len (key ) + 2
410
410
if version < 6 {
411
411
lenKeyBlock += 1 // cipher type included
@@ -434,7 +434,7 @@ func SerializeEncryptedKeyAEADwithHiddenOption(w io.Writer, pub *PublicKey, ciph
434
434
case PubKeyAlgoX448 :
435
435
return serializeEncryptedKeyX448 (w , config .Random (), buf [:lenHeaderWritten ], pub .PublicKey .(* x448.PublicKey ), keyBlock , byte (cipherFunc ), version )
436
436
case ExperimentalPubKeyAlgoAEAD :
437
- return serializeEncryptedKeyAEAD (w , config .Random (), buf , pub .PublicKey .(* symmetric.AEADPublicKey ), keyBlock , config .AEAD ())
437
+ return serializeEncryptedKeyAEAD (w , config .Random (), buf [: lenHeaderWritten ] , pub .PublicKey .(* symmetric.AEADPublicKey ), keyBlock , config .AEAD ())
438
438
case PubKeyAlgoDSA , PubKeyAlgoRSASignOnly , ExperimentalPubKeyAlgoHMAC :
439
439
return errors .InvalidArgumentError ("cannot encrypt to public key of type " + strconv .Itoa (int (pub .PubKeyAlgo )))
440
440
}
@@ -478,8 +478,9 @@ func (e *EncryptedKey) ProxyTransform(instance ForwardingInstance) (transformed
478
478
copy (copiedWrappedKey , wrappedKey )
479
479
480
480
transformed = & EncryptedKey {
481
- KeyId : instance .getForwardeeKeyIdOrZero (e .KeyId ),
482
- Algo : e .Algo ,
481
+ Version : e .Version ,
482
+ KeyId : instance .getForwardeeKeyIdOrZero (e .KeyId ),
483
+ Algo : e .Algo ,
483
484
encryptedMPI1 : encoding .NewMPI (transformedEphemeral ),
484
485
encryptedMPI2 : encoding .NewOID (copiedWrappedKey ),
485
486
}
@@ -603,7 +604,7 @@ func serializeEncryptedKeyX448(w io.Writer, rand io.Reader, header []byte, pub *
603
604
return x448 .EncodeFields (w , ephemeralPublicX448 , ciphertext , cipherFunc , version == 6 )
604
605
}
605
606
606
- func serializeEncryptedKeyAEAD (w io.Writer , rand io.Reader , header [10 ]byte , pub * symmetric.AEADPublicKey , keyBlock []byte , config * AEADConfig ) error {
607
+ func serializeEncryptedKeyAEAD (w io.Writer , rand io.Reader , header []byte , pub * symmetric.AEADPublicKey , keyBlock []byte , config * AEADConfig ) error {
607
608
mode := algorithm .AEADMode (config .Mode ())
608
609
iv , ciphertextRaw , err := pub .Encrypt (rand , keyBlock , mode )
609
610
if err != nil {
@@ -615,7 +616,7 @@ func serializeEncryptedKeyAEAD(w io.Writer, rand io.Reader, header [10]byte, pub
615
616
buffer := append ([]byte {byte (mode )}, iv ... )
616
617
buffer = append (buffer , ciphertextShortByteString .EncodedBytes ()... )
617
618
618
- packetLen := 10 /* header length */
619
+ packetLen := len ( header ) /* header length */
619
620
packetLen += int (len (buffer ))
620
621
621
622
err = serializeHeader (w , packetTypeEncryptedKey , packetLen )
@@ -632,60 +633,27 @@ func serializeEncryptedKeyAEAD(w io.Writer, rand io.Reader, header [10]byte, pub
632
633
return err
633
634
}
634
635
635
- << << << < HEAD
636
636
func checksumKeyMaterial (key []byte ) uint16 {
637
637
var checksum uint16
638
638
for _ , v := range key {
639
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 )
645
640
}
646
641
return checksum
647
642
}
648
643
649
- << << << < HEAD
650
644
func decodeChecksumKey (msg []byte ) (key []byte , err error ) {
651
645
key = msg [:len (msg )- 2 ]
652
646
expectedChecksum := uint16 (msg [len (msg )- 2 ])<< 8 | uint16 (msg [len (msg )- 1 ])
653
647
checksum := checksumKeyMaterial (key )
654
648
if checksum != expectedChecksum {
655
649
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 )
660
650
}
661
651
return
662
652
}
663
653
664
- << << << < HEAD
665
654
func encodeChecksumKey (buffer []byte , key []byte ) {
666
655
copy (buffer , key )
667
656
checksum := checksumKeyMaterial (key )
668
657
buffer [len (key )] = byte (checksum >> 8 )
669
658
buffer [len (key )+ 1 ] = byte (checksum )
670
659
}
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