@@ -410,7 +410,7 @@ func SerializeEncryptedKeyAEADwithHiddenOption(w io.Writer, pub *PublicKey, ciph
410
410
411
411
var keyBlock []byte
412
412
switch pub .PubKeyAlgo {
413
- case PubKeyAlgoRSA , PubKeyAlgoRSAEncryptOnly , PubKeyAlgoElGamal , PubKeyAlgoECDH :
413
+ case PubKeyAlgoRSA , PubKeyAlgoRSAEncryptOnly , PubKeyAlgoElGamal , PubKeyAlgoECDH , ExperimentalPubKeyAlgoAEAD :
414
414
lenKeyBlock := len (key ) + 2
415
415
if version < 6 {
416
416
lenKeyBlock += 1 // cipher type included
@@ -439,7 +439,7 @@ func SerializeEncryptedKeyAEADwithHiddenOption(w io.Writer, pub *PublicKey, ciph
439
439
case PubKeyAlgoX448 :
440
440
return serializeEncryptedKeyX448 (w , config .Random (), buf [:lenHeaderWritten ], pub .PublicKey .(* x448.PublicKey ), keyBlock , byte (cipherFunc ), version )
441
441
case ExperimentalPubKeyAlgoAEAD :
442
- return serializeEncryptedKeyAEAD (w , config .Random (), buf , pub .PublicKey .(* symmetric.AEADPublicKey ), keyBlock , config .AEAD ())
442
+ return serializeEncryptedKeyAEAD (w , config .Random (), buf [: lenHeaderWritten ] , pub .PublicKey .(* symmetric.AEADPublicKey ), keyBlock , config .AEAD ())
443
443
case PubKeyAlgoDSA , PubKeyAlgoRSASignOnly , ExperimentalPubKeyAlgoHMAC :
444
444
return errors .InvalidArgumentError ("cannot encrypt to public key of type " + strconv .Itoa (int (pub .PubKeyAlgo )))
445
445
}
@@ -483,8 +483,9 @@ func (e *EncryptedKey) ProxyTransform(instance ForwardingInstance) (transformed
483
483
copy (copiedWrappedKey , wrappedKey )
484
484
485
485
transformed = & EncryptedKey {
486
- KeyId : instance .getForwardeeKeyIdOrZero (e .KeyId ),
487
- Algo : e .Algo ,
486
+ Version : e .Version ,
487
+ KeyId : instance .getForwardeeKeyIdOrZero (e .KeyId ),
488
+ Algo : e .Algo ,
488
489
encryptedMPI1 : encoding .NewMPI (transformedEphemeral ),
489
490
encryptedMPI2 : encoding .NewOID (copiedWrappedKey ),
490
491
}
@@ -608,7 +609,7 @@ func serializeEncryptedKeyX448(w io.Writer, rand io.Reader, header []byte, pub *
608
609
return x448 .EncodeFields (w , ephemeralPublicX448 , ciphertext , cipherFunc , version == 6 )
609
610
}
610
611
611
- func serializeEncryptedKeyAEAD (w io.Writer , rand io.Reader , header [10 ]byte , pub * symmetric.AEADPublicKey , keyBlock []byte , config * AEADConfig ) error {
612
+ func serializeEncryptedKeyAEAD (w io.Writer , rand io.Reader , header []byte , pub * symmetric.AEADPublicKey , keyBlock []byte , config * AEADConfig ) error {
612
613
mode := algorithm .AEADMode (config .Mode ())
613
614
iv , ciphertextRaw , err := pub .Encrypt (rand , keyBlock , mode )
614
615
if err != nil {
@@ -620,7 +621,7 @@ func serializeEncryptedKeyAEAD(w io.Writer, rand io.Reader, header [10]byte, pub
620
621
buffer := append ([]byte {byte (mode )}, iv ... )
621
622
buffer = append (buffer , ciphertextShortByteString .EncodedBytes ()... )
622
623
623
- packetLen := 10 /* header length */
624
+ packetLen := len ( header ) /* header length */
624
625
packetLen += int (len (buffer ))
625
626
626
627
err = serializeHeader (w , packetTypeEncryptedKey , packetLen )
@@ -637,60 +638,27 @@ func serializeEncryptedKeyAEAD(w io.Writer, rand io.Reader, header [10]byte, pub
637
638
return err
638
639
}
639
640
640
- << << << < HEAD
641
641
func checksumKeyMaterial (key []byte ) uint16 {
642
642
var checksum uint16
643
643
for _ , v := range key {
644
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 )
650
645
}
651
646
return checksum
652
647
}
653
648
654
- << << << < HEAD
655
649
func decodeChecksumKey (msg []byte ) (key []byte , err error ) {
656
650
key = msg [:len (msg )- 2 ]
657
651
expectedChecksum := uint16 (msg [len (msg )- 2 ])<< 8 | uint16 (msg [len (msg )- 1 ])
658
652
checksum := checksumKeyMaterial (key )
659
653
if checksum != expectedChecksum {
660
654
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 )
665
655
}
666
656
return
667
657
}
668
658
669
- << << << < HEAD
670
659
func encodeChecksumKey (buffer []byte , key []byte ) {
671
660
copy (buffer , key )
672
661
checksum := checksumKeyMaterial (key )
673
662
buffer [len (key )] = byte (checksum >> 8 )
674
663
buffer [len (key )+ 1 ] = byte (checksum )
675
664
}
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