aboutsummaryrefslogtreecommitdiffstats
path: root/lang/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'lang/cpp/src')
-rw-r--r--lang/cpp/src/context.cpp36
-rw-r--r--lang/cpp/src/context.h1
-rw-r--r--lang/cpp/src/data.cpp5
-rw-r--r--lang/cpp/src/data.h1
-rw-r--r--lang/cpp/src/global.h9
-rw-r--r--lang/cpp/src/signingresult.cpp1
6 files changed, 37 insertions, 16 deletions
diff --git a/lang/cpp/src/context.cpp b/lang/cpp/src/context.cpp
index 120c7c70..f93887f5 100644
--- a/lang/cpp/src/context.cpp
+++ b/lang/cpp/src/context.cpp
@@ -1278,14 +1278,22 @@ std::vector<Notation> Context::signatureNotations() const
return result;
}
-static gpgme_sig_mode_t sigmode2sigmode(SignatureMode mode)
+static gpgme_sig_mode_t sigflags2sigflags(SignatureMode flags)
{
- switch (mode) {
- default:
- case NormalSignatureMode: return GPGME_SIG_MODE_NORMAL;
- case Detached: return GPGME_SIG_MODE_DETACH;
- case Clearsigned: return GPGME_SIG_MODE_CLEAR;
+ unsigned int result = 0;
+ if (flags & SignatureMode::NormalSignatureMode) {
+ result |= GPGME_SIG_MODE_NORMAL;
+ }
+ if (flags & SignatureMode::Detached) {
+ result |= GPGME_SIG_MODE_DETACH;
+ }
+ if (flags & SignatureMode::Clearsigned) {
+ result |= GPGME_SIG_MODE_CLEAR;
+ }
+ if (flags & SignatureMode::SignArchive) {
+ result |= GPGME_SIG_MODE_ARCHIVE;
}
+ return static_cast<gpgme_sig_mode_t>(result);
}
SigningResult Context::sign(const Data &plainText, Data &signature, SignatureMode mode)
@@ -1293,7 +1301,7 @@ SigningResult Context::sign(const Data &plainText, Data &signature, SignatureMod
d->lastop = Private::Sign;
const Data::Private *const pdp = plainText.impl();
Data::Private *const sdp = signature.impl();
- d->lasterr = gpgme_op_sign(d->ctx, pdp ? pdp->data : nullptr, sdp ? sdp->data : nullptr, sigmode2sigmode(mode));
+ d->lasterr = gpgme_op_sign(d->ctx, pdp ? pdp->data : nullptr, sdp ? sdp->data : nullptr, sigflags2sigflags(mode));
return SigningResult(d->ctx, Error(d->lasterr));
}
@@ -1302,7 +1310,7 @@ Error Context::startSigning(const Data &plainText, Data &signature, SignatureMod
d->lastop = Private::Sign;
const Data::Private *const pdp = plainText.impl();
Data::Private *const sdp = signature.impl();
- return Error(d->lasterr = gpgme_op_sign_start(d->ctx, pdp ? pdp->data : nullptr, sdp ? sdp->data : nullptr, sigmode2sigmode(mode)));
+ return Error(d->lasterr = gpgme_op_sign_start(d->ctx, pdp ? pdp->data : nullptr, sdp ? sdp->data : nullptr, sigflags2sigflags(mode)));
}
SigningResult Context::signingResult() const
@@ -1344,6 +1352,9 @@ static gpgme_encrypt_flags_t encryptflags2encryptflags(Context::EncryptionFlags
if (flags & Context::WantAddress) {
result |= GPGME_ENCRYPT_WANT_ADDRESS;
}
+ if (flags & Context::EncryptArchive) {
+ result |= GPGME_ENCRYPT_ARCHIVE;
+ }
return static_cast<gpgme_encrypt_flags_t>(result);
}
@@ -1895,16 +1906,12 @@ std::ostream &operator<<(std::ostream &os, KeyListMode mode)
std::ostream &operator<<(std::ostream &os, SignatureMode mode)
{
os << "GpgME::SignatureMode(";
- switch (mode) {
-#define CHECK( x ) case x: os << #x; break
+#define CHECK( x ) if ( !(mode & (x)) ) {} else do { os << #x " "; } while (0)
CHECK(NormalSignatureMode);
CHECK(Detached);
CHECK(Clearsigned);
+ CHECK(SignArchive);
#undef CHECK
- default:
- os << "???" "(" << static_cast<int>(mode) << ')';
- break;
- }
return os << ')';
}
@@ -1921,6 +1928,7 @@ std::ostream &operator<<(std::ostream &os, Context::EncryptionFlags flags)
CHECK(ThrowKeyIds);
CHECK(EncryptWrap);
CHECK(WantAddress);
+ CHECK(EncryptArchive);
#undef CHECK
return os << ')';
}
diff --git a/lang/cpp/src/context.h b/lang/cpp/src/context.h
index 3c3544d2..d66344ce 100644
--- a/lang/cpp/src/context.h
+++ b/lang/cpp/src/context.h
@@ -449,6 +449,7 @@ public:
ThrowKeyIds = 64,
EncryptWrap = 128,
WantAddress = 256,
+ EncryptArchive = 512
};
EncryptionResult encrypt(const std::vector<Key> &recipients, const Data &plainText, Data &cipherText, EncryptionFlags flags);
GpgME::Error encryptSymmetrically(const Data &plainText, Data &cipherText);
diff --git a/lang/cpp/src/data.cpp b/lang/cpp/src/data.cpp
index 7a93cbc2..dd8b1740 100644
--- a/lang/cpp/src/data.cpp
+++ b/lang/cpp/src/data.cpp
@@ -217,6 +217,11 @@ GpgME::Error GpgME::Data::setFileName(const char *name)
return Error(gpgme_data_set_file_name(d->data, name));
}
+GpgME::Error GpgME::Data::setFileName(const std::string &name)
+{
+ return Error(gpgme_data_set_file_name(d->data, name.c_str()));
+}
+
ssize_t GpgME::Data::read(void *buffer, size_t length)
{
return gpgme_data_read(d->data, buffer, length);
diff --git a/lang/cpp/src/data.h b/lang/cpp/src/data.h
index 649e4104..9a5d5b0c 100644
--- a/lang/cpp/src/data.h
+++ b/lang/cpp/src/data.h
@@ -106,6 +106,7 @@ public:
char *fileName() const;
Error setFileName(const char *name);
+ Error setFileName(const std::string &name);
ssize_t read(void *buffer, size_t length);
ssize_t write(const void *buffer, size_t length);
diff --git a/lang/cpp/src/global.h b/lang/cpp/src/global.h
index 1336142a..c9c65cdb 100644
--- a/lang/cpp/src/global.h
+++ b/lang/cpp/src/global.h
@@ -74,7 +74,12 @@ enum KeyListMode {
KeyListModeMask = 0x3ff
};
-enum SignatureMode { NormalSignatureMode, Detached, Clearsigned };
+enum SignatureMode {
+ NormalSignatureMode = 0,
+ Detached = 1,
+ Clearsigned = 2,
+ SignArchive = 4,
+};
enum class RevocationReason {
Unspecified = 0,
@@ -103,7 +108,7 @@ homedir, sysconfdir, bindir, libexecdir, libdir,
datadir, localedir, agent-socket, agent-ssh-socket,
dirmngr-socket, uiserver-socket, gpgconf-name, gpg-name,
gpgsm-name, g13-name, keyboxd-name, agent-name, scdaemon-name,
-dirmngr-name, pinentry-name, socketdir.
+dirmngr-name, pinentry-name, socketdir, gpg-wks-client-name, gpgtar-name.
This may be extended in the future.
*/
diff --git a/lang/cpp/src/signingresult.cpp b/lang/cpp/src/signingresult.cpp
index 6e0dd90a..06169cbc 100644
--- a/lang/cpp/src/signingresult.cpp
+++ b/lang/cpp/src/signingresult.cpp
@@ -199,6 +199,7 @@ GpgME::SignatureMode GpgME::CreatedSignature::mode() const
case GPGME_SIG_MODE_NORMAL: return NormalSignatureMode;
case GPGME_SIG_MODE_DETACH: return Detached;
case GPGME_SIG_MODE_CLEAR: return Clearsigned;
+ case GPGME_SIG_MODE_ARCHIVE: return SignArchive; // cannot happen
}
}