aboutsummaryrefslogtreecommitdiffstats
path: root/lang/cpp/src/context.h
diff options
context:
space:
mode:
Diffstat (limited to 'lang/cpp/src/context.h')
-rw-r--r--lang/cpp/src/context.h353
1 files changed, 353 insertions, 0 deletions
diff --git a/lang/cpp/src/context.h b/lang/cpp/src/context.h
new file mode 100644
index 00000000..ee4f847e
--- /dev/null
+++ b/lang/cpp/src/context.h
@@ -0,0 +1,353 @@
+/*
+ context.h - wraps a gpgme key context
+ Copyright (C) 2003, 2007 Klarälvdalens Datakonsult AB
+
+ This file is part of GPGME++.
+
+ GPGME++ 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.
+
+ GPGME++ 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.
+*/
+
+// -*- c++ -*-
+#ifndef __GPGMEPP_CONTEXT_H__
+#define __GPGMEPP_CONTEXT_H__
+
+#include "global.h"
+
+#include "error.h"
+#include "verificationresult.h" // for Signature::Notation
+
+#include <memory>
+#include <vector>
+#include <utility>
+#include <iosfwd>
+
+namespace GpgME
+{
+
+class Key;
+class Data;
+class TrustItem;
+class ProgressProvider;
+class PassphraseProvider;
+class EventLoopInteractor;
+class EditInteractor;
+class AssuanTransaction;
+
+class AssuanResult;
+class KeyListResult;
+class KeyGenerationResult;
+class ImportResult;
+class DecryptionResult;
+class VerificationResult;
+class SigningResult;
+class EncryptionResult;
+class VfsMountResult;
+
+class EngineInfo;
+
+class GPGMEPP_EXPORT Context
+{
+ explicit Context(gpgme_ctx_t);
+public:
+ //using GpgME::Protocol;
+
+ //
+ // Creation and destruction:
+ //
+
+ static Context *createForProtocol(Protocol proto);
+ static std::auto_ptr<Context> createForEngine(Engine engine, Error *err = 0);
+ virtual ~Context();
+
+ //
+ // Context Attributes
+ //
+
+ Protocol protocol() const;
+
+ void setArmor(bool useArmor);
+ bool armor() const;
+
+ void setTextMode(bool useTextMode);
+ bool textMode() const;
+
+ void setOffline(bool useOfflineMode);
+ bool offline() const;
+
+ enum CertificateInclusion {
+ DefaultCertificates = -256,
+ AllCertificatesExceptRoot = -2,
+ AllCertificates = -1,
+ NoCertificates = 0,
+ OnlySenderCertificate = 1
+ };
+ void setIncludeCertificates(int which);
+ int includeCertificates() const;
+
+ //using GpgME::KeyListMode;
+ void setKeyListMode(unsigned int keyListMode);
+ void addKeyListMode(unsigned int keyListMode);
+ unsigned int keyListMode() const;
+
+ void setPassphraseProvider(PassphraseProvider *provider);
+ PassphraseProvider *passphraseProvider() const;
+
+ void setProgressProvider(ProgressProvider *provider);
+ ProgressProvider *progressProvider() const;
+
+ void setManagedByEventLoopInteractor(bool managed);
+ bool managedByEventLoopInteractor() const;
+
+ GpgME::Error setLocale(int category, const char *value);
+
+ EngineInfo engineInfo() const;
+ GpgME::Error setEngineFileName(const char *filename);
+ GpgME::Error setEngineHomeDirectory(const char *filename);
+
+private:
+ friend class ::GpgME::EventLoopInteractor;
+ void installIOCallbacks(gpgme_io_cbs *iocbs);
+ void uninstallIOCallbacks();
+
+public:
+ //
+ //
+ // Key Management
+ //
+ //
+
+ //
+ // Key Listing
+ //
+
+ GpgME::Error startKeyListing(const char *pattern = 0, bool secretOnly = false);
+ GpgME::Error startKeyListing(const char *patterns[], bool secretOnly = false);
+
+ Key nextKey(GpgME::Error &e);
+
+ KeyListResult endKeyListing();
+ KeyListResult keyListResult() const;
+
+ Key key(const char *fingerprint, GpgME::Error &e, bool secret = false);
+
+ //
+ // Key Generation
+ //
+
+ KeyGenerationResult generateKey(const char *parameters, Data &pubKey);
+ GpgME::Error startKeyGeneration(const char *parameters, Data &pubkey);
+ KeyGenerationResult keyGenerationResult() const;
+
+ //
+ // Key Export
+ //
+
+ GpgME::Error exportPublicKeys(const char *pattern, Data &keyData);
+ GpgME::Error exportPublicKeys(const char *pattern[], Data &keyData);
+ GpgME::Error startPublicKeyExport(const char *pattern, Data &keyData);
+ GpgME::Error startPublicKeyExport(const char *pattern[], Data &keyData);
+
+ //
+ // Key Import
+ //
+
+ ImportResult importKeys(const Data &data);
+ ImportResult importKeys(const std::vector<Key> &keys);
+ GpgME::Error startKeyImport(const Data &data);
+ GpgME::Error startKeyImport(const std::vector<Key> &keys);
+ ImportResult importResult() const;
+
+ //
+ // Key Deletion
+ //
+
+ GpgME::Error deleteKey(const Key &key, bool allowSecretKeyDeletion = false);
+ GpgME::Error startKeyDeletion(const Key &key, bool allowSecretKeyDeletion = false);
+
+ //
+ // Passphrase changing
+ //
+
+ GpgME::Error passwd(const Key &key);
+ GpgME::Error startPasswd(const Key &key);
+
+ //
+ // Key Editing
+ //
+
+ GpgME::Error edit(const Key &key, std::auto_ptr<EditInteractor> function, Data &out);
+ GpgME::Error startEditing(const Key &key, std::auto_ptr<EditInteractor> function, Data &out);
+
+ EditInteractor *lastEditInteractor() const;
+ std::auto_ptr<EditInteractor> takeLastEditInteractor();
+
+ //
+ // SmartCard Editing
+ //
+
+ GpgME::Error cardEdit(const Key &key, std::auto_ptr<EditInteractor> function, Data &out);
+ GpgME::Error startCardEditing(const Key &key, std::auto_ptr<EditInteractor> function, Data &out);
+
+ EditInteractor *lastCardEditInteractor() const;
+ std::auto_ptr<EditInteractor> takeLastCardEditInteractor();
+
+ //
+ // Trust Item Management
+ //
+
+ GpgME::Error startTrustItemListing(const char *pattern, int maxLevel);
+ TrustItem nextTrustItem(GpgME::Error &e);
+ GpgME::Error endTrustItemListing();
+
+ //
+ // Assuan Transactions
+ //
+
+ AssuanResult assuanTransact(const char *command, std::auto_ptr<AssuanTransaction> transaction);
+ AssuanResult assuanTransact(const char *command);
+ GpgME::Error startAssuanTransaction(const char *command, std::auto_ptr<AssuanTransaction> transaction);
+ GpgME::Error startAssuanTransaction(const char *command);
+ AssuanResult assuanResult() const;
+
+ AssuanTransaction *lastAssuanTransaction() const;
+ std::auto_ptr<AssuanTransaction> takeLastAssuanTransaction();
+
+ //
+ //
+ // Crypto Operations
+ //
+ //
+
+ //
+ // Decryption
+ //
+
+ DecryptionResult decrypt(const Data &cipherText, Data &plainText);
+ GpgME::Error startDecryption(const Data &cipherText, Data &plainText);
+ DecryptionResult decryptionResult() const;
+
+ //
+ // Signature Verification
+ //
+
+ VerificationResult verifyDetachedSignature(const Data &signature, const Data &signedText);
+ VerificationResult verifyOpaqueSignature(const Data &signedData, Data &plainText);
+ GpgME::Error startDetachedSignatureVerification(const Data &signature, const Data &signedText);
+ GpgME::Error startOpaqueSignatureVerification(const Data &signedData, Data &plainText);
+ VerificationResult verificationResult() const;
+
+ //
+ // Combined Decryption and Signature Verification
+ //
+
+ std::pair<DecryptionResult, VerificationResult> decryptAndVerify(const Data &cipherText, Data &plainText);
+ GpgME::Error startCombinedDecryptionAndVerification(const Data &cipherText, Data &plainText);
+ // use verificationResult() and decryptionResult() to retrieve the result objects...
+
+ //
+ // Signing
+ //
+
+ void clearSigningKeys();
+ GpgME::Error addSigningKey(const Key &signer);
+ Key signingKey(unsigned int index) const;
+ std::vector<Key> signingKeys() const;
+
+ void clearSignatureNotations();
+ GpgME::Error addSignatureNotation(const char *name, const char *value, unsigned int flags = 0);
+ GpgME::Error addSignaturePolicyURL(const char *url, bool critical = false);
+ const char *signaturePolicyURL() const;
+ Notation signatureNotation(unsigned int index) const;
+ std::vector<Notation> signatureNotations() const;
+
+ //using GpgME::SignatureMode;
+ SigningResult sign(const Data &plainText, Data &signature, SignatureMode mode);
+ GpgME::Error startSigning(const Data &plainText, Data &signature, SignatureMode mode);
+ SigningResult signingResult() const;
+
+ //
+ // Encryption
+ //
+
+ enum EncryptionFlags { None = 0, AlwaysTrust = 1, NoEncryptTo = 2 };
+ EncryptionResult encrypt(const std::vector<Key> &recipients, const Data &plainText, Data &cipherText, EncryptionFlags flags);
+ GpgME::Error encryptSymmetrically(const Data &plainText, Data &cipherText);
+ GpgME::Error startEncryption(const std::vector<Key> &recipients, const Data &plainText, Data &cipherText, EncryptionFlags flags);
+ EncryptionResult encryptionResult() const;
+
+ //
+ // Combined Signing and Encryption
+ //
+
+ std::pair<SigningResult, EncryptionResult> signAndEncrypt(const std::vector<Key> &recipients, const Data &plainText, Data &cipherText, EncryptionFlags flags);
+ GpgME::Error startCombinedSigningAndEncryption(const std::vector<Key> &recipients, const Data &plainText, Data &cipherText, EncryptionFlags flags);
+ // use encryptionResult() and signingResult() to retrieve the result objects...
+
+ //
+ //
+ // Audit Log
+ //
+ //
+ enum AuditLogFlags {
+ HtmlAuditLog = 1,
+ AuditLogWithHelp = 128
+ };
+ GpgME::Error startGetAuditLog(Data &output, unsigned int flags = 0);
+ GpgME::Error getAuditLog(Data &output, unsigned int flags = 0);
+
+ //
+ //
+ // G13 crypto container operations
+ //
+ //
+ GpgME::Error createVFS(const char *containerFile, const std::vector<Key> &recipients);
+ VfsMountResult mountVFS(const char *containerFile, const char *mountDir);
+
+ //
+ //
+ // Run Control
+ //
+ //
+
+ bool poll();
+ GpgME::Error wait();
+ GpgME::Error lastError() const;
+ GpgME::Error cancelPendingOperation();
+
+ class Private;
+ const Private *impl() const
+ {
+ return d;
+ }
+ Private *impl()
+ {
+ return d;
+ }
+private:
+ Private *const d;
+
+private: // disable...
+ Context(const Context &);
+ const Context &operator=(const Context &);
+};
+
+GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, Context::CertificateInclusion incl);
+GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, Context::EncryptionFlags flags);
+GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, Context::AuditLogFlags flags);
+
+} // namespace GpgME
+
+#endif // __GPGMEPP_CONTEXT_H__