[Pkg-gnupg-commit] [gpgme] 102/412: Merge branch 'justus/pyme3'

Daniel Kahn Gillmor dkg at fifthhorseman.net
Thu Sep 22 21:26:25 UTC 2016


This is an automated email from the git hooks/post-receive script.

dkg pushed a commit to branch master
in repository gpgme.

commit db343325356a73b6899e9580c6f5e32f33544003
Merge: 52f2295 1032832
Author: Justus Winter <justus at gnupg.org>
Date:   Tue May 17 15:10:28 2016 +0200

    Merge branch 'justus/pyme3'

 configure.ac                                   |   26 +-
 lang/README                                    |    5 +-
 lang/python/COPYING                            |  340 ++++
 lang/python/COPYING.LESSER                     |  508 +++++
 lang/python/INSTALL                            |   15 +
 lang/python/MANIFEST.in                        |    5 +
 lang/python/Makefile.am                        |   54 +
 lang/python/README.rst                         |   48 +
 lang/python/docs/Short_History.rst             |   55 +
 lang/python/docs/TODO.rst                      |   23 +
 lang/python/docs/old-commits.log               | 2445 ++++++++++++++++++++++++
 lang/python/examples/Examples.rst              |    7 +
 lang/python/examples/delkey.py                 |   36 +
 lang/python/examples/encrypt-to-all.py         |   68 +
 lang/python/examples/exportimport.py           |   76 +
 lang/python/examples/genkey.py                 |   45 +
 lang/python/examples/inter-edit.py             |   59 +
 lang/python/examples/sign.py                   |   33 +
 lang/python/examples/signverify.py             |   78 +
 lang/python/examples/simple.py                 |   53 +
 lang/python/examples/t-edit.py                 |   63 +
 lang/python/examples/testCMSgetkey.py          |   47 +
 lang/python/examples/verifydetails.py          |   97 +
 lang/python/gpgme-h-clean.py                   |   42 +
 lang/python/gpgme.i                            |  296 +++
 lang/python/helpers.c                          |  154 ++
 lang/python/helpers.h                          |   36 +
 lang/python/pyme/__init__.py                   |  139 ++
 lang/python/pyme/callbacks.py                  |   47 +
 lang/python/pyme/constants/__init__.py         |    7 +
 lang/python/pyme/constants/data/__init__.py    |    4 +
 lang/python/pyme/constants/data/encoding.py    |   20 +
 lang/python/pyme/constants/event.py            |   20 +
 lang/python/pyme/constants/import.py           |   20 +
 lang/python/pyme/constants/keylist/__init__.py |    4 +
 lang/python/pyme/constants/keylist/mode.py     |   20 +
 lang/python/pyme/constants/md.py               |   20 +
 lang/python/pyme/constants/pk.py               |   20 +
 lang/python/pyme/constants/protocol.py         |   20 +
 lang/python/pyme/constants/sig/__init__.py     |    4 +
 lang/python/pyme/constants/sig/mode.py         |   20 +
 lang/python/pyme/constants/sigsum.py           |   20 +
 lang/python/pyme/constants/status.py           |   20 +
 lang/python/pyme/constants/validity.py         |   20 +
 lang/python/pyme/core.py                       |  482 +++++
 lang/python/pyme/errors.py                     |   50 +
 lang/python/pyme/util.py                       |   97 +
 lang/python/pyme/version.py                    |   43 +
 lang/python/setup.py                           |   94 +
 lang/python/tests/Makefile.am                  |   82 +
 lang/python/tests/support.py                   |   26 +
 lang/python/tests/t-data.py                    |   49 +
 lang/python/tests/t-decrypt.py                 |   37 +
 lang/python/tests/t-encrypt.py                 |   42 +
 lang/python/tests/t-wrapper.py                 |   25 +
 m4/ax_pkg_swig.m4                              |  135 ++
 m4/m4_ax_swig_python.m4                        |   64 +
 57 files changed, 6360 insertions(+), 5 deletions(-)

diff --cc configure.ac
index eefa1de,e2b4029..36f4f94
--- a/configure.ac
+++ b/configure.ac
@@@ -160,8 -146,6 +160,8 @@@ have_w32_system=n
  have_w64_system=no
  build_w32_glib=no
  build_w32_qt=no
- available_languages="cpp cl qt"
- default_languages="cpp cl qt"
++available_languages="cl cpp python qt"
++default_languages="cl cpp python qt"
  case "${host}" in
      x86_64-*mingw32*)
          have_w64_system=yes
@@@ -249,97 -245,6 +249,117 @@@ if test x$fixed_search_path != x ; the
                      [Locate binaries only via this PATH])
  fi
  
 +AC_ARG_ENABLE([languages],
 +              AC_HELP_STRING([--enable-languages=languages],
 +                             [enable only specific language bindings]),
 +                             [enabled_languages=`echo $enableval | \
 +                             tr ',:' '  ' | tr '[A-Z]' '[a-z]' | \
 +                             sed 's/c++/cpp/'`],
 +                             [enabled_languages="maybe"])
 +if test "x$enabled_languages" = "x" \
 +   -o "$enabled_languages" = "no"; then
 +   enabled_languages=
 +fi
 +
 +# If languages are explicitly set missing requirements
 +# for the languages are treated as errors otherwise
 +# there will be a warning.
 +explicit_languages=1
 +if test "x$enabled_languages" = "xmaybe"; then
 +    explicit_languages=0
 +    enabled_languages="$default_languages"
 +fi
 +
 +for language in $enabled_languages; do
 +    LIST_MEMBER($language, $available_languages)
 +    if test "$found" = "0"; then
 +       AC_MSG_ERROR([unsupported language binding specified])
 +    fi
 +done
 +
 +
 +
 +# Enable C++ 11 if cpp language is requested
 +LIST_MEMBER("cpp", $enabled_languages)
 +if test "$found" = "1"; then
 +    AX_CXX_COMPILE_STDCXX(11, noext, optional)
 +    if test "$HAVE_CXX11" != "1"; then
 +        if test "$explicit_languages" = "1"; then
 +            AC_MSG_ERROR([[
 +***
 +*** A compiler with c++11 support is required for the c++ binding.
 +***]])
 +        else
 +            enabled_languages=$(echo $enabled_languages | sed 's/cpp//')
 +            enabled_languages=$(echo $enabled_languages | sed 's/qt//')
 +            AC_MSG_WARN([[
 +***
 +*** No c++11 support detected. C++ and Qt bindings will be disabled.
 +***]])
 +        fi
 +    fi
 +fi
 +
 +# Check that if qt is enabled cpp also is enabled
 +LIST_MEMBER("qt", $enabled_languages)
 +if test "$found" = "1"; then
 +    # We need to ensure that in the langauge order qt comes after cpp
 +    # so we remove qt first and explicitly add it as last list member.
 +    enabled_languages=$(echo $enabled_languages | sed 's/qt//')
 +    LIST_MEMBER("cpp", $enabled_languages)
 +    if test "$found" = "0"; then
 +        AC_MSG_ERROR([[
 +***
 +*** Qt language binding depends on cpp binding.
 +***]])
 +    fi
 +    FIND_QT
 +    if test "$have_qt5_libs" != "yes"; then
 +        if test "$explicit_languages" = "1"; then
 +        AC_MSG_ERROR([[
 +***
 +*** Qt5 (Qt5Core) is required for Qt binding.
 +***]])
 +        else
 +           AC_MSG_WARN([[
 +***
 +*** Qt5 (Qt5Core) not found Qt Binding will be disabled.
 +***]])
 +        fi
 +    else
 +        enabled_languages=`echo $enabled_languages qt`
 +
 +        AC_CHECK_PROGS([DOXYGEN], [doxygen])
 +        if test -z "$DOXYGEN";
 +            # This is not highlighted becase it's not really important.
 +            then AC_MSG_WARN([Doxygen not found - Qt binding doc will not be built.])
 +        fi
 +    fi
 +fi
 +AM_CONDITIONAL([HAVE_DOXYGEN],
 +               [test -n "$DOXYGEN"])
 +
++# Python bindings.
++LIST_MEMBER("python", $enabled_languages)
++if test "$found" = "1"; then
++    AX_PKG_SWIG
++    if test -z "$SWIG"; then
++        if test "$explicit_languages" = "1"; then
++            die=yes
++            AC_MSG_NOTICE([[
++***
++*** You need SWIG to build the Python bindings.
++***]])
++        else
++            enabled_languages=$(echo $enabled_languages | sed 's/qt//')
++        fi
++    else
++        AM_PATH_PYTHON([3.2])
++        AX_SWIG_PYTHON
++    fi
++fi
++
 +AC_SUBST(ENABLED_LANGUAGES, $enabled_languages)
  
  #
  # Provide information about the build.
@@@ -682,7 -587,33 +702,6 @@@ AC_SUBST(emacs_local_vars_begin, [['Loc
  AC_SUBST(emacs_local_vars_read_only, ['buffer-read-only: t'])
  AC_SUBST(emacs_local_vars_end, ['End:'])
  
 -# Bindings.
 -AC_ARG_ENABLE([python],
 -              AC_HELP_STRING([--enable-python],
 -                             [build the Python3 bindings]),
 -              [enable_python=$enableval],
 -	      [enable_python=auto])
 -AX_PKG_SWIG
 -if test -z "$SWIG"; then
 -  if test $enable_python = yes; then
 -    die=yes
 -    AC_MSG_NOTICE([[
 -***
 -*** You need SWIG to build the Python bindings.
 -***]])
 -  else
 -    enable_python=no
 -  fi
 -else
 -  if test $enable_python = auto; then
 -    enable_python=yes
 -  fi
 -fi
 -if test $enable_python = yes; then
 -  AM_PATH_PYTHON([3.2])
 -  AX_SWIG_PYTHON
 -fi
--
  # Last check.
  die=no
  if test "$have_gpg_error" = "no"; then
@@@ -727,16 -658,8 +746,17 @@@ AC_CONFIG_FILES(Makefile src/Makefil
                  src/versioninfo.rc
                  src/gpgme.h)
  AC_CONFIG_FILES(src/gpgme-config, chmod +x src/gpgme-config)
 -AC_CONFIG_FILES([lang/Makefile lang/cl/Makefile lang/cl/gpgme.asd
 -                 lang/python/Makefile lang/python/tests/Makefile])
 +AC_CONFIG_FILES(lang/cpp/Makefile lang/cpp/src/Makefile)
 +AC_CONFIG_FILES(lang/cpp/src/GpgmeppConfig.cmake.in)
 +AC_CONFIG_FILES(lang/cpp/src/GpgmeppConfigVersion.cmake)
 +AC_CONFIG_FILES(lang/qt/Makefile lang/qt/src/Makefile)
 +AC_CONFIG_FILES(lang/qt/src/QGpgmeConfig.cmake.in)
 +AC_CONFIG_FILES(lang/qt/src/QGpgmeConfigVersion.cmake)
 +AC_CONFIG_FILES(lang/qt/tests/Makefile)
 +AC_CONFIG_FILES([lang/Makefile lang/cl/Makefile lang/cl/gpgme.asd])
 +AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([lang/qt/doc/Doxyfile])])
 +AC_CONFIG_FILES(lang/qt/doc/Makefile)
++AC_CONFIG_FILES([lang/python/Makefile lang/python/tests/Makefile])
  AC_OUTPUT
  
  echo "
diff --cc lang/README
index e1c04f2,559be5f..778c417
--- a/lang/README
+++ b/lang/README
@@@ -10,5 -10,4 +10,6 @@@ sub-directory
  Directory	Language
  
  cl		Common Lisp
- cpp     C++
- qt      Qt-Framework API
 -py3-pyme	Python 3 (port of PyME 0.9.0)
++cpp		C++
++qt		Qt-Framework API
++python		Python 3 (port of PyME 0.9.0)
diff --cc lang/python/COPYING.LESSER
index 0000000,b124cf5..2331e2a
mode 000000,100644..100644
--- a/lang/python/COPYING.LESSER
+++ b/lang/python/COPYING.LESSER
@@@ -1,0 -1,510 +1,508 @@@
+ 
+                   GNU LESSER GENERAL PUBLIC LICENSE
+                        Version 2.1, February 1999
+ 
+  Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+      59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+  Everyone is permitted to copy and distribute verbatim copies
+  of this license document, but changing it is not allowed.
+ 
+ [This is the first released version of the Lesser GPL.  It also counts
+  as the successor of the GNU Library Public License, version 2, hence
+  the version number 2.1.]
+ 
+                             Preamble
+ 
+   The licenses for most software are designed to take away your
+ freedom to share and change it.  By contrast, the GNU General Public
+ Licenses are intended to guarantee your freedom to share and change
+ free software--to make sure the software is free for all its users.
+ 
+   This license, the Lesser General Public License, applies to some
+ specially designated software packages--typically libraries--of the
+ Free Software Foundation and other authors who decide to use it.  You
+ can use it too, but we suggest you first think carefully about whether
+ this license or the ordinary General Public License is the better
+ strategy to use in any particular case, based on the explanations
+ below.
+ 
+   When we speak of free software, we are referring to freedom of use,
+ not price.  Our General Public Licenses are designed to make sure that
+ you have the freedom to distribute copies of free software (and charge
+ for this service if you wish); that you receive source code or can get
+ it if you want it; that you can change the software and use pieces of
+ it in new free programs; and that you are informed that you can do
+ these things.
+ 
+   To protect your rights, we need to make restrictions that forbid
+ distributors to deny you these rights or to ask you to surrender these
+ rights.  These restrictions translate to certain responsibilities for
+ you if you distribute copies of the library or if you modify it.
+ 
+   For example, if you distribute copies of the library, whether gratis
+ or for a fee, you must give the recipients all the rights that we gave
+ you.  You must make sure that they, too, receive or can get the source
+ code.  If you link other code with the library, you must provide
+ complete object files to the recipients, so that they can relink them
+ with the library after making changes to the library and recompiling
+ it.  And you must show them these terms so they know their rights.
+ 
+   We protect your rights with a two-step method: (1) we copyright the
+ library, and (2) we offer you this license, which gives you legal
+ permission to copy, distribute and/or modify the library.
+ 
+   To protect each distributor, we want to make it very clear that
+ there is no warranty for the free library.  Also, if the library is
+ modified by someone else and passed on, the recipients should know
+ that what they have is not the original version, so that the original
+ author's reputation will not be affected by problems that might be
+ introduced by others.
+ 

+   Finally, software patents pose a constant threat to the existence of
+ any free program.  We wish to make sure that a company cannot
+ effectively restrict the users of a free program by obtaining a
+ restrictive license from a patent holder.  Therefore, we insist that
+ any patent license obtained for a version of the library must be
+ consistent with the full freedom of use specified in this license.
+ 
+   Most GNU software, including some libraries, is covered by the
+ ordinary GNU General Public License.  This license, the GNU Lesser
+ General Public License, applies to certain designated libraries, and
+ is quite different from the ordinary General Public License.  We use
+ this license for certain libraries in order to permit linking those
+ libraries into non-free programs.
+ 
+   When a program is linked with a library, whether statically or using
+ a shared library, the combination of the two is legally speaking a
+ combined work, a derivative of the original library.  The ordinary
+ General Public License therefore permits such linking only if the
+ entire combination fits its criteria of freedom.  The Lesser General
+ Public License permits more lax criteria for linking other code with
+ the library.
+ 
+   We call this license the "Lesser" General Public License because it
+ does Less to protect the user's freedom than the ordinary General
+ Public License.  It also provides other free software developers Less
+ of an advantage over competing non-free programs.  These disadvantages
+ are the reason we use the ordinary General Public License for many
+ libraries.  However, the Lesser license provides advantages in certain
+ special circumstances.
+ 
+   For example, on rare occasions, there may be a special need to
+ encourage the widest possible use of a certain library, so that it
+ becomes a de-facto standard.  To achieve this, non-free programs must
+ be allowed to use the library.  A more frequent case is that a free
+ library does the same job as widely used non-free libraries.  In this
+ case, there is little to gain by limiting the free library to free
+ software only, so we use the Lesser General Public License.
+ 
+   In other cases, permission to use a particular library in non-free
+ programs enables a greater number of people to use a large body of
+ free software.  For example, permission to use the GNU C Library in
+ non-free programs enables many more people to use the whole GNU
+ operating system, as well as its variant, the GNU/Linux operating
+ system.
+ 
+   Although the Lesser General Public License is Less protective of the
+ users' freedom, it does ensure that the user of a program that is
+ linked with the Library has the freedom and the wherewithal to run
+ that program using a modified version of the Library.
+ 
+   The precise terms and conditions for copying, distribution and
+ modification follow.  Pay close attention to the difference between a
+ "work based on the library" and a "work that uses the library".  The
+ former contains code derived from the library, whereas the latter must
+ be combined with the library in order to run.
+ 

+                   GNU LESSER GENERAL PUBLIC LICENSE
+    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+ 
+   0. This License Agreement applies to any software library or other
+ program which contains a notice placed by the copyright holder or
+ other authorized party saying it may be distributed under the terms of
+ this Lesser General Public License (also called "this License").
+ Each licensee is addressed as "you".
+ 
+   A "library" means a collection of software functions and/or data
+ prepared so as to be conveniently linked with application programs
+ (which use some of those functions and data) to form executables.
+ 
+   The "Library", below, refers to any such software library or work
+ which has been distributed under these terms.  A "work based on the
+ Library" means either the Library or any derivative work under
+ copyright law: that is to say, a work containing the Library or a
+ portion of it, either verbatim or with modifications and/or translated
+ straightforwardly into another language.  (Hereinafter, translation is
+ included without limitation in the term "modification".)
+ 
+   "Source code" for a work means the preferred form of the work for
+ making modifications to it.  For a library, complete source code means
+ all the source code for all modules it contains, plus any associated
+ interface definition files, plus the scripts used to control
+ compilation and installation of the library.
+ 
+   Activities other than copying, distribution and modification are not
+ covered by this License; they are outside its scope.  The act of
+ running a program using the Library is not restricted, and output from
+ such a program is covered only if its contents constitute a work based
+ on the Library (independent of the use of the Library in a tool for
+ writing it).  Whether that is true depends on what the Library does
+ and what the program that uses the Library does.
+ 
+   1. You may copy and distribute verbatim copies of the Library's
+ complete source code as you receive it, in any medium, provided that
+ you conspicuously and appropriately publish on each copy an
+ appropriate copyright notice and disclaimer of warranty; keep intact
+ all the notices that refer to this License and to the absence of any
+ warranty; and distribute a copy of this License along with the
+ Library.
+ 
+   You may charge a fee for the physical act of transferring a copy,
+ and you may at your option offer warranty protection in exchange for a
+ fee.
+ 

+   2. You may modify your copy or copies of the Library or any portion
+ of it, thus forming a work based on the Library, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:
+ 
+     a) The modified work must itself be a software library.
+ 
+     b) You must cause the files modified to carry prominent notices
+     stating that you changed the files and the date of any change.
+ 
+     c) You must cause the whole of the work to be licensed at no
+     charge to all third parties under the terms of this License.
+ 
+     d) If a facility in the modified Library refers to a function or a
+     table of data to be supplied by an application program that uses
+     the facility, other than as an argument passed when the facility
+     is invoked, then you must make a good faith effort to ensure that,
+     in the event an application does not supply such function or
+     table, the facility still operates, and performs whatever part of
+     its purpose remains meaningful.
+ 
+     (For example, a function in a library to compute square roots has
+     a purpose that is entirely well-defined independent of the
+     application.  Therefore, Subsection 2d requires that any
+     application-supplied function or table used by this function must
+     be optional: if the application does not supply it, the square
+     root function must still compute square roots.)
+ 
+ These requirements apply to the modified work as a whole.  If
+ identifiable sections of that work are not derived from the Library,
+ and can be reasonably considered independent and separate works in
+ themselves, then this License, and its terms, do not apply to those
+ sections when you distribute them as separate works.  But when you
+ distribute the same sections as part of a whole which is a work based
+ on the Library, the distribution of the whole must be on the terms of
+ this License, whose permissions for other licensees extend to the
+ entire whole, and thus to each and every part regardless of who wrote
+ it.
+ 
+ Thus, it is not the intent of this section to claim rights or contest
+ your rights to work written entirely by you; rather, the intent is to
+ exercise the right to control the distribution of derivative or
+ collective works based on the Library.
+ 
+ In addition, mere aggregation of another work not based on the Library
+ with the Library (or with a work based on the Library) on a volume of
+ a storage or distribution medium does not bring the other work under
+ the scope of this License.
+ 
+   3. You may opt to apply the terms of the ordinary GNU General Public
+ License instead of this License to a given copy of the Library.  To do
+ this, you must alter all the notices that refer to this License, so
+ that they refer to the ordinary GNU General Public License, version 2,
+ instead of to this License.  (If a newer version than version 2 of the
+ ordinary GNU General Public License has appeared, then you can specify
+ that version instead if you wish.)  Do not make any other change in
+ these notices.
+ 

+   Once this change is made in a given copy, it is irreversible for
+ that copy, so the ordinary GNU General Public License applies to all
+ subsequent copies and derivative works made from that copy.
+ 
+   This option is useful when you wish to copy part of the code of
+ the Library into a program that is not a library.
+ 
+   4. You may copy and distribute the Library (or a portion or
+ derivative of it, under Section 2) in object code or executable form
+ under the terms of Sections 1 and 2 above provided that you accompany
+ it with the complete corresponding machine-readable source code, which
+ must be distributed under the terms of Sections 1 and 2 above on a
+ medium customarily used for software interchange.
+ 
+   If distribution of object code is made by offering access to copy
+ from a designated place, then offering equivalent access to copy the
+ source code from the same place satisfies the requirement to
+ distribute the source code, even though third parties are not
+ compelled to copy the source along with the object code.
+ 
+   5. A program that contains no derivative of any portion of the
+ Library, but is designed to work with the Library by being compiled or
+ linked with it, is called a "work that uses the Library".  Such a
+ work, in isolation, is not a derivative work of the Library, and
+ therefore falls outside the scope of this License.
+ 
+   However, linking a "work that uses the Library" with the Library
+ creates an executable that is a derivative of the Library (because it
+ contains portions of the Library), rather than a "work that uses the
+ library".  The executable is therefore covered by this License.
+ Section 6 states terms for distribution of such executables.
+ 
+   When a "work that uses the Library" uses material from a header file
+ that is part of the Library, the object code for the work may be a
+ derivative work of the Library even though the source code is not.
+ Whether this is true is especially significant if the work can be
+ linked without the Library, or if the work is itself a library.  The
+ threshold for this to be true is not precisely defined by law.
+ 
+   If such an object file uses only numerical parameters, data
+ structure layouts and accessors, and small macros and small inline
+ functions (ten lines or less in length), then the use of the object
+ file is unrestricted, regardless of whether it is legally a derivative
+ work.  (Executables containing this object code plus portions of the
+ Library will still fall under Section 6.)
+ 
+   Otherwise, if the work is a derivative of the Library, you may
+ distribute the object code for the work under the terms of Section 6.
+ Any executables containing that work also fall under Section 6,
+ whether or not they are linked directly with the Library itself.
+ 

+   6. As an exception to the Sections above, you may also combine or
+ link a "work that uses the Library" with the Library to produce a
+ work containing portions of the Library, and distribute that work
+ under terms of your choice, provided that the terms permit
+ modification of the work for the customer's own use and reverse
+ engineering for debugging such modifications.
+ 
+   You must give prominent notice with each copy of the work that the
+ Library is used in it and that the Library and its use are covered by
+ this License.  You must supply a copy of this License.  If the work
+ during execution displays copyright notices, you must include the
+ copyright notice for the Library among them, as well as a reference
+ directing the user to the copy of this License.  Also, you must do one
+ of these things:
+ 
+     a) Accompany the work with the complete corresponding
+     machine-readable source code for the Library including whatever
+     changes were used in the work (which must be distributed under
+     Sections 1 and 2 above); and, if the work is an executable linked
+     with the Library, with the complete machine-readable "work that
+     uses the Library", as object code and/or source code, so that the
+     user can modify the Library and then relink to produce a modified
+     executable containing the modified Library.  (It is understood
+     that the user who changes the contents of definitions files in the
+     Library will not necessarily be able to recompile the application
+     to use the modified definitions.)
+ 
+     b) Use a suitable shared library mechanism for linking with the
+     Library.  A suitable mechanism is one that (1) uses at run time a
+     copy of the library already present on the user's computer system,
+     rather than copying library functions into the executable, and (2)
+     will operate properly with a modified version of the library, if
+     the user installs one, as long as the modified version is
+     interface-compatible with the version that the work was made with.
+ 
+     c) Accompany the work with a written offer, valid for at least
+     three years, to give the same user the materials specified in
+     Subsection 6a, above, for a charge no more than the cost of
+     performing this distribution.
+ 
+     d) If distribution of the work is made by offering access to copy
+     from a designated place, offer equivalent access to copy the above
+     specified materials from the same place.
+ 
+     e) Verify that the user has already received a copy of these
+     materials or that you have already sent this user a copy.
+ 
+   For an executable, the required form of the "work that uses the
+ Library" must include any data and utility programs needed for
+ reproducing the executable from it.  However, as a special exception,
+ the materials to be distributed need not include anything that is
+ normally distributed (in either source or binary form) with the major
+ components (compiler, kernel, and so on) of the operating system on
+ which the executable runs, unless that component itself accompanies
+ the executable.
+ 
+   It may happen that this requirement contradicts the license
+ restrictions of other proprietary libraries that do not normally
+ accompany the operating system.  Such a contradiction means you cannot
+ use both them and the Library together in an executable that you
+ distribute.
+ 

+   7. You may place library facilities that are a work based on the
+ Library side-by-side in a single library together with other library
+ facilities not covered by this License, and distribute such a combined
+ library, provided that the separate distribution of the work based on
+ the Library and of the other library facilities is otherwise
+ permitted, and provided that you do these two things:
+ 
+     a) Accompany the combined library with a copy of the same work
+     based on the Library, uncombined with any other library
+     facilities.  This must be distributed under the terms of the
+     Sections above.
+ 
+     b) Give prominent notice with the combined library of the fact
+     that part of it is a work based on the Library, and explaining
+     where to find the accompanying uncombined form of the same work.
+ 
+   8. You may not copy, modify, sublicense, link with, or distribute
+ the Library except as expressly provided under this License.  Any
+ attempt otherwise to copy, modify, sublicense, link with, or
+ distribute the Library is void, and will automatically terminate your
+ rights under this License.  However, parties who have received copies,
+ or rights, from you under this License will not have their licenses
+ terminated so long as such parties remain in full compliance.
+ 
+   9. You are not required to accept this License, since you have not
+ signed it.  However, nothing else grants you permission to modify or
+ distribute the Library or its derivative works.  These actions are
+ prohibited by law if you do not accept this License.  Therefore, by
+ modifying or distributing the Library (or any work based on the
+ Library), you indicate your acceptance of this License to do so, and
+ all its terms and conditions for copying, distributing or modifying
+ the Library or works based on it.
+ 
+   10. Each time you redistribute the Library (or any work based on the
+ Library), the recipient automatically receives a license from the
+ original licensor to copy, distribute, link with or modify the Library
+ subject to these terms and conditions.  You may not impose any further
+ restrictions on the recipients' exercise of the rights granted herein.
+ You are not responsible for enforcing compliance by third parties with
+ this License.
+ 

+   11. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent issues),
+ conditions are imposed on you (whether by court order, agreement or
+ otherwise) that contradict the conditions of this License, they do not
+ excuse you from the conditions of this License.  If you cannot
+ distribute so as to satisfy simultaneously your obligations under this
+ License and any other pertinent obligations, then as a consequence you
+ may not distribute the Library at all.  For example, if a patent
+ license would not permit royalty-free redistribution of the Library by
+ all those who receive copies directly or indirectly through you, then
+ the only way you could satisfy both it and this License would be to
+ refrain entirely from distribution of the Library.
+ 
+ If any portion of this section is held invalid or unenforceable under
+ any particular circumstance, the balance of the section is intended to
+ apply, and the section as a whole is intended to apply in other
+ circumstances.
+ 
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of any
+ such claims; this section has the sole purpose of protecting the
+ integrity of the free software distribution system which is
+ implemented by public license practices.  Many people have made
+ generous contributions to the wide range of software distributed
+ through that system in reliance on consistent application of that
+ system; it is up to the author/donor to decide if he or she is willing
+ to distribute software through any other system and a licensee cannot
+ impose that choice.
+ 
+ This section is intended to make thoroughly clear what is believed to
+ be a consequence of the rest of this License.
+ 
+   12. If the distribution and/or use of the Library is restricted in
+ certain countries either by patents or by copyrighted interfaces, the
+ original copyright holder who places the Library under this License
+ may add an explicit geographical distribution limitation excluding those
+ countries, so that distribution is permitted only in or among
+ countries not thus excluded.  In such case, this License incorporates
+ the limitation as if written in the body of this License.
+ 
+   13. The Free Software Foundation may publish revised and/or new
+ versions of the Lesser General Public License from time to time.
+ Such new versions will be similar in spirit to the present version,
+ but may differ in detail to address new problems or concerns.
+ 
+ Each version is given a distinguishing version number.  If the Library
+ specifies a version number of this License which applies to it and
+ "any later version", you have the option of following the terms and
+ conditions either of that version or of any later version published by
+ the Free Software Foundation.  If the Library does not specify a
+ license version number, you may choose any version ever published by
+ the Free Software Foundation.
+ 

+   14. If you wish to incorporate parts of the Library into other free
+ programs whose distribution conditions are incompatible with these,
+ write to the author to ask for permission.  For software which is
+ copyrighted by the Free Software Foundation, write to the Free
+ Software Foundation; we sometimes make exceptions for this.  Our
+ decision will be guided by the two goals of preserving the free status
+ of all derivatives of our free software and of promoting the sharing
+ and reuse of software generally.
+ 
+                             NO WARRANTY
+ 
+   15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+ WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+ EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+ OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+ KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+ LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+ THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+ 
+   16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+ AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+ FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+ CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+ LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+ RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+ FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGES.
+ 
+                      END OF TERMS AND CONDITIONS
+ 

+            How to Apply These Terms to Your New Libraries
+ 
+   If you develop a new library, and you want it to be of the greatest
+ possible use to the public, we recommend making it free software that
+ everyone can redistribute and change.  You can do so by permitting
+ redistribution under these terms (or, alternatively, under the terms
+ of the ordinary General Public License).
+ 
+   To apply these terms, attach the following notices to the library.
+ It is safest to attach them to the start of each source file to most
+ effectively convey the exclusion of warranty; and each file should
+ have at least the "copyright" line and a pointer to where the full
+ notice is found.
+ 
+ 
+     <one line to give the library's name and a brief idea of what it does.>
+     Copyright (C) <year>  <name of author>
+ 
+     This library is free software; you can redistribute it and/or
+     modify it under the terms of the GNU Lesser General Public
+     License as published by the Free Software Foundation; either
+     version 2.1 of the License, or (at your option) any later version.
+ 
+     This library 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 GNU
+     Lesser General Public License for more details.
+ 
+     You should have received a copy of the GNU Lesser General Public
+     License along with this library; if not, write to the Free Software
+     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ 
+ Also add information on how to contact you by electronic and paper mail.
+ 
+ You should also get your employer (if you work as a programmer) or
+ your school, if any, to sign a "copyright disclaimer" for the library,
+ if necessary.  Here is a sample; alter the names:
+ 
+   Yoyodyne, Inc., hereby disclaims all copyright interest in the
+   library `Frob' (a library for tweaking knobs) written by James
+   Random Hacker.
+ 
+   <signature of Ty Coon>, 1 April 1990
+   Ty Coon, President of Vice
+ 
+ That's all there is to it!
 -
 -
diff --cc lang/python/MANIFEST.in
index 0000000,45671b6..f079538
mode 000000,100644..100644
--- a/lang/python/MANIFEST.in
+++ b/lang/python/MANIFEST.in
@@@ -1,0 -1,6 +1,5 @@@
+ recursive-include examples *.py *.glade *.gladep
+ include gpgme-h-clean.py gpgme.i
+ include helpers.c helpers.h
+ include Makefile
+ recursive-include pyme *.py
 -
diff --cc lang/python/docs/Short_History.rst
index 0000000,839570e..126c121
mode 000000,100644..100644
--- a/lang/python/docs/Short_History.rst
+++ b/lang/python/docs/Short_History.rst
@@@ -1,0 -1,57 +1,55 @@@
+ =======================
+ A Short History of PyME
+ =======================
+ 
+ In 2002 John Goerzen released PyME; Python bindings for the GPGME
+ module which utilised the current release of Python of the time
+ (Python 2.2 or 2.3) and SWIG.  Shortly after creating it and ensuring
+ it worked he stopped supporting it, though left his work available on
+ his Gopher site.
+ 
+ A couple of years later the project was picked up by Igor Belyi and
+ actively developed and maintained by him from 2004 to 2008.  Igor's
+ whereabouts at the time of this document's creation are unknown, but
+ the current authors do hope he is well.  We're assuming (or hoping)
+ that life did what life does and made continuing untenable.
+ 
+ In 2014 Martin Albrecht wanted to patch a bug in the PyME code and
+ discovered the absence of Igor.  Following a discussion on the PyME
+ mailing list he became the new maintainer for PyME, releasing version
+ 0.9.0 in May of that year.  He remains the maintainer of the original
+ PyME release in Python 2.6 and 2.7 (available via PyPI).
+ 
+ In 2015 Ben McGinnes approached Martin about a Python 3 version, while
+ investigating how complex a task this would be the task ended up being
+ completed.  A subsequent discussion with Werner Koch led to the
+ decision to fold the Python 3 port back into the original GPGME
+ release in the languages subdirectory for non-C bindings.  Ben is the
+ maintainer of the Python 3 port within GPGME.
+ 
+ 
+ ---------------------
+ The Annoyances of Git
+ ---------------------
+ 
+ As anyone who has ever worked with git knows, submodules are horrible
+ way to deal with pretty much anything.  In the interests of avoiding
+ migraines, that is being skipped with addition of PyME to GPGME.
+ Instead the files will be added to the subdirectory, along with a copy
+ of the entire git log up to that point as a separate file within the
+ docs directory (old-commits.log).  As the log for PyME is nearly 100KB
+ and the log for GPGME is approximately 1MB, this would cause
+ considerable bloat, as well as some confusion, should the two be
+ merged.  Hence the unfortunate, but necessary, step to simply move the
+ files.  A regular repository version will be maintained should it be
+ possible to implement this better in the future.
+ 
+ 
+ ------------------
+ The Perils of PyPI
+ ------------------
+ 
+ At the current time the Python 3 fork is not available via PyPI and
+ the pip installer.  The recommended installation method is to follow
+ the instructions in lang/py3-pyme/INSTALL.  This will build the
+ necessary SWIG portions against the installed version of GPGME.
 -
 -
diff --cc lang/python/docs/TODO.rst
index 0000000,7796230..a398ccd
mode 000000,100644..100644
--- a/lang/python/docs/TODO.rst
+++ b/lang/python/docs/TODO.rst
@@@ -1,0 -1,25 +1,23 @@@
+ ===========
+ Stuff To Do
+ ===========
+ 
+ ----------------
+ Working examples
+ ----------------
+ 
+ The examples from the Python 2 code base do not work and it appears
+ that they don't under Python 2 either.  These ought to be replaced or
+ updated with examples from the GPGME documentation.
+ 
+ 
+ -------------
+ Documentation
+ -------------
+ 
+ Currently this appears to be buried in the debian/ directory for some
+ unknown reason, probably pertaining to one of the other developers.
+ Documentation is to be moved to a more appropriate docs/ directory and
+ produced using reST in preparation for inevitable publication by way
+ of Sphinx and the existing infrastructure at readthedocs.org or the
+ projects new home at gnupg.org.
 -
 -
diff --cc lang/python/docs/old-commits.log
index 0000000,0db59a0..93661e3
mode 000000,100644..100644
--- a/lang/python/docs/old-commits.log
+++ b/lang/python/docs/old-commits.log
@@@ -1,0 -1,2445 +1,2445 @@@
+ commit 2145348ec54c6027f2ea20f695de0277e2871405
+ Merge: 348ba88 2036f1a
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Wed May 6 03:04:19 2015 +1000
+ 
+     Merge pull request #4 from Hasimir/master
+ 
+     history
+ 
+ commit 2036f1a0a670a0561993e195c458059220b36114
+ Merge: dbabf0c 348ba88
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Wed May 6 02:57:44 2015 +1000
+ 
+     Merge branch 'master' of github:adversary-org/pyme3
+ 
+ commit dbabf0cf1f2985755c2293b619011832e34faa9c
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Wed May 6 02:52:23 2015 +1000
+ 
+     Added a short history
+ 
+     * A (very) brief summary of the project's history since 2002.
+     * Deals with why the commit log in the GPGME repo does not include the
+       history of PyME.
+     * Mentions that intact git repos will be maintained, but not where they
+       are (one will be on github, another will be in a user directory on
+       playfair.gnupg.org).
+ 
+  docs/Short_History.rst | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++
+  1 file changed, 57 insertions(+)
+ 
+ commit 348ba883424778c711c04ae9b66035ccdb36eb8c
+ Merge: 127d0a5 7c37a27
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Wed May 6 02:21:34 2015 +1000
+ 
+     Merge pull request #3 from Hasimir/master
+ 
+     Version release preparation
+ 
+ commit 7c37a27a6845c58222d4d947c2efbe38e955b612
+ Merge: f692cff 127d0a5
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Wed May 6 02:17:14 2015 +1000
+ 
+     Merge branch 'master' of github:adversary-org/pyme3
+ 
+ commit f692cff50a89c2c61acdbd3d7dd60f5ce3cd15af
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Wed May 6 02:09:44 2015 +1000
+ 
+     TODO update
+ 
+     * Removed reference to GitHub, replaced with impending new home at gnupg.org.
+ 
+  docs/TODO.rst | 4 ++--
+  1 file changed, 2 insertions(+), 2 deletions(-)
+ 
+ commit bd5ccf9e3bfe69fa681613757577e87b72ca08ec
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Wed May 6 02:00:44 2015 +1000
+ 
+     Version bump
+ 
+     * Bumped version number to 0.9.1 to keep it somewhat in line with the
+       existing PyME project, even though there will be some divergence at
+       some point (or even re-merging, depending on how many of the Python 3
+       modifications can be back-ported to the Python 2 version).
+     * Updated the author and copyright information to reflect the two
+       current authors (Martin and I).
+     * Replaced Igor's contact details with mine.
+     * Replaced project home page with the GnuPG one.
+ 
+  pyme/version.py | 16 +++++++++-------
+  1 file changed, 9 insertions(+), 7 deletions(-)
+ 
+ commit ec167512f4ca88d8f6e89e2ae831798c8283b4df
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Wed May 6 01:48:01 2015 +1000
+ 
+     README preparation.
+ 
+     * Changes in preparation for impending move of code to the GnuPG git
+       server as a part of GPGME.
+ 
+  README.rst | 14 +++++++-------
+  1 file changed, 7 insertions(+), 7 deletions(-)
+ 
+ commit 8a48515e884c36b5bdb24a13cb4d2e49f4ee6f17
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Wed May 6 01:43:53 2015 +1000
+ 
+     TODO moved to docs
+ 
+     * As it says.
+ 
+  TODO.rst      | 25 -------------------------
+  docs/TODO.rst | 25 +++++++++++++++++++++++++
+  2 files changed, 25 insertions(+), 25 deletions(-)
+ 
+ commit f968c777472f01f308f6e57eac1740bf5c76c205
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 16:52:13 2015 +1000
+ 
+     Started another TODO file.
+ 
+  TODO.rst | 25 +++++++++++++++++++++++++
+  1 file changed, 25 insertions(+)
+ 
+ commit 127d0a56fa9f7ad1d4fb39d0b529b890a8d67365
+ Merge: db72dea 44837f6
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 14:59:44 2015 +1000
+ 
+     Merge pull request #2 from Hasimir/master
+ 
+     Minor editing.
+ 
+ commit 44837f6e50fc539c86aef1f75a6a3538b02029ea
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 14:56:55 2015 +1000
+ 
+     Minor editing.
+ 
+     * Fixed another URL.
+     * Changed Py3 version's version number to v0.9.1-beta0.
+ 
+  README.rst | 4 ++--
+  1 file changed, 2 insertions(+), 2 deletions(-)
+ 
+ commit db72deaae19c3513391df040bcaf66a88d9213af
+ Merge: db34286 48eb185
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 14:26:11 2015 +1000
+ 
+     Merge pull request #1 from Hasimir/master
+ 
+     Links
+ 
+ commit 48eb1856cb0739cc9f0b9084da9d965e1fc7fddd
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 14:22:30 2015 +1000
+ 
+     Links
+ 
+     * Fixed URLs for authors.
+     * Updated my entry to point to github location.
+     ** I strongly suspect the result of this work will be concurrent
+        projects, so preparing for that eventuality with this repo.
+ 
+  README.rst | 8 ++++----
+  1 file changed, 4 insertions(+), 4 deletions(-)
+ 
+ commit db3428659783f30b9a76204403daedf9fc4cf7cf
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 11:29:00 2015 +1000
+ 
+     Explicit over Implicit ...
+ 
+     ... isn't just for code.
+ 
+     * Removed the 2to3 working directory and its contents.
+     * Made the README.rst file a little more clear that this branch is for
+       Python 3 (set Python 3.2 as a fairly arbitrary requirement for the
+       moment, but will probably raise this to 3.3).
+ 
+  2to3/2to3-output-remaining.log |  60 ---
+  2to3/2to3-output-setup.log     |  35 --
+  2to3/2to3-output.log           | 950 -----------------------------------------
+  README.rst                     |  10 +-
+  4 files changed, 7 insertions(+), 1048 deletions(-)
+ 
+ commit 3edf07a4ba8a86af3a33246234d6e133074862af
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 11:19:41 2015 +1000
+ 
+     Added authors.
+ 
+     * In alphabetical order.
+     * Mine will need updating once Martin and I have decided what to do
+       regarding the two main branches.
+ 
+  README.rst | 12 ++++++++++++
+  1 file changed, 12 insertions(+)
+ 
+ commit 811eb14b53e8856312d99f46b77215f7f9bd672c
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 10:23:00 2015 +1000
+ 
+     Docs and other things.
+ 
+     * Now able to import pyme.core without error, indicates port process is
+       successful.
+     * Code is *not* compatible with the Python 2 version.
+     * Will need to consider making this a parallel project with the master
+       branch.
+     * Got rid of the .org TODO file.
+     * Changed the README to use the reST file extension since it's full of
+       reST anyway.
+ 
+  2to3/TODO.org |  5 -----
+  README.rst    | 32 ++++++++++++++++++++++++++++++++
+  README.txt    | 32 --------------------------------
+  3 files changed, 32 insertions(+), 37 deletions(-)
+ 
+ commit 79e784bdcce1de6f7856921b5431044c62c6f015
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 10:18:40 2015 +1000
+ 
+     Fixed another implicit import by making it explicit.  Hopefully this is the last one.
+ 
+  pyme/util.py | 2 +-
+  1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+ commit 2b52b46ccda3e7abcc50eed0745062259d698661
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 10:16:01 2015 +1000
+ 
+     Fixed another implicit import by making it explicit.
+ 
+  pyme/errors.py | 2 +-
+  1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+ commit 409c8fd565e21f23cd41daaeffc867e6d23a0863
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 10:08:22 2015 +1000
+ 
+     Bytes vs. Unicode
+ 
+     * Trying PyBytes instead of PyUnicode.
+ 
+  gpgme.i   | 14 +++++++-------
+  helpers.c |  8 ++++----
+  2 files changed, 11 insertions(+), 11 deletions(-)
+ 
+ commit d8164aa2ae98bf8c807c16e2d9be12c5fbea7cfd
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 09:22:58 2015 +1000
+ 
+     String to Unicode
+ 
+     * Replaced all instances of PyString with PyUnicode (and hoping there's
+       no byte data in there).
+ 
+  gpgme.i   | 14 +++++++-------
+  helpers.c |  8 ++++----
+  2 files changed, 11 insertions(+), 11 deletions(-)
+ 
+ commit bd99b7865656e559b17c419c6b64b412a22c6c44
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 09:17:06 2015 +1000
+ 
+     PyInt_AsLong
+ 
+     * Replaced all instances of PyInt with PyLong, as per C API docs.
+ 
+  gpgme.i   | 4 ++--
+  helpers.c | 8 ++++----
+  2 files changed, 6 insertions(+), 6 deletions(-)
+ 
+ commit 3c91e2ccf8ca788b51e3308e292c6b64888fdb15
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 05:59:36 2015 +1000
+ 
+     Import correction
+ 
+     * Once pygpgme.py is generated and moved, it will be in the right
+       directory for the explicit "from . import pygpgme" to be correct.
+ 
+  pyme/core.py | 2 +-
+  1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+ commit 23a49e7070812ff1ce138d8d4cc46d0b80328897
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 05:38:29 2015 +1000
+ 
+     The -py3 flag.
+ 
+  Makefile | 2 +-
+  1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+ commit b1549587d6db5e33081b9c20f75d1348a1d25938
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 05:01:42 2015 +1000
+ 
+     Fixed indentation - 4.
+ 
+  pyme/core.py | 2 +-
+  1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+ commit a685142ce46761ee6f5176e90717176e38e0d24f
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 05:00:16 2015 +1000
+ 
+     Fixed indentation - 3.
+ 
+  pyme/core.py | 5 ++---
+  1 file changed, 2 insertions(+), 3 deletions(-)
+ 
+ commit 488a70b490cc64eb1c47d2483cb2f4079c6767f7
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 04:53:21 2015 +1000
+ 
+     Pet Peeve
+ 
+     def pet_peeve(self):
+         peeve = print("people who don't press return after a colon!")
+ 
+     FFS!
+ 
+  pyme/core.py | 5 +++--
+  1 file changed, 3 insertions(+), 2 deletions(-)
+ 
+ commit a5d38eb47d64bb17bb609fe594dae2aca480bac9
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 04:47:54 2015 +1000
+ 
+     Fixed indentation - 2.
+ 
+  pyme/core.py | 2 +-
+  1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+ commit 476a207f732b8559abb1ea3c23147c0e34804730
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 04:46:01 2015 +1000
+ 
+     Fixed indentation.
+ 
+  pyme/core.py | 4 ++--
+  1 file changed, 2 insertions(+), 2 deletions(-)
+ 
+ commit 0572900eba9bcd9b0283c7d8e022e8972f06f9f8
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 04:43:49 2015 +1000
+ 
+     Replaced all tabs with 4 spaces.
+ 
+  pyme/core.py | 18 +++++++++---------
+  1 file changed, 9 insertions(+), 9 deletions(-)
+ 
+ commit 78c0b7677e94ce1e11b8cdb833a9064527187330
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 04:39:07 2015 +1000
+ 
+     SWIG flags in the wrong place.
+ 
+  Makefile | 4 ++--
+  1 file changed, 2 insertions(+), 2 deletions(-)
+ 
+ commit dfa7f2589963494a8f89277560d8c1116604a3c8
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 04:35:09 2015 +1000
+ 
+     Fixed subprocess call for swig (again).
+ 
+  setup.py | 2 +-
+  1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+ commit 249bfd8c714dcda53127b99b6cc8a6c7c4a99f20
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 04:32:40 2015 +1000
+ 
+     Fixed subprocess call for swig.
+ 
+  setup.py | 2 +-
+  1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+ commit 6fd7e719cf4c975f466ceb39835db7007df36fb2
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sun May 3 03:51:48 2015 +1000
+ 
+     Linking swig to py3
+ 
+     * Changed the swig invocations to run with the -python -py3 flags explicitly.
+ 
+  Makefile | 4 ++--
+  setup.py | 2 +-
+  2 files changed, 3 insertions(+), 3 deletions(-)
+ 
+ commit 7a6b584f50ed6ddc8617a642185eea1f24ff791a
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sat May 2 11:12:00 2015 +1000
+ 
+     String fun
+ 
+     * streamlined confdata details, including decoding strom binary to string.
+ 
+  setup.py | 4 +---
+  1 file changed, 1 insertion(+), 3 deletions(-)
+ 
+ commit f7fd3f270592021a95a8f779bfe85ac18f4e390b
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sat May 2 10:46:59 2015 +1000
+ 
+     Open File
+ 
+     * Removed deprecated file() and replaced with open().
+ 
+  examples/PyGtkGpgKeys.py | 2 +-
+  examples/pygpa.py        | 6 +++---
+  gpgme-h-clean.py         | 2 +-
+  3 files changed, 5 insertions(+), 5 deletions(-)
+ 
+ commit 4227d486f9558015e7e548d71085e58e1b50ec08
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sat May 2 10:36:15 2015 +1000
+ 
+     print() fix
+ 
+     * Makefile includes a python print, changed from statement to function.
+ 
+  Makefile | 2 +-
+  1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+ commit 406f7f2567b701502186fe0a325dc2a3491ff7f8
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sat May 2 10:28:42 2015 +1000
+ 
+     Updated Makefile
+ 
+     * set make to use python3 instead.
+     * This will mean a successful port may need to be maintained seperately
+       from the original python2 code instead of merged, but ought to be able
+       to share most things.  So maybe merge with separated make files or a
+       pre-make script to set python2 or python3 prior to building ... decide
+       later, after it works.
+ 
+  Makefile | 6 +++---
+  1 file changed, 3 insertions(+), 3 deletions(-)
+ 
+ commit 90b3efa5b193d37e08dc9b4ee766ba9ebc9412af
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sat May 2 10:15:20 2015 +1000
+ 
+     Env and a little license issue
+ 
+     * Updated all the /usr/bin/env paths to point to python3.
+     * Also fixed the hard coded /usr/bin/python paths.
+     * Updated part of setup.py which gave the impression this package was
+       only licensed under the GPL (it's actually licensed under the LGPL as
+       well, essentially the same dual licensing as the GPGME library).
+ 
+  examples/PyGtkGpgKeys.py   | 2 +-
+  examples/delkey.py         | 2 +-
+  examples/encrypt-to-all.py | 2 +-
+  examples/exportimport.py   | 2 +-
+  examples/genkey.py         | 2 +-
+  examples/inter-edit.py     | 2 +-
+  examples/pygpa.py          | 2 +-
+  examples/sign.py           | 2 +-
+  examples/signverify.py     | 2 +-
+  examples/simple.py         | 2 +-
+  examples/t-edit.py         | 2 +-
+  examples/testCMSgetkey.py  | 2 +-
+  examples/verifydetails.py  | 2 +-
+  gpgme-h-clean.py           | 2 +-
+  setup.py                   | 4 ++--
+  15 files changed, 16 insertions(+), 16 deletions(-)
+ 
+ commit 1a4b55dbccd2774344352e579130bf494bc5fa4b
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sat May 2 08:50:54 2015 +1000
+ 
+     Removed extraneous files.
+ 
+     * The two .bak files.
+ 
+  pyme/errors.py.bak |  46 ---------------------
+  setup.py.bak       | 116 -----------------------------------------------------
+  2 files changed, 162 deletions(-)
+ 
+ commit 208879d4f2a6d0514c3f8ee2fc0da8bba42350de
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sat May 2 08:19:37 2015 +1000
+ 
+     Added TODO.org
+ 
+     * TODO list in Emacs org-mode.
+     * Will eventually be removed along with this entire directory when the
+       porting process is complete.
+ 
+  2to3/TODO.org | 5 +++++
+  1 file changed, 5 insertions(+)
+ 
+ commit 1548bf201059638675c5387c6f124d4b703363a9
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sat May 2 07:58:40 2015 +1000
+ 
+     2to3 conversion of remaining files
+ 
+     * Ran the extended version against all the unmodified python files.
+     * Only pyme/errors.py required additional work.
+ 
+  2to3/2to3-output-remaining.log | 60 ++++++++++++++++++++++++++++++++++++++++++
+  pyme/errors.py                 |  2 +-
+  pyme/errors.py.bak             | 46 ++++++++++++++++++++++++++++++++
+  3 files changed, 107 insertions(+), 1 deletion(-)
+ 
+ commit 1230650bc6bbe4c14d1284f7877aa932f3e86eb4
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Sat May 2 07:50:39 2015 +1000
+ 
+     2to3 conversion of setup.py
+ 
+     * Ran extended 2to3 command to produce python 3 code for setup.py.
+     * Effectively testing for what to run against the other originally
+       unmodified py2 files.
+ 
+  2to3/2to3-output-setup.log |  35 ++++++++++++++
+  setup.py                   |   7 ++-
+  setup.py.bak               | 116 +++++++++++++++++++++++++++++++++++++++++++++
+  3 files changed, 154 insertions(+), 4 deletions(-)
+ 
+ commit edad44955f59aa879e95a369591717fb19eec6b7
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Fri May 1 21:50:07 2015 +1000
+ 
+     Removing 2to3 generated .bak files.
+ 
+     * Not really needed with a real VCS, but couldn't hurt to have them for
+       a couple of revisions.  ;)
+ 
+  examples/PyGtkGpgKeys.py.bak           |  663 ---------------
+  examples/encrypt-to-all.py.bak         |   65 --
+  examples/exportimport.py.bak           |   75 --
+  examples/genkey.py.bak                 |   45 -
+  examples/inter-edit.py.bak             |   57 --
+  examples/pygpa.py.bak                  | 1457 --------------------------------
+  examples/sign.py.bak                   |   31 -
+  examples/signverify.py.bak             |   78 --
+  examples/simple.py.bak                 |   52 --
+  examples/t-edit.py.bak                 |   59 --
+  examples/testCMSgetkey.py.bak          |   45 -
+  examples/verifydetails.py.bak          |  100 ---
+  gpgme-h-clean.py.bak                   |   42 -
+  pyme/callbacks.py.bak                  |   47 --
+  pyme/constants/data/__init__.py.bak    |    4 -
+  pyme/constants/keylist/__init__.py.bak |    4 -
+  pyme/constants/sig/__init__.py.bak     |    4 -
+  pyme/core.py.bak                       |  463 ----------
+  pyme/util.py.bak                       |   72 --
+  pyme/version.py.bak                    |   41 -
+  20 files changed, 3404 deletions(-)
+ 
+ commit 1cfc3c969f885ed191610bffbbd60ac23fdd349e
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Fri May 1 21:45:50 2015 +1000
+ 
+     2to3 conversion log
+ 
+     * The output of the command to convert the code from Python 2 to 3.
+     * Note: this contains the list of files which were not modified and
+       which will or may need to be modified.
+ 
+  2to3/2to3-output.log | 950 +++++++++++++++++++++++++++++++++++++++++++++++++++
+  1 file changed, 950 insertions(+)
+ 
+ commit 078f6cf878aa62d12704fab424198a613a24cc8c
+ Author: Ben McGinnes <ben at adversary.org>
+ Date:   Fri May 1 21:36:58 2015 +1000
+ 
+     2to3 conversion of pyme master
+ 
+     * Branch from commit 459f3eca659b4949e394c4a032d9ce2053e6c721
+     * Ran this: or x in `find . | egrep .py$` ; do 2to3 -w $x; done ;
+     * Multiple files not modified, will record elsewhere (see next commit).
+ 
+  examples/PyGtkGpgKeys.py               |   10 +-
+  examples/PyGtkGpgKeys.py.bak           |  663 +++++++++++++++
+  examples/encrypt-to-all.py             |   12 +-
+  examples/encrypt-to-all.py.bak         |   65 ++
+  examples/exportimport.py               |   20 +-
+  examples/exportimport.py.bak           |   75 ++
+  examples/genkey.py                     |    2 +-
+  examples/genkey.py.bak                 |   45 +
+  examples/inter-edit.py                 |    8 +-
+  examples/inter-edit.py.bak             |   57 ++
+  examples/pygpa.py                      |   40 +-
+  examples/pygpa.py.bak                  | 1457 ++++++++++++++++++++++++++++++++
+  examples/sign.py                       |    2 +-
+  examples/sign.py.bak                   |   31 +
+  examples/signverify.py                 |   18 +-
+  examples/signverify.py.bak             |   78 ++
+  examples/simple.py                     |    8 +-
+  examples/simple.py.bak                 |   52 ++
+  examples/t-edit.py                     |   12 +-
+  examples/t-edit.py.bak                 |   59 ++
+  examples/testCMSgetkey.py              |    8 +-
+  examples/testCMSgetkey.py.bak          |   45 +
+  examples/verifydetails.py              |   34 +-
+  examples/verifydetails.py.bak          |  100 +++
+  gpgme-h-clean.py                       |    2 +-
+  gpgme-h-clean.py.bak                   |   42 +
+  pyme/callbacks.py                      |    6 +-
+  pyme/callbacks.py.bak                  |   47 ++
+  pyme/constants/data/__init__.py        |    2 +-
+  pyme/constants/data/__init__.py.bak    |    4 +
+  pyme/constants/keylist/__init__.py     |    2 +-
+  pyme/constants/keylist/__init__.py.bak |    4 +
+  pyme/constants/sig/__init__.py         |    2 +-
+  pyme/constants/sig/__init__.py.bak     |    4 +
+  pyme/core.py                           |   26 +-
+  pyme/core.py.bak                       |  463 ++++++++++
+  pyme/util.py                           |    6 +-
+  pyme/util.py.bak                       |   72 ++
+  pyme/version.py                        |    2 +-
+  pyme/version.py.bak                    |   41 +
+  40 files changed, 3515 insertions(+), 111 deletions(-)
+ 
+ commit 459f3eca659b4949e394c4a032d9ce2053e6c721
+ Merge: c5966ab dae7f14
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Wed Jul 9 10:48:33 2014 +0100
+ 
+     Merged in jerrykan/pyme/fix_setup_26 (pull request #1)
+ 
+     Provide support for using setup.py with Python v2.6
+ 
+ commit dae7f14a54e6c2bde0ad4da7308cc7fc0d0c0469
+ Author: John Kristensen <john.kristensen at dpipwe.tas.gov.au>
+ Date:   Wed Jul 9 15:54:39 2014 +1000
+ 
+     Provide support for using setup.py with Python v2.6
+ 
+     The setup.py script uses subprocess.check_output() which was introduced
+     in Python v2.7. The equivalent functionality can be achieved without
+     adding much extra code and provide support for Python v2.6.
+ 
+  setup.py | 4 +++-
+  1 file changed, 3 insertions(+), 1 deletion(-)
+ 
+ commit c5966abec9d772b3922d32650da288fd50a217be
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Thu May 15 19:43:00 2014 +0100
+ 
+     README.txt in ReST, including headlines
+ 
+  README.txt | 8 ++++++--
+  1 file changed, 6 insertions(+), 2 deletions(-)
+ 
+ commit 43ee8c6f34fa9b6d3975aa6ea60b3d4a741fa721
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Thu May 15 19:37:15 2014 +0100
+ 
+     README.txt in ReST
+ 
+  README.txt | 25 +++++++++++++------------
+  1 file changed, 13 insertions(+), 12 deletions(-)
+ 
+ commit f71a369484cba8801df23ccc5842335fa496c0df
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Thu May 15 19:28:12 2014 +0100
+ 
+     added MANIFEST.in and README.txt (instead of .md)
+ 
+  MANIFEST.in |  6 ++++++
+  README.md   | 27 ---------------------------
+  README.txt  | 27 +++++++++++++++++++++++++++
+  3 files changed, 33 insertions(+), 27 deletions(-)
+ 
+ commit d0d6755229f920b0bed043e9c2731de2d57c096c
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Tue May 13 09:52:44 2014 +0100
+ 
+     added mailing list to README
+ 
+  README.md | 19 ++++++++++++++++---
+  1 file changed, 16 insertions(+), 3 deletions(-)
+ 
+ commit 30ca60ddf92df684de261cb24c83c68089be0adc
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Sun May 11 13:34:28 2014 +0100
+ 
+     we don't need a separate out of date ChangeLog file
+ 
+  ChangeLog | 802 --------------------------------------------------------------
+  1 file changed, 802 deletions(-)
+ 
+ commit 8263f1a6d38fdb7f5f3dd5c7e28f83caa7528a08
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Sun May 11 13:32:31 2014 +0100
+ 
+     adding README.md
+ 
+  README.md | 14 ++++++++++++++
+  1 file changed, 14 insertions(+)
+ 
+ commit 3fc71b47e9e14b0b984801c28d722723baa4b406
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Sat May 10 15:43:06 2014 +0100
+ 
+     ValueError -> RuntimeError
+ 
+  setup.py | 4 ++--
+  1 file changed, 2 insertions(+), 2 deletions(-)
+ 
+ commit eec432abea56296b9fa36aac0d10926a2335b739
+ Merge: eea6537 d2738b3
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Sat May 10 15:41:02 2014 +0100
+ 
+     Merge branch 'master' of bitbucket.org:malb/pyme
+ 
+     Conflicts:
 -    	setup.py
++        setup.py
+ 
+ commit eea6537921061b4dcfc54e00a99d3fa110e71433
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Sat May 10 15:39:51 2014 +0100
+ 
+     check for swig
+ 
+  setup.py | 8 ++++++++
+  1 file changed, 8 insertions(+)
+ 
+ commit 53867bf9715ee1b4ea873bf5e2fbb7d9740a2b4a
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Sat May 10 15:35:04 2014 +0100
+ 
+     more friendly error message if gpgme is missing
+ 
+  setup.py | 8 +++++++-
+  1 file changed, 7 insertions(+), 1 deletion(-)
+ 
+ commit d2738b35d63b1492d69641c5466103685f2d3a30
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Sat May 10 15:35:04 2014 +0100
+ 
+     more friendly error message if gpgme is missing
+ 
+  setup.py | 8 +++++++-
+  1 file changed, 7 insertions(+), 1 deletion(-)
+ 
+ commit c0b01240becf8ba6cf1d4c1f64b2cb4c056f5163
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Fri May 9 15:20:24 2014 +0100
+ 
+     version number should have three digits
+ 
+  pyme/version.py | 2 +-
+  1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+ commit 6672bb60b9bec60d38e854016c48658b57774578
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Wed May 7 15:11:08 2014 +0100
+ 
+     bump version number for upcoming release
+ 
+  pyme/version.py | 2 +-
+  1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+ commit 7bd6de700f33ca5d1f27bc16ebbd401f21d2e788
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Sat May 3 19:36:25 2014 +0100
+ 
+     bump version number to indicate changes
+ 
+  pyme/version.py | 2 +-
+  1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+ commit 4fb6bd9b3f47c1a343242ac83b326cacd12a136e
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Sat May 3 19:34:07 2014 +0100
+ 
+     pyme instead of pygpgme
+ 
+  setup.py | 2 +-
+  1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+ commit 9548973138d78241a45ccb82333b25f2cf36ce7d
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Sat May 3 19:31:10 2014 +0100
+ 
+     dirty hack to make 'python setup.py install' work
+ 
+  setup.py | 7 ++++---
+  1 file changed, 4 insertions(+), 3 deletions(-)
+ 
+ commit a961d7eab9db478b7e603324bc5d243bd3c84bad
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Sat May 3 19:05:44 2014 +0100
+ 
+     moved everything down to the toplevel directory
+ 
+  COPYING                                 |  340 ++
+  COPYING.LESSER                          |  510 +++
+  ChangeLog                               |  802 +++++
+  INSTALL                                 |   15 +
+  Makefile                                |  104 +
+  debian/README.Debian                    |    6 +
+  debian/changelog                        |   93 +
+  debian/control                          |   34 +
+  debian/copyright                        |   25 +
+  debian/docs                             |    2 +
+  debian/examples                         |    2 +
+  debian/rules                            |   99 +
+  examples/PyGtkGpgKeys.glade             | 1394 ++++++++
+  examples/PyGtkGpgKeys.gladep            |    8 +
+  examples/PyGtkGpgKeys.py                |  663 ++++
+  examples/delkey.py                      |   34 +
+  examples/encrypt-to-all.py              |   65 +
+  examples/exportimport.py                |   75 +
+  examples/genkey.py                      |   45 +
+  examples/inter-edit.py                  |   57 +
+  examples/pygpa.glade                    | 5546 +++++++++++++++++++++++++++++++
+  examples/pygpa.py                       | 1457 ++++++++
+  examples/sign.py                        |   31 +
+  examples/signverify.py                  |   78 +
+  examples/simple.py                      |   52 +
+  examples/t-edit.py                      |   59 +
+  examples/testCMSgetkey.py               |   45 +
+  examples/verifydetails.py               |  100 +
+  gpgme-h-clean.py                        |   42 +
+  gpgme.i                                 |  267 ++
+  helpers.c                               |  154 +
+  helpers.h                               |   36 +
+  pyme/COPYING                            |  340 --
+  pyme/COPYING.LESSER                     |  510 ---
+  pyme/ChangeLog                          |  802 -----
+  pyme/INSTALL                            |   15 -
+  pyme/Makefile                           |  104 -
+  pyme/__init__.py                        |  137 +
+  pyme/callbacks.py                       |   47 +
+  pyme/constants/__init__.py              |    7 +
+  pyme/constants/data/__init__.py         |    4 +
+  pyme/constants/data/encoding.py         |   20 +
+  pyme/constants/event.py                 |   20 +
+  pyme/constants/import.py                |   20 +
+  pyme/constants/keylist/__init__.py      |    4 +
+  pyme/constants/keylist/mode.py          |   20 +
+  pyme/constants/md.py                    |   20 +
+  pyme/constants/pk.py                    |   20 +
+  pyme/constants/protocol.py              |   20 +
+  pyme/constants/sig/__init__.py          |    4 +
+  pyme/constants/sig/mode.py              |   20 +
+  pyme/constants/sigsum.py                |   20 +
+  pyme/constants/status.py                |   20 +
+  pyme/constants/validity.py              |   20 +
+  pyme/core.py                            |  463 +++
+  pyme/debian/README.Debian               |    6 -
+  pyme/debian/changelog                   |   93 -
+  pyme/debian/control                     |   34 -
+  pyme/debian/copyright                   |   25 -
+  pyme/debian/docs                        |    2 -
+  pyme/debian/examples                    |    2 -
+  pyme/debian/rules                       |   99 -
+  pyme/errors.py                          |   46 +
+  pyme/examples/PyGtkGpgKeys.glade        | 1394 --------
+  pyme/examples/PyGtkGpgKeys.gladep       |    8 -
+  pyme/examples/PyGtkGpgKeys.py           |  663 ----
+  pyme/examples/delkey.py                 |   34 -
+  pyme/examples/encrypt-to-all.py         |   65 -
+  pyme/examples/exportimport.py           |   75 -
+  pyme/examples/genkey.py                 |   45 -
+  pyme/examples/inter-edit.py             |   57 -
+  pyme/examples/pygpa.glade               | 5546 -------------------------------
+  pyme/examples/pygpa.py                  | 1457 --------
+  pyme/examples/sign.py                   |   31 -
+  pyme/examples/signverify.py             |   78 -
+  pyme/examples/simple.py                 |   52 -
+  pyme/examples/t-edit.py                 |   59 -
+  pyme/examples/testCMSgetkey.py          |   45 -
+  pyme/examples/verifydetails.py          |  100 -
+  pyme/gpgme-h-clean.py                   |   42 -
+  pyme/gpgme.i                            |  267 --
+  pyme/helpers.c                          |  154 -
+  pyme/helpers.h                          |   36 -
+  pyme/pyme/__init__.py                   |  137 -
+  pyme/pyme/callbacks.py                  |   47 -
+  pyme/pyme/constants/__init__.py         |    7 -
+  pyme/pyme/constants/data/__init__.py    |    4 -
+  pyme/pyme/constants/data/encoding.py    |   20 -
+  pyme/pyme/constants/event.py            |   20 -
+  pyme/pyme/constants/import.py           |   20 -
+  pyme/pyme/constants/keylist/__init__.py |    4 -
+  pyme/pyme/constants/keylist/mode.py     |   20 -
+  pyme/pyme/constants/md.py               |   20 -
+  pyme/pyme/constants/pk.py               |   20 -
+  pyme/pyme/constants/protocol.py         |   20 -
+  pyme/pyme/constants/sig/__init__.py     |    4 -
+  pyme/pyme/constants/sig/mode.py         |   20 -
+  pyme/pyme/constants/sigsum.py           |   20 -
+  pyme/pyme/constants/status.py           |   20 -
+  pyme/pyme/constants/validity.py         |   20 -
+  pyme/pyme/core.py                       |  463 ---
+  pyme/pyme/errors.py                     |   46 -
+  pyme/pyme/util.py                       |   72 -
+  pyme/pyme/version.py                    |   41 -
+  pyme/setup.py                           |   99 -
+  pyme/util.py                            |   72 +
+  pyme/version.py                         |   41 +
+  setup.py                                |   99 +
+  108 files changed, 13384 insertions(+), 13384 deletions(-)
+ 
+ commit 8148cdd424c434e833ce427612ea8c89abc6e41c
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Sat May 3 18:58:52 2014 +0100
+ 
+     removing pyme-web
+ 
+  pyme-web/Makefile                                  |  15 -
+  pyme-web/default.css                               |  37 --
+  pyme-web/doc/gpgme/ASCII-Armor.html                |  57 ---
+  pyme-web/doc/gpgme/Advanced-Key-Editing.html       |  98 ----
+  pyme-web/doc/gpgme/Algorithms.html                 |  47 --
+  pyme-web/doc/gpgme/Building-the-Source.html        |  82 ----
+  .../doc/gpgme/Callback-Based-Data-Buffers.html     | 148 ------
+  pyme-web/doc/gpgme/Cancellation.html               |  67 ---
+  pyme-web/doc/gpgme/Concept-Index.html              | 186 -------
+  pyme-web/doc/gpgme/Context-Attributes.html         |  52 --
+  pyme-web/doc/gpgme/Contexts.html                   |  61 ---
+  pyme-web/doc/gpgme/Creating-Contexts.html          |  49 --
+  pyme-web/doc/gpgme/Creating-Data-Buffers.html      |  47 --
+  pyme-web/doc/gpgme/Creating-a-Signature.html       | 143 ------
+  pyme-web/doc/gpgme/Crypto-Engine.html              |  79 ---
+  pyme-web/doc/gpgme/Crypto-Operations.html          |  67 ---
+  .../doc/gpgme/Cryptographic-Message-Syntax.html    |  42 --
+  .../doc/gpgme/Data-Buffer-I_002fO-Operations.html  | 104 ----
+  pyme-web/doc/gpgme/Data-Buffer-Meta_002dData.html  | 100 ----
+  pyme-web/doc/gpgme/Decrypt-and-Verify.html         |  79 ---
+  pyme-web/doc/gpgme/Decrypt.html                    | 123 -----
+  pyme-web/doc/gpgme/Deleting-Keys.html              |  67 ---
+  pyme-web/doc/gpgme/Destroying-Contexts.html        |  46 --
+  pyme-web/doc/gpgme/Destroying-Data-Buffers.html    |  70 ---
+  pyme-web/doc/gpgme/Encrypt.html                    |  45 --
+  pyme-web/doc/gpgme/Encrypting-a-Plaintext.html     | 147 ------
+  pyme-web/doc/gpgme/Engine-Configuration.html       |  65 ---
+  pyme-web/doc/gpgme/Engine-Information.html         | 119 -----
+  pyme-web/doc/gpgme/Engine-Version-Check.html       |  48 --
+  pyme-web/doc/gpgme/Error-Codes.html                | 133 -----
+  pyme-web/doc/gpgme/Error-Handling.html             |  72 ---
+  pyme-web/doc/gpgme/Error-Sources.html              |  89 ----
+  pyme-web/doc/gpgme/Error-Strings.html              |  80 ---
+  pyme-web/doc/gpgme/Error-Values.html               | 159 ------
+  pyme-web/doc/gpgme/Exchanging-Data.html            |  58 ---
+  pyme-web/doc/gpgme/Exporting-Keys.html             | 101 ----
+  pyme-web/doc/gpgme/Features.html                   |  59 ---
+  pyme-web/doc/gpgme/File-Based-Data-Buffers.html    |  74 ---
+  pyme-web/doc/gpgme/Function-and-Data-Index.html    | 229 ---------
+  pyme-web/doc/gpgme/Generating-Keys.html            | 144 ------
+  pyme-web/doc/gpgme/Getting-Started.html            |  55 ---
+  pyme-web/doc/gpgme/Hash-Algorithms.html            |  59 ---
+  pyme-web/doc/gpgme/Header.html                     |  53 --
+  .../doc/gpgme/I_002fO-Callback-Example-GDK.html    |  85 ----
+  .../gpgme/I_002fO-Callback-Example-GTK_002b.html   |  86 ----
+  .../doc/gpgme/I_002fO-Callback-Example-Qt.html     |  99 ----
+  pyme-web/doc/gpgme/I_002fO-Callback-Example.html   | 259 ----------
+  pyme-web/doc/gpgme/I_002fO-Callback-Interface.html | 142 ------
+  pyme-web/doc/gpgme/Importing-Keys.html             | 171 -------
+  pyme-web/doc/gpgme/Included-Certificates.html      |  70 ---
+  pyme-web/doc/gpgme/Information-About-Keys.html     | 207 --------
+  .../doc/gpgme/Information-About-Trust-Items.html   |  75 ---
+  pyme-web/doc/gpgme/Introduction.html               |  53 --
+  pyme-web/doc/gpgme/Key-Listing-Mode.html           |  99 ----
+  pyme-web/doc/gpgme/Key-Management.html             | 260 ----------
+  pyme-web/doc/gpgme/Key-Signatures.html             | 130 -----
+  .../doc/gpgme/Largefile-Support-_0028LFS_0029.html | 110 -----
+  pyme-web/doc/gpgme/Library-Copying.html            | 542 ---------------------
+  pyme-web/doc/gpgme/Library-Version-Check.html      |  97 ----
+  pyme-web/doc/gpgme/Listing-Keys.html               | 204 --------
+  pyme-web/doc/gpgme/Listing-Trust-Items.html        |  88 ----
+  pyme-web/doc/gpgme/Locale.html                     |  69 ---
+  pyme-web/doc/gpgme/Manipulating-Data-Buffers.html  |  45 --
+  pyme-web/doc/gpgme/Manipulating-Keys.html          |  63 ---
+  pyme-web/doc/gpgme/Manipulating-Trust-Items.html   |  62 ---
+  pyme-web/doc/gpgme/Memory-Based-Data-Buffers.html  | 107 ----
+  pyme-web/doc/gpgme/Multi-Threading.html            |  93 ----
+  pyme-web/doc/gpgme/OpenPGP.html                    |  44 --
+  pyme-web/doc/gpgme/Overview.html                   |  57 ---
+  pyme-web/doc/gpgme/Passphrase-Callback.html        | 101 ----
+  pyme-web/doc/gpgme/Preparation.html                |  54 --
+  pyme-web/doc/gpgme/Progress-Meter-Callback.html    |  80 ---
+  pyme-web/doc/gpgme/Protocol-Selection.html         |  60 ---
+  pyme-web/doc/gpgme/Protocols-and-Engines.html      |  82 ----
+  pyme-web/doc/gpgme/Public-Key-Algorithms.html      |  74 ---
+  .../doc/gpgme/Registering-I_002fO-Callbacks.html   |  81 ---
+  pyme-web/doc/gpgme/Run-Control.html                |  53 --
+  pyme-web/doc/gpgme/Selecting-Signers.html          |  64 ---
+  pyme-web/doc/gpgme/Sign.html                       |  50 --
+  pyme-web/doc/gpgme/Signal-Handling.html            |  61 ---
+  pyme-web/doc/gpgme/Signature-Notation-Data.html    |  85 ----
+  pyme-web/doc/gpgme/Text-Mode.html                  |  63 ---
+  pyme-web/doc/gpgme/Trust-Item-Management.html      |  68 ---
+  pyme-web/doc/gpgme/Using-Automake.html             |  74 ---
+  pyme-web/doc/gpgme/Using-External-Event-Loops.html |  74 ---
+  pyme-web/doc/gpgme/Using-Libtool.html              |  44 --
+  pyme-web/doc/gpgme/Verify.html                     | 492 -------------------
+  pyme-web/doc/gpgme/Waiting-For-Completion.html     |  77 ---
+  pyme-web/doc/gpgme/index.html                      | 169 -------
+  pyme-web/doc/pyme/index.html                       | 164 -------
+  pyme-web/doc/pyme/pyme.callbacks.html              |  42 --
+  .../doc/pyme/pyme.constants.data.encoding.html     |  48 --
+  pyme-web/doc/pyme/pyme.constants.data.html         |  29 --
+  pyme-web/doc/pyme/pyme.constants.event.html        |  48 --
+  pyme-web/doc/pyme/pyme.constants.html              |  39 --
+  pyme-web/doc/pyme/pyme.constants.import.html       |  49 --
+  pyme-web/doc/pyme/pyme.constants.keylist.html      |  29 --
+  pyme-web/doc/pyme/pyme.constants.keylist.mode.html |  49 --
+  pyme-web/doc/pyme/pyme.constants.md.html           |  58 ---
+  pyme-web/doc/pyme/pyme.constants.pk.html           |  50 --
+  pyme-web/doc/pyme/pyme.constants.protocol.html     |  48 --
+  pyme-web/doc/pyme/pyme.constants.sig.html          |  29 --
+  pyme-web/doc/pyme/pyme.constants.sig.mode.html     |  47 --
+  pyme-web/doc/pyme/pyme.constants.sigsum.html       |  55 ---
+  pyme-web/doc/pyme/pyme.constants.status.html       | 126 -----
+  pyme-web/doc/pyme/pyme.constants.validity.html     |  50 --
+  pyme-web/doc/pyme/pyme.core.html                   | 277 -----------
+  pyme-web/doc/pyme/pyme.errors.html                 |  82 ----
+  pyme-web/doc/pyme/pyme.html                        | 164 -------
+  pyme-web/doc/pyme/pyme.util.html                   |  81 ---
+  pyme-web/doc/pyme/pyme.version.html                |  37 --
+  pyme-web/index.html                                |  72 ---
+  112 files changed, 10551 deletions(-)
+ 
+ commit 684d95feb7e10e538a56fb1b27f1456111bacb60
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Mon Jan 6 17:44:20 2014 +0100
+ 
+     fixing op_export_keys()
+ 
+     the conversion of gpgme_key_t [] was restricted to gpgme_key_t [] with the
+     name recv, i.e. only the use-cases of encryption were covered.
+ 
+     see: http://sourceforge.net/mailarchive/forum.php?forum_name=pyme-help&max_rows=25&style=nested&viewmonth=201309
+ 
+  pyme/gpgme.i | 6 +++---
+  1 file changed, 3 insertions(+), 3 deletions(-)
+ 
+ commit 658d23b95110d21eeb50abf4e74701a667521a88
+ Author: Martin Albrecht <martinralbrecht at googlemail.com>
+ Date:   Mon Jan 6 17:41:33 2014 +0100
+ 
+     deleting CVSROOT
+ 
+  CVSROOT/checkoutlist | 13 -------------
+  CVSROOT/commitinfo   | 15 ---------------
+  CVSROOT/config       | 21 ---------------------
+  CVSROOT/cvswrappers  | 19 -------------------
+  CVSROOT/editinfo     | 21 ---------------------
+  CVSROOT/loginfo      | 26 --------------------------
+  CVSROOT/modules      | 26 --------------------------
+  CVSROOT/notify       | 12 ------------
+  CVSROOT/rcsinfo      | 13 -------------
+  CVSROOT/taginfo      | 20 --------------------
+  CVSROOT/verifymsg    | 21 ---------------------
+  11 files changed, 207 deletions(-)
+ 
+ commit 576b555499c094c4786d42de9e59aa9826009b89
+ Author: convert-repo <devnull at localhost>
+ Date:   Mon Jan 6 15:22:44 2014 +0000
+ 
+     update tags
+ 
+ commit 2dcf0c5b702eb5a18c66ff1e42a72eaa7427af1d
+ Author: belyi <devnull at localhost>
+ Date:   Wed Nov 26 02:38:33 2008 +0000
+ 
+     Move Windows specific fix from helpers.c to helpers.h so that it works
+     for edit callback as well as for the passphrase one.
+ 
+  pyme/helpers.c | 5 -----
+  pyme/helpers.h | 5 +++++
+  2 files changed, 5 insertions(+), 5 deletions(-)
+ 
+ commit 42a035f2ef62470fea7a7f8ee33a1297fa90a603
+ Author: belyi <devnull at localhost>
+ Date:   Mon Nov 24 21:44:30 2008 +0000
+ 
+     Update the way build directives are constructed on MinGW to have a bit
+     more robust. Update PyMe build version to 0.8.1 in version.py
+ 
+  pyme/pyme/version.py |  2 +-
+  pyme/setup.py        | 10 ++++++++--
+  2 files changed, 9 insertions(+), 3 deletions(-)
+ 
+ commit 3aaa20fbcba17066c9ffd580f5209946022793a2
+ Author: belyi <devnull at localhost>
+ Date:   Mon Nov 24 06:57:11 2008 +0000
+ 
+     Update changelog
+ 
+  pyme/debian/changelog | 5 ++++-
+  1 file changed, 4 insertions(+), 1 deletion(-)
+ 
+ commit 689ff46b2550547e3883f809a6dc40c22c3e137e
+ Author: belyi <devnull at localhost>
+ Date:   Mon Nov 24 06:50:41 2008 +0000
+ 
+     Fix hang problem on Windows when password is written to a filehandle.
+     Fix the way path is constructed on MinGW platform.
+ 
+  pyme/helpers.c | 5 +++++
+  pyme/setup.py  | 4 ++--
+  2 files changed, 7 insertions(+), 2 deletions(-)
+ 
+ commit 852a60d541d66cb56f40378182b976fd87a02c46
+ Author: belyi <devnull at localhost>
+ Date:   Sun Nov 23 04:31:31 2008 +0000
+ 
+     Add Bernard's example testCMSgetkey.py and his updates for
+     verifydetails.py
+ 
+  pyme/examples/testCMSgetkey.py | 45 ++++++++++++++++++++++++++++++++++++++++++
+  pyme/examples/verifydetails.py | 43 +++++++++++++++++++++++++++++-----------
+  2 files changed, 77 insertions(+), 11 deletions(-)
+ 
+ commit f080527d9184f3360f0a8ef6136b9a188d8e7d2a
+ Author: belyi <devnull at localhost>
+ Date:   Thu May 29 18:29:37 2008 +0000
+ 
+     Remove debian packaging for python2.3 since it is removed from both
+     testing and unstable dists.
+     Update docs build target to have correct PYTHONPATH set.
+ 
+  pyme/Makefile         | 2 +-
+  pyme/debian/changelog | 4 +++-
+  pyme/debian/control   | 4 ++--
+  pyme/debian/rules     | 2 --
+  4 files changed, 6 insertions(+), 6 deletions(-)
+ 
+ commit c25d133fcbadf3c7f6e655586b4a05d6e3cf6f0b
+ Author: belyi <devnull at localhost>
+ Date:   Thu Apr 3 13:37:12 2008 +0000
+ 
+     Forgot to adjust mainText margin. Doing it now.
+ 
+  pyme-web/default.css | 2 +-
+  1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+ commit 897286a54a32336d060cd03305cdecb7905f34f1
+ Author: belyi <devnull at localhost>
+ Date:   Thu Apr 3 13:00:11 2008 +0000
+ 
+     Fix an error in default.css and make index.html "Standards Compliant".
+ 
+  pyme-web/default.css | 2 +-
+  pyme-web/index.html  | 7 ++++---
+  2 files changed, 5 insertions(+), 4 deletions(-)
+ 
+ commit 4e049212bd214449cc0ba1ce06e00782783f328a
+ Author: belyi <devnull at localhost>
+ Date:   Thu Apr 3 12:38:42 2008 +0000
+ 
+     Adjust spacing between links.
+ 
+  pyme-web/default.css | 9 ++++++---
+  1 file changed, 6 insertions(+), 3 deletions(-)
+ 
+ commit cb2bddfbd77483b1deb14f2eab0715a03dd33fcd
+ Author: belyi <devnull at localhost>
+ Date:   Wed Apr 2 22:50:21 2008 +0000
+ 
+     Make style a big more IE friendly.
+ 
+  pyme-web/default.css | 15 +++++++++++----
+  1 file changed, 11 insertions(+), 4 deletions(-)
+ 
+ commit ad66f0a1bb01b46baac328e9fee439b35a60c232
+ Author: belyi <devnull at localhost>
+ Date:   Wed Apr 2 11:58:32 2008 +0000
+ 
+     Make GPGME documentation a bit more web friendly on the index.html page.
+ 
+  pyme-web/doc/gpgme/Algorithms.html              |   2 +-
+  pyme-web/doc/gpgme/Concept-Index.html           |   2 +-
+  pyme-web/doc/gpgme/Contexts.html                |   2 +-
+  pyme-web/doc/gpgme/Error-Handling.html          |   2 +-
+  pyme-web/doc/gpgme/Exchanging-Data.html         |   2 +-
+  pyme-web/doc/gpgme/Function-and-Data-Index.html |   2 +-
+  pyme-web/doc/gpgme/Introduction.html            |   4 +-
+  pyme-web/doc/gpgme/Library-Copying.html         |   2 +-
+  pyme-web/doc/gpgme/Preparation.html             |   2 +-
+  pyme-web/doc/gpgme/Protocols-and-Engines.html   |   2 +-
+  pyme-web/doc/gpgme/index.html                   | 229 +-----------------------
+  11 files changed, 12 insertions(+), 239 deletions(-)
+ 
+ commit 4f57c0ccb049d4442e7732e2d1d05dabffd2a21d
+ Author: belyi <devnull at localhost>
+ Date:   Wed Apr 2 06:12:57 2008 +0000
+ 
+     Add missing core.set_locale() to set default locale for contexts.
+ 
+  pyme/debian/changelog | 2 +-
+  pyme/pyme/core.py     | 4 ++++
+  2 files changed, 5 insertions(+), 1 deletion(-)
+ 
+ commit acf7ead3dea8590cf9fe86b67bb125837ad6ed4f
+ Author: belyi <devnull at localhost>
+ Date:   Wed Apr 2 05:50:24 2008 +0000
+ 
+     Avoid leaks caused by keys.
+     Add set/get methods for engine info.
+ 
+  pyme/debian/changelog | 10 ++++++++++
+  pyme/pyme/core.py     | 24 ++++++++++++++++++++++++
+  2 files changed, 34 insertions(+)
+ 
+ commit df4a2fb518adbb6420d95ce74af212c87abff7e7
+ Author: belyi <devnull at localhost>
+ Date:   Wed Apr 2 04:04:41 2008 +0000
+ 
+     Update index.html to reflect new versions on the web.
+ 
+  pyme-web/Makefile             | 3 ++-
+  pyme-web/doc/gpgme/index.html | 4 +---
+  pyme-web/index.html           | 4 ++--
+  3 files changed, 5 insertions(+), 6 deletions(-)
+ 
+ commit bd3ffc9bdf98d6aafde6b689c6c8215fa468612d
+ Author: belyi <devnull at localhost>
+ Date:   Wed Apr 2 04:01:04 2008 +0000
+ 
+     Update PyMe documentation to match 0.8.0 version of the package.
+ 
+  pyme-web/doc/pyme/index.html                       | 14 ++++-----
+  pyme-web/doc/pyme/pyme.constants.keylist.mode.html |  1 +
+  pyme-web/doc/pyme/pyme.constants.protocol.html     |  4 ++-
+  pyme-web/doc/pyme/pyme.constants.status.html       |  9 ++++++
+  pyme-web/doc/pyme/pyme.core.html                   | 36 ++++++++++++++++++----
+  pyme-web/doc/pyme/pyme.errors.html                 |  8 ++---
+  pyme-web/doc/pyme/pyme.html                        | 14 ++++-----
+  pyme-web/doc/pyme/pyme.util.html                   | 17 ++++++++--
+  pyme-web/doc/pyme/pyme.version.html                | 14 ++++-----
+  9 files changed, 82 insertions(+), 35 deletions(-)
+ 
+ commit 6973a69a317608a0d0661590d701f4e3f3a21b32
+ Author: belyi <devnull at localhost>
+ Date:   Wed Apr 2 02:35:24 2008 +0000
+ 
+     Have a fix for Contents being put onto 'Function and Data Index' page.
+ 
+  pyme-web/doc/gpgme/Concept-Index.html           |   2 +-
+  pyme-web/doc/gpgme/Function-and-Data-Index.html | 153 +----------------------
+  pyme-web/doc/gpgme/index.html                   | 154 +++++++++++++++++++++++-
+  3 files changed, 155 insertions(+), 154 deletions(-)
+ 
+ commit 086315964cbc2abad1187f306dcb9c72ac3257f3
+ Author: belyi <devnull at localhost>
+ Date:   Wed Apr 2 01:00:29 2008 +0000
+ 
+     Update GPGME documentation. It's for v1.1.6 now.
+ 
+  pyme-web/doc/gpgme/ASCII-Armor.html                |  57 ++
+  pyme-web/doc/gpgme/Advanced-Key-Editing.html       |  98 +++
+  pyme-web/doc/gpgme/Algorithms.html                 |  47 ++
+  pyme-web/doc/gpgme/Building-the-Source.html        |  82 +++
+  .../doc/gpgme/Callback-Based-Data-Buffers.html     | 148 +++++
+  pyme-web/doc/gpgme/Cancellation.html               |  67 ++
+  pyme-web/doc/gpgme/Concept-Index.html              | 186 ++++++
+  pyme-web/doc/gpgme/Context-Attributes.html         |  52 ++
+  pyme-web/doc/gpgme/Contexts.html                   |  61 ++
+  pyme-web/doc/gpgme/Creating-Contexts.html          |  49 ++
+  pyme-web/doc/gpgme/Creating-Data-Buffers.html      |  47 ++
+  pyme-web/doc/gpgme/Creating-a-Signature.html       | 143 +++++
+  pyme-web/doc/gpgme/Crypto-Engine.html              |  79 +++
+  pyme-web/doc/gpgme/Crypto-Operations.html          |  67 ++
+  .../doc/gpgme/Cryptographic-Message-Syntax.html    |  42 ++
+  .../doc/gpgme/Data-Buffer-I_002fO-Operations.html  | 104 ++++
+  pyme-web/doc/gpgme/Data-Buffer-Meta_002dData.html  | 100 +++
+  pyme-web/doc/gpgme/Decrypt-and-Verify.html         |  79 +++
+  pyme-web/doc/gpgme/Decrypt.html                    | 123 ++++
+  pyme-web/doc/gpgme/Deleting-Keys.html              |  67 ++
+  pyme-web/doc/gpgme/Destroying-Contexts.html        |  46 ++
+  pyme-web/doc/gpgme/Destroying-Data-Buffers.html    |  70 +++
+  pyme-web/doc/gpgme/Encrypt.html                    |  45 ++
+  pyme-web/doc/gpgme/Encrypting-a-Plaintext.html     | 147 +++++
+  pyme-web/doc/gpgme/Engine-Configuration.html       |  65 ++
+  pyme-web/doc/gpgme/Engine-Information.html         | 119 ++++
+  pyme-web/doc/gpgme/Engine-Version-Check.html       |  48 ++
+  pyme-web/doc/gpgme/Error-Codes.html                | 133 ++++
+  pyme-web/doc/gpgme/Error-Handling.html             |  72 +++
+  pyme-web/doc/gpgme/Error-Sources.html              |  89 +++
+  pyme-web/doc/gpgme/Error-Strings.html              |  80 +++
+  pyme-web/doc/gpgme/Error-Values.html               | 159 +++++
+  pyme-web/doc/gpgme/Exchanging-Data.html            |  58 ++
+  pyme-web/doc/gpgme/Exporting-Keys.html             | 101 +++
+  pyme-web/doc/gpgme/Features.html                   |  59 ++
+  pyme-web/doc/gpgme/File-Based-Data-Buffers.html    |  74 +++
+  pyme-web/doc/gpgme/Function-and-Data-Index.html    | 380 ++++++++++++
+  pyme-web/doc/gpgme/Generating-Keys.html            | 144 +++++
+  pyme-web/doc/gpgme/Getting-Started.html            |  55 ++
+  pyme-web/doc/gpgme/Hash-Algorithms.html            |  59 ++
+  pyme-web/doc/gpgme/Header.html                     |  53 ++
+  .../doc/gpgme/I_002fO-Callback-Example-GDK.html    |  85 +++
+  .../gpgme/I_002fO-Callback-Example-GTK_002b.html   |  86 +++
+  .../doc/gpgme/I_002fO-Callback-Example-Qt.html     |  99 +++
+  pyme-web/doc/gpgme/I_002fO-Callback-Example.html   | 259 ++++++++
+  pyme-web/doc/gpgme/I_002fO-Callback-Interface.html | 142 +++++
+  pyme-web/doc/gpgme/Importing-Keys.html             | 171 +++++
+  pyme-web/doc/gpgme/Included-Certificates.html      |  70 +++
+  pyme-web/doc/gpgme/Information-About-Keys.html     | 207 +++++++
+  .../doc/gpgme/Information-About-Trust-Items.html   |  75 +++
+  pyme-web/doc/gpgme/Introduction.html               |  53 ++
+  pyme-web/doc/gpgme/Key-Listing-Mode.html           |  99 +++
+  pyme-web/doc/gpgme/Key-Management.html             | 260 ++++++++
+  pyme-web/doc/gpgme/Key-Signatures.html             | 130 ++++
+  .../doc/gpgme/Largefile-Support-_0028LFS_0029.html | 110 ++++
+  pyme-web/doc/gpgme/Library-Copying.html            | 542 ++++++++++++++++
+  pyme-web/doc/gpgme/Library-Version-Check.html      |  97 +++
+  pyme-web/doc/gpgme/Listing-Keys.html               | 204 ++++++
+  pyme-web/doc/gpgme/Listing-Trust-Items.html        |  88 +++
+  pyme-web/doc/gpgme/Locale.html                     |  69 +++
+  pyme-web/doc/gpgme/Manipulating-Data-Buffers.html  |  45 ++
+  pyme-web/doc/gpgme/Manipulating-Keys.html          |  63 ++
+  pyme-web/doc/gpgme/Manipulating-Trust-Items.html   |  62 ++
+  pyme-web/doc/gpgme/Memory-Based-Data-Buffers.html  | 107 ++++
+  pyme-web/doc/gpgme/Multi-Threading.html            |  93 +++
+  pyme-web/doc/gpgme/OpenPGP.html                    |  44 ++
+  pyme-web/doc/gpgme/Overview.html                   |  57 ++
+  pyme-web/doc/gpgme/Passphrase-Callback.html        | 101 +++
+  pyme-web/doc/gpgme/Preparation.html                |  54 ++
+  pyme-web/doc/gpgme/Progress-Meter-Callback.html    |  80 +++
+  pyme-web/doc/gpgme/Protocol-Selection.html         |  60 ++
+  pyme-web/doc/gpgme/Protocols-and-Engines.html      |  82 +++
+  pyme-web/doc/gpgme/Public-Key-Algorithms.html      |  74 +++
+  .../doc/gpgme/Registering-I_002fO-Callbacks.html   |  81 +++
+  pyme-web/doc/gpgme/Run-Control.html                |  53 ++
+  pyme-web/doc/gpgme/Selecting-Signers.html          |  64 ++
+  pyme-web/doc/gpgme/Sign.html                       |  50 ++
+  pyme-web/doc/gpgme/Signal-Handling.html            |  61 ++
+  pyme-web/doc/gpgme/Signature-Notation-Data.html    |  85 +++
+  pyme-web/doc/gpgme/Text-Mode.html                  |  63 ++
+  pyme-web/doc/gpgme/Trust-Item-Management.html      |  68 ++
+  pyme-web/doc/gpgme/Using-Automake.html             |  74 +++
+  pyme-web/doc/gpgme/Using-External-Event-Loops.html |  74 +++
+  pyme-web/doc/gpgme/Using-Libtool.html              |  44 ++
+  pyme-web/doc/gpgme/Verify.html                     | 492 +++++++++++++++
+  pyme-web/doc/gpgme/Waiting-For-Completion.html     |  77 +++
+  pyme-web/doc/gpgme/gpgme.html                      | 251 --------
+  pyme-web/doc/gpgme/gpgme_1.html                    |  76 ---
+  pyme-web/doc/gpgme/gpgme_10.html                   |  61 --
+  pyme-web/doc/gpgme/gpgme_11.html                   | 130 ----
+  pyme-web/doc/gpgme/gpgme_12.html                   |  82 ---
+  pyme-web/doc/gpgme/gpgme_13.html                   | 130 ----
+  pyme-web/doc/gpgme/gpgme_14.html                   | 108 ----
+  pyme-web/doc/gpgme/gpgme_15.html                   |  69 ---
+  pyme-web/doc/gpgme/gpgme_16.html                   | 169 -----
+  pyme-web/doc/gpgme/gpgme_17.html                   |  63 --
+  pyme-web/doc/gpgme/gpgme_18.html                   |  63 --
+  pyme-web/doc/gpgme/gpgme_19.html                   |  66 --
+  pyme-web/doc/gpgme/gpgme_2.html                    |  79 ---
+  pyme-web/doc/gpgme/gpgme_20.html                   | 120 ----
+  pyme-web/doc/gpgme/gpgme_21.html                   | 102 ---
+  pyme-web/doc/gpgme/gpgme_22.html                   | 108 ----
+  pyme-web/doc/gpgme/gpgme_23.html                   | 237 -------
+  pyme-web/doc/gpgme/gpgme_24.html                   | 154 -----
+  pyme-web/doc/gpgme/gpgme_25.html                   | 248 --------
+  pyme-web/doc/gpgme/gpgme_26.html                   | 107 ----
+  pyme-web/doc/gpgme/gpgme_27.html                   |  80 ---
+  pyme-web/doc/gpgme/gpgme_28.html                   |  67 --
+  pyme-web/doc/gpgme/gpgme_29.html                   | 164 -----
+  pyme-web/doc/gpgme/gpgme_3.html                    |  86 ---
+  pyme-web/doc/gpgme/gpgme_30.html                   | 106 ----
+  pyme-web/doc/gpgme/gpgme_31.html                   | 232 -------
+  pyme-web/doc/gpgme/gpgme_32.html                   |  85 ---
+  pyme-web/doc/gpgme/gpgme_33.html                   | 223 -------
+  pyme-web/doc/gpgme/gpgme_34.html                   |  83 ---
+  pyme-web/doc/gpgme/gpgme_35.html                   |  70 ---
+  pyme-web/doc/gpgme/gpgme_36.html                   |  63 --
+  pyme-web/doc/gpgme/gpgme_37.html                   |  66 --
+  pyme-web/doc/gpgme/gpgme_38.html                   |  86 ---
+  pyme-web/doc/gpgme/gpgme_39.html                   |  79 ---
+  pyme-web/doc/gpgme/gpgme_4.html                    |  83 ---
+  pyme-web/doc/gpgme/gpgme_40.html                   |  89 ---
+  pyme-web/doc/gpgme/gpgme_41.html                   |  99 ---
+  pyme-web/doc/gpgme/gpgme_42.html                   | 144 -----
+  pyme-web/doc/gpgme/gpgme_43.html                   | 152 -----
+  pyme-web/doc/gpgme/gpgme_44.html                   | 112 ----
+  pyme-web/doc/gpgme/gpgme_45.html                   | 101 ---
+  pyme-web/doc/gpgme/gpgme_46.html                   | 459 --------------
+  pyme-web/doc/gpgme/gpgme_47.html                   | 292 ---------
+  pyme-web/doc/gpgme/gpgme_48.html                   | 363 -----------
+  pyme-web/doc/gpgme/gpgme_49.html                   | 209 -------
+  pyme-web/doc/gpgme/gpgme_5.html                    |  74 ---
+  pyme-web/doc/gpgme/gpgme_50.html                   |  88 ---
+  pyme-web/doc/gpgme/gpgme_51.html                   | 208 -------
+  pyme-web/doc/gpgme/gpgme_52.html                   | 154 -----
+  pyme-web/doc/gpgme/gpgme_53.html                   | 291 ---------
+  pyme-web/doc/gpgme/gpgme_54.html                   |  91 ---
+  pyme-web/doc/gpgme/gpgme_55.html                   | 107 ----
+  pyme-web/doc/gpgme/gpgme_56.html                   | 140 -----
+  pyme-web/doc/gpgme/gpgme_57.html                   | 106 ----
+  pyme-web/doc/gpgme/gpgme_58.html                   |  89 ---
+  pyme-web/doc/gpgme/gpgme_59.html                   |  97 ---
+  pyme-web/doc/gpgme/gpgme_6.html                    |  77 ---
+  pyme-web/doc/gpgme/gpgme_60.html                   | 142 -----
+  pyme-web/doc/gpgme/gpgme_61.html                   | 626 -------------------
+  pyme-web/doc/gpgme/gpgme_62.html                   | 107 ----
+  pyme-web/doc/gpgme/gpgme_63.html                   |  67 --
+  pyme-web/doc/gpgme/gpgme_64.html                   |  95 ---
+  pyme-web/doc/gpgme/gpgme_65.html                   | 233 -------
+  pyme-web/doc/gpgme/gpgme_66.html                   |  65 --
+  pyme-web/doc/gpgme/gpgme_67.html                   | 220 -------
+  pyme-web/doc/gpgme/gpgme_68.html                   |  75 ---
+  pyme-web/doc/gpgme/gpgme_69.html                   | 119 ----
+  pyme-web/doc/gpgme/gpgme_7.html                    | 123 ----
+  pyme-web/doc/gpgme/gpgme_70.html                   | 107 ----
+  pyme-web/doc/gpgme/gpgme_71.html                   | 218 -------
+  pyme-web/doc/gpgme/gpgme_72.html                   | 134 ----
+  pyme-web/doc/gpgme/gpgme_73.html                   | 299 ---------
+  pyme-web/doc/gpgme/gpgme_74.html                   | 103 ----
+  pyme-web/doc/gpgme/gpgme_75.html                   | 104 ----
+  pyme-web/doc/gpgme/gpgme_76.html                   | 118 ----
+  pyme-web/doc/gpgme/gpgme_77.html                   |  95 ---
+  pyme-web/doc/gpgme/gpgme_78.html                   |  71 ---
+  pyme-web/doc/gpgme/gpgme_79.html                   | 686 ---------------------
+  pyme-web/doc/gpgme/gpgme_8.html                    | 155 -----
+  pyme-web/doc/gpgme/gpgme_80.html                   | 120 ----
+  pyme-web/doc/gpgme/gpgme_81.html                   | 278 ---------
+  pyme-web/doc/gpgme/gpgme_82.html                   | 272 --------
+  pyme-web/doc/gpgme/gpgme_83.html                   | 180 ------
+  pyme-web/doc/gpgme/gpgme_84.html                   |  99 ---
+  pyme-web/doc/gpgme/gpgme_9.html                    | 104 ----
+  pyme-web/doc/gpgme/gpgme_abt.html                  | 206 -------
+  pyme-web/doc/gpgme/gpgme_fot.html                  |  53 --
+  pyme-web/doc/gpgme/gpgme_ovr.html                  |  68 --
+  pyme-web/doc/gpgme/gpgme_toc.html                  | 247 --------
+  pyme-web/doc/gpgme/index.html                      | 497 ++++++++-------
+  176 files changed, 9054 insertions(+), 13378 deletions(-)
+ 
+ commit 163c1053dc761682f5a4231da163bdd0ff7162d7
+ Author: belyi <devnull at localhost>
+ Date:   Tue Apr 1 21:14:29 2008 +0000
+ 
+     Update Home page to be a bit more visitor friendly.
+ 
+  pyme-web/Makefile    |  2 +-
+  pyme-web/default.css | 27 ++++++++++++++++++++
+  pyme-web/index.html  | 70 +++++++++++++++++++++++++++++++++++-----------------
+  3 files changed, 75 insertions(+), 24 deletions(-)
+ 
+ commit 05db2d17d8fda0ab8c948bbdc0643dfc1466830d
+ Author: belyi <devnull at localhost>
+ Date:   Sun Mar 30 21:27:38 2008 +0000
+ 
+     Add a rule to build binary distribution for Windows.
+ 
+  pyme/Makefile | 16 ++++++++++++++--
+  1 file changed, 14 insertions(+), 2 deletions(-)
+ 
+ commit 57acb1089f5f8c24323ee62fc0a7f492a496b9c0
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 29 22:50:11 2008 +0000
+ 
+     Switch to using central location for python files (pycentral)
+     Update docs rule to fix location of the python source files.
+ 
+  pyme/Makefile             |  5 +++-
+  pyme/debian/changelog     |  4 ++-
+  pyme/debian/control       | 74 +++++------------------------------------------
+  pyme/debian/dirs          |  2 --
+  pyme/debian/docs          |  1 +
+  pyme/debian/postinst.ex   | 48 ------------------------------
+  pyme/debian/postrm.ex     | 38 ------------------------
+  pyme/debian/preinst.ex    | 44 ----------------------------
+  pyme/debian/prerm.ex      | 39 -------------------------
+  pyme/debian/rules         | 50 ++++++--------------------------
+  pyme/debian/setup.cfg-2.2 |  8 -----
+  pyme/debian/setup.cfg-2.3 |  8 -----
+  pyme/debian/setup.cfg-2.4 |  8 -----
+  pyme/gpgme-h-clean.py     |  2 +-
+  pyme/pyme/core.py         |  2 +-
+  pyme/pyme/util.py         |  2 +-
+  16 files changed, 28 insertions(+), 307 deletions(-)
+ 
+ commit 2b56fd10517cfbcffaa4ba98d8ea42f40f0d38a9
+ Author: belyi <devnull at localhost>
+ Date:   Sun Mar 23 02:01:12 2008 +0000
+ 
+     Turn SWIG's autodoc feature on. Ignore 'next' in the types which are lists now.
+     Use new style for class declarations. Specify None as a default value for
+     core.check_version() method. Update version.py for 0.8.0 version.
+ 
+  pyme/examples/pygpa.py | 2 +-
+  pyme/gpgme.i           | 5 +++++
+  pyme/pyme/core.py      | 2 +-
+  pyme/pyme/util.py      | 5 +++--
+  pyme/pyme/version.py   | 6 +++---
+  5 files changed, 13 insertions(+), 7 deletions(-)
+ 
+ commit df5e25d7ee4dc0aa0d429f9d009322dd8ac33bb8
+ Author: belyi <devnull at localhost>
+ Date:   Thu Mar 20 19:07:00 2008 +0000
+ 
+     Improve matching for DEPRECATED typedefs
+ 
+  pyme/gpgme-h-clean.py | 4 ++--
+  1 file changed, 2 insertions(+), 2 deletions(-)
+ 
+ commit 78d8fc732848ac267ec65e9069265cd500587cdf
+ Author: belyi <devnull at localhost>
+ Date:   Wed Mar 19 19:28:40 2008 +0000
+ 
+     Update API to use list when types containing 'next' field are return.
+     Update examples accordingly
+     Add verifydetails.py example
+     Start adding bullets for 0.8.0 version.
+ 
+  pyme/Makefile                   |  2 +-
+  pyme/debian/changelog           | 14 +++++++-
+  pyme/examples/PyGtkGpgKeys.py   | 53 +++++++++++++--------------
+  pyme/examples/delkey.py         |  7 ++--
+  pyme/examples/encrypt-to-all.py |  7 ++--
+  pyme/examples/exportimport.py   |  7 ++--
+  pyme/examples/pygpa.py          | 70 ++++++++++++++++--------------------
+  pyme/examples/signverify.py     | 11 +++---
+  pyme/examples/verifydetails.py  | 79 +++++++++++++++++++++++++++++++++++++++++
+  pyme/gpgme.i                    | 19 +++++++++-
+  10 files changed, 180 insertions(+), 89 deletions(-)
+ 
+ commit 342d85b07475e7360bcd62804bf5facda039494f
+ Author: belyi <devnull at localhost>
+ Date:   Mon Mar 10 01:14:16 2008 +0000
+ 
+     Change references to source files so that they point to the WebCVS browse
+     location.
+ 
+  pyme-web/doc/pyme/index.html                        | 2 +-
+  pyme-web/doc/pyme/pyme.callbacks.html               | 2 +-
+  pyme-web/doc/pyme/pyme.constants.data.encoding.html | 2 +-
+  pyme-web/doc/pyme/pyme.constants.data.html          | 2 +-
+  pyme-web/doc/pyme/pyme.constants.event.html         | 2 +-
+  pyme-web/doc/pyme/pyme.constants.html               | 2 +-
+  pyme-web/doc/pyme/pyme.constants.import.html        | 2 +-
+  pyme-web/doc/pyme/pyme.constants.keylist.html       | 2 +-
+  pyme-web/doc/pyme/pyme.constants.keylist.mode.html  | 2 +-
+  pyme-web/doc/pyme/pyme.constants.md.html            | 2 +-
+  pyme-web/doc/pyme/pyme.constants.pk.html            | 2 +-
+  pyme-web/doc/pyme/pyme.constants.protocol.html      | 2 +-
+  pyme-web/doc/pyme/pyme.constants.sig.html           | 2 +-
+  pyme-web/doc/pyme/pyme.constants.sig.mode.html      | 2 +-
+  pyme-web/doc/pyme/pyme.constants.sigsum.html        | 2 +-
+  pyme-web/doc/pyme/pyme.constants.status.html        | 2 +-
+  pyme-web/doc/pyme/pyme.constants.validity.html      | 2 +-
+  pyme-web/doc/pyme/pyme.core.html                    | 2 +-
+  pyme-web/doc/pyme/pyme.errors.html                  | 2 +-
+  pyme-web/doc/pyme/pyme.html                         | 2 +-
+  pyme-web/doc/pyme/pyme.util.html                    | 2 +-
+  pyme-web/doc/pyme/pyme.version.html                 | 2 +-
+  22 files changed, 22 insertions(+), 22 deletions(-)
+ 
+ commit 4139dd1d066c1a6c892d84fe45dc3e6c4aa1b803
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 8 18:21:08 2008 +0000
+ 
+     Add core.check_version(None) to all examples since this function is used by
+     Gpgme to do internal initialization. Update debian/rules to use dh_pysupport
+     instead of deprecated dh_python.
+ 
+  pyme/debian/rules               | 8 +++-----
+  pyme/examples/PyGtkGpgKeys.py   | 7 ++++++-
+  pyme/examples/delkey.py         | 2 ++
+  pyme/examples/encrypt-to-all.py | 3 +++
+  pyme/examples/exportimport.py   | 2 ++
+  pyme/examples/genkey.py         | 1 +
+  pyme/examples/inter-edit.py     | 3 +++
+  pyme/examples/pygpa.py          | 5 +++++
+  pyme/examples/sign.py           | 2 ++
+  pyme/examples/signverify.py     | 2 ++
+  pyme/examples/simple.py         | 2 ++
+  pyme/examples/t-edit.py         | 3 +++
+  12 files changed, 34 insertions(+), 6 deletions(-)
+ 
+ commit ae76c6176457dd38e0634cbc17d794294a3a81d2
+ Author: belyi <devnull at localhost>
+ Date:   Wed Apr 12 22:20:38 2006 +0000
+ 
+     Change name of internal package name from 'gpgme' to 'pygpgme' to avoid
+     conflict with gpgme.dll on Windows.
+     Fix build with SWIG 1.3.28.
+     Change version to 0.7.1 in a preparation for new release.
+ 
+  pyme/Makefile          |   3 +-
+  pyme/debian/changelog  |  12 ++++
+  pyme/gpgme.i           |  19 +++---
+  pyme/pyme/callbacks.py |   1 -
+  pyme/pyme/core.py      | 153 +++++++++++++++++++++++++------------------------
+  pyme/pyme/errors.py    |  12 ++--
+  pyme/pyme/util.py      |  10 ++--
+  pyme/pyme/version.py   |   2 +-
+  pyme/setup.py          |   4 +-
+  9 files changed, 116 insertions(+), 100 deletions(-)
+ 
+ commit d644383a76e9f83bc2d426628319e3c4a989dc2d
+ Author: belyi <devnull at localhost>
+ Date:   Sat Dec 17 01:34:53 2005 +0000
+ 
+     Put all constants into pyme.constants package to avoid stepping on python
+     reserved words.
+     Add build rules for Mingw32 and Cygwin on Windows. Rules for Mingw under
+     Debian are still to come.
+     Fixed a small bug in pygpa.py example.
+ 
+  pyme/Makefile                   | 11 ++++++++---
+  pyme/examples/pygpa.py          |  3 ++-
+  pyme/pyme/__init__.py           |  2 +-
+  pyme/pyme/constants/__init__.py |  3 +++
+  pyme/setup.py                   | 42 ++++++++++++++++++++++++++++++++++++-----
+  5 files changed, 51 insertions(+), 10 deletions(-)
+ 
+ commit 89eb370fcaa8adc9d219eadbaa579dde7bf06329
+ Author: belyi <devnull at localhost>
+ Date:   Mon Aug 1 03:08:32 2005 +0000
+ 
+     Imported changes provided by Joost van Baal:
+     Use dh_python in debian/rules and change the Section pyme belongs to from
+     'libs' to 'python'.
+ 
+  pyme/debian/control | 6 +++---
+  pyme/debian/rules   | 2 ++
+  2 files changed, 5 insertions(+), 3 deletions(-)
+ 
+ commit ad76d10c2a77b45b7459c62131279e946b860891
+ Author: belyi <devnull at localhost>
+ Date:   Fri Jun 10 03:01:22 2005 +0000
+ 
+     Update 'docs' rule in Makefile to build packages first to ensure that
+     documentation is build for the current version of pyme and not for the
+     installed one.
+ 
+     Added 'callbacks' into the list of visible pyme modules (__all__ var.)
+ 
+     Slightly updated INSTALL file.
+ 
+  pyme/INSTALL          | 11 ++++++++---
+  pyme/Makefile         |  4 ++--
+  pyme/pyme/__init__.py |  2 +-
+  3 files changed, 11 insertions(+), 6 deletions(-)
+ 
+ commit 2fe1a81e00721698bfa6850b3db2eb85e43d1724
+ Author: belyi <devnull at localhost>
+ Date:   Wed Jun 8 16:16:18 2005 +0000
+ 
+     Update pyme documentation to remove dead links to pyme.gpgme.html and
+     pyme._gpgme.html
+     Added reference to the installed GPGME and PyMe documentation to the head
+     web page.
+     Updated Makefile to install all *.html files and to clean *~ files in all
+     subdirectories
+ 
+  pyme-web/Makefile                     | 10 ++++++----
+  pyme-web/doc/pyme/index.html          |  8 +++-----
+  pyme-web/doc/pyme/pyme.callbacks.html |  8 --------
+  pyme-web/doc/pyme/pyme.core.html      |  1 -
+  pyme-web/doc/pyme/pyme.errors.html    |  8 --------
+  pyme-web/doc/pyme/pyme.html           |  8 +++-----
+  pyme-web/doc/pyme/pyme.util.html      |  8 --------
+  pyme-web/index.html                   |  9 +++++++--
+  8 files changed, 19 insertions(+), 41 deletions(-)
+ 
+ commit 6aa34cce4ea0099e50b4936dfee59778157b8ca8
+ Author: belyi <devnull at localhost>
+ Date:   Wed Jun 8 15:18:20 2005 +0000
+ 
+     Added pyme and gpgme documentation.
+ 
+  pyme-web/doc/gpgme/gpgme.html                      | 251 ++++++++
+  pyme-web/doc/gpgme/gpgme_1.html                    |  76 +++
+  pyme-web/doc/gpgme/gpgme_10.html                   |  61 ++
+  pyme-web/doc/gpgme/gpgme_11.html                   | 130 ++++
+  pyme-web/doc/gpgme/gpgme_12.html                   |  82 +++
+  pyme-web/doc/gpgme/gpgme_13.html                   | 130 ++++
+  pyme-web/doc/gpgme/gpgme_14.html                   | 108 ++++
+  pyme-web/doc/gpgme/gpgme_15.html                   |  69 +++
+  pyme-web/doc/gpgme/gpgme_16.html                   | 169 +++++
+  pyme-web/doc/gpgme/gpgme_17.html                   |  63 ++
+  pyme-web/doc/gpgme/gpgme_18.html                   |  63 ++
+  pyme-web/doc/gpgme/gpgme_19.html                   |  66 ++
+  pyme-web/doc/gpgme/gpgme_2.html                    |  79 +++
+  pyme-web/doc/gpgme/gpgme_20.html                   | 120 ++++
+  pyme-web/doc/gpgme/gpgme_21.html                   | 102 +++
+  pyme-web/doc/gpgme/gpgme_22.html                   | 108 ++++
+  pyme-web/doc/gpgme/gpgme_23.html                   | 237 +++++++
+  pyme-web/doc/gpgme/gpgme_24.html                   | 154 +++++
+  pyme-web/doc/gpgme/gpgme_25.html                   | 248 ++++++++
+  pyme-web/doc/gpgme/gpgme_26.html                   | 107 ++++
+  pyme-web/doc/gpgme/gpgme_27.html                   |  80 +++
+  pyme-web/doc/gpgme/gpgme_28.html                   |  67 ++
+  pyme-web/doc/gpgme/gpgme_29.html                   | 164 +++++
+  pyme-web/doc/gpgme/gpgme_3.html                    |  86 +++
+  pyme-web/doc/gpgme/gpgme_30.html                   | 106 ++++
+  pyme-web/doc/gpgme/gpgme_31.html                   | 232 +++++++
+  pyme-web/doc/gpgme/gpgme_32.html                   |  85 +++
+  pyme-web/doc/gpgme/gpgme_33.html                   | 223 +++++++
+  pyme-web/doc/gpgme/gpgme_34.html                   |  83 +++
+  pyme-web/doc/gpgme/gpgme_35.html                   |  70 +++
+  pyme-web/doc/gpgme/gpgme_36.html                   |  63 ++
+  pyme-web/doc/gpgme/gpgme_37.html                   |  66 ++
+  pyme-web/doc/gpgme/gpgme_38.html                   |  86 +++
+  pyme-web/doc/gpgme/gpgme_39.html                   |  79 +++
+  pyme-web/doc/gpgme/gpgme_4.html                    |  83 +++
+  pyme-web/doc/gpgme/gpgme_40.html                   |  89 +++
+  pyme-web/doc/gpgme/gpgme_41.html                   |  99 +++
+  pyme-web/doc/gpgme/gpgme_42.html                   | 144 +++++
+  pyme-web/doc/gpgme/gpgme_43.html                   | 152 +++++
+  pyme-web/doc/gpgme/gpgme_44.html                   | 112 ++++
+  pyme-web/doc/gpgme/gpgme_45.html                   | 101 +++
+  pyme-web/doc/gpgme/gpgme_46.html                   | 459 ++++++++++++++
+  pyme-web/doc/gpgme/gpgme_47.html                   | 292 +++++++++
+  pyme-web/doc/gpgme/gpgme_48.html                   | 363 +++++++++++
+  pyme-web/doc/gpgme/gpgme_49.html                   | 209 +++++++
+  pyme-web/doc/gpgme/gpgme_5.html                    |  74 +++
+  pyme-web/doc/gpgme/gpgme_50.html                   |  88 +++
+  pyme-web/doc/gpgme/gpgme_51.html                   | 208 +++++++
+  pyme-web/doc/gpgme/gpgme_52.html                   | 154 +++++
+  pyme-web/doc/gpgme/gpgme_53.html                   | 291 +++++++++
+  pyme-web/doc/gpgme/gpgme_54.html                   |  91 +++
+  pyme-web/doc/gpgme/gpgme_55.html                   | 107 ++++
+  pyme-web/doc/gpgme/gpgme_56.html                   | 140 +++++
+  pyme-web/doc/gpgme/gpgme_57.html                   | 106 ++++
+  pyme-web/doc/gpgme/gpgme_58.html                   |  89 +++
+  pyme-web/doc/gpgme/gpgme_59.html                   |  97 +++
+  pyme-web/doc/gpgme/gpgme_6.html                    |  77 +++
+  pyme-web/doc/gpgme/gpgme_60.html                   | 142 +++++
+  pyme-web/doc/gpgme/gpgme_61.html                   | 626 +++++++++++++++++++
+  pyme-web/doc/gpgme/gpgme_62.html                   | 107 ++++
+  pyme-web/doc/gpgme/gpgme_63.html                   |  67 ++
+  pyme-web/doc/gpgme/gpgme_64.html                   |  95 +++
+  pyme-web/doc/gpgme/gpgme_65.html                   | 233 +++++++
+  pyme-web/doc/gpgme/gpgme_66.html                   |  65 ++
+  pyme-web/doc/gpgme/gpgme_67.html                   | 220 +++++++
+  pyme-web/doc/gpgme/gpgme_68.html                   |  75 +++
+  pyme-web/doc/gpgme/gpgme_69.html                   | 119 ++++
+  pyme-web/doc/gpgme/gpgme_7.html                    | 123 ++++
+  pyme-web/doc/gpgme/gpgme_70.html                   | 107 ++++
+  pyme-web/doc/gpgme/gpgme_71.html                   | 218 +++++++
+  pyme-web/doc/gpgme/gpgme_72.html                   | 134 ++++
+  pyme-web/doc/gpgme/gpgme_73.html                   | 299 +++++++++
+  pyme-web/doc/gpgme/gpgme_74.html                   | 103 ++++
+  pyme-web/doc/gpgme/gpgme_75.html                   | 104 ++++
+  pyme-web/doc/gpgme/gpgme_76.html                   | 118 ++++
+  pyme-web/doc/gpgme/gpgme_77.html                   |  95 +++
+  pyme-web/doc/gpgme/gpgme_78.html                   |  71 +++
+  pyme-web/doc/gpgme/gpgme_79.html                   | 686 +++++++++++++++++++++
+  pyme-web/doc/gpgme/gpgme_8.html                    | 155 +++++
+  pyme-web/doc/gpgme/gpgme_80.html                   | 120 ++++
+  pyme-web/doc/gpgme/gpgme_81.html                   | 278 +++++++++
+  pyme-web/doc/gpgme/gpgme_82.html                   | 272 ++++++++
+  pyme-web/doc/gpgme/gpgme_83.html                   | 180 ++++++
+  pyme-web/doc/gpgme/gpgme_84.html                   |  99 +++
+  pyme-web/doc/gpgme/gpgme_9.html                    | 104 ++++
+  pyme-web/doc/gpgme/gpgme_abt.html                  | 206 +++++++
+  pyme-web/doc/gpgme/gpgme_fot.html                  |  53 ++
+  pyme-web/doc/gpgme/gpgme_ovr.html                  |  68 ++
+  pyme-web/doc/gpgme/gpgme_toc.html                  | 247 ++++++++
+  pyme-web/doc/gpgme/index.html                      | 251 ++++++++
+  pyme-web/doc/pyme/index.html                       | 166 +++++
+  pyme-web/doc/pyme/pyme.callbacks.html              |  50 ++
+  .../doc/pyme/pyme.constants.data.encoding.html     |  48 ++
+  pyme-web/doc/pyme/pyme.constants.data.html         |  29 +
+  pyme-web/doc/pyme/pyme.constants.event.html        |  48 ++
+  pyme-web/doc/pyme/pyme.constants.html              |  39 ++
+  pyme-web/doc/pyme/pyme.constants.import.html       |  49 ++
+  pyme-web/doc/pyme/pyme.constants.keylist.html      |  29 +
+  pyme-web/doc/pyme/pyme.constants.keylist.mode.html |  48 ++
+  pyme-web/doc/pyme/pyme.constants.md.html           |  58 ++
+  pyme-web/doc/pyme/pyme.constants.pk.html           |  50 ++
+  pyme-web/doc/pyme/pyme.constants.protocol.html     |  46 ++
+  pyme-web/doc/pyme/pyme.constants.sig.html          |  29 +
+  pyme-web/doc/pyme/pyme.constants.sig.mode.html     |  47 ++
+  pyme-web/doc/pyme/pyme.constants.sigsum.html       |  55 ++
+  pyme-web/doc/pyme/pyme.constants.status.html       | 117 ++++
+  pyme-web/doc/pyme/pyme.constants.validity.html     |  50 ++
+  pyme-web/doc/pyme/pyme.core.html                   | 254 ++++++++
+  pyme-web/doc/pyme/pyme.errors.html                 |  90 +++
+  pyme-web/doc/pyme/pyme.html                        | 166 +++++
+  pyme-web/doc/pyme/pyme.util.html                   |  78 +++
+  pyme-web/doc/pyme/pyme.version.html                |  37 ++
+  pyme-web/index.html                                |   6 +-
+  113 files changed, 14966 insertions(+), 1 deletion(-)
+ 
+ commit 2d6fe54479f042644f7b0f3d2fe35877d2056144
+ Author: belyi <devnull at localhost>
+ Date:   Thu May 19 02:06:09 2005 +0000
+ 
+     Added INSTALL file.
+ 
+  pyme/INSTALL | 10 ++++++++++
+  1 file changed, 10 insertions(+)
+ 
+ commit d6892fff0c3cedf41dba4c25ab8608e7f2bc039c
+ Author: belyi <devnull at localhost>
+ Date:   Tue May 17 16:49:28 2005 +0000
+ 
+     Update copyright note on simple.py
+ 
+  pyme/examples/simple.py | 4 ++--
+  1 file changed, 2 insertions(+), 2 deletions(-)
+ 
+ commit c2cd9cdf5995843aad7b200b929db2969effc9d2
+ Author: belyi <devnull at localhost>
+ Date:   Tue May 17 15:03:58 2005 +0000
+ 
+     Update simple.py to catch errors.
+ 
+  pyme/examples/simple.py | 17 +++++++++++------
+  1 file changed, 11 insertions(+), 6 deletions(-)
+ 
+ commit eaedae7c6a0ea993caab067efe781a59b6769c44
+ Author: belyi <devnull at localhost>
+ Date:   Tue May 17 01:18:23 2005 +0000
+ 
+     Added 'PYTHON = python' into Makefile for bug #1199122
+ 
+  pyme/Makefile               | 1 +
+  pyme/examples/signverify.py | 1 +
+  2 files changed, 2 insertions(+)
+ 
+ commit 56fd244bb2636a4d58629899ea3cde1d96428198
+ Author: belyi <devnull at localhost>
+ Date:   Wed Apr 27 21:37:06 2005 +0000
+ 
+     Added pygpa example.
+ 
+  pyme/debian/changelog     |    3 +-
+  pyme/examples/pygpa.glade | 5546 +++++++++++++++++++++++++++++++++++++++++++++
+  pyme/examples/pygpa.py    | 1459 ++++++++++++
+  3 files changed, 7007 insertions(+), 1 deletion(-)
+ 
+ commit 2d9a2a91a59ac3fee5410c953b7e0859e9e7cd35
+ Author: belyi <devnull at localhost>
+ Date:   Thu Apr 21 15:17:51 2005 +0000
+ 
+     Change version to 0.7.0 due to the change in license.
+ 
+  pyme/debian/changelog | 2 +-
+  pyme/pyme/version.py  | 2 +-
+  2 files changed, 2 insertions(+), 2 deletions(-)
+ 
+ commit 94e34e38d742f145385bd235825b6ba1e30d8339
+ Author: belyi <devnull at localhost>
+ Date:   Thu Apr 21 03:53:12 2005 +0000
+ 
+     Changed license on PyMe from GPL to LGPL.
+     PyMe examples keep GPL license.
+ 
+  pyme/COPYING.LESSER                  | 510 +++++++++++++++++++++++++++++++++++
+  pyme/Makefile                        |  20 +-
+  pyme/debian/changelog                |   4 +-
+  pyme/debian/copyright                |  22 +-
+  pyme/gpgme-h-clean.py                |  16 ++
+  pyme/gpgme.i                         |  20 +-
+  pyme/helpers.c                       |  20 +-
+  pyme/helpers.h                       |  20 +-
+  pyme/pyme/__init__.py                |  20 +-
+  pyme/pyme/callbacks.py               |  20 +-
+  pyme/pyme/constants/data/encoding.py |  20 +-
+  pyme/pyme/constants/event.py         |  20 +-
+  pyme/pyme/constants/import.py        |  20 +-
+  pyme/pyme/constants/keylist/mode.py  |  20 +-
+  pyme/pyme/constants/md.py            |  20 +-
+  pyme/pyme/constants/pk.py            |  20 +-
+  pyme/pyme/constants/protocol.py      |  20 +-
+  pyme/pyme/constants/sig/mode.py      |  20 +-
+  pyme/pyme/constants/sigsum.py        |  20 +-
+  pyme/pyme/constants/status.py        |  20 +-
+  pyme/pyme/constants/validity.py      |  20 +-
+  pyme/pyme/core.py                    |  20 +-
+  pyme/pyme/errors.py                  |  20 +-
+  pyme/pyme/util.py                    |  20 +-
+  pyme/pyme/version.py                 |  22 +-
+  pyme/setup.py                        |  20 +-
+  26 files changed, 761 insertions(+), 233 deletions(-)
+ 
+ commit 0d8aa0f6335cb1506a37085095ed45173b099a02
+ Author: belyi <devnull at localhost>
+ Date:   Tue Apr 19 01:46:06 2005 +0000
+ 
+     Added __hash__ and __eq__ methods to GpgmeWrapper to allow both Context()
+     and Data() to be used as a dictionary key.
+     Changed core.wait() function to always return a tuple. On timeout now it
+     returns (0, None) instead of just None. Plus, return context is now a
+     Context() object instead of a wrapper return by underlying gpgme.
+ 
+  pyme/helpers.c    |  1 -
+  pyme/pyme/core.py | 25 +++++++++++++++----------
+  pyme/pyme/util.py |  9 +++++++++
+  3 files changed, 24 insertions(+), 11 deletions(-)
+ 
+ commit 63ff6d10637be1dcbcd78c939ac1ef1ac30b1024
+ Author: belyi <devnull at localhost>
+ Date:   Wed Apr 6 04:58:40 2005 +0000
+ 
+     Made hook parameter optional in passphrase_cb and progress_cb.
+     Allowed None for callbacks to unset ones set previously.
+     Removed cleanup of exception in callbacks - now just retrieve the error code.
+     Added prev_bad parameter in passphrase_cb since it can be used in
+     change password protocols.
+     Updated examples to follow new sets of arguments in callbacks
+     Updated op_edit to check if passed key is None (otherwise gpgme dumps core)
+     God rid of annoying warning "function declaration isn't a prototype" in
+     helpers.c and helpers.h by changing from () to (void) list of arguments.
+ 
+  pyme/debian/changelog       | 10 +++++---
+  pyme/examples/signverify.py |  2 +-
+  pyme/examples/t-edit.py     |  2 +-
+  pyme/gpgme.i                | 18 +++++++++-----
+  pyme/helpers.c              | 60 ++++++++++++++++++++++++++++++---------------
+  pyme/helpers.h              |  4 +--
+  pyme/pyme/callbacks.py      |  6 +++--
+  pyme/pyme/core.py           | 47 +++++++++++++++++++++--------------
+  pyme/pyme/errors.py         |  2 +-
+  9 files changed, 96 insertions(+), 55 deletions(-)
+ 
+ commit 8f0ab8138c7aa190936376ccbbf33bb09c64d6f1
+ Author: belyi <devnull at localhost>
+ Date:   Thu Mar 31 23:50:59 2005 +0000
+ 
+     Added exception handling in passphrase_cb and edit_cb. If GPGMEError
+     exception is thrown in those callbacks it will be converted into its
+     core representation and return as an error code to the caller.
+     On all other exceptions error code will be GPG_ERR_GENERAL.
+ 
+  pyme/Makefile         |  1 +
+  pyme/debian/changelog |  8 ++++++++
+  pyme/gpgme.i          | 20 ++++++++++++++------
+  pyme/helpers.c        | 51 +++++++++++++++++++++++++++++++++++++++++++++------
+  pyme/helpers.h        |  3 +++
+  5 files changed, 71 insertions(+), 12 deletions(-)
+ 
+ commit 9903d1fb11231e7e3d920e58d1ecb674c5988b07
+ Author: belyi <devnull at localhost>
+ Date:   Thu Mar 31 05:12:15 2005 +0000
+ 
+     Remove workaround from Context.wait() method since the bug report and
+     patch fixing gpgme_wait's behavior is sent to GPMGE developers already.
+     Added errorcheck into op_edit() so that it can report an error.
+ 
+  pyme/pyme/core.py | 10 +++++-----
+  1 file changed, 5 insertions(+), 5 deletions(-)
+ 
+ commit 45e8a5f4e13d3ca797ec3b0037242874a6be5562
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 26 19:44:18 2005 +0000
+ 
+     Updated verion number to 0.6.2 in version.py
+     Added examples/*.glade files into documentation package.
+ 
+  pyme/debian/examples | 1 +
+  pyme/pyme/version.py | 2 +-
+  2 files changed, 2 insertions(+), 1 deletion(-)
+ 
+ commit 270b87bb40e180cb6e8f1de9a0e8161525ffa4ab
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 26 19:31:14 2005 +0000
+ 
+     Updated debian/changelog regarding PyGtkGpgKeys example and a fix in errors.
+ 
+  pyme/debian/changelog | 5 ++++-
+  1 file changed, 4 insertions(+), 1 deletion(-)
+ 
+ commit ea4682009a506db91e5174ffd038fe7e4406b591
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 26 19:25:36 2005 +0000
+ 
+     Added handling of right mouse button click.
+     Changed reporting a string instead of a number on key generation failure.
+ 
+  pyme/examples/PyGtkGpgKeys.glade |  2 ++
+  pyme/examples/PyGtkGpgKeys.py    | 30 +++++++++++++++++++++++++++---
+  2 files changed, 29 insertions(+), 3 deletions(-)
+ 
+ commit f65ad1a703d0098a3204fb8527a54d253e5847e7
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 26 18:11:11 2005 +0000
+ 
+     Added another column indicating if a key has a secret part.
+     Automated generation of the View menu from the view field of the KeyColumn
+     class.
+ 
+  pyme/examples/PyGtkGpgKeys.glade | 93 ++--------------------------------------
+  pyme/examples/PyGtkGpgKeys.py    | 74 +++++++++++++++++---------------
+  2 files changed, 44 insertions(+), 123 deletions(-)
+ 
+ commit b54e83a7a7a5785502f3c7e8b95f15e23b40e65a
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 26 16:45:13 2005 +0000
+ 
+     Small change to the way gtk.TreeModel object is used.
+ 
+  pyme/examples/PyGtkGpgKeys.py | 21 ++++++++++-----------
+  1 file changed, 10 insertions(+), 11 deletions(-)
+ 
+ commit 7078db75cef4c1fd70cf03e37172bdb4f933fd1b
+ Author: belyi <devnull at localhost>
+ Date:   Fri Mar 25 23:33:06 2005 +0000
+ 
+     Use more comprehansible error reporting since gpgme_strerror_r returns None
+     all the time.
+ 
+  pyme/pyme/errors.py | 6 +++---
+  1 file changed, 3 insertions(+), 3 deletions(-)
+ 
+ commit 151213f4344d9984975721440af07de09e3df61c
+ Author: belyi <devnull at localhost>
+ Date:   Fri Mar 25 04:30:17 2005 +0000
+ 
+     Improved PyGtkGpgKeys example to manage owner_trust on keys.
+     Added another example inter-edit.py which is just a hepler to write
+     scripts for Context.op_edit() command.
+ 
+  pyme/examples/PyGtkGpgKeys.glade | 78 ++++++++++++++++++++++++++++++++++++++++
+  pyme/examples/PyGtkGpgKeys.py    | 68 +++++++++++++++++++++++++++++++----
+  pyme/examples/inter-edit.py      | 54 ++++++++++++++++++++++++++++
+  pyme/examples/t-edit.py          | 18 ++++++++++
+  4 files changed, 212 insertions(+), 6 deletions(-)
+ 
+ commit fc7235af217bcee5231ce7fbd7f234712d5ad3b0
+ Author: belyi <devnull at localhost>
+ Date:   Fri Mar 25 00:30:39 2005 +0000
+ 
+     Updated PyGtkGpgKeys example to include import, export and reload
+     functionality. Also added ability to remove number of keys simultanously.
+     Rearanged how KeyColumn is used to avoid unnecessary sorts and duplication
+     of information in different parts of the code.
+ 
+  pyme/examples/PyGtkGpgKeys.glade |  86 +++++++++-
+  pyme/examples/PyGtkGpgKeys.py    | 332 ++++++++++++++++++++++++++++-----------
+  2 files changed, 325 insertions(+), 93 deletions(-)
+ 
+ commit 9f65749ccb1b7cab562e19c03f4371d5f7d94912
+ Author: belyi <devnull at localhost>
+ Date:   Thu Mar 24 05:51:03 2005 +0000
+ 
+     Added example of PyGTK+ and PyMe integration.
+     For now it does only simple things - listing, deleting, and generating keys.
+ 
+  pyme/examples/PyGtkGpgKeys.glade  | 1321 +++++++++++++++++++++++++++++++++++++
+  pyme/examples/PyGtkGpgKeys.gladep |    8 +
+  pyme/examples/PyGtkGpgKeys.py     |  424 ++++++++++++
+  3 files changed, 1753 insertions(+)
+ 
+ commit 59e23f32c3b46413c9ec09e23e1a385a110fb103
+ Author: belyi <devnull at localhost>
+ Date:   Thu Mar 24 05:44:58 2005 +0000
+ 
+     Added wait method Context class which handles asynchornous calls a little
+     bit better than the one generated by SWIG.
+ 
+  pyme/debian/changelog |  7 +++++++
+  pyme/gpgme.i          |  1 +
+  pyme/pyme/core.py     | 40 ++++++++++++++++++++++++++++++++++++++++
+  3 files changed, 48 insertions(+)
+ 
+ commit 4c1b5259e4985df2cba0ae4fc09f12cd94603a75
+ Author: belyi <devnull at localhost>
+ Date:   Tue Mar 22 18:29:31 2005 +0000
+ 
+     Added correct handling of Context.op_edit() method.
+     Added example/t-edit.py showing usage for this method.
+     Output of this example should match output of the  tests/gpg/t-edit
+     from the GPGME test suite.
+     Remove unused static function from helpers.c
+ 
+  pyme/examples/t-edit.py | 38 ++++++++++++++++++++++++++++++++++++++
+  pyme/gpgme.i            | 36 ++++++++++++++++++++++++++++++++++++
+  pyme/helpers.c          | 36 ------------------------------------
+  pyme/pyme/core.py       |  5 ++++-
+  4 files changed, 78 insertions(+), 37 deletions(-)
+ 
+ commit dc587e215283bfef2dd594f86a7b2945f74f5155
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 19 01:43:59 2005 +0000
+ 
+     Update changelog to include note about deprecated function in 0.6.1 release
+ 
+  pyme/debian/changelog           | 3 ++-
+  pyme/examples/encrypt-to-all.py | 3 +--
+  2 files changed, 3 insertions(+), 3 deletions(-)
+ 
+ commit 86de4b3ad777f980ccf7ba3462c85bbe1787d1fd
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 19 01:40:07 2005 +0000
+ 
+     Remove deprecated functions from helpers.[ch]
+     Use gpgme-h-clean.py to remove deprecated functions and typedefs from
+     the GPGME header file. This will reduce the number of unused methods.
+ 
+  pyme/Makefile         |  4 ++--
+  pyme/gpgme-h-clean.py | 26 ++++++++++++++++++++++++++
+  pyme/helpers.c        |  8 --------
+  pyme/helpers.h        |  2 --
+  4 files changed, 28 insertions(+), 12 deletions(-)
+ 
+ commit 2483efcbd0d73c628c4d7717928a766c3b58f0aa
+ Author: belyi <devnull at localhost>
+ Date:   Fri Mar 18 22:15:52 2005 +0000
+ 
+     Update copyright and author values in pyme/version.py
+     Create rules to build distribution files - one full and one without
+     debian bits.
+ 
+  pyme/Makefile        | 28 ++++++++++++++++++++++------
+  pyme/pyme/version.py | 12 ++++++------
+  2 files changed, 28 insertions(+), 12 deletions(-)
+ 
+ commit 168593285380f5a7805f3dd08657d429a72d3621
+ Author: belyi <devnull at localhost>
+ Date:   Fri Mar 18 19:09:33 2005 +0000
+ 
+     Added package building for python2.4
+ 
+     Updated copyright notes to include myslef and avoid confusion who's the
+     maintainer. In John's own words: "I'd prefer to just step out of the picture".
+     Jonh's copyright notice left intact.
+ 
+  pyme/Makefile                        |  6 +++---
+  pyme/debian/changelog                |  7 +++++++
+  pyme/debian/control                  | 30 +++++++++++++++++++++++++++---
+  pyme/debian/copyright                | 10 ++++------
+  pyme/debian/rules                    |  4 ++++
+  pyme/debian/setup.cfg-2.4            |  8 ++++++++
+  pyme/examples/genkey.py              |  4 ++--
+  pyme/gpgme.i                         |  4 ++--
+  pyme/helpers.c                       |  4 ++--
+  pyme/helpers.h                       |  4 ++--
+  pyme/pyme/__init__.py                |  4 ++--
+  pyme/pyme/callbacks.py               |  4 ++--
+  pyme/pyme/constants/data/encoding.py |  4 ++--
+  pyme/pyme/constants/event.py         |  4 ++--
+  pyme/pyme/constants/import.py        |  4 ++--
+  pyme/pyme/constants/keylist/mode.py  |  4 ++--
+  pyme/pyme/constants/md.py            |  4 ++--
+  pyme/pyme/constants/pk.py            |  4 ++--
+  pyme/pyme/constants/protocol.py      |  4 ++--
+  pyme/pyme/constants/sig/mode.py      |  4 ++--
+  pyme/pyme/constants/sigsum.py        |  4 ++--
+  pyme/pyme/constants/status.py        |  4 ++--
+  pyme/pyme/constants/validity.py      |  4 ++--
+  pyme/pyme/core.py                    |  4 ++--
+  pyme/pyme/errors.py                  |  4 ++--
+  pyme/pyme/util.py                    |  4 ++--
+  pyme/pyme/version.py                 |  2 +-
+  pyme/setup.py                        |  3 ++-
+  28 files changed, 96 insertions(+), 54 deletions(-)
+ 
+ commit 6dbbb252771133724b2879ed6d767cd708196dae
+ Author: belyi <devnull at localhost>
+ Date:   Fri Mar 18 18:04:35 2005 +0000
+ 
+     Remove the note about gpgme.i to be generated - it's been the primary source
+     for some time.
+ 
+  pyme/gpgme.i | 6 ------
+  1 file changed, 6 deletions(-)
+ 
+ commit 9d449fa4889c6bda6d14583c0625b8d5c4ffe759
+ Author: belyi <devnull at localhost>
+ Date:   Fri May 7 18:31:22 2004 +0000
+ 
+     Added my copyright in genkey.py since there's enough changes made.
+     Updated signverify to use only keys generated by genkey.py, to check
+       that keys added to singers are able to sign and to check that the
+       list of signers is not empty. The last check is necessary to prevent
+       signing with the key of the user running signverify.py script.
+     Added delkey.py script to delete keys generated by genkey.py
+     Added exportimport.py example for key export/import.
+ 
+  pyme/examples/delkey.py       | 29 +++++++++++++++++
+  pyme/examples/exportimport.py | 76 +++++++++++++++++++++++++++++++++++++++++++
+  pyme/examples/genkey.py       |  6 ++--
+  pyme/examples/signverify.py   | 18 ++++++----
+  4 files changed, 119 insertions(+), 10 deletions(-)
+ 
+ commit df98c8d28245ad2c14b0ab50fc8f8932853bec8b
+ Author: belyi <devnull at localhost>
+ Date:   Tue May 4 17:34:15 2004 +0000
+ 
+     Added examples/signverify.py for unattended sing/verify.
+     Updated examples/genkey.py to work correctly.
+     Updated gpgme.i to allow None as a value for gpgme_data_t
+ 
+  pyme/examples/genkey.py     | 14 ++-------
+  pyme/examples/signverify.py | 72 +++++++++++++++++++++++++++++++++++++++++++++
+  pyme/gpgme.i                | 21 ++++++++-----
+  3 files changed, 87 insertions(+), 20 deletions(-)
+ 
+ commit ba45931abf530ab89ead46d7233ff1b62b629a18
+ Author: belyi <devnull at localhost>
+ Date:   Thu Apr 8 16:15:09 2004 +0000
+ 
+     Ensure that we support only python2.2 and up. :-)
+     Use generators in core.Context class which makes pyme.aux obsolete
+     Remove importing future nested_scopes since they are standart starting
+     with python2.2
+ 
+  pyme/pyme/__init__.py |  5 ++---
+  pyme/pyme/aux.py      | 56 ---------------------------------------------------
+  pyme/pyme/core.py     | 15 +++++++++++---
+  pyme/pyme/errors.py   |  1 -
+  pyme/pyme/util.py     |  2 +-
+  5 files changed, 15 insertions(+), 64 deletions(-)
+ 
+ commit 4e9be5a55ecffa4da7ad5c192cc892eddaaa9586
+ Author: belyi <devnull at localhost>
+ Date:   Sun Mar 21 03:53:30 2004 +0000
+ 
+     Small change to index.html
+     Added clean: rule to the Makefile
+ 
+  pyme-web/Makefile   | 3 +++
+  pyme-web/index.html | 6 +++---
+  2 files changed, 6 insertions(+), 3 deletions(-)
+ 
+ commit 2efb95176f4edf56ed61c9ac0c3aa09c56534df0
+ Author: belyi <devnull at localhost>
+ Date:   Sun Mar 21 03:00:32 2004 +0000
+ 
+     Added Makefile rules for pyme module installation.
+ 
+  pyme/Makefile | 5 ++++-
+  1 file changed, 4 insertions(+), 1 deletion(-)
+ 
+ commit 2b83d5d8b513029cc3e54f2fa502ccc85618104b
+ Author: belyi <devnull at localhost>
+ Date:   Sun Mar 21 02:29:54 2004 +0000
+ 
+     Decorative change.
+ 
+  pyme/pyme/aux.py | 2 +-
+  1 file changed, 1 insertion(+), 1 deletion(-)
+ 
+ commit e3478015d763a036c1d806ae01433fce59712204
+ Author: belyi <devnull at localhost>
+ Date:   Sun Mar 21 02:25:55 2004 +0000
+ 
+     Added RCS Id: tags
+ 
+  pyme/Makefile                           | 1 +
+  pyme/examples/encrypt-to-all.py         | 3 ++-
+  pyme/examples/genkey.py                 | 3 ++-
+  pyme/examples/sign.py                   | 3 ++-
+  pyme/examples/simple.py                 | 3 ++-
+  pyme/gpgme.i                            | 1 +
+  pyme/helpers.c                          | 1 +
+  pyme/helpers.h                          | 1 +
+  pyme/pyme/__init__.py                   | 1 +
+  pyme/pyme/aux.py                        | 1 +
+  pyme/pyme/callbacks.py                  | 1 +
+  pyme/pyme/constants/__init__.py         | 2 ++
+  pyme/pyme/constants/data/__init__.py    | 2 ++
+  pyme/pyme/constants/data/encoding.py    | 1 +
+  pyme/pyme/constants/event.py            | 1 +
+  pyme/pyme/constants/import.py           | 1 +
+  pyme/pyme/constants/keylist/__init__.py | 2 ++
+  pyme/pyme/constants/keylist/mode.py     | 1 +
+  pyme/pyme/constants/md.py               | 1 +
+  pyme/pyme/constants/pk.py               | 1 +
+  pyme/pyme/constants/protocol.py         | 1 +
+  pyme/pyme/constants/sig/__init__.py     | 2 ++
+  pyme/pyme/constants/sig/mode.py         | 1 +
+  pyme/pyme/constants/sigsum.py           | 1 +
+  pyme/pyme/constants/status.py           | 1 +
+  pyme/pyme/constants/validity.py         | 1 +
+  pyme/pyme/core.py                       | 1 +
+  pyme/pyme/errors.py                     | 1 +
+  pyme/pyme/util.py                       | 1 +
+  pyme/pyme/version.py                    | 2 ++
+  30 files changed, 39 insertions(+), 4 deletions(-)
+ 
+ commit b3b3712645332c5bc3e8d9d557aab21d48ff0f86
+ Author: belyi <devnull at localhost>
+ Date:   Sun Mar 21 02:07:36 2004 +0000
+ 
+     Added Id: RCS tags to all files.
+ 
+  pyme-web/Makefile   | 2 ++
+  pyme-web/index.html | 3 ++-
+  2 files changed, 4 insertions(+), 1 deletion(-)
+ 
+ commit 6aea2426beaaa8c43e6f2310a37a2737c0c3a1b5
+ Author: belyi <devnull at localhost>
+ Date:   Sun Mar 21 01:50:55 2004 +0000
+ 
+     Update example on the init pyme.html page to match simple.py example.
+     Fix core.py to use getcode() instead of getvalue() method of the exception.
+ 
+  pyme/pyme/__init__.py | 22 ++++++++++++++--------
+  pyme/pyme/core.py     |  4 ++--
+  2 files changed, 16 insertions(+), 10 deletions(-)
+ 
+ commit dee337455ffd624d3f83e1c159c4bb2cefc692c9
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 20 20:32:29 2004 +0000
+ 
+     Added Makefile to simplify publishing web files.
+ 
+  pyme-web/Makefile | 7 +++++++
+  1 file changed, 7 insertions(+)
+ 
+ commit af7129baa8260697d85c2ddb434562e8a80b62d8
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 20 20:15:53 2004 +0000
+ 
+     Added minimum of formating and SF icon.
+ 
+  pyme-web/index.html | 18 +++++++++++-------
+  1 file changed, 11 insertions(+), 7 deletions(-)
+ 
+ commit 2e64dcbf99cee796b51667b04d8961e390edde87
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 20 18:30:09 2004 +0000
+ 
+     Initial revision
+ 
+  pyme-web/index.html | 33 +++++++++++++++++++++++++++++++++
+  1 file changed, 33 insertions(+)
+ 
+ commit 1c51644b3d0b6611422d971758e35f303d2ad5df
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 20 05:10:46 2004 +0000
+ 
+     Update examples and package information on the initial pyme doc page.
+ 
+  pyme/pyme/__init__.py | 27 ++++++++++++---------------
+  1 file changed, 12 insertions(+), 15 deletions(-)
+ 
+ commit b2d31b0bfbffdff5247d6db4e3c95140cc1b1f19
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 20 04:47:42 2004 +0000
+ 
+     Deleted unnecessary files.
+     Updated debian/control to remove dependency on python-xml package since there's
+     none now.
+     Move example files from 'doc' into separate control file.
+     Update debian/rules to build documentation from *.py files and to exclude
+     CVS directories from the installation.
+ 
+  pyme/Makefile                   |  26 ++-----
+  pyme/debian/control             |   8 +--
+  pyme/debian/docs                |   1 -
+  pyme/debian/ex.package.doc-base |  22 ------
+  pyme/debian/examples            |   1 +
+  pyme/debian/manpage.1.ex        |  60 ----------------
+  pyme/debian/manpage.sgml.ex     | 152 ----------------------------------------
+  pyme/debian/rules               |  12 ++--
+  8 files changed, 15 insertions(+), 267 deletions(-)
+ 
+ commit 1b517dd9b82a433499b4696b06d94d756cd36e53
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 20 02:59:15 2004 +0000
+ 
+     Remove doc/gpgme directory containing GPGME documentation since this belongs
+     to a different project. Need to add reference in our documentation.
+ 
+  pyme/doc/gpgme/fdl.texi     |  402 ------
+  pyme/doc/gpgme/gpgme.texi   | 3372 -------------------------------------------
+  pyme/doc/gpgme/gpl.texi     |  397 -----
+  pyme/doc/gpgme/version.texi |    4 -
+  4 files changed, 4175 deletions(-)
+ 
+ commit 95d7d171da115a0fedfe2a4a7e5acc8aa408f673
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 20 02:45:03 2004 +0000
+ 
+     Change debian/rules to generate files by swig during build and to cleanup
+     those files on 'clean' rule.
+     Plus, leave generated gpgme_wrap.c in the root directory instead of moving
+     it into subdirectory 'generated'.
+ 
+  pyme/Makefile     | 8 +++-----
+  pyme/debian/rules | 3 ++-
+  pyme/setup.py     | 2 +-
+  3 files changed, 6 insertions(+), 7 deletions(-)
+ 
+ commit 545b3d90d445c5c78e8d72b2c1780863e02c789a
+ Author: belyi <devnull at localhost>
+ Date:   Sat Mar 20 02:18:01 2004 +0000
+ 
+     Initial revision
+ 
+  pyme/COPYING                            |  340 ++++
+  pyme/ChangeLog                          |  802 ++++++++
+  pyme/Makefile                           |   79 +
+  pyme/debian/README.Debian               |    6 +
+  pyme/debian/changelog                   |   19 +
+  pyme/debian/control                     |   68 +
+  pyme/debian/copyright                   |   27 +
+  pyme/debian/dirs                        |    2 +
+  pyme/debian/docs                        |    2 +
+  pyme/debian/ex.package.doc-base         |   22 +
+  pyme/debian/manpage.1.ex                |   60 +
+  pyme/debian/manpage.sgml.ex             |  152 ++
+  pyme/debian/postinst.ex                 |   48 +
+  pyme/debian/postrm.ex                   |   38 +
+  pyme/debian/preinst.ex                  |   44 +
+  pyme/debian/prerm.ex                    |   39 +
+  pyme/debian/rules                       |  130 ++
+  pyme/debian/setup.cfg-2.2               |    8 +
+  pyme/debian/setup.cfg-2.3               |    8 +
+  pyme/doc/gpgme/fdl.texi                 |  402 ++++
+  pyme/doc/gpgme/gpgme.texi               | 3372 +++++++++++++++++++++++++++++++
+  pyme/doc/gpgme/gpl.texi                 |  397 ++++
+  pyme/doc/gpgme/version.texi             |    4 +
+  pyme/examples/encrypt-to-all.py         |   63 +
+  pyme/examples/genkey.py                 |   55 +
+  pyme/examples/sign.py                   |   28 +
+  pyme/examples/simple.py                 |   44 +
+  pyme/gpgme.i                            |  191 ++
+  pyme/helpers.c                          |  139 ++
+  pyme/helpers.h                          |   29 +
+  pyme/pyme/__init__.py                   |  134 ++
+  pyme/pyme/aux.py                        |   55 +
+  pyme/pyme/callbacks.py                  |   45 +
+  pyme/pyme/constants/__init__.py         |    2 +
+  pyme/pyme/constants/data/__init__.py    |    2 +
+  pyme/pyme/constants/data/encoding.py    |   19 +
+  pyme/pyme/constants/event.py            |   19 +
+  pyme/pyme/constants/import.py           |   19 +
+  pyme/pyme/constants/keylist/__init__.py |    2 +
+  pyme/pyme/constants/keylist/mode.py     |   19 +
+  pyme/pyme/constants/md.py               |   19 +
+  pyme/pyme/constants/pk.py               |   19 +
+  pyme/pyme/constants/protocol.py         |   19 +
+  pyme/pyme/constants/sig/__init__.py     |    2 +
+  pyme/pyme/constants/sig/mode.py         |   19 +
+  pyme/pyme/constants/sigsum.py           |   19 +
+  pyme/pyme/constants/status.py           |   19 +
+  pyme/pyme/constants/validity.py         |   19 +
+  pyme/pyme/core.py                       |  367 ++++
+  pyme/pyme/errors.py                     |   46 +
+  pyme/pyme/util.py                       |   61 +
+  pyme/pyme/version.py                    |   39 +
+  pyme/setup.py                           |   60 +
+  53 files changed, 7642 insertions(+)
+ 
+ commit a3d5a442dc713b6c4d6fc4134db5b47e379dc41d
+ Author: root <devnull at localhost>
+ Date:   Fri Mar 19 14:12:30 2004 +0000
+ 
+     initial checkin
+ 
+  CVSROOT/checkoutlist | 13 +++++++++++++
+  CVSROOT/commitinfo   | 15 +++++++++++++++
+  CVSROOT/config       | 21 +++++++++++++++++++++
+  CVSROOT/cvswrappers  | 19 +++++++++++++++++++
+  CVSROOT/editinfo     | 21 +++++++++++++++++++++
+  CVSROOT/loginfo      | 26 ++++++++++++++++++++++++++
+  CVSROOT/modules      | 26 ++++++++++++++++++++++++++
+  CVSROOT/notify       | 12 ++++++++++++
+  CVSROOT/rcsinfo      | 13 +++++++++++++
+  CVSROOT/taginfo      | 20 ++++++++++++++++++++
+  CVSROOT/verifymsg    | 21 +++++++++++++++++++++
+  11 files changed, 207 insertions(+)
diff --cc lang/python/gpgme.i
index 0000000,c5b5bc9..4809fd6
mode 000000,100644..100644
--- a/lang/python/gpgme.i
+++ b/lang/python/gpgme.i
@@@ -1,0 -1,297 +1,296 @@@
+ /*
+ # $Id$
+ # Copyright (C) 2004,2008 Igor Belyi <belyi at users.sourceforge.net>
+ # Copyright (C) 2002 John Goerzen <jgoerzen at complete.org>
+ #
+ #    This library is free software; you can redistribute it and/or
+ #    modify it under the terms of the GNU Lesser General Public
+ #    License as published by the Free Software Foundation; either
+ #    version 2.1 of the License, or (at your option) any later version.
+ #
+ #    This library 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 GNU
+ #    Lesser General Public License for more details.
+ #
+ #    You should have received a copy of the GNU Lesser General Public
+ #    License along with this library; if not, write to the Free Software
+ #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ */
+ %module pygpgme
+ %include "cpointer.i"
+ %include "cstring.i"
+ 
+ // Generate doc strings for all methods.
+ %feature("autodoc", "0");
+ 
+ /* Allow use of Unicode objects, bytes, and None for strings.  */
+ 
+ %typemap(in) const char * {
+   if ($input == Py_None)
+     $1 = NULL;
+   else if (PyUnicode_Check($input))
+     $1 = PyUnicode_AsUTF8($input);
+   else if (PyBytes_Check($input))
+     $1 = PyBytes_AsString($input);
+   else {
+     PyErr_Format(PyExc_TypeError,
+                  "arg %d: expected str, bytes, or None, got %s",
+ 		 $argnum, $input->ob_type->tp_name);
+     return NULL;
+   }
+ }
+ %typemap(freearg) const char * "";
+ 
+ // Release returned buffers as necessary.
+ %typemap(newfree) char * "free($1);";
+ %newobject gpgme_data_release_and_get_mem;
+ 
+ %{
+ /* Convert object to a pointer to gpgme type */
+ PyObject* object_to_gpgme_t(PyObject* input, const char* objtype, int argnum) {
+   PyObject *pyname = NULL, *pypointer = NULL;
+   pyname = PyObject_CallMethod(input, "_getctype", NULL);
+   if (pyname && PyUnicode_Check(pyname))
+     {
+       if (strcmp(PyUnicode_AsUTF8(pyname), objtype) != 0)
+         {
+           PyErr_Format(PyExc_TypeError,
+                        "arg %d: Expected value of type %s, but got %s",
+                        argnum, objtype, PyUnicode_AsUTF8(pyname));
+           Py_DECREF(pyname);
+           return NULL;
+         }
+     }
+   else
+     {
+       PyErr_Format(PyExc_TypeError,
+                    "Protocol violation: Expected an instance of type str "
+                    "from _getctype, but got %s",
+                    pyname == NULL ? "NULL"
+                    : (pyname == Py_None ? "None" : pyname->ob_type->tp_name));
+       return NULL;
+     }
+ 
+   Py_DECREF(pyname);
+   pypointer = PyObject_GetAttrString(input, "wrapped");
+   if (pypointer == NULL) {
+     PyErr_Format(PyExc_TypeError,
+ 		 "arg %d: Use of uninitialized Python object %s",
+ 		 argnum, objtype);
+     return NULL;
+   }
+   return pypointer;
+ }
+ %}
+ 
+ %typemap(arginit) gpgme_key_t [] {
+   $1 = NULL;
+ }
+ 
+ %typemap(in) gpgme_key_t [] {
+   int i, numb = 0;
+   if (!PySequence_Check($input)) {
+     PyErr_Format(PyExc_ValueError, "arg %d: Expected a list of gpgme_key_t",
+ 		 $argnum);
+     return NULL;
+   }
+   if((numb = PySequence_Length($input)) != 0) {
+     $1 = (gpgme_key_t*)malloc((numb+1)*sizeof(gpgme_key_t));
+     for(i=0; i<numb; i++) {
+       PyObject *pypointer = PySequence_GetItem($input, i);
+ 
+       /* input = $input, 1 = $1, 1_descriptor = $1_descriptor */
+       /* &1_descriptor = $&1_descriptor *1_descriptor = $*1_descriptor */
+ 
+       // Following code is from swig's python.swg
+       if ((SWIG_ConvertPtr(pypointer,(void **) &$1[i], $*1_descriptor,SWIG_POINTER_EXCEPTION | $disown )) == -1) {
+ 	Py_DECREF(pypointer);
+ 	return NULL;
+       }
+       Py_DECREF(pypointer);
+     }
+     $1[numb] = NULL;
+   }
+ }
+ %typemap(freearg) gpgme_key_t [] {
+   if ($1) free($1);
+ }
+ 
+ // Special handling for references to our objects.
+ %typemap(in) gpgme_data_t DATAIN {
+   if ($input == Py_None)
+     $1 = NULL;
+   else {
+     PyObject *pypointer = NULL;
+ 
+     if((pypointer=object_to_gpgme_t($input, "$1_ltype", $argnum)) == NULL)
+       return NULL;
+ 
+     /* input = $input, 1 = $1, 1_descriptor = $1_descriptor */
+ 
+     // Following code is from swig's python.swg
+ 
+     if ((SWIG_ConvertPtr(pypointer,(void **) &$1, $1_descriptor,
+          SWIG_POINTER_EXCEPTION | $disown )) == -1) {
+       Py_DECREF(pypointer);
+       return NULL;
+     }
+     Py_DECREF(pypointer);
+   }
+ }
+ 
+ %apply gpgme_data_t DATAIN {gpgme_data_t plain, gpgme_data_t cipher,
+ 			gpgme_data_t sig, gpgme_data_t signed_text,
+ 			gpgme_data_t plaintext, gpgme_data_t keydata,
+ 			gpgme_data_t pubkey, gpgme_data_t seckey,
+ 			gpgme_data_t out};
+ 
+ // SWIG has problem interpreting ssize_t, off_t or gpgme_error_t in gpgme.h
+ %typemap(out) ssize_t, off_t, gpgme_error_t, gpgme_err_code_t, gpgme_err_source_t, gpg_error_t {
+   $result = PyLong_FromLong($1);
+ }
+ %typemap(in) ssize_t, off_t, gpgme_error_t, gpgme_err_code_t, gpgme_err_source_t, gpg_error_t {
+   $1 = PyLong_AsLong($input);
+ }
+ 
+ // Those are for gpgme_data_read() and gpgme_strerror_r()
+ %typemap(in) (void *buffer, size_t size), (char *buf, size_t buflen) {
+    $2 = PyLong_AsLong($input);
+    if ($2 < 0) {
+      PyErr_SetString(PyExc_ValueError, "Positive integer expected");
+      return NULL;
+    }
+    $1 = ($1_ltype) malloc($2+1);
+ }
+ %typemap(argout) (void *buffer, size_t size), (char *buf, size_t buflen) {
+   Py_XDECREF($result);   /* Blow away any previous result */
+   if (result < 0) {      /* Check for I/O error */
+     free($1);
+     return NULL;
+   }
+   $result = PyBytes_FromStringAndSize($1,result);
+   free($1);
+ }
+ 
+ /* For gpgme_data_write, but should be universal.  */
+ %typemap(in) (const void *buffer, size_t size) {
+   if ($input == Py_None)
+     $1 = NULL, $2 = 0;
+   else if (PyUnicode_Check($input))
+     $1 = PyUnicode_AsUTF8AndSize($input, (size_t *) &$2);
+   else if (PyBytes_Check($input))
+     PyBytes_AsStringAndSize($input, (char **) &$1, (size_t *) &$2);
+   else {
+     PyErr_Format(PyExc_TypeError,
+                  "arg %d: expected str, bytes, or None, got %s",
+ 		 $argnum, $input->ob_type->tp_name);
+     return NULL;
+   }
+ }
+ %typemap(freearg) (const void *buffer, size_t size) "";
+ 
+ // Make types containing 'next' field to be lists
+ %ignore next;
+ %typemap(out) gpgme_sig_notation_t, gpgme_engine_info_t, gpgme_subkey_t, gpgme_key_sig_t,
+ 	gpgme_user_id_t, gpgme_invalid_key_t, gpgme_recipient_t, gpgme_new_signature_t,
+ 	gpgme_signature_t, gpgme_import_status_t, gpgme_conf_arg_t, gpgme_conf_opt_t,
+ 	gpgme_conf_comp_t {
+   int i;
+   int size = 0;
+   $1_ltype curr;
+   for (curr = $1; curr != NULL; curr = curr->next) {
+     size++;
+   }
+   $result = PyList_New(size);
+   for (i=0,curr=$1; i<size; i++,curr=curr->next) {
+     PyObject *o = SWIG_NewPointerObj(SWIG_as_voidptr(curr), $1_descriptor, %newpointer_flags);
+     PyList_SetItem($result, i, o);
+   }
+ }
+ 
+ // Include mapper for edit callbacks
+ %typemap(in) (gpgme_edit_cb_t fnc, void *fnc_value) {
+   $1 = (gpgme_edit_cb_t) pyEditCb;
+   if ($input == Py_None)
+     $2 = NULL;
+   else
+     $2 = $input;
+ }
+ 
+ // Include the header file both for cc (first) and for swig (second)
+ // Include for swig locally since we need to fix 'class' usage there.
+ %{
+ #include <gpgme.h>
+ %}
+ %include "gpgme.h"
+ 
+ %constant long EOF = GPG_ERR_EOF;
+ 
+ // Generating and handling pointers-to-pointers.
+ 
+ %pointer_functions(gpgme_ctx_t, gpgme_ctx_t_p);
+ %pointer_functions(gpgme_data_t, gpgme_data_t_p);
+ %pointer_functions(gpgme_key_t, gpgme_key_t_p);
+ %pointer_functions(gpgme_error_t, gpgme_error_t_p);
+ %pointer_functions(gpgme_trust_item_t, gpgme_trust_item_t_p);
+ %pointer_functions(gpgme_engine_info_t, gpgme_engine_info_t_p);
+ %pointer_functions(PyObject *, PyObject_p_p);
+ %pointer_functions(void *, void_p_p);
+ 
+ // Helper functions.
+ 
+ %{
+ #include <stdio.h>
+ %}
+ FILE *fdopen(int fildes, const char *mode);
+ 
+ %{
+ #include "helpers.h"
+ %}
+ %include "helpers.h"
+ 
+ %{
+ gpgme_error_t pyEditCb(void *opaque, gpgme_status_code_t status,
+ 		       const char *args, int fd) {
+   PyObject *func = NULL, *dataarg = NULL, *pyargs = NULL, *retval = NULL;
+   PyObject *pyopaque = (PyObject *) opaque;
+   gpgme_error_t err_status = 0;
+ 
+   pygpgme_exception_init();
+ 
+   if (PyTuple_Check(pyopaque)) {
+     func = PyTuple_GetItem(pyopaque, 0);
+     dataarg = PyTuple_GetItem(pyopaque, 1);
+     pyargs = PyTuple_New(3);
+   } else {
+     func = pyopaque;
+     pyargs = PyTuple_New(2);
+   }
+ 
+   PyTuple_SetItem(pyargs, 0, PyLong_FromLong((long) status));
+   PyTuple_SetItem(pyargs, 1, PyUnicode_FromString(args));
+   if (dataarg) {
+     Py_INCREF(dataarg);		/* Because GetItem doesn't give a ref but SetItem taketh away */
+     PyTuple_SetItem(pyargs, 2, dataarg);
+   }
+ 
+   retval = PyObject_CallObject(func, pyargs);
+   Py_DECREF(pyargs);
+   if (PyErr_Occurred()) {
+     err_status = pygpgme_exception2code();
+   } else {
+     if (fd>=0 && retval && PyUnicode_Check(retval)) {
+       const char *buffer;
+       Py_ssize_t size;
+ 
+       buffer = PyUnicode_AsUTF8AndSize(retval, &size);
+       write(fd, buffer, size);
+       write(fd, "\n", 1);
+     }
+   }
+ 
+   Py_XDECREF(retval);
+   return err_status;
+ }
+ %}
 -
diff --cc lang/python/pyme/core.py
index 0000000,f3829d5..2a0ca07
mode 000000,100644..100644
--- a/lang/python/pyme/core.py
+++ b/lang/python/pyme/core.py
@@@ -1,0 -1,483 +1,482 @@@
+ # $Id$
+ # Copyright (C) 2004,2008 Igor Belyi <belyi at users.sourceforge.net>
+ # Copyright (C) 2002 John Goerzen <jgoerzen at complete.org>
+ #
+ #    This library is free software; you can redistribute it and/or
+ #    modify it under the terms of the GNU Lesser General Public
+ #    License as published by the Free Software Foundation; either
+ #    version 2.1 of the License, or (at your option) any later version.
+ #
+ #    This library 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 GNU
+ #    Lesser General Public License for more details.
+ #
+ #    You should have received a copy of the GNU Lesser General Public
+ #    License along with this library; if not, write to the Free Software
+ #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ 
+ # import generators for portability with python2.2
+ 
+ 
+ from . import pygpgme
+ from .errors import errorcheck, GPGMEError
+ from . import errors
+ from .util import GpgmeWrapper
+ 
+ class Context(GpgmeWrapper):
+     """From the GPGME C documentation:
+ 
+     * All cryptographic operations in GPGME are performed within a
+     * context, which contains the internal state of the operation as well as
+     * configuration parameters.  By using several contexts you can run
+     * several cryptographic operations in parallel, with different
+     * configuration.
+ 
+     Thus, this is the place that you will usually start."""
+ 
+     def _getctype(self):
+         return 'gpgme_ctx_t'
+ 
+     def _getnameprepend(self):
+         return 'gpgme_'
+ 
+     def _errorcheck(self, name):
+         """This function should list all functions returning gpgme_error_t"""
+         if (name.startswith('gpgme_op_') and \
+             not name.endswith('_result')) or \
+             name == 'gpgme_signers_add' or \
+             name == 'gpgme_set_locale' or \
+             name == 'gpgme_set_keylist_mode' or \
+             name == 'gpgme_set_protocol':
+             return 1
+         return 0
+ 
+     def __init__(self, wrapped=None):
+         if wrapped:
+             self.wrapped = wrapped
+             self.own = False
+         else:
+             tmp = pygpgme.new_gpgme_ctx_t_p()
+             errorcheck(pygpgme.gpgme_new(tmp))
+             self.wrapped = pygpgme.gpgme_ctx_t_p_value(tmp)
+             pygpgme.delete_gpgme_ctx_t_p(tmp)
+             self.own = True
+         self.last_passcb = None
+         self.last_progresscb = None
+ 
+     def __del__(self):
+         if not pygpgme:
+             # At interpreter shutdown, pygpgme is set to NONE.
+             return
+ 
+         self._free_passcb()
+         self._free_progresscb()
+         if self.own and pygpgme.gpgme_release:
+             pygpgme.gpgme_release(self.wrapped)
+ 
+     def _free_passcb(self):
+         if self.last_passcb != None:
+             if pygpgme.pygpgme_clear_generic_cb:
+                 pygpgme.pygpgme_clear_generic_cb(self.last_passcb)
+             if pygpgme.delete_PyObject_p_p:
+                 pygpgme.delete_PyObject_p_p(self.last_passcb)
+             self.last_passcb = None
+ 
+     def _free_progresscb(self):
+         if self.last_progresscb != None:
+             if pygpgme.pygpgme_clear_generic_cb:
+                 pygpgme.pygpgme_clear_generic_cb(self.last_progresscb)
+             if pygpgme.delete_PyObject_p_p:
+                 pygpgme.delete_PyObject_p_p(self.last_progresscb)
+             self.last_progresscb = None
+ 
+     def op_keylist_all(self, *args, **kwargs):
+         self.op_keylist_start(*args, **kwargs)
+         key = self.op_keylist_next()
+         while key:
+             yield key
+             key = self.op_keylist_next()
+ 
+     def op_keylist_next(self):
+         """Returns the next key in the list created
+         by a call to op_keylist_start().  The object returned
+         is of type Key."""
+         ptr = pygpgme.new_gpgme_key_t_p()
+         try:
+             errorcheck(pygpgme.gpgme_op_keylist_next(self.wrapped, ptr))
+             key = pygpgme.gpgme_key_t_p_value(ptr)
+         except errors.GPGMEError as excp:
+             key = None
+             if excp.getcode() != errors.EOF:
+                 raise excp
+         pygpgme.delete_gpgme_key_t_p(ptr)
+         if key:
+             key.__del__ = lambda self: pygpgme.gpgme_key_unref(self)
+             return key
+ 
+     def get_key(self, fpr, secret):
+         """Return the key corresponding to the fingerprint 'fpr'"""
+         ptr = pygpgme.new_gpgme_key_t_p()
+         errorcheck(pygpgme.gpgme_get_key(self.wrapped, fpr, ptr, secret))
+         key = pygpgme.gpgme_key_t_p_value(ptr)
+         pygpgme.delete_gpgme_key_t_p(ptr)
+         if key:
+             key.__del__ = lambda self: pygpgme.gpgme_key_unref(self)
+             return key
+ 
+     def op_trustlist_all(self, *args, **kwargs):
+         self.op_trustlist_start(*args, **kwargs)
+         trust = self.ctx.op_trustlist_next()
+         while trust:
+             yield trust
+             trust = self.ctx.op_trustlist_next()
+ 
+     def op_trustlist_next(self):
+         """Returns the next trust item in the list created
+         by a call to op_trustlist_start().  The object returned
+         is of type TrustItem."""
+         ptr = pygpgme.new_gpgme_trust_item_t_p()
+         try:
+             errorcheck(pygpgme.gpgme_op_trustlist_next(self.wrapped, ptr))
+             trust = pygpgme.gpgme_trust_item_t_p_value(ptr)
+         except errors.GPGMEError as excp:
+             trust = None
+             if excp.getcode() != errors.EOF:
+                 raise
+         pygpgme.delete_gpgme_trust_item_t_p(ptr)
+         return trust
+ 
+     def set_passphrase_cb(self, func, hook=None):
+         """Sets the passphrase callback to the function specified by func.
+ 
+         When the system needs a passphrase, it will call func with three args:
+         hint, a string describing the key it needs the passphrase for;
+         desc, a string describing the passphrase it needs;
+         prev_bad, a boolean equal True if this is a call made after
+         unsuccessful previous attempt.
+ 
+         If hook has a value other than None it will be passed into the func
+         as a forth argument.
+ 
+         Please see the GPGME manual for more information.
+         """
+         self._free_passcb()
+         if func == None:
+             hookdata = None
+         else:
+             self.last_passcb = pygpgme.new_PyObject_p_p()
+             if hook == None:
+                 hookdata = func
+             else:
+                 hookdata = (func, hook)
+         pygpgme.pygpgme_set_passphrase_cb(self.wrapped, hookdata, self.last_passcb)
+ 
+     def set_progress_cb(self, func, hook=None):
+         """Sets the progress meter callback to the function specified by
+ 
+         This function will be called to provide an interactive update of
+         the system's progress.
+ 
+         Please see the GPGME manual for more information."""
+         self._free_progresscb()
+         if func == None:
+             hookdata = None
+         else:
+             self.last_progresscb = pygpgme.new_PyObject_p_p()
+             if hook == None:
+                 hookdata = func
+             else:
+                 hookdata = (func, hook)
+         pygpgme.pygpgme_set_progress_cb(self.wrapped, hookdata, self.last_progresscb)
+ 
+     def get_engine_info(self):
+         """Returns this context specific engine info"""
+         return pygpgme.gpgme_ctx_get_engine_info(self.wrapped)
+ 
+     def set_engine_info(self, proto, file_name, home_dir=None):
+         """Changes the configuration of the crypto engine implementing the
+     protocol 'proto' for the context. 'file_name' is the file name of
+     the executable program implementing this protocol. 'home_dir' is the
+     directory name of the configuration directory (engine's default is
+     used if omitted)."""
+         errorcheck(pygpgme.gpgme_ctx_set_engine_info(self.wrapped, proto, file_name, home_dir))
+ 
+     def wait(self, hang):
+         """Wait for asynchronous call to finish. Wait forever if hang is True
+ 
+         Return:
+             On an async call completion its return status.
+             On timeout - None.
+ 
+         Please read the GPGME manual for more information."""
+         ptr = pygpgme.new_gpgme_error_t_p()
+         context = pygpgme.gpgme_wait(self.wrapped, ptr, hang)
+         status = pygpgme.gpgme_error_t_p_value(ptr)
+         pygpgme.delete_gpgme_error_t_p(ptr)
+ 
+         if context == None:
+             errorcheck(status)
+             return None
+         else:
+             return status
+ 
+     def op_edit(self, key, func, fnc_value, out):
+         """Start key editing using supplied callback function"""
+         if key == None:
+             raise ValueError("op_edit: First argument cannot be None")
+         opaquedata = (func, fnc_value)
+         errorcheck(pygpgme.gpgme_op_edit(self.wrapped, key, opaquedata, out))
+ 
+ class Data(GpgmeWrapper):
+     """From the GPGME C manual:
+ 
+ * A lot of data has to be exchanged between the user and the crypto
+ * engine, like plaintext messages, ciphertext, signatures and information
+ * about the keys.  The technical details about exchanging the data
+ * information are completely abstracted by GPGME.  The user provides and
+ * receives the data via `gpgme_data_t' objects, regardless of the
+ * communication protocol between GPGME and the crypto engine in use.
+ 
+         This Data class is the implementation of the GpgmeData objects.
+ 
+         Please see the information about __init__ for instantiation."""
+ 
+     def _getctype(self):
+         return 'gpgme_data_t'
+ 
+     def _getnameprepend(self):
+         return 'gpgme_data_'
+ 
+     def _errorcheck(self, name):
+         """This function should list all functions returning gpgme_error_t"""
+         if name == 'gpgme_data_release_and_get_mem' or \
+                name == 'gpgme_data_get_encoding' or \
+                name == 'gpgme_data_seek':
+             return 0
+         return 1
+ 
+     def __init__(self, string = None, file = None, offset = None,
+                  length = None, cbs = None):
+         """Initialize a new gpgme_data_t object.
+ 
+         If no args are specified, make it an empty object.
+ 
+         If string alone is specified, initialize it with the data
+         contained there.
+ 
+         If file, offset, and length are all specified, file must
+         be either a filename or a file-like object, and the object
+         will be initialized by reading the specified chunk from the file.
+ 
+         If cbs is specified, it MUST be a tuple of the form:
+ 
+         ((read_cb, write_cb, seek_cb, release_cb), hook)
+ 
+         where func is a callback function taking two arguments (count,
+         hook) and returning a string of read data, or None on EOF.
+         This will supply the read() method for the system.
+ 
+         If file is specified without any other arguments, then
+         it must be a filename, and the object will be initialized from
+         that file.
+ 
+         Any other use will result in undefined or erroneous behavior."""
+         self.wrapped = None
+         self.last_readcb = None
+ 
+         if cbs != None:
+             self.new_from_cbs(*cbs)
+         elif string != None:
+             self.new_from_mem(string)
+         elif file != None and offset != None and length != None:
+             self.new_from_filepart(file, offset, length)
+         elif file != None:
+             if type(file) == type("x"):
+                 self.new_from_file(file)
+             else:
+                 self.new_from_fd(file)
+         else:
+             self.new()
+ 
+     def __del__(self):
+         if not pygpgme:
+             # At interpreter shutdown, pygpgme is set to NONE.
+             return
+ 
+         if self.wrapped != None and pygpgme.gpgme_data_release:
+             pygpgme.gpgme_data_release(self.wrapped)
+         self._free_readcb()
+ 
+     def _free_readcb(self):
+         if self.last_readcb != None:
+             if pygpgme.pygpgme_clear_generic_cb:
+                 pygpgme.pygpgme_clear_generic_cb(self.last_readcb)
+             if pygpgme.delete_PyObject_p_p:
+                 pygpgme.delete_PyObject_p_p(self.last_readcb)
+             self.last_readcb = None
+ 
+     def new(self):
+         tmp = pygpgme.new_gpgme_data_t_p()
+         errorcheck(pygpgme.gpgme_data_new(tmp))
+         self.wrapped = pygpgme.gpgme_data_t_p_value(tmp)
+         pygpgme.delete_gpgme_data_t_p(tmp)
+ 
+     def new_from_mem(self, string, copy = 1):
+         tmp = pygpgme.new_gpgme_data_t_p()
+         errorcheck(pygpgme.gpgme_data_new_from_mem(tmp,string,len(string),copy))
+         self.wrapped = pygpgme.gpgme_data_t_p_value(tmp)
+         pygpgme.delete_gpgme_data_t_p(tmp)
+ 
+     def new_from_file(self, filename, copy = 1):
+         tmp = pygpgme.new_gpgme_data_t_p()
+         errorcheck(pygpgme.gpgme_data_new_from_file(tmp, filename, copy))
+         self.wrapped = pygpgme.gpgme_data_t_p_value(tmp)
+         pygpgme.delete_gpgme_data_t_p(tmp)
+ 
+     def new_from_cbs(self, funcs, hook):
+         """Argument funcs must be a 4 element tuple with callbacks:
+         (read_cb, write_cb, seek_cb, release_cb)"""
+         tmp = pygpgme.new_gpgme_data_t_p()
+         self._free_readcb()
+         self.last_readcb = pygpgme.new_PyObject_p_p()
+         hookdata = (funcs, hook)
+         pygpgme.pygpgme_data_new_from_cbs(tmp, hookdata, self.last_readcb)
+         self.wrapped = pygpgme.gpgme_data_t_p_value(tmp)
+         pygpgme.delete_gpgme_data_t_p(tmp)
+ 
+     def new_from_filepart(self, file, offset, length):
+         """This wraps the GPGME gpgme_data_new_from_filepart() function.
+         The argument "file" may be:
+ 
+         1. a string specifying a file name, or
+         3. a a file-like object. supporting the fileno() call and the mode
+            attribute."""
+ 
+         tmp = pygpgme.new_gpgme_data_t_p()
+         filename = None
+         fp = None
+ 
+         if type(file) == type("x"):
+             filename = file
+         else:
+             fp = pygpgme.fdopen(file.fileno(), file.mode)
+             if fp == None:
+                 raise ValueError("Failed to open file from %s arg %s" % \
+                       (str(type(file)), str(file)))
+ 
+         errorcheck(pygpgme.gpgme_data_new_from_filepart(tmp, filename, fp,
+                                                       offset, length))
+         self.wrapped = pygpgme.gpgme_data_t_p_value(tmp)
+         pygpgme.delete_gpgme_data_t_p(tmp)
+ 
+     def new_from_fd(self, file):
+         """This wraps the GPGME gpgme_data_new_from_fd() function.
+         The argument "file" may be a file-like object, supporting the fileno()
+         call and the mode attribute."""
+ 
+         tmp = pygpgme.new_gpgme_data_t_p()
+         fp = pygpgme.fdopen(file.fileno(), file.mode)
+         if fp == None:
+             raise ValueError("Failed to open file from %s arg %s" % \
+                   (str(type(file)), str(file)))
+         errorcheck(pygpgme.gpgme_data_new_from_fd(tmp, fp))
+         self.wrapped = pygpgme.gpgme_data_t_p_value(tmp)
+         pygpgme.delete_gpgme_data_t_p(tmp)
+ 
+     def new_from_stream(self, file):
+         """This wrap around gpgme_data_new_from_stream is an alias for
+         new_from_fd() method since in python there's not difference
+         between file stream and file descriptor"""
+         self.new_from_fd(file)
+ 
+     def write(self, buffer):
+         """Write buffer given as string or bytes.
+ 
+         If a string is given, it is implicitly encoded using UTF-8."""
+         written = pygpgme.gpgme_data_write(self.wrapped, buffer)
+         if written < 0:
+             raise GPGMEError.fromSyserror()
+         return written
+ 
+     def read(self, size = -1):
+         """Read at most size bytes, returned as bytes.
+ 
+         If the size argument is negative or omitted, read until EOF is reached.
+ 
+         Returns the data read, or the empty string if there was no data
+         to read before EOF was reached."""
+ 
+         if size == 0:
+             return ''
+ 
+         if size > 0:
+             return pygpgme.gpgme_data_read(self.wrapped, size)
+         else:
+             chunks = []
+             while 1:
+                 result = pygpgme.gpgme_data_read(self.wrapped, 4096)
+                 if len(result) == 0:
+                     break
+                 chunks.append(result)
+             return b''.join(chunks)
+ 
+ def pubkey_algo_name(algo):
+     return pygpgme.gpgme_pubkey_algo_name(algo)
+ 
+ def hash_algo_name(algo):
+     return pygpgme.gpgme_hash_algo_name(algo)
+ 
+ def get_protocol_name(proto):
+     return pygpgme.gpgme_get_protocol_name(proto)
+ 
+ def check_version(version=None):
+     return pygpgme.gpgme_check_version(version)
+ 
+ def engine_check_version (proto):
+     try:
+         errorcheck(pygpgme.gpgme_engine_check_version(proto))
+         return True
+     except errors.GPGMEError:
+         return False
+ 
+ def get_engine_info():
+     ptr = pygpgme.new_gpgme_engine_info_t_p()
+     try:
+         errorcheck(pygpgme.gpgme_get_engine_info(ptr))
+         info = pygpgme.gpgme_engine_info_t_p_value(ptr)
+     except errors.GPGMEError:
+         info = None
+     pygpgme.delete_gpgme_engine_info_t_p(ptr)
+     return info
+ 
+ def set_engine_info(proto, file_name, home_dir=None):
+     """Changes the default configuration of the crypto engine implementing
+     the protocol 'proto'. 'file_name' is the file name of
+     the executable program implementing this protocol. 'home_dir' is the
+     directory name of the configuration directory (engine's default is
+     used if omitted)."""
+     errorcheck(pygpgme.gpgme_set_engine_info(proto, file_name, home_dir))
+ 
+ def set_locale(category, value):
+     """Sets the default locale used by contexts"""
+     errorcheck(pygpgme.gpgme_set_locale(None, category, value))
+ 
+ def wait(hang):
+     """Wait for asynchronous call on any Context  to finish.
+     Wait forever if hang is True.
+ 
+     For finished anynch calls it returns a tuple (status, context):
+         status  - status return by asnynchronous call.
+         context - context which caused this call to return.
+ 
+     Please read the GPGME manual of more information."""
+     ptr = pygpgme.new_gpgme_error_t_p()
+     context = pygpgme.gpgme_wait(None, ptr, hang)
+     status = pygpgme.gpgme_error_t_p_value(ptr)
+     pygpgme.delete_gpgme_error_t_p(ptr)
+     if context == None:
+         errorcheck(status)
+     else:
+         context = Context(context)
+     return (status, context)
 -
diff --cc lang/python/pyme/util.py
index 0000000,a9fa19d..3c34c79
mode 000000,100644..100644
--- a/lang/python/pyme/util.py
+++ b/lang/python/pyme/util.py
@@@ -1,0 -1,98 +1,97 @@@
+ # $Id$
+ # Copyright (C) 2004,2008 Igor Belyi <belyi at users.sourceforge.net>
+ # Copyright (C) 2002 John Goerzen <jgoerzen at complete.org>
+ #
+ #    This library is free software; you can redistribute it and/or
+ #    modify it under the terms of the GNU Lesser General Public
+ #    License as published by the Free Software Foundation; either
+ #    version 2.1 of the License, or (at your option) any later version.
+ #
+ #    This library 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 GNU
+ #    Lesser General Public License for more details.
+ #
+ #    You should have received a copy of the GNU Lesser General Public
+ #    License along with this library; if not, write to the Free Software
+ #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ 
+ from . import pygpgme
+ from .errors import errorcheck
+ 
+ def process_constants(starttext, dict):
+     """Called by the constant libraries to load up the appropriate constants
+     from the C library."""
+     index = len(starttext)
+     for identifier in dir(pygpgme):
+         if not identifier.startswith(starttext):
+             continue
+         name = identifier[index:]
+         dict[name] = getattr(pygpgme, identifier)
+ 
+ class GpgmeWrapper(object):
+     """Base class all Pyme wrappers for GPGME functionality.  Not to be
+     instantiated directly."""
+     def __repr__(self):
+         return '<instance of %s.%s with GPG object at %s>' % \
+                (__name__, self.__class__.__name__,
+                 self.wrapped)
+ 
+     def __str__(self):
+         return repr(self)
+ 
+     def __hash__(self):
+         return hash(repr(self.wrapped))
+ 
+     def __eq__(self, other):
+         if other == None:
+             return False
+         else:
+             return repr(self.wrapped) == repr(other.wrapped)
+ 
+     def _getctype(self):
+         """Must be implemented by child classes.
+ 
+         Must return the name of the c type."""
+         raise NotImplementedError()
+ 
+     def _getnameprepend(self):
+         """Must be implemented by child classes.
+ 
+         Must return the prefix of all c functions mapped to methods of
+         this class."""
+         raise NotImplementedError()
+ 
+     def _errorcheck(self, name):
+         """Must be implemented by child classes.
+ 
+         This function must return a trueish value for all c functions
+         returning gpgme_error_t."""
+         raise NotImplementedError()
+ 
+     def __getattr__(self, key):
+         """On-the-fly function generation."""
+         if key[0] == '_' or self._getnameprepend() == None:
+             return None
+         name = self._getnameprepend() + key
+         func = getattr(pygpgme, name)
+ 
+         if self._errorcheck(name):
+             def _funcwrap(slf, *args, **kwargs):
+                 return errorcheck(func(slf.wrapped, *args, **kwargs),
+                                   "Invocation of " + name)
+         else:
+             def _funcwrap(slf, *args, **kwargs):
+                 return func(slf.wrapped, *args, **kwargs)
+ 
+         _funcwrap.__doc__ = getattr(func, "__doc__")
+ 
+         # Monkey-patch the class.
+         setattr(self.__class__, key, _funcwrap)
+ 
+         # Bind the method to 'self'.
+         def wrapper(*args, **kwargs):
+             return _funcwrap(self, *args, **kwargs)
+         _funcwrap.__doc__ = getattr(func, "__doc__")
+ 
+         return wrapper
 -
diff --cc lang/python/setup.py
index 0000000,f3d9143..374df5d
mode 000000,100755..100755
--- a/lang/python/setup.py
+++ b/lang/python/setup.py
@@@ -1,0 -1,95 +1,94 @@@
+ #!/usr/bin/env python3
+ 
+ # $Id$
+ 
+ # Module: installer
+ # COPYRIGHT #
+ # Copyright (C) 2004 Igor Belyi <belyi at users.sourceforge.net>
+ # Copyright (C) 2002 John Goerzen <jgoerzen at complete.org>
+ #
+ #    This library is free software; you can redistribute it and/or
+ #    modify it under the terms of the GNU Lesser General Public
+ #    License as published by the Free Software Foundation; either
+ #    version 2.1 of the License, or (at your option) any later version.
+ #
+ #    This library 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 GNU
+ #    Lesser General Public License for more details.
+ #
+ #    You should have received a copy of the GNU Lesser General Public
+ #    License along with this library; if not, write to the Free Software
+ #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+ # END OF COPYRIGHT #
+ 
+ from distutils.core import setup, Extension
+ import os, os.path, sys
+ import subprocess
+ 
+ sys.path.insert(0, os.path.dirname(__file__))
+ import pyme.version
+ 
+ def getconfig(what):
+     confdata = subprocess.Popen(["../../src/gpgme-config", "--%s" % what],
+                                 stdout=subprocess.PIPE).communicate()[0]
+     return [x for x in confdata.decode('utf-8').split() if x != '']
+ 
+ include_dirs = [os.getcwd()]
+ define_macros = []
+ library_dirs = ["../../src/.libs"] # XXX uses libtool internals
+ libs = getconfig('libs')
+ 
+ for item in getconfig('cflags'):
+     if item.startswith("-I"):
+         include_dirs.append(item[2:])
+     elif item.startswith("-D"):
+         defitem = item[2:].split("=", 1)
+         if len(defitem)==2:
+             define_macros.append((defitem[0], defitem[1]))
+         else:
+             define_macros.append((defitem[0], None))
+ 
+ # Adjust include and library locations in case of win32
+ uname_s = os.popen("uname -s").read()
+ if uname_s.startswith("MINGW32"):
+    mnts = [x.split()[0:3:2] for x in os.popen("mount").read().split("\n") if x]
+    tmplist = sorted([(len(x[1]), x[1], x[0]) for x in mnts])
+    tmplist.reverse()
+    extra_dirs = []
+    for item in include_dirs:
+        for ln, mnt, tgt in tmplist:
+            if item.startswith(mnt):
+                item = os.path.normpath(item[ln:])
+                while item[0] == os.path.sep:
+                    item = item[1:]
+                extra_dirs.append(os.path.join(tgt, item))
+                break
+    include_dirs += extra_dirs
+    for item in [x[2:] for x in libs if x.startswith("-L")]:
+        for ln, mnt, tgt in tmplist:
+            if item.startswith(mnt):
+                item = os.path.normpath(item[ln:])
+                while item[0] == os.path.sep:
+                    item = item[1:]
+                library_dirs.append(os.path.join(tgt, item))
+                break
+ 
+ swige = Extension("pyme._pygpgme", ["gpgme_wrap.c", "helpers.c"],
+                   include_dirs = include_dirs,
+                   define_macros = define_macros,
+                   library_dirs = library_dirs,
+                   extra_link_args = libs)
+ 
+ setup(name = "pyme",
+       version=pyme.version.versionstr,
+       description=pyme.version.description,
+       author=pyme.version.author,
+       author_email=pyme.version.author_email,
+       url=pyme.version.homepage,
+       ext_modules=[swige],
+       packages = ['pyme', 'pyme.constants', 'pyme.constants.data',
+                   'pyme.constants.keylist', 'pyme.constants.sig'],
+       license=pyme.version.copyright + \
+                 ", Licensed under the GPL version 2 and the LGPL version 2.1"
+ )
 -

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gpgme.git



More information about the Pkg-gnupg-commit mailing list