summaryrefslogtreecommitdiff
path: root/lang/cpp/README
diff options
context:
space:
mode:
authorJinWang An <jinwang.an@samsung.com>2021-12-01 16:54:36 +0900
committerJinWang An <jinwang.an@samsung.com>2021-12-01 16:54:36 +0900
commite158cb38f461261d019c653a5f5e0ca9ddab8d6d (patch)
tree3872a21bc5b5797ee3c705509aace3393b0de251 /lang/cpp/README
parentfd5caec0dccd1229c2b9dd5220c8e2b1ef966d0e (diff)
downloadgpgme-257805ac9438b864267335fd15b93da56e2daa53.tar.gz
gpgme-257805ac9438b864267335fd15b93da56e2daa53.tar.bz2
gpgme-257805ac9438b864267335fd15b93da56e2daa53.zip
Imported Upstream version 1.7.0upstream/1.7.0
Diffstat (limited to 'lang/cpp/README')
-rw-r--r--lang/cpp/README101
1 files changed, 101 insertions, 0 deletions
diff --git a/lang/cpp/README b/lang/cpp/README
new file mode 100644
index 0000000..b9a48da
--- /dev/null
+++ b/lang/cpp/README
@@ -0,0 +1,101 @@
+GpgMEpp - C++ bindings/wrapper for GPGME
+----------------------------------------
+Based on KF5gpgmepp
+
+Overview
+--------
+
+GpgMEpp 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).
+
+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.
+6. Use of STL containers for improved memory management and
+ dealing with lists.
+7. Complete abstraction of the C-API so "gpgme.h" should not
+ be needed in your project using GpgME++.
+8. Abstraction of GnuPG's edit-key interface by prepared
+ Editinteractor classes.
+
+GpgMEpp was originally developed as part of the KDEPIM community.
+
+Usage
+-----
+
+The usage pattern of GpgMEpp closely follows GPGMEs core usage
+pattern so the documentation for GPGME itself provides a good
+way to start.
+
+The context structure in GPGME is mapped to a Context object in
+GpgMEpp. Additional convienience code provides Data objects and
+a Dataprovider interface that can be used to implement GPGME's
+data with any subclass by implementing the right callbacks.
+
+EditInteractor subclasses provide ready to use classes for
+common --edit-key tasks. You can implement your own editinteractor
+classes by implementing the EditInteractor interface and using
+your subclass as an interactor in the edit function.
+
+Example to set the ownertrust of a key:
+
+ /* Create an edit interactor */
+ EditInteractor *ei = new GpgSetOwnerTrustEditInteractor(Key::Ultimate);
+ /* Obtain a Context */
+ Context *ctx = Context::createForProtocol(Protocol::OpenPGP);
+ /* Create an in memory data object */
+ Data data;
+ /* Start the edit on some key previously obtained. */
+ Error e = ctx->edit(key, std::unique_ptr<EditInteractor>(ei), data);
+ /* Errors provide boolean comparision */
+ if (!e)
+ ...
+ /* Delete the context */
+ delete ctx;
+
+Examples / Tests
+----------------
+
+GpgMEpp is tested through the Qt API. You can refer to the
+tests in qt/tests for examples of usage or refer to
+the actual QGpgME*Job.cpp implementations which rely
+on GpgMEpp and should cover most use cases.
+
+Hacking
+-------
+
+GpgMEpp follows KDE Coding styles. See:
+https://techbase.kde.org/Policies/Frameworks_Coding_Style
+for more info.
+
+License
+-------
+GPGMEpp is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+GPGMEpp 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 Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public License
+along with GPGME++; see the file COPYING.LIB. If not, write to the
+Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.