smtp: don't sign plaintext messages by default
This commit is contained in:
parent
442c03bbbc
commit
7da6ef54da
|
@ -471,11 +471,12 @@ func (set *MessagePackageSet) Encrypt(mimeType string, signed *openpgp.Entity) (
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (set *MessagePackageSet) AddCleartext(addr string) error {
|
func (set *MessagePackageSet) AddCleartext(addr string) (*MessagePackage, error) {
|
||||||
set.Addresses[addr] = &MessagePackage{
|
pkg := &MessagePackage{
|
||||||
Type: MessagePackageCleartext,
|
Type: MessagePackageCleartext,
|
||||||
Signature: set.signature,
|
Signature: set.signature,
|
||||||
}
|
}
|
||||||
|
set.Addresses[addr] = pkg
|
||||||
set.Type |= MessagePackageCleartext
|
set.Type |= MessagePackageCleartext
|
||||||
|
|
||||||
if set.BodyKey == "" || set.AttachmentKeys == nil {
|
if set.BodyKey == "" || set.AttachmentKeys == nil {
|
||||||
|
@ -487,7 +488,7 @@ func (set *MessagePackageSet) AddCleartext(addr string) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return pkg, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func serializeEncryptedKey(symKey *packet.EncryptedKey, pub *packet.PublicKey, config *packet.Config) (string, error) {
|
func serializeEncryptedKey(symKey *packet.EncryptedKey, pub *packet.PublicKey, config *packet.Config) (string, error) {
|
||||||
|
@ -504,36 +505,37 @@ func serializeEncryptedKey(symKey *packet.EncryptedKey, pub *packet.PublicKey, c
|
||||||
return encoded.String(), nil
|
return encoded.String(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (set *MessagePackageSet) AddInternal(addr string, pub *openpgp.Entity) error {
|
func (set *MessagePackageSet) AddInternal(addr string, pub *openpgp.Entity) (*MessagePackage, error) {
|
||||||
config := &packet.Config{}
|
config := &packet.Config{}
|
||||||
|
|
||||||
encKey, ok := encryptionKey(pub, config.Now())
|
encKey, ok := encryptionKey(pub, config.Now())
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.New("cannot encrypt a message to key id " + strconv.FormatUint(pub.PrimaryKey.KeyId, 16) + " because it has no encryption keys")
|
return nil, errors.New("cannot encrypt a message to key id " + strconv.FormatUint(pub.PrimaryKey.KeyId, 16) + " because it has no encryption keys")
|
||||||
}
|
}
|
||||||
|
|
||||||
bodyKey, err := serializeEncryptedKey(set.bodyKey, encKey.PublicKey, config)
|
bodyKey, err := serializeEncryptedKey(set.bodyKey, encKey.PublicKey, config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
attachmentKeys := make(map[string]string, len(set.attachmentKeys))
|
attachmentKeys := make(map[string]string, len(set.attachmentKeys))
|
||||||
for att, key := range set.attachmentKeys {
|
for att, key := range set.attachmentKeys {
|
||||||
attKey, err := serializeEncryptedKey(key, encKey.PublicKey, config)
|
attKey, err := serializeEncryptedKey(key, encKey.PublicKey, config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
attachmentKeys[att] = attKey
|
attachmentKeys[att] = attKey
|
||||||
}
|
}
|
||||||
|
|
||||||
set.Type |= MessagePackageInternal
|
set.Type |= MessagePackageInternal
|
||||||
set.Addresses[addr] = &MessagePackage{
|
pkg := &MessagePackage{
|
||||||
Type: MessagePackageInternal,
|
Type: MessagePackageInternal,
|
||||||
BodyKeyPacket: bodyKey,
|
BodyKeyPacket: bodyKey,
|
||||||
AttachmentKeyPackets: attachmentKeys,
|
AttachmentKeyPackets: attachmentKeys,
|
||||||
Signature: set.signature,
|
Signature: set.signature,
|
||||||
}
|
}
|
||||||
return nil
|
set.Addresses[addr] = pkg
|
||||||
|
return pkg, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type OutgoingMessage struct {
|
type OutgoingMessage struct {
|
||||||
|
|
|
@ -269,9 +269,14 @@ func (u *user) Send(from string, to []string, r io.Reader) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, rcpt := range plaintextRecipients {
|
for _, rcpt := range plaintextRecipients {
|
||||||
if err := plaintextSet.AddCleartext(rcpt); err != nil {
|
pkg, err := plaintextSet.AddCleartext(rcpt)
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Don't sign plaintext messages by default
|
||||||
|
// TODO: send inline singnature to opt-in contacts
|
||||||
|
pkg.Signature = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
outgoing.Packages = append(outgoing.Packages, plaintextSet)
|
outgoing.Packages = append(outgoing.Packages, plaintextSet)
|
||||||
|
@ -293,7 +298,7 @@ func (u *user) Send(from string, to []string, r io.Reader) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
for rcpt, pub := range encryptedRecipients {
|
for rcpt, pub := range encryptedRecipients {
|
||||||
if err := encryptedSet.AddInternal(rcpt, pub); err != nil {
|
if _, err := encryptedSet.AddInternal(rcpt, pub); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue