diff --git a/ChangeLog b/ChangeLog index 72a7df6..543a35f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,8 @@ Unreleased Version 0.8.0 - Change from distutils to setuptools with entry points because it's the future + - Use install_requires and extras_requires to document external + dependencies for dkimpy (LP: #1227526) 2018-02-17 Version 0.7.1 - Update ed25519 tests, including using sample keys from RFC 8032 Section diff --git a/README b/README index d8fc2fc..5babdba 100644 --- a/README +++ b/README @@ -15,13 +15,19 @@ This is dkimpy 0.8.0. REQUIREMENTS - - Python 2.x >= 2.7, or Python 3.x >= 3.4. Recent versions have not been - tested on python < 2.7 or python3 < 3.4, but may still work on python2.6 +Dependencies will be automatically included for normal DKIM usage. The +extras_requires feature 'ed25519' will add the dependencies needed for signing +and verifying using the new DCRUP ed25519-sha256 algorithm. The +extras_requires feature 'ARC' will add the extra dependencies needed for ARC. + + - Python 2.x >= 2.7, or Python 3.x >= 3.5. Recent versions have not been + tested on python < 2.7 or python3 < 3.5, but may still work on python2.6 and python 3.1 - 3.3. - - dnspython or pydns. dnspython is preferred if both are present. + - dnspython or pydns. dnspython is preferred if both are present and + installed to satisfy the DNS module requirement if neither are installed. - argparse. Standard library in python2.7 and later. - authres. Needed for ARC. - - nacl. Needed for use of experimental ed25519 capability. + - PyNaCl. Needed for use of experimental ed25519 capability. INSTALLATION @@ -106,22 +112,22 @@ The dkimpy 0.7 implementation matches the -08 revision of the draft, except it uses Ed25519 vice Ed25519ph (a change to Ed25519 is planned for -09, but that had not been published yet as of the release of dkimpy 0.7). -Three helper programs are also supplied: dknewkey.py, dkimsign.py and -dkimverify.py. +Three helper programs are also supplied: dknewkey, dkimsign and +dkimverify -dknewkey.py is s script that produces private and public key pairs suitable +dknewkey is s script that produces private and public key pairs suitable for use with DKIM. Note that the private key file format used for ed25519 is not standardized (there is no standard) and is unique to dkimpy. -dkimsign.py is a filter that reads an RFC822 message on standard input, and +dkimsign is a filter that reads an RFC822 message on standard input, and writes the same message on standard output with a DKIM-Signature line prepended. The signing options are specified on the command line: -dkimsign.py selector domain privatekeyfile [identity] +dkimsign selector domain privatekeyfile [identity] The identity is optional and defaults to "@domain". -dkimverify.py reads an RFC822 message on standard input, and returns with exit +dkimverify reads an RFC822 message on standard input, and returns with exit code 0 if the signature verifies successfully. Otherwise, it returns with exit code 1. @@ -134,7 +140,7 @@ This new functionality is marked experimental because the protocol is still under development. There are no guarantees about API stability or compatibility. -In addition to arcsign.py and arcverify.py, the dkim module now provides +In addition to arcsign and arcverify, the dkim module now provides arc_sign and arc_verify functions as well as an ARC class. FEEDBACK diff --git a/setup.py b/setup.py index 3b5d45f..d900ad0 100644 --- a/setup.py +++ b/setup.py @@ -26,6 +26,13 @@ import os version = "0.8.0" +kw = {} # Work-around for lack of 'or' requires in setuptools. +try: + import DNS + kw['install_requires'] = ['PyDNS'] +except ImportError: # If PyDNS is not installed, prefer dnspython + kw['install_requires'] = ['dnspython'] + setup( name = "dkimpy", version = version, @@ -67,7 +74,13 @@ verification.""", 'Topic :: Communications :: Email :: Filters', 'Topic :: Internet :: Name Service (DNS)', 'Topic :: Software Development :: Libraries :: Python Modules' - ] + ], + zip_safe = False, + extras_require={ + 'ed25519': ['PyNaCl'], + 'ARC': ['authres'] + }, + **kw ) if os.name != 'posix':