Skip to content

Commit 5b0fb2f

Browse files
committed
fix: Address rebase on version 2 issues
1 parent b188297 commit 5b0fb2f

File tree

3 files changed

+15
-49
lines changed

3 files changed

+15
-49
lines changed

Diff for: openpgp/forwarding.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package openpgp
66

77
import (
88
goerrors "errors"
9+
910
"github.com/ProtonMail/go-crypto/openpgp/ecdh"
1011
"github.com/ProtonMail/go-crypto/openpgp/errors"
1112
"github.com/ProtonMail/go-crypto/openpgp/packet"
@@ -51,7 +52,7 @@ func (e *Entity) NewForwardingEntity(
5152
Subkeys: []Subkey{},
5253
}
5354

54-
err = forwardeeKey.addUserId(name, comment, email, config, now, keyLifetimeSecs)
55+
err = forwardeeKey.addUserId(name, comment, email, config, now, keyLifetimeSecs, true)
5556
if err != nil {
5657
return nil, nil, err
5758
}
@@ -91,15 +92,15 @@ func (e *Entity) NewForwardingEntity(
9192
return nil, nil, err
9293
}
9394

94-
forwardeeSubKey := forwardeeKey.Subkeys[len(forwardeeKey.Subkeys) - 1]
95+
forwardeeSubKey := forwardeeKey.Subkeys[len(forwardeeKey.Subkeys)-1]
9596

9697
forwardeeEcdhKey, ok := forwardeeSubKey.PrivateKey.PrivateKey.(*ecdh.PrivateKey)
9798
if !ok {
9899
return nil, nil, goerrors.New("wrong forwarding sub key generation")
99100
}
100101

101102
instance := packet.ForwardingInstance{
102-
KeyVersion: 4,
103+
KeyVersion: 4,
103104
ForwarderFingerprint: forwarderSubKey.PublicKey.Fingerprint,
104105
}
105106

@@ -109,9 +110,9 @@ func (e *Entity) NewForwardingEntity(
109110
}
110111

111112
kdf := ecdh.KDF{
112-
Version: ecdh.KDFVersionForwarding,
113-
Hash: forwarderEcdhKey.KDF.Hash,
114-
Cipher: forwarderEcdhKey.KDF.Cipher,
113+
Version: ecdh.KDFVersionForwarding,
114+
Hash: forwarderEcdhKey.KDF.Hash,
115+
Cipher: forwarderEcdhKey.KDF.Cipher,
115116
}
116117

117118
// If deriving a forwarding key from a forwarding key

Diff for: openpgp/packet/encrypted_key.go

+7-39
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ func SerializeEncryptedKeyAEADwithHiddenOption(w io.Writer, pub *PublicKey, ciph
405405

406406
var keyBlock []byte
407407
switch pub.PubKeyAlgo {
408-
case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoElGamal, PubKeyAlgoECDH:
408+
case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoElGamal, PubKeyAlgoECDH, ExperimentalPubKeyAlgoAEAD:
409409
lenKeyBlock := len(key) + 2
410410
if version < 6 {
411411
lenKeyBlock += 1 // cipher type included
@@ -434,7 +434,7 @@ func SerializeEncryptedKeyAEADwithHiddenOption(w io.Writer, pub *PublicKey, ciph
434434
case PubKeyAlgoX448:
435435
return serializeEncryptedKeyX448(w, config.Random(), buf[:lenHeaderWritten], pub.PublicKey.(*x448.PublicKey), keyBlock, byte(cipherFunc), version)
436436
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())
438438
case PubKeyAlgoDSA, PubKeyAlgoRSASignOnly, ExperimentalPubKeyAlgoHMAC:
439439
return errors.InvalidArgumentError("cannot encrypt to public key of type " + strconv.Itoa(int(pub.PubKeyAlgo)))
440440
}
@@ -478,8 +478,9 @@ func (e *EncryptedKey) ProxyTransform(instance ForwardingInstance) (transformed
478478
copy(copiedWrappedKey, wrappedKey)
479479

480480
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,
483484
encryptedMPI1: encoding.NewMPI(transformedEphemeral),
484485
encryptedMPI2: encoding.NewOID(copiedWrappedKey),
485486
}
@@ -603,7 +604,7 @@ func serializeEncryptedKeyX448(w io.Writer, rand io.Reader, header []byte, pub *
603604
return x448.EncodeFields(w, ephemeralPublicX448, ciphertext, cipherFunc, version == 6)
604605
}
605606

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 {
607608
mode := algorithm.AEADMode(config.Mode())
608609
iv, ciphertextRaw, err := pub.Encrypt(rand, keyBlock, mode)
609610
if err != nil {
@@ -615,7 +616,7 @@ func serializeEncryptedKeyAEAD(w io.Writer, rand io.Reader, header [10]byte, pub
615616
buffer := append([]byte{byte(mode)}, iv...)
616617
buffer = append(buffer, ciphertextShortByteString.EncodedBytes()...)
617618

618-
packetLen := 10 /* header length */
619+
packetLen := len(header) /* header length */
619620
packetLen += int(len(buffer))
620621

621622
err = serializeHeader(w, packetTypeEncryptedKey, packetLen)
@@ -632,60 +633,27 @@ func serializeEncryptedKeyAEAD(w io.Writer, rand io.Reader, header [10]byte, pub
632633
return err
633634
}
634635

635-
<<<<<<< HEAD
636636
func checksumKeyMaterial(key []byte) uint16 {
637637
var checksum uint16
638638
for _, v := range key {
639639
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)
645640
}
646641
return checksum
647642
}
648643

649-
<<<<<<< HEAD
650644
func decodeChecksumKey(msg []byte) (key []byte, err error) {
651645
key = msg[:len(msg)-2]
652646
expectedChecksum := uint16(msg[len(msg)-2])<<8 | uint16(msg[len(msg)-1])
653647
checksum := checksumKeyMaterial(key)
654648
if checksum != expectedChecksum {
655649
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)
660650
}
661651
return
662652
}
663653

664-
<<<<<<< HEAD
665654
func encodeChecksumKey(buffer []byte, key []byte) {
666655
copy(buffer, key)
667656
checksum := checksumKeyMaterial(key)
668657
buffer[len(key)] = byte(checksum >> 8)
669658
buffer[len(key)+1] = byte(checksum)
670659
}
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)

Diff for: openpgp/packet/private_key.go

+1-4
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ import (
2828
"github.com/ProtonMail/go-crypto/openpgp/errors"
2929
"github.com/ProtonMail/go-crypto/openpgp/internal/encoding"
3030
"github.com/ProtonMail/go-crypto/openpgp/s2k"
31+
"github.com/ProtonMail/go-crypto/openpgp/symmetric"
3132
"github.com/ProtonMail/go-crypto/openpgp/x25519"
3233
"github.com/ProtonMail/go-crypto/openpgp/x448"
3334
"golang.org/x/crypto/hkdf"
34-
"github.com/ProtonMail/go-crypto/openpgp/symmetric"
3535
)
3636

3737
// PrivateKey represents a possibly encrypted private key. See RFC 4880,
@@ -186,15 +186,12 @@ func NewDecrypterPrivateKey(creationTime time.Time, decrypter interface{}) *Priv
186186
pk.PublicKey = *NewElGamalPublicKey(creationTime, &priv.PublicKey)
187187
case *ecdh.PrivateKey:
188188
pk.PublicKey = *NewECDHPublicKey(creationTime, &priv.PublicKey)
189-
<<<<<<< HEAD
190189
case *x25519.PrivateKey:
191190
pk.PublicKey = *NewX25519PublicKey(creationTime, &priv.PublicKey)
192191
case *x448.PrivateKey:
193192
pk.PublicKey = *NewX448PublicKey(creationTime, &priv.PublicKey)
194-
=======
195193
case *symmetric.AEADPrivateKey:
196194
pk.PublicKey = *NewAEADPublicKey(creationTime, &priv.PublicKey)
197-
>>>>>>> 3731c9c (openpgp: Add support for symmetric subkeys (#74))
198195
default:
199196
panic("openpgp: unknown decrypter type in NewDecrypterPrivateKey")
200197
}

0 commit comments

Comments
 (0)