# PGPMailman plugin
* `pgpmailman` - A Core plugin.
- `styles` - Both styles generate a list keypair based on plugin settings on list creation as well as set other attributes for an encrypted mailing list.
- `pgp` - Module that handles lower-level pgp related stuff. Such as the GPG keyrings, lookup of keys, encryption of messages, decryption, etc...
- `KeyEmailCommand` - Handles user key management through the `key` command.
- `config` - For plugin specific configuration and parsing.
- `database` - Plugin needs to store the user/address <-> user-key fingerprint mapping somehow, attached to Mailman's user object would be the best but otherwise a custom data storage needs to be setup.
- `rest` - Module that exposes plugin-specific REST api, which will be used by the `django-pgpmailman` app. With `/plugins/pgpmailman/` root.
- `/lists/<list-id>` - For seting per-list configuration options: bounce/discard non-signed, bounce/discard non-encrypted.
- `/lists/<list-id>/key` - For getting the list-key.
- `/users/<user-id>/key` - For getting, setting and revoking the user-key.
- `EncryptedIncomingRunner` - Decrypts incoming messages for encrypted mailing lists and checks their signatures before passing them to the default IncomingRunner. Messages to ordinary lists are passed to the default IncomingRunner wthout change.
- `EncryptedOutgoingRunner` - Encrypts and optionally signs for configured lists. This is a runner and not a Pipeline since we need to encrypt all outgoing messages, so digests, virgin messages, posts...
- `EncryptedHyperKittyArchiver` - Fetches list archive public keys from `django-pgpmailman`, uses them to send messages to archive encrypted, for encrypted lists.
- `EncryptedLocalArchiver` - Stores messages encrypted with list-key in maildir format.
- `PGPMailman` - Main plugin class, has `pre_hook`, `post_hook` and `rest_object` methods necessary for the IPlugin interface it implements.
* `django-pgpmailman` - A Django app that extends Postorius and HyperKitty, also with an associated example_project that combines Postorius, HyperKitty while extending their templates and views seamlessly.
- `/list/<list-id>/key` - For getting the list-archive public key.
- `templates` - Will have custom templates as well as templates overwriting and extending certain Postorius and HyperKitty templates.
### Core plugin
A setuptools package that needs to be installed into the same virtualenv as the Mailman 3 instance.
### Django app
A setuptools package that needs to be installed into the same virtualenv as the Postorius and HyperKitty instances, packaged with an example_project.
### Core plugin
Custom runners, archivers and other site configuration options would need to be set.
### Django app
As any of Mailman's Django apps, will be packaged with an example_project with default configuration.
In order for site admins and users to use encrypted mailing lists responsibly, quite some amount of documentation is required, since misusing encrypted lists will make them uneffective.