aboutsummaryrefslogtreecommitdiffstats
path: root/lang/cpp/src/context.cpp
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2023-01-31 06:59:27 +0000
committerWerner Koch <[email protected]>2023-01-31 06:59:50 +0000
commit3cdcfa33f7496c3130797224f8ae327732409460 (patch)
treea51d92d3455d969c60b33d63e9e6c60670575c1a /lang/cpp/src/context.cpp
parentcpp: Support all encryption flags (diff)
parentqt: Add job for creating signed archives (diff)
downloadgpgme-3cdcfa33f7496c3130797224f8ae327732409460.tar.gz
gpgme-3cdcfa33f7496c3130797224f8ae327732409460.zip
Merge branch 'ikloecker/t6342-gpgtar' into master
-- Solved conflicts: NEWS lang/cpp/src/context.cpp lang/cpp/src/context.h
Diffstat (limited to 'lang/cpp/src/context.cpp')
-rw-r--r--lang/cpp/src/context.cpp36
1 files changed, 22 insertions, 14 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 << ')';
}