Skip to content

Commit 0e6a359

Browse files
committed
fix: Address rebase on version 2 issues
1 parent c602a74 commit 0e6a359

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
@@ -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
641641
func 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
655649
func 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
670659
func 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)

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)