Blame lang/cpp/src/context.h

Packit d7e8d0
/*
Packit d7e8d0
  context.h - wraps a gpgme key context
Packit d7e8d0
  Copyright (C) 2003, 2007 Klarälvdalens Datakonsult AB
Packit d7e8d0
Packit d7e8d0
  This file is part of GPGME++.
Packit d7e8d0
Packit d7e8d0
  GPGME++ is free software; you can redistribute it and/or
Packit d7e8d0
  modify it under the terms of the GNU Library General Public
Packit d7e8d0
  License as published by the Free Software Foundation; either
Packit d7e8d0
  version 2 of the License, or (at your option) any later version.
Packit d7e8d0
Packit d7e8d0
  GPGME++ is distributed in the hope that it will be useful,
Packit d7e8d0
  but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit d7e8d0
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit d7e8d0
  GNU Library General Public License for more details.
Packit d7e8d0
Packit d7e8d0
  You should have received a copy of the GNU Library General Public License
Packit d7e8d0
  along with GPGME++; see the file COPYING.LIB.  If not, write to the
Packit d7e8d0
  Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Packit d7e8d0
  Boston, MA 02110-1301, USA.
Packit d7e8d0
*/
Packit d7e8d0
Packit d7e8d0
// -*- c++ -*-
Packit d7e8d0
#ifndef __GPGMEPP_CONTEXT_H__
Packit d7e8d0
#define __GPGMEPP_CONTEXT_H__
Packit d7e8d0
Packit d7e8d0
#include "global.h"
Packit d7e8d0
Packit d7e8d0
#include "error.h"
Packit d7e8d0
#include "verificationresult.h" // for Signature::Notation
Packit d7e8d0
Packit d7e8d0
#include <memory>
Packit d7e8d0
#include <vector>
Packit d7e8d0
#include <utility>
Packit d7e8d0
#include <iosfwd>
Packit d7e8d0
Packit d7e8d0
namespace GpgME
Packit d7e8d0
{
Packit d7e8d0
Packit d7e8d0
class Key;
Packit d7e8d0
class Data;
Packit d7e8d0
class TrustItem;
Packit d7e8d0
class ProgressProvider;
Packit d7e8d0
class PassphraseProvider;
Packit d7e8d0
class EventLoopInteractor;
Packit d7e8d0
class EditInteractor;
Packit d7e8d0
class AssuanTransaction;
Packit d7e8d0
Packit d7e8d0
class KeyListResult;
Packit d7e8d0
class KeyGenerationResult;
Packit d7e8d0
class ImportResult;
Packit d7e8d0
class DecryptionResult;
Packit d7e8d0
class VerificationResult;
Packit d7e8d0
class SigningResult;
Packit d7e8d0
class EncryptionResult;
Packit d7e8d0
class VfsMountResult;
Packit d7e8d0
Packit d7e8d0
class EngineInfo;
Packit d7e8d0
Packit d7e8d0
class GPGMEPP_EXPORT Context
Packit d7e8d0
{
Packit d7e8d0
    explicit Context(gpgme_ctx_t);
Packit d7e8d0
public:
Packit d7e8d0
    //using GpgME::Protocol;
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Creation and destruction:
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    static Context *createForProtocol(Protocol proto);
Packit Service 30b792
    /** Same as above but returning a unique ptr. */
Packit Service 30b792
    static std::unique_ptr<Context> create(Protocol proto);
Packit Service 30b792
    static std::unique_ptr<Context> createForEngine(Engine engine, Error *err = nullptr);
Packit d7e8d0
    virtual ~Context();
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Context Attributes
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    Protocol protocol() const;
Packit d7e8d0
Packit d7e8d0
    void setArmor(bool useArmor);
Packit d7e8d0
    bool armor() const;
Packit d7e8d0
Packit d7e8d0
    void setTextMode(bool useTextMode);
Packit d7e8d0
    bool textMode() const;
Packit d7e8d0
Packit d7e8d0
    void setOffline(bool useOfflineMode);
Packit d7e8d0
    bool offline() const;
Packit d7e8d0
Packit Service 30b792
    const char *getFlag(const char *name) const;
Packit Service 30b792
    Error setFlag(const char *name, const char *value);
Packit Service 30b792
Packit d7e8d0
    enum CertificateInclusion {
Packit d7e8d0
        DefaultCertificates = -256,
Packit d7e8d0
        AllCertificatesExceptRoot = -2,
Packit d7e8d0
        AllCertificates = -1,
Packit d7e8d0
        NoCertificates = 0,
Packit d7e8d0
        OnlySenderCertificate = 1
Packit d7e8d0
    };
Packit d7e8d0
    void setIncludeCertificates(int which);
Packit d7e8d0
    int includeCertificates() const;
Packit d7e8d0
Packit d7e8d0
    //using GpgME::KeyListMode;
Packit d7e8d0
    void setKeyListMode(unsigned int keyListMode);
Packit d7e8d0
    void addKeyListMode(unsigned int keyListMode);
Packit d7e8d0
    unsigned int keyListMode() const;
Packit d7e8d0
Packit d7e8d0
    /** Set the passphrase provider
Packit d7e8d0
     *
Packit d7e8d0
     * To avoid problems where a class using a context registers
Packit d7e8d0
     * itself as the provider the Context does not take ownership
Packit d7e8d0
     * of the provider and the caller must ensure that the provider
Packit d7e8d0
     * is deleted if it is no longer needed.
Packit d7e8d0
     */
Packit d7e8d0
    void setPassphraseProvider(PassphraseProvider *provider);
Packit d7e8d0
    PassphraseProvider *passphraseProvider() const;
Packit d7e8d0
Packit d7e8d0
    /** Set the progress provider
Packit d7e8d0
     *
Packit d7e8d0
     * To avoid problems where a class using a context registers
Packit d7e8d0
     * itself as the provider the Context does not take ownership
Packit d7e8d0
     * of the provider and the caller must ensure that the provider
Packit d7e8d0
     * is deleted if it is no longer needed.
Packit d7e8d0
     */
Packit d7e8d0
    void setProgressProvider(ProgressProvider *provider);
Packit d7e8d0
    ProgressProvider *progressProvider() const;
Packit d7e8d0
Packit d7e8d0
    void setManagedByEventLoopInteractor(bool managed);
Packit d7e8d0
    bool managedByEventLoopInteractor() const;
Packit d7e8d0
Packit d7e8d0
    GpgME::Error setLocale(int category, const char *value);
Packit d7e8d0
Packit d7e8d0
    EngineInfo engineInfo() const;
Packit d7e8d0
    GpgME::Error setEngineFileName(const char *filename);
Packit d7e8d0
    GpgME::Error setEngineHomeDirectory(const char *filename);
Packit d7e8d0
Packit d7e8d0
    enum PinentryMode{
Packit d7e8d0
        PinentryDefault = 0,
Packit d7e8d0
        PinentryAsk = 1,
Packit d7e8d0
        PinentryCancel = 2,
Packit d7e8d0
        PinentryError = 3,
Packit d7e8d0
        PinentryLoopback = 4
Packit d7e8d0
    };
Packit d7e8d0
    GpgME::Error setPinentryMode(PinentryMode which);
Packit d7e8d0
    PinentryMode pinentryMode() const;
Packit d7e8d0
Packit d7e8d0
private:
Packit d7e8d0
    friend class ::GpgME::EventLoopInteractor;
Packit d7e8d0
    void installIOCallbacks(gpgme_io_cbs *iocbs);
Packit d7e8d0
    void uninstallIOCallbacks();
Packit d7e8d0
Packit d7e8d0
public:
Packit d7e8d0
    //
Packit d7e8d0
    //
Packit d7e8d0
    // Key Management
Packit d7e8d0
    //
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Key Listing
Packit d7e8d0
    //
Packit d7e8d0
Packit Service 30b792
    GpgME::Error startKeyListing(const char *pattern = nullptr, bool secretOnly = false);
Packit d7e8d0
    GpgME::Error startKeyListing(const char *patterns[], bool secretOnly = false);
Packit d7e8d0
Packit d7e8d0
    Key nextKey(GpgME::Error &e);
Packit d7e8d0
Packit d7e8d0
    KeyListResult endKeyListing();
Packit d7e8d0
    KeyListResult keyListResult() const;
Packit d7e8d0
Packit d7e8d0
    Key key(const char *fingerprint, GpgME::Error &e, bool secret = false);
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Key Generation
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    KeyGenerationResult generateKey(const char *parameters, Data &pubKey);
Packit d7e8d0
    GpgME::Error startKeyGeneration(const char *parameters, Data &pubkey);
Packit d7e8d0
    KeyGenerationResult keyGenerationResult() const;
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Key Export
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    GpgME::Error exportPublicKeys(const char *pattern, Data &keyData);
Packit d7e8d0
    GpgME::Error exportPublicKeys(const char *pattern[], Data &keyData);
Packit d7e8d0
    GpgME::Error startPublicKeyExport(const char *pattern, Data &keyData);
Packit d7e8d0
    GpgME::Error startPublicKeyExport(const char *pattern[], Data &keyData);
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Key Import
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    ImportResult importKeys(const Data &data);
Packit d7e8d0
    ImportResult importKeys(const std::vector<Key> &keys);
Packit d7e8d0
    GpgME::Error startKeyImport(const Data &data);
Packit d7e8d0
    GpgME::Error startKeyImport(const std::vector<Key> &keys);
Packit d7e8d0
    ImportResult importResult() const;
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Key Deletion
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    GpgME::Error deleteKey(const Key &key, bool allowSecretKeyDeletion = false);
Packit d7e8d0
    GpgME::Error startKeyDeletion(const Key &key, bool allowSecretKeyDeletion = false);
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Passphrase changing
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    GpgME::Error passwd(const Key &key);
Packit d7e8d0
    GpgME::Error startPasswd(const Key &key);
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Key Editing
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    GpgME::Error edit(const Key &key, std::unique_ptr<EditInteractor> function, Data &out;;
Packit d7e8d0
    GpgME::Error startEditing(const Key &key, std::unique_ptr<EditInteractor> function, Data &out;;
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Modern Interface actions. Require 2.1.x
Packit d7e8d0
    //
Packit d7e8d0
    Error startCreateKey (const char *userid,
Packit d7e8d0
                          const char *algo,
Packit d7e8d0
                          unsigned long reserved,
Packit d7e8d0
                          unsigned long expires,
Packit d7e8d0
                          const Key &certkey,
Packit d7e8d0
                          unsigned int flags);
Packit d7e8d0
    Error createKey (const char *userid,
Packit d7e8d0
                     const char *algo,
Packit d7e8d0
                     unsigned long reserved,
Packit d7e8d0
                     unsigned long expires,
Packit d7e8d0
                     const Key &certkey,
Packit d7e8d0
                     unsigned int flags);
Packit d7e8d0
Packit Service 30b792
    // Same as create key but returning a result
Packit Service 30b792
    GpgME::KeyGenerationResult createKeyEx (const char *userid,
Packit Service 30b792
                                            const char *algo,
Packit Service 30b792
                                            unsigned long reserved,
Packit Service 30b792
                                            unsigned long expires,
Packit Service 30b792
                                            const Key &certkey,
Packit Service 30b792
                                            unsigned int flags);
Packit Service 30b792
Packit d7e8d0
    Error addUid(const Key &key, const char *userid);
Packit d7e8d0
    Error startAddUid(const Key &key, const char *userid);
Packit d7e8d0
Packit d7e8d0
    Error revUid(const Key &key, const char *userid);
Packit d7e8d0
    Error startRevUid(const Key &key, const char *userid);
Packit d7e8d0
Packit d7e8d0
    Error createSubkey(const Key &key, const char *algo,
Packit d7e8d0
                       unsigned long reserved = 0,
Packit d7e8d0
                       unsigned long expires = 0,
Packit d7e8d0
                       unsigned int flags = 0);
Packit d7e8d0
    Error startCreateSubkey(const Key &key, const char *algo,
Packit d7e8d0
                            unsigned long reserved = 0,
Packit d7e8d0
                            unsigned long expires = 0,
Packit d7e8d0
                            unsigned int flags = 0);
Packit d7e8d0
Packit d7e8d0
    // using TofuInfo::Policy
Packit d7e8d0
    Error setTofuPolicy(const Key &k, unsigned int policy);
Packit d7e8d0
    Error setTofuPolicyStart(const Key &k, unsigned int policy);
Packit d7e8d0
Packit d7e8d0
    EditInteractor *lastEditInteractor() const;
Packit d7e8d0
    std::unique_ptr<EditInteractor> takeLastEditInteractor();
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // SmartCard Editing
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    GpgME::Error cardEdit(const Key &key, std::unique_ptr<EditInteractor> function, Data &out;;
Packit d7e8d0
    GpgME::Error startCardEditing(const Key &key, std::unique_ptr<EditInteractor> function, Data &out;;
Packit d7e8d0
Packit d7e8d0
    EditInteractor *lastCardEditInteractor() const;
Packit d7e8d0
    std::unique_ptr<EditInteractor> takeLastCardEditInteractor();
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Trust Item Management
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    GpgME::Error startTrustItemListing(const char *pattern, int maxLevel);
Packit d7e8d0
    TrustItem nextTrustItem(GpgME::Error &e);
Packit d7e8d0
    GpgME::Error endTrustItemListing();
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Assuan Transactions
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    GpgME::Error assuanTransact(const char *command, std::unique_ptr<AssuanTransaction> transaction);
Packit d7e8d0
    GpgME::Error assuanTransact(const char *command);
Packit d7e8d0
    GpgME::Error startAssuanTransaction(const char *command, std::unique_ptr<AssuanTransaction> transaction);
Packit d7e8d0
    GpgME::Error startAssuanTransaction(const char *command);
Packit d7e8d0
Packit d7e8d0
    AssuanTransaction *lastAssuanTransaction() const;
Packit d7e8d0
    std::unique_ptr<AssuanTransaction> takeLastAssuanTransaction();
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    //
Packit d7e8d0
    // Crypto Operations
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    enum DecryptionFlags {
Packit d7e8d0
        // Keep in line with core's flags
Packit d7e8d0
        DecryptNone = 0,
Packit d7e8d0
        DecryptVerify = 1,
Packit d7e8d0
        DecryptUnwrap = 128,
Packit d7e8d0
        DecryptMaxValue = 0x80000000
Packit d7e8d0
    };
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Decryption
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    // Alternative way to set decryption flags as they were added only in
Packit d7e8d0
    // 1.9.0 and so other API can still be used but with 1.9.0 additionally
Packit d7e8d0
    // flags can be set.
Packit d7e8d0
    void setDecryptionFlags (const DecryptionFlags flags);
Packit d7e8d0
Packit d7e8d0
    DecryptionResult decrypt(const Data &cipherText, Data &plainText);
Packit d7e8d0
    GpgME::Error startDecryption(const Data &cipherText, Data &plainText);
Packit d7e8d0
    DecryptionResult decrypt(const Data &cipherText, Data &plainText, const DecryptionFlags flags);
Packit d7e8d0
    GpgME::Error startDecryption(const Data &cipherText, Data &plainText, const DecryptionFlags flags);
Packit d7e8d0
    DecryptionResult decryptionResult() const;
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Signature Verification
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    VerificationResult verifyDetachedSignature(const Data &signature, const Data &signedText);
Packit d7e8d0
    VerificationResult verifyOpaqueSignature(const Data &signedData, Data &plainText);
Packit d7e8d0
    GpgME::Error startDetachedSignatureVerification(const Data &signature, const Data &signedText);
Packit d7e8d0
    GpgME::Error startOpaqueSignatureVerification(const Data &signedData, Data &plainText);
Packit d7e8d0
    VerificationResult verificationResult() const;
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Combined Decryption and Signature Verification
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    std::pair<DecryptionResult, VerificationResult> decryptAndVerify(const Data &cipherText, Data &plainText);
Packit d7e8d0
    std::pair<DecryptionResult, VerificationResult> decryptAndVerify(const Data &cipherText, Data &plainText, const DecryptionFlags flags);
Packit d7e8d0
    GpgME::Error startCombinedDecryptionAndVerification(const Data &cipherText, Data &plainText);
Packit d7e8d0
    GpgME::Error startCombinedDecryptionAndVerification(const Data &cipherText, Data &plainText, const DecryptionFlags flags);
Packit d7e8d0
    // use verificationResult() and decryptionResult() to retrieve the result objects...
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Signing
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    void clearSigningKeys();
Packit d7e8d0
    GpgME::Error addSigningKey(const Key &signer);
Packit d7e8d0
    Key signingKey(unsigned int index) const;
Packit d7e8d0
    std::vector<Key> signingKeys() const;
Packit d7e8d0
Packit d7e8d0
    void clearSignatureNotations();
Packit d7e8d0
    GpgME::Error addSignatureNotation(const char *name, const char *value, unsigned int flags = 0);
Packit d7e8d0
    GpgME::Error addSignaturePolicyURL(const char *url, bool critical = false);
Packit d7e8d0
    const char *signaturePolicyURL() const;
Packit d7e8d0
    Notation signatureNotation(unsigned int index) const;
Packit d7e8d0
    std::vector<Notation> signatureNotations() const;
Packit d7e8d0
Packit d7e8d0
    //using GpgME::SignatureMode;
Packit d7e8d0
    SigningResult sign(const Data &plainText, Data &signature, SignatureMode mode);
Packit d7e8d0
    GpgME::Error startSigning(const Data &plainText, Data &signature, SignatureMode mode);
Packit d7e8d0
    SigningResult signingResult() const;
Packit d7e8d0
Packit d7e8d0
    // wrapper for gpgme_set_sender
Packit d7e8d0
    const char *getSender();
Packit d7e8d0
    GpgME::Error setSender(const char *sender);
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Encryption
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    enum EncryptionFlags {
Packit d7e8d0
        None = 0,
Packit d7e8d0
        AlwaysTrust = 1,
Packit d7e8d0
        NoEncryptTo = 2,
Packit d7e8d0
        Prepare = 4,
Packit d7e8d0
        ExpectSign = 8,
Packit d7e8d0
        NoCompress = 16,
Packit d7e8d0
        Symmetric = 32,
Packit d7e8d0
        ThrowKeyIds = 64,
Packit d7e8d0
        EncryptWrap = 128
Packit d7e8d0
    };
Packit d7e8d0
    EncryptionResult encrypt(const std::vector<Key> &recipients, const Data &plainText, Data &cipherText, EncryptionFlags flags);
Packit d7e8d0
    GpgME::Error encryptSymmetrically(const Data &plainText, Data &cipherText);
Packit d7e8d0
    GpgME::Error startEncryption(const std::vector<Key> &recipients, const Data &plainText, Data &cipherText, EncryptionFlags flags);
Packit d7e8d0
    EncryptionResult encryptionResult() const;
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    // Combined Signing and Encryption
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    std::pair<SigningResult, EncryptionResult> signAndEncrypt(const std::vector<Key> &recipients, const Data &plainText, Data &cipherText, EncryptionFlags flags);
Packit d7e8d0
    GpgME::Error startCombinedSigningAndEncryption(const std::vector<Key> &recipients, const Data &plainText, Data &cipherText, EncryptionFlags flags);
Packit d7e8d0
    // use encryptionResult() and signingResult() to retrieve the result objects...
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    //
Packit d7e8d0
    // Audit Log
Packit d7e8d0
    //
Packit d7e8d0
    //
Packit d7e8d0
    enum AuditLogFlags {
Packit Service 30b792
        DefaultAuditLog = 0,
Packit d7e8d0
        HtmlAuditLog = 1,
Packit Service 30b792
        DiagnosticAuditLog = 2,
Packit d7e8d0
        AuditLogWithHelp = 128
Packit d7e8d0
    };
Packit d7e8d0
    GpgME::Error startGetAuditLog(Data &output, unsigned int flags = 0);
Packit d7e8d0
    GpgME::Error getAuditLog(Data &output, unsigned int flags = 0);
Packit d7e8d0
Packit d7e8d0
    //
Packit d7e8d0
    //
Packit d7e8d0
    // G13 crypto container operations
Packit d7e8d0
    //
Packit d7e8d0
    //
Packit d7e8d0
    GpgME::Error createVFS(const char *containerFile, const std::vector<Key> &recipients);
Packit d7e8d0
    VfsMountResult mountVFS(const char *containerFile, const char *mountDir);
Packit d7e8d0
Packit d7e8d0
    // Spawn Engine
Packit d7e8d0
    enum SpawnFlags {
Packit d7e8d0
        SpawnNone = 0,
Packit d7e8d0
        SpawnDetached = 1,
Packit Service 30b792
        SpawnAllowSetFg = 2,
Packit Service 30b792
        SpawnShowWindow = 4
Packit d7e8d0
    };
Packit d7e8d0
    /** Spwan the process \a file with arguments \a argv.
Packit d7e8d0
     *
Packit d7e8d0
     *  If a data parameter is null the /dev/null will be
Packit d7e8d0
     *  used. (Or other platform stuff).
Packit d7e8d0
     *
Packit d7e8d0
     * @param file The executable to start.
Packit d7e8d0
     * @param argv list of arguments file should be argv[0].
Packit d7e8d0
     * @param input The data to be sent through stdin.
Packit d7e8d0
     * @param output The data to be receive the stdout.
Packit d7e8d0
     * @param err The data to receive stderr.
Packit d7e8d0
     * @param flags Additional flags.
Packit d7e8d0
     *
Packit d7e8d0
     * @returns An error or empty error.
Packit d7e8d0
     */
Packit d7e8d0
    GpgME::Error spawn(const char *file, const char *argv[],
Packit d7e8d0
                       Data &input, Data &output, Data &err,
Packit d7e8d0
                       SpawnFlags flags);
Packit d7e8d0
    /** Async variant of spawn. Immediately returns after starting the
Packit d7e8d0
     * process. */
Packit d7e8d0
    GpgME::Error spawnAsync(const char *file, const char *argv[],
Packit d7e8d0
                            Data &input, Data &output,
Packit d7e8d0
                            Data &err, SpawnFlags flags);
Packit d7e8d0
    //
Packit d7e8d0
    //
Packit d7e8d0
    // Run Control
Packit d7e8d0
    //
Packit d7e8d0
    //
Packit d7e8d0
Packit d7e8d0
    bool poll();
Packit d7e8d0
    GpgME::Error wait();
Packit d7e8d0
    GpgME::Error lastError() const;
Packit d7e8d0
    GpgME::Error cancelPendingOperation();
Packit d7e8d0
Packit d7e8d0
    class Private;
Packit d7e8d0
    const Private *impl() const
Packit d7e8d0
    {
Packit d7e8d0
        return d;
Packit d7e8d0
    }
Packit d7e8d0
    Private *impl()
Packit d7e8d0
    {
Packit d7e8d0
        return d;
Packit d7e8d0
    }
Packit Service 30b792
Packit d7e8d0
private:
Packit d7e8d0
    // Helper functions that need to be context because they rely
Packit d7e8d0
    // on the "Friendlyness" of context to access the gpgme types.
Packit d7e8d0
    gpgme_key_t *getKeysFromRecipients(const std::vector<Key> &recipients);
Packit d7e8d0
Packit d7e8d0
private:
Packit d7e8d0
    Private *const d;
Packit d7e8d0
Packit d7e8d0
private: // disable...
Packit d7e8d0
    Context(const Context &);
Packit d7e8d0
    const Context &operator=(const Context &);
Packit d7e8d0
};
Packit d7e8d0
Packit d7e8d0
GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, Context::CertificateInclusion incl);
Packit d7e8d0
GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, Context::EncryptionFlags flags);
Packit d7e8d0
GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, Context::AuditLogFlags flags);
Packit d7e8d0
Packit d7e8d0
} // namespace GpgME
Packit d7e8d0
Packit d7e8d0
#endif // __GPGMEPP_CONTEXT_H__