|
|
|
|
GpgME++ - C++ bindings/wrapper for gpgme
|
|
|
|
|
------------------------------------
|
|
|
|
|
Version 0.0.1
|
|
|
|
|
|
|
|
|
|
Copyright (c) 2003, 2004 Klar<61>lvdalens Datakonsult AB
|
|
|
|
|
|
|
|
|
|
This file is free software; as a special exception the author gives
|
|
|
|
|
unlimited permission to copy and/or distribute it, with or without
|
|
|
|
|
modifications, as long as this notice is preserved.
|
|
|
|
|
|
|
|
|
|
This file is distributed in the hope that it will be useful, but
|
|
|
|
|
WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
|
|
|
|
|
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Overview
|
|
|
|
|
--------
|
|
|
|
|
|
|
|
|
|
GpgME++ is a C++ wrapper (or C++ bindings) for the GnuPG project's
|
|
|
|
|
gpgme (GnuPG Made Easy) library, version 0.4.4 and later.
|
|
|
|
|
|
|
|
|
|
It is fairly complete, with some minor things still missing (in
|
|
|
|
|
particular, the key edit interface). It is mostly tested using
|
|
|
|
|
external event loops, for which its design is optimised.
|
|
|
|
|
|
|
|
|
|
The design principles of this library are as follows:
|
|
|
|
|
|
|
|
|
|
1. A value-based interface (most clases are implicitly shared)
|
|
|
|
|
2. Callbacks are replaced by C++ interfaces (classes with only
|
|
|
|
|
abstract methods).
|
|
|
|
|
3. No exceptions are thrown
|
|
|
|
|
4. There is (as yet) no explicit support for multi-threaded use
|
|
|
|
|
(other than what gpgme itself provides; most notably the
|
|
|
|
|
refcounting for implicit sharing is not thread-safe)
|
|
|
|
|
5. To avoid binary incompatible interface changes, we make
|
|
|
|
|
extensive use of the d-pointer pattern and avoid virtual
|
|
|
|
|
methods; any polymorphism present is already provided by gpgme
|
|
|
|
|
itself, anyway (see e.g. Data). A notable exception of the
|
|
|
|
|
no-virtuals rule is the use of abstract classes to cover
|
|
|
|
|
C-callbacks.
|
|
|
|
|
|
|
|
|
|
The authors hope that once there are more users of this library,
|
|
|
|
|
the GnuPG project will include it as the official C++ binding for
|
|
|
|
|
gpgme. Currently, this is not the case, since it was felt that C++
|
|
|
|
|
bindings can be provided with different design decisions, and that
|
|
|
|
|
it is not clear that the decisions made for GpgME++ are broad
|
|
|
|
|
enough to be universally applicable (e.g. a pivotal design
|
|
|
|
|
decision was to not use exceptions to wrap gpgme_error_t).
|
|
|
|
|
|
|
|
|
|
GpgME++ depends on gpgme, which in turn depends on libgpg-error, both
|
|
|
|
|
of which must be installed correctly before GpgME++ is to be
|
|
|
|
|
built. Furthermore, GpgME++ should be recompiled if the underlying
|
|
|
|
|
gpgme is changed. This is to allow closer integration and to
|
|
|
|
|
abstract away possible interface changes. Therefore, once this
|
|
|
|
|
libray becomes stable, we intend to follow gpgme's versioning.
|
|
|
|
|
|
|
|
|
|
Currently, we use the KDE CVS repository to develop our code,
|
|
|
|
|
basically because GpgME++ is used in KMail and Kleopatra. However,
|
|
|
|
|
the library is in no way dependant on KDE or Qt libraries, and you
|
|
|
|
|
are free to use it in your own projects, provided you follow the
|
|
|
|
|
license. If you _do_ want to use GpgME++ in Qt/KDE applications,
|
|
|
|
|
have a look at QGpgME, which provides integration with QEventLoop
|
|
|
|
|
and some Qt datatypes (e.g. QByteArray).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Mailing List
|
|
|
|
|
------------
|
|
|
|
|
|
|
|
|
|
Discussion of this library and questions regarding it's use and
|
|
|
|
|
design should happen on gpa-dev@gnupg.org or gnupg-devel@gnupg.org.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
License
|
|
|
|
|
-------
|
|
|
|
|
|
|
|
|
|
This library is licensed under the GNU General Public License
|
|
|
|
|
(GPL), just as gpgme is. We feel that using a different license
|
|
|
|
|
than the one gpgme itself uses doesn't make sense. OTOH, we shall
|
|
|
|
|
relicense this library to the GNU Lesser General Public License
|
|
|
|
|
(LGPL) should gpgme itself be made available under this license at
|
|
|
|
|
any time in the future.
|