- 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.
- 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.
- 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.
- Move the content of what was stored in log4rs.yml into the main config
file, so that there is just one file to parse to get the complete
configuration.
- Create the global switch `--home` to pass/overload the value for
SEQUOIA_HOME in the configuration file.
- Add `husk locals list` to list all certificates which would be used by
husk, but are not introduced by another certificate. These
certificates are added 'locally'.
- Refcator the code so that `local` -> `locals`.
- Introducers can now be created by specifying a file. The certificate
gets imported and declared as an introducer for the passed domains.
- Add some checks, so that the imported certificate can actually be used
as an introducer (certificate is alive, not revoked, has certification
capabilities)
- Implement the subcommand `remove` for `introducer`.
- Remove the introducer by adding a certification with trust level 1 and
trust depth 0.
- Move `crypt.rs` into `common/` and add a generic authenticaton
function to be used by `introducer add` and `... remove`.
- Create a command to add an introducer (with domains).
- Add a module for escaping regular expressions used in certifications
- Add some helper functions.
- Add functionality to query online sources (Keyservers, etc) for
certificates.
- Use introducers to determine which UserIDs should be fetched from
online soources. Check certifications before importing certifiactes
into the local cert store.
- start docker image for local end-to-end testing.
- collect body of incoming mail.
- check if incoming mail is already encrypted - dont touch it if it is.
- check if recipients of that mail can encrypt.
- Added certstore and retrieval of the local trust root.
- Major work on keeping the context between calls to the milter.
- Added a context for an email in processing
- Added Husk specific errors