An OpenPGP certificate store abstraction and implementation.

This crates provides a unified, high-level API for different
certificate stores via the `Store` and `StoreUpdate` traits.  It also
provides a number of helper functions and data structures, like
`UserIDIndex` to help implement this functionality.  Finally, the
`CertStore` data structure combines multiple certificate backends in a
transparent way to users.

This crate supports multiple backends: `CertD` uses an [OpenPGP
Certificate Directory].  `Certs` manages a bunch of certificates
in-memory.  It can be loaded with certificates from a keyring, a
keybox, a database, etc.  It can also be used as the basis for a new
backend, which actually writes changes back to the underlying store.
`Pep` provides access to a [pEp] certificate store.  Finally, there is a
key server backend, which can fetch certificates via HKPS and WKD.

  [OpenPGP Certificate Directory]: https://crates.io/crates/openpgp-cert-d
  [pEp]: https://gitea.pep.foundation/pEp.foundation/pEpEngine

## Usage

To use `sequoia-cert-store` from your project, you should add the following
to your crate's `Cargo.toml`:

```toml
[dependencies]
sequoia-cert-store = "0.3"
sequoia-openpgp = { version = "1.0.0", default-features = false }
```

To compile your crate you would then run:

```
$ cargo build --release --features sequoia-openpgp/crypto-default
$ cargo test --features sequoia-openpgp/crypto-default
$ cargo doc --no-deps --features sequoia-openpgp/crypto-default
```

If you do not disable the use of `sequoia-openpgp`'s default features,
then `sequoia-openpgp` will select the default cryptographic backend,
and your users won't be able to easily compile your crate with a
different cryptographic backend.

`sequoia-openpgp` currently uses Nettle as its default cryptographic
backend.  `sequoia-openpgp` also supports OpenSSL
(`sequoia-openpgp/crypto-openssl`), Botan
(`sequoia-openpgp/crypto-botan`), Windows CNG
(`sequoia-openpgp/crypto-cng`), Rust Crypto
(`sequoia-openpgp/crypto-rust`).  For more information about building
`sequoia-openpgp`, please refer to [`sequoia-openpgp`'s README].  This
also includes information about the different backends' [build
requirements].

  [`sequoia-openpgp`'s README]: https://gitlab.com/sequoia-pgp/sequoia#features
  [build requirements]: https://gitlab.com/sequoia-pgp/sequoia#building-sequoia


# License

sequoia-cert-store is distributed under the terms of LGPL 2.0 or later.

See [LICENSE.txt](LICENSE.txt) and [CONTRIBUTING.md](CONTRIBUTING.md)
for details.
