- Only considering the fingerprint of a certificate for online querying
of updates leaves out WKD and DANE as sources. Add the email addresses
of a certificate to the update process.
- Add support for using Tor via a socks5 proxy.
- Tor usage of the milter and the updater process are configured
separately.
- Restructure the config file and add some documentation.
- The updater looks for updates to certificates from the certificate
store.
- The updates are spaced by random time intervals so that the
reconstruction of the content of the cert store is made more
difficult.
- The updater can be send into the background - start, stop and status
are implemented.
- The state of the updater is persisted to disk so that the update
procedure survives a restart.
- Provide a way to initialize a `HuskContext` without determine the
signing key. This saves startup time for commands which do not need
the signing key.
Previously when Husk encountered an email which it could not encrypt, because it couldn’t get an authenticated certificate for the recipient, it let the email pass without modifications. This was especially true for emails with several recipients – if just one of them was without a certificate, the email was not encrypted.
With milestone 5, Husk now deals with the above situation. In that case, the email processing is split into two flows, producing a encrypted mail for all recipients with an authenticated certificate and sending the mail unencrypted for those recipients who don’t. The email headers are modified accordingly to avoid email loops and a footer is added so that a recipient still knows who else got this email.
This milestone also includes fixing of minor bugs and code improvements, to mention a few:
- Introducers where listed for each authentication path, now this list is deduplicated.
- Detect ANSI control characters in User ID as they can be used for malicious proposes.
- Reject user ids containing ANSI control characters when creating a new
signing key.
- Prevent adding certificates twice when querying online sources if they
contain multiple encryption keys.
- Dedup introducers if there are multiple authenticating paths.
- When listing locals, skip the signing key.
- Check if a mail can be encrypted at all due to available certificates.
If not tell the MTA that the processing is done.
- Make `Introducer` comparable (`PartialEq`, `Eq` and `Hash`).
- minor polishing
- Mark reinjected mails so that Husk can shortcut the processing.
- Fix Cargo.toml to correctly include the patched version of
sequoia-cert-store and sequoia-keystore.
- Add a footer to each mail resulting from a split into an encrypted and
an unencrypted version. The footer contains the recipients of the mail
which are excluded in the corresponding stream.
- Move the construction of the `HuskContext` to the `mail`
milter-command, as `helo` is used by scrapers to detect mailservers.
- Use `CertD::trust_root()` to get the trust root - it creates one if no
root can be found.
- Add `chrono` dependency.
- If a mail has more then one recipient and not for all recipients an
authenticated certificate can be obtained, the mail processing is
split into 2 streams - one that encrypts and an other which sends the
mail in plaintext.
- For both streams the header and the list of recipients is adjusted
accordingly.
- As the milter interface only allows one stream, the second stream is
reinjected into the MTA (via SMTP). The MTA is hardcoded to be
localhost:25.
- Upgrade Sequoia PGP to 2.4.0
- Remove deprecated `sequoia_wot::CertSynopsis::userids()` and replace
with `self_signed_userids()`.
- Add `lettre` as dependency for its SMTP functionality.
- Husk will wrap an email it encrypts into a fitting mime structure
so that MTUs (Mail user agent, like Thunderbird) can display the
message properly.
- Husk now can deal which attachments.
- Header protection will be used with encrypted emails.
- Husk can sign messages if you provide it with an appropriate key.
- Hush can now send itself into the background. It now understands start, stop
and status.
- When building Husk from source, files for shell completion are generated.
- When listing introducers their associated domains are also displayed.
- Introduce option `--background` for `daemon start` to send the new
process into the background.
- Implement a `ProcessDescr` which identifies a Husk process. This pays
attention to the possibility of a rollover of the process ids.
- Implement `daemon status`.
- Implement `daemon stop` which sends `SIG_INT` to a running Husk
process.
- If the signing key is replaced too fast (within the same second) the
resolution of OpenPGP timestamps is not good enough to identify the
sequence of certifications - which might to the selection of the wrong
signing key.
- Husk now not only encrypts outgoing emails (if possible) but also adds
a signature.
- Rework the internal handling of the signing key.
- Integrate the signing into the workflow of the daemon.
- Add a configuration option for a subject replacement.
- 'signkey set' sets a new signing key (disables an old one if
existing).
- 'signkey show' prints the fingerprint.
- 'signkey dump' prints the certificate of the signing key.
- Add a scheme on how to discover Husk signing keys. Siging keys mut be
certified by the `local trust root` with a signature having a notation
with a name equal to `signing_keys@husk-projet.org`.
- Fetch the key from the keystore.
- Expand `authenticate()` so that notation can be added to the
signature.
- Add a test to create a signing key and fetch it from the keystore.
- Add a list of introduced domains to the output.
- Fix `regex_domain_unescape()` to return an error if the regular
expression differs from a regex for a domain.