@@ -410,7 +410,7 @@ func SerializeEncryptedKeyAEADwithHiddenOption(w io.Writer, pub *PublicKey, ciph
410410
411411 var keyBlock []byte
412412 switch pub .PubKeyAlgo {
413- case PubKeyAlgoRSA , PubKeyAlgoRSAEncryptOnly , PubKeyAlgoElGamal , PubKeyAlgoECDH :
413+ case PubKeyAlgoRSA , PubKeyAlgoRSAEncryptOnly , PubKeyAlgoElGamal , PubKeyAlgoECDH , ExperimentalPubKeyAlgoAEAD :
414414 lenKeyBlock := len (key ) + 2
415415 if version < 6 {
416416 lenKeyBlock += 1 // cipher type included
@@ -439,7 +439,7 @@ func SerializeEncryptedKeyAEADwithHiddenOption(w io.Writer, pub *PublicKey, ciph
439439 case PubKeyAlgoX448 :
440440 return serializeEncryptedKeyX448 (w , config .Random (), buf [:lenHeaderWritten ], pub .PublicKey .(* x448.PublicKey ), keyBlock , byte (cipherFunc ), version )
441441 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 ())
443443 case PubKeyAlgoDSA , PubKeyAlgoRSASignOnly , ExperimentalPubKeyAlgoHMAC :
444444 return errors .InvalidArgumentError ("cannot encrypt to public key of type " + strconv .Itoa (int (pub .PubKeyAlgo )))
445445 }
@@ -483,8 +483,9 @@ func (e *EncryptedKey) ProxyTransform(instance ForwardingInstance) (transformed
483483 copy (copiedWrappedKey , wrappedKey )
484484
485485 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 ,
488489 encryptedMPI1 : encoding .NewMPI (transformedEphemeral ),
489490 encryptedMPI2 : encoding .NewOID (copiedWrappedKey ),
490491 }
@@ -608,7 +609,7 @@ func serializeEncryptedKeyX448(w io.Writer, rand io.Reader, header []byte, pub *
608609 return x448 .EncodeFields (w , ephemeralPublicX448 , ciphertext , cipherFunc , version == 6 )
609610}
610611
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 {
612613 mode := algorithm .AEADMode (config .Mode ())
613614 iv , ciphertextRaw , err := pub .Encrypt (rand , keyBlock , mode )
614615 if err != nil {
@@ -620,7 +621,7 @@ func serializeEncryptedKeyAEAD(w io.Writer, rand io.Reader, header [10]byte, pub
620621 buffer := append ([]byte {byte (mode )}, iv ... )
621622 buffer = append (buffer , ciphertextShortByteString .EncodedBytes ()... )
622623
623- packetLen := 10 /* header length */
624+ packetLen := len ( header ) /* header length */
624625 packetLen += int (len (buffer ))
625626
626627 err = serializeHeader (w , packetTypeEncryptedKey , packetLen )
@@ -637,60 +638,27 @@ func serializeEncryptedKeyAEAD(w io.Writer, rand io.Reader, header [10]byte, pub
637638 return err
638639}
639640
640- << << << < HEAD
641641func checksumKeyMaterial (key []byte ) uint16 {
642642 var checksum uint16
643643 for _ , v := range key {
644644 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 )
650645 }
651646 return checksum
652647}
653648
654- << << << < HEAD
655649func decodeChecksumKey (msg []byte ) (key []byte , err error ) {
656650 key = msg [:len (msg )- 2 ]
657651 expectedChecksum := uint16 (msg [len (msg )- 2 ])<< 8 | uint16 (msg [len (msg )- 1 ])
658652 checksum := checksumKeyMaterial (key )
659653 if checksum != expectedChecksum {
660654 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 )
665655 }
666656 return
667657}
668658
669- << << << < HEAD
670659func encodeChecksumKey (buffer []byte , key []byte ) {
671660 copy (buffer , key )
672661 checksum := checksumKeyMaterial (key )
673662 buffer [len (key )] = byte (checksum >> 8 )
674663 buffer [len (key )+ 1 ] = byte (checksum )
675664}
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