Metadata-Version: 2.0
Name: diceware-list
Version: 0.2
Summary: Generate diceware wordlists.
Home-page: https://github.com/ulif/diceware-list
Author: Uli Fouquet
Author-email: uli@gnufix.de
License: GPL 3.0
Keywords: diceware wordlist passphrase
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: End Users/Desktop
Classifier: Intended Audience :: System Administrators
Classifier: Topic :: Utilities
Classifier: Topic :: Security :: Cryptography
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: Implementation :: CPython
Requires-Dist: setuptools
Provides-Extra: docs
Requires-Dist: Sphinx; extra == 'docs'
Provides-Extra: tests
Requires-Dist: pytest (>=2.8.3); extra == 'tests'

diceware-list
=============

|bdg-build| `sources <https://github.com/ulif/diceware-list>`_ | `issues <https://github.com/ulif/diceware-list/issues>`_

.. |bdg-build| image:: https://travis-ci.org/ulif/diceware-list.svg?branch=master
    :target: https://travis-ci.org/ulif/diceware-list
    :alt: Build Status

Create wordlists for `diceware`_ in a reproducable and easy manner::

  $ python diceware_list.py -n -l 7776 /usr/share/dict/words
  11111 !
  11112 !!
  ...
  12353 alan
  12354 alana
  12355 alar
  ...
  66665 zzz
  66666 zzzz

This is not a `diceware`_ implementation, but only a helper to create
appropriate wordlists.

The main target of `diceware-list` is to provide "good"
wordlists. Wordlists are considered "good" if they

- contain enough terms for use with a certain diceware application
  (for instance 6^6 = 7776 terms if used with six dice)
- contain terms as short as possible (to reduce typing)
- (optionally) contain no words with non-ASCII chars (to enable use
  with non-localized keyboards)
- contain no offending terms

The wordlists generated by `diceware-list` are not meant to be kept
secret. You might put them on the internet, publish on facebook or
print them in the New York Times. Instead the security of the
`diceware`_ technique relies on the entropy or (in this case)
"randomness" of your dice, computer, etc.

In other words: Your passphrases will not be safe because of hiding
your wordlist. They will be safe because there are so many possible
combinations of words you can pick from your wordlist. That means:
longer lists are more secure than shorter ones (if really used to full
extent by your source of randomness with `diceware`_), but hidden
lists are *not* more secure than public ones.


Install
--------

Install latest release from pypi_ ::

  (venv) $ pip install diceware-list

or clone repository from github::

  $ git clone https://github.com/ulif/diceware-list.git

Please consider using `virtualenv`_ for deployment.

In an active virtualenv you can install an executable script of
`diceware-list` running::

  (venv) $ python setup.py install
  (venv) $ diceware_list --help
  usage: diceware_list [-h] [-l LENGTH] [-n] [--ascii] [-k] [--use-416] [-v]
                       DICTFILE [DICTFILE ...]

But you can also run the one and only script directly::

  $ python diceware_list.py --help
  usage: diceware_list.py [-h] [-l LENGTH] [-n] [--ascii] [-k] [--use-416] [-v]
                          DICTFILE [DICTFILE ...]


Usage
-----

First, you need a file with words as "dictionary". On typical Debian
systems such files can be found in ``/usr/share/dicts/``.

This file can then be fed to `diceware-list` to create a wordlist
suitable for use with diceware.::

  $ python diceware_list.py /usr/share/dict/words
  !
  !!
  !!!
  ...
  alan
  alana
  alar
  ...
  zzz
  zzzz

By default lists of 8192 (=2**13) words are created. This value can be
changed with the `-l` option.

With `-n` you can tell `diceware_list` to put numbers into each line,
representing dice throws [#]_ ::


  $ python diceware_list.py -n -l 7776 /usr/share/dict/words
  11111 !
  11112 !!
  ...
  12353 alan
  12354 alana
  12355 alar
  ...
  66665 zzz
  66666 zzzz

The `--ascii` option filters terms out, that contain non-ASCII
characters. This can help in generating non-english word lists that
are usable with regular english keyboards.

The verbose option `--verbose` can be given multiple times to increase
verbosity.

See `--help` for other options.

`diceware_list` follows loosely the recommendations given on
http://diceware.com/ by Mr. Reinhold.


Testing
-------

Tests require `py.test`_ being installed. In an activated `virtualenv`
it can be installed with `pip`_::

  (venv)$ pip install pytest

Afterwards, you can run tests like so::

  (venv)$ py.test

If you also install `tox`::

  (venv)$ pip install tox

then you can run all tests for all supported platforms at once::

  (venv)$ tox


Coverage
--------

To get a coverage report, you can use the respective py.test plugin::

  (venv)$ pip install pytest-cov
  (venv)$ py.test --cov=diceware_list.py --cov-report=html

Skip the `--cov-report` option (or use `term` or `term-missing`
instead of `html`) to get a report on commandline.

.. [#] The wordlist length in this case should be
       ``(number-of-sides-per-dice)`` powered to
       ``(number-of-dicethrows)``, for instance 6**5 = 7776 for five
       six-sided dice or a single six-sided dice thrown five times.

.. _diceware: http://diceware.com/
.. _pip: https://pip.pypa.io/en/latest/
.. _py.test: https://pytest.org/
.. _pypi: https://pypi.python.org/
.. _virtualenv: https://virtualenv.pypa.io/



Changes
*******

0.2 (2016-03-18)
================

- Allow `-v` option multiple times for increased verbosity.

- Pick maximum width terms randomly. Until that change we included all
  shorter entries and additionally the (alphabetically) first entries
  of maximum width. Now, we pick a random set of these maximum width
  entries for the result list.

- Claim support for Python 3.5.


0.1 (2016-02-09)
================

- Initial release.


