c++ version of gpgme
wk at gnupg.org
Thu Jun 9 12:08:26 CEST 2005
On Tue, 31 May 2005 10:30:21 +0200, ml sergico said:
> I was searching around to find if there is some c++ implementation/wrapper
> of the gpgme library. Someone know of some project related. I read some
> on the mailing list archive but can't find any reference to the project
> code page...
You may use gpgme directly as we have taken some precautions to make
it work with C++. KDE uses a wrapper library (gpgmepp); find attacked
-------------- next part --------------
GpgME++ - C++ bindings/wrapper for gpgme
Copyright (c) 2003, 2004 Klar?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.
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
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
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).
Discussion of this library and questions regarding it's use and
design should happen on gpa-dev at gnupg.org or gnupg-devel at gnupg.org.
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.
More information about the Gnupg-devel