smtp: choose the private key for the right address

This commit is contained in:
emersion 2017-12-02 16:44:15 +01:00
parent a219374bdf
commit ee7dae2c2f
No known key found for this signature in database
GPG Key ID: 0FDE7BE0E88F5E48
1 changed files with 22 additions and 1 deletions

View File

@ -71,6 +71,26 @@ func (u *user) Send(from string, to []string, r io.Reader) error {
if fromAddr == nil {
return errors.New("unknown sender address")
}
if len(fromAddr.Keys) == 0 {
return errors.New("sender address has no private key")
}
// TODO: get appropriate private key
encryptedPrivateKey, err := fromAddr.Keys[0].Entity()
if err != nil {
return fmt.Errorf("cannot parse sender private key: %v", err)
}
var privateKey *openpgp.Entity
for _, e := range u.privateKeys {
if e.PrimaryKey.KeyId == encryptedPrivateKey.PrimaryKey.KeyId {
privateKey = e
break
}
}
if privateKey == nil {
return errors.New("sender address key hasn't been decrypted")
}
msg := &protonmail.Message{
ToList: toPMAddressList(toList),
@ -119,7 +139,6 @@ func (u *user) Send(from string, to []string, r io.Reader) error {
msg.MIMEType = bodyType
privateKey := u.privateKeys[0]
plaintext, err := msg.Encrypt([]*openpgp.Entity{privateKey}, privateKey)
if err != nil {
return err
@ -223,6 +242,8 @@ func (be *backend) Login(username, password string) (smtp.User, error) {
return nil, err
}
// TODO: decrypt private keys in u.Addresses
return &user{c, u, privateKeys}, nil
}