Compare commits
89 Commits
tobias/fix
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
5c095553e4 | ||
|
9ab2ce36f9 | ||
|
c69240c843 | ||
|
42e151b34b | ||
|
e6830b58b6 | ||
|
899a572b33 | ||
|
69558f2c0b | ||
|
576d2db9dd | ||
|
aa15a664b3 | ||
|
e46748a0d1 | ||
|
f6d020e24f | ||
|
28542b14c4 | ||
|
2656d3ee5b | ||
|
acf574af64 | ||
|
b7435b31f6 | ||
|
95bd4fa813 | ||
|
de60684500 | ||
|
8b4171680c | ||
|
9c276e762a | ||
|
ec2c6dd8bc | ||
|
6ed5c9a38a | ||
|
7d5df0bf0d | ||
|
09827ffc77 | ||
|
53c367629a | ||
|
c52e1943a7 | ||
|
60b96d149c | ||
|
6c90ec7be2 | ||
|
14b035034a | ||
|
2187a4de8c | ||
|
5b73b0722a | ||
|
3b9815bd8a | ||
|
307256d277 | ||
|
87319b3fc7 | ||
|
29be63ae37 | ||
|
09cc0c81f7 | ||
|
967b6b726e | ||
|
4136928f0d | ||
|
5d9269cb4f | ||
|
25dd284b0c | ||
|
1245b09012 | ||
|
09d81da665 | ||
|
5844d9e700 | ||
|
986c5f0b94 | ||
|
6aa359b1e8 | ||
|
f0d1f2c4c7 | ||
|
15718cb295 | ||
|
e42b72bc2b | ||
|
90eb80134b | ||
|
f2575b6313 | ||
|
adadfac997 | ||
|
ac4bf86bb6 | ||
|
55a1ae4163 | ||
|
c933269d3a | ||
|
333241b286 | ||
|
73403a8ba0 | ||
|
0f5e8182e7 | ||
|
3e3db5784f | ||
|
87061c0260 | ||
|
a73a41109f | ||
|
06db03ea9b | ||
|
882ccc8ea7 | ||
|
e4a95746ad | ||
|
67057d83f5 | ||
|
7158397c09 | ||
|
47f3d92bf3 | ||
|
0011412193 | ||
|
eae22d9a48 | ||
|
cc1f2b5acb | ||
|
e3ae88267f | ||
|
18388f93ab | ||
|
b37efb11be | ||
|
85c7a94d63 | ||
|
7e520213c0 | ||
|
d60d1b7f79 | ||
|
18a0d72b1b | ||
|
c631622484 | ||
|
1dc44b7c5b | ||
|
0b3c8709f7 | ||
|
e77a8ac0cc | ||
|
20b32e0350 | ||
|
a44d84772d | ||
|
b166958b86 | ||
|
60c0fd7c95 | ||
|
5efd3486a9 | ||
|
963ace1f9f | ||
|
0221d7f28a | ||
|
b35bcf0040 | ||
|
d5dafb2ae3 | ||
|
f7d69de030 |
90
NEWS
90
NEWS
@ -1,6 +1,94 @@
|
|||||||
Noteworthy changes in version 1.23.3 (unrelease)
|
Noteworthy changes in version 1.24.0 (unrelease)
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
|
||||||
|
* Extended gpgme_op_decrypt* and gpgme_op_verify* to allow writing the
|
||||||
|
output directly to a file. [T6550]
|
||||||
|
|
||||||
|
* Extended gpgme_op_encrypt*, gpgme_op_encrypt_sign*, and gpgme_op_sign*
|
||||||
|
to allow reading the input data directly from a file. [T6550]
|
||||||
|
|
||||||
|
* Add information about designated revocation keys. [T7118]
|
||||||
|
|
||||||
|
* New context flag "import-options". [T7152]
|
||||||
|
|
||||||
|
* cpp: Provide information about designated revocation keys for a Key.
|
||||||
|
[T7118]
|
||||||
|
|
||||||
|
* cpp: Add safer member function returning text describing an error.
|
||||||
|
[T5960]
|
||||||
|
|
||||||
|
* qt: Build QGpgME for Qt 5 and Qt 6 simultaneously. [T7205]
|
||||||
|
|
||||||
|
* qt: Install headers for Qt 5 and Qt 6 in separate folders. [T7161]
|
||||||
|
|
||||||
|
* qt: Allow reading the data to decrypt/encrypt/sign/verify directly from
|
||||||
|
files. [T6550]
|
||||||
|
|
||||||
|
* qt: Allow writing the decrypted/encrypted/signed/verified data directly
|
||||||
|
to files. [T6550]
|
||||||
|
|
||||||
|
* qt: Allow specifying import options when importing keys. [T7152]
|
||||||
|
|
||||||
|
* qt: Allow appending a detached signature to an existing file. [T6867]
|
||||||
|
|
||||||
|
* Interface changes relative to the 1.23.2 release:
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
GPGME_ENCRYPT_FILE NEW.
|
||||||
|
GPGME_SIG_MODE_FILE NEW.
|
||||||
|
gpgme_key_t EXTENDED: New field 'revkeys'.
|
||||||
|
gpgme_revocation_key_t NEW.
|
||||||
|
gpgme_set_ctx_flag EXTENDED: New flag 'import-options'.
|
||||||
|
cpp: Context::EncryptFile NEW.
|
||||||
|
cpp: SignatureMode::SignFile NEW.
|
||||||
|
cpp: RevocationKey NEW.
|
||||||
|
cpp: Key::revocationKey NEW.
|
||||||
|
cpp: Key::numRevocationKeys NEW.
|
||||||
|
cpp: Key::revocationKeys NEW.
|
||||||
|
cpp: Error::asStdString NEW.
|
||||||
|
cpp: Error::asString DEPRECATED.
|
||||||
|
qt: DecryptVerifyJob::setInputFile NEW.
|
||||||
|
qt: DecryptVerifyJob::inputFile NEW.
|
||||||
|
qt: DecryptVerifyJob::setOutputFile NEW.
|
||||||
|
qt: DecryptVerifyJob::outputFile NEW.
|
||||||
|
qt: EncryptJob::setRecipients NEW.
|
||||||
|
qt: EncryptJob::recipients NEW.
|
||||||
|
qt: EncryptJob::setInputFile NEW.
|
||||||
|
qt: EncryptJob::inputFile NEW.
|
||||||
|
qt: EncryptJob::setOutputFile NEW.
|
||||||
|
qt: EncryptJob::outputFile NEW.
|
||||||
|
qt: EncryptJob::setEncryptionFlags NEW.
|
||||||
|
qt: EncryptJob::encryptionFlags NEW.
|
||||||
|
qt: SignEncryptJob::setSigners NEW.
|
||||||
|
qt: SignEncryptJob::signers NEW.
|
||||||
|
qt: SignEncryptJob::setRecipients NEW.
|
||||||
|
qt: SignEncryptJob::recipients NEW.
|
||||||
|
qt: SignEncryptJob::setInputFile NEW.
|
||||||
|
qt: SignEncryptJob::inputFile NEW.
|
||||||
|
qt: SignEncryptJob::setOutputFile NEW.
|
||||||
|
qt: SignEncryptJob::outputFile NEW.
|
||||||
|
qt: SignEncryptJob::setEncryptionFlags NEW.
|
||||||
|
qt: SignEncryptJob::encryptionFlags NEW.
|
||||||
|
qt: SignJob::setSigners NEW.
|
||||||
|
qt: SignJob::signers NEW.
|
||||||
|
qt: SignJob::setInputFile NEW.
|
||||||
|
qt: SignJob::inputFile NEW.
|
||||||
|
qt: SignJob::setOutputFile NEW.
|
||||||
|
qt: SignJob::outputFile NEW.
|
||||||
|
qt: SignJob::setSigningFlags NEW.
|
||||||
|
qt: SignJob::signingFlags NEW.
|
||||||
|
qt: SignJob::setAppendSignature NEW.
|
||||||
|
qt: SignJob::appendSignatureEnabled NEW.
|
||||||
|
qt: VerifyDetachedJob::setSignatureFile NEW.
|
||||||
|
qt: VerifyDetachedJob::signatureFile NEW.
|
||||||
|
qt: VerifyDetachedJob::setSignedFile NEW.
|
||||||
|
qt: VerifyDetachedJob::signedFile NEW.
|
||||||
|
qt: VerifyOpaqueJob::setInputFile NEW.
|
||||||
|
qt: VerifyOpaqueJob::inputFile NEW.
|
||||||
|
qt: VerifyOpaqueJob::setOutputFile NEW.
|
||||||
|
qt: VerifyOpaqueJob::outputFile NEW.
|
||||||
|
qt: ImportJob::setImportOptions NEW.
|
||||||
|
qt: ImportJob::importOptions NEW.
|
||||||
|
|
||||||
|
|
||||||
Noteworthy changes in version 1.23.2 (2023-11-28)
|
Noteworthy changes in version 1.23.2 (2023-11-28)
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
|
117
configure.ac
117
configure.ac
@ -31,8 +31,8 @@ min_automake_version="1.14"
|
|||||||
# for the LT versions.
|
# for the LT versions.
|
||||||
m4_define([mym4_package],[gpgme])
|
m4_define([mym4_package],[gpgme])
|
||||||
m4_define([mym4_major], [1])
|
m4_define([mym4_major], [1])
|
||||||
m4_define([mym4_minor], [23])
|
m4_define([mym4_minor], [24])
|
||||||
m4_define([mym4_micro], [3])
|
m4_define([mym4_micro], [0])
|
||||||
|
|
||||||
# Below is m4 magic to extract and compute the git revision number,
|
# Below is m4 magic to extract and compute the git revision number,
|
||||||
# the decimalized short revision number, a beta version string and a
|
# the decimalized short revision number, a beta version string and a
|
||||||
@ -85,7 +85,7 @@ AC_SUBST(LIBQGPGME_LT_REVISION)
|
|||||||
GPGME_CONFIG_API_VERSION=1
|
GPGME_CONFIG_API_VERSION=1
|
||||||
##############################################
|
##############################################
|
||||||
|
|
||||||
NEED_GPG_ERROR_VERSION=1.36
|
NEED_GPG_ERROR_VERSION=1.47
|
||||||
NEED_LIBASSUAN_API=2
|
NEED_LIBASSUAN_API=2
|
||||||
NEED_LIBASSUAN_VERSION=2.4.2
|
NEED_LIBASSUAN_VERSION=2.4.2
|
||||||
|
|
||||||
@ -257,7 +257,7 @@ have_macos_system=no
|
|||||||
build_w32_glib=no
|
build_w32_glib=no
|
||||||
build_w32_qt=no
|
build_w32_qt=no
|
||||||
available_languages="cl cpp python qt qt5 qt6"
|
available_languages="cl cpp python qt qt5 qt6"
|
||||||
default_languages="cl cpp python qt"
|
default_languages="cl cpp python qt5 qt6"
|
||||||
case "${host}" in
|
case "${host}" in
|
||||||
x86_64-*mingw32*)
|
x86_64-*mingw32*)
|
||||||
have_w64_system=yes
|
have_w64_system=yes
|
||||||
@ -375,8 +375,7 @@ AC_ARG_ENABLE([no-direct-extern-access],
|
|||||||
AC_ARG_ENABLE([languages],
|
AC_ARG_ENABLE([languages],
|
||||||
AS_HELP_STRING([--enable-languages=languages],
|
AS_HELP_STRING([--enable-languages=languages],
|
||||||
[enable only specific language bindings:
|
[enable only specific language bindings:
|
||||||
cl cpp python qt qt5 qt6 (qt selects qt5 or qt6,
|
cl cpp python qt5 qt6]),
|
||||||
and qt5 and qt6 exclude each other)]),
|
|
||||||
[enabled_languages=`echo $enableval | \
|
[enabled_languages=`echo $enableval | \
|
||||||
tr ',:' ' ' | tr '[A-Z]' '[a-z]' | \
|
tr ',:' ' ' | tr '[A-Z]' '[a-z]' | \
|
||||||
sed 's/c++/cpp/'`],
|
sed 's/c++/cpp/'`],
|
||||||
@ -402,76 +401,95 @@ for language in $enabled_languages; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Check whether Qt5 and/or Qt6 are enabled explicitly
|
# Check whether qt5 and/or qt6 are enabled
|
||||||
want_qt5="no";
|
want_qt5="no"
|
||||||
LIST_MEMBER("qt5", $enabled_languages)
|
LIST_MEMBER("qt5", $enabled_languages)
|
||||||
if test "$found" = "1"; then
|
if test "$found" = "1"; then
|
||||||
want_qt5="yes";
|
if test "$explicit_languages" = "1"; then
|
||||||
|
want_qt5="yes"
|
||||||
|
else
|
||||||
|
want_qt5="maybe"
|
||||||
|
fi
|
||||||
# Remove qt5; further down qt will be added
|
# Remove qt5; further down qt will be added
|
||||||
enabled_languages=$(echo $enabled_languages | sed 's/qt5//')
|
enabled_languages=$(echo $enabled_languages | sed 's/qt5//')
|
||||||
fi
|
fi
|
||||||
want_qt6="no";
|
want_qt6="no"
|
||||||
LIST_MEMBER("qt6", $enabled_languages)
|
LIST_MEMBER("qt6", $enabled_languages)
|
||||||
if test "$found" = "1"; then
|
if test "$found" = "1"; then
|
||||||
want_qt6="yes";
|
if test "$explicit_languages" = "1"; then
|
||||||
|
want_qt6="yes"
|
||||||
|
else
|
||||||
|
want_qt6="maybe"
|
||||||
|
fi
|
||||||
# Remove qt6; further down qt will be added
|
# Remove qt6; further down qt will be added
|
||||||
enabled_languages=$(echo $enabled_languages | sed 's/qt6//')
|
enabled_languages=$(echo $enabled_languages | sed 's/qt6//')
|
||||||
fi
|
fi
|
||||||
if test "$want_qt5" = "yes" -a "$want_qt6" = "yes"; then
|
|
||||||
AC_MSG_ERROR([[
|
# Check whether qt is enabled; if yes then it has been enabled explicitly
|
||||||
|
want_qt="no"
|
||||||
|
LIST_MEMBER("qt", $enabled_languages)
|
||||||
|
if test "$found" = "1"; then
|
||||||
|
# Ignore qt if specified together with qt5 or qt6
|
||||||
|
if test "$want_qt5" = "no" -a "$want_qt6" = "no"; then
|
||||||
|
want_qt="yes"
|
||||||
|
fi
|
||||||
|
# Remove qt
|
||||||
|
enabled_languages=$(echo $enabled_languages | sed 's/qt//')
|
||||||
|
AC_MSG_WARN([[
|
||||||
***
|
***
|
||||||
*** The bindings for Qt5 and Qt6 cannot be built simultaneously.
|
*** Language binding "qt" is deprecated and will be removed in a future version.
|
||||||
|
*** Use "qt5" and/or "qt6" instead.
|
||||||
***]])
|
***]])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Ensure that pkg-config is available for all calls of FIND_QT5/FIND_QT6
|
# Ensure that pkg-config is available for all calls of FIND_QT5/FIND_QT6
|
||||||
PKG_PROG_PKG_CONFIG
|
PKG_PROG_PKG_CONFIG
|
||||||
|
|
||||||
# If the generic qt is enabled, then check for Qt5 or Qt6 (in this order)
|
# Check for Qt 5 (if qt5 or qt is enabled)
|
||||||
LIST_MEMBER("qt", $enabled_languages)
|
if test "$want_qt" = "yes"; then
|
||||||
if test "$found" = "1"; then
|
want_qt5="maybe"
|
||||||
# Remove the generic qt (qt5 and qt6 have already been removed)
|
fi
|
||||||
enabled_languages=$(echo $enabled_languages | sed 's/qt//')
|
if test "$want_qt5" != "no"; then
|
||||||
FIND_QT5
|
FIND_QT5
|
||||||
if test "$have_qt5_libs" = "yes"; then
|
if test "$have_qt5_libs" = "yes"; then
|
||||||
want_qt5="yes";
|
want_qt5="yes"
|
||||||
else
|
elif test "$want_qt5" = "yes"; then
|
||||||
FIND_QT6
|
|
||||||
if test "$have_qt6_libs" = "yes"; then
|
|
||||||
want_qt6="yes";
|
|
||||||
else
|
|
||||||
if test "$explicit_languages" = "1"; then
|
|
||||||
AC_MSG_ERROR([[
|
|
||||||
***
|
|
||||||
*** Qt5 (Qt5Core) or Qt6 (Qt6Core) is required for the Qt binding.
|
|
||||||
***]])
|
|
||||||
else
|
|
||||||
AC_MSG_WARN([[
|
|
||||||
***
|
|
||||||
*** Qt5 (Qt5Core) and Qt6 (Qt6Core) not found. Qt Binding will be disabled.
|
|
||||||
***]])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
elif test "$want_qt5" = "yes"; then
|
|
||||||
FIND_QT5
|
|
||||||
if test "$have_qt5_libs" != "yes"; then
|
|
||||||
AC_MSG_ERROR([[
|
AC_MSG_ERROR([[
|
||||||
***
|
***
|
||||||
*** Qt5 (Qt5Core) is required for the Qt 5 binding.
|
*** Qt5 (Qt5Core) is required for the Qt 5 binding.
|
||||||
***]])
|
***]])
|
||||||
|
else
|
||||||
|
want_qt5="no"
|
||||||
fi
|
fi
|
||||||
elif test "$want_qt6" = "yes"; then
|
fi
|
||||||
|
|
||||||
|
# Check for Qt 6 (if qt6 is enabled or if qt is enabled and Qt 5 wasn't found)
|
||||||
|
if test "$want_qt" = "yes" -a "$have_qt5_libs" != "yes"; then
|
||||||
|
want_qt6="maybe"
|
||||||
|
fi
|
||||||
|
if test "$want_qt6" != "no"; then
|
||||||
FIND_QT6
|
FIND_QT6
|
||||||
if test "$have_qt6_libs" != "yes"; then
|
if test "$have_qt6_libs" = "yes"; then
|
||||||
|
want_qt6="yes";
|
||||||
|
elif test "$want_qt6" = "yes"; then
|
||||||
AC_MSG_ERROR([[
|
AC_MSG_ERROR([[
|
||||||
***
|
***
|
||||||
*** Qt6 (Qt6Core) is required for the Qt 6 binding.
|
*** Qt6 (Qt6Core) is required for the Qt 6 binding.
|
||||||
***]])
|
***]])
|
||||||
|
else
|
||||||
|
want_qt6="no"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check that cpp is enabled if qt5 or qt6 is enabled
|
# Check if any Qt was found (if qt is enabled)
|
||||||
|
if test "$want_qt" = "yes" -a "$have_qt5_libs" != "yes" -a "$have_qt6_libs" != "yes"; then
|
||||||
|
AC_MSG_ERROR([[
|
||||||
|
***
|
||||||
|
*** Qt5 (Qt5Core) or Qt6 (Qt6Core) is required for the Qt bindings.
|
||||||
|
***]])
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check that cpp is enabled if qt5 or qt6 is enabled and was found
|
||||||
if test "$want_qt5" = "yes" -o "$want_qt6" = "yes"; then
|
if test "$want_qt5" = "yes" -o "$want_qt6" = "yes"; then
|
||||||
LIST_MEMBER("cpp", $enabled_languages)
|
LIST_MEMBER("cpp", $enabled_languages)
|
||||||
if test "$found" = "0"; then
|
if test "$found" = "0"; then
|
||||||
@ -522,7 +540,7 @@ if test "$found" = "1" -a "$HAVE_CXX17" != "1"; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Now append qt to the list of language bindings
|
# Now append qt to the list of language bindings (to enable the subdir in lang)
|
||||||
if test "$want_qt5" = "yes" -o "$want_qt6" = "yes"; then
|
if test "$want_qt5" = "yes" -o "$want_qt6" = "yes"; then
|
||||||
enabled_languages=$(echo $enabled_languages qt)
|
enabled_languages=$(echo $enabled_languages qt)
|
||||||
fi
|
fi
|
||||||
@ -590,8 +608,7 @@ if test "$found_py" = "1"; then
|
|||||||
if test "$found_py" = "1" -o "$found_py3" = "1"; then
|
if test "$found_py" = "1" -o "$found_py3" = "1"; then
|
||||||
# Reset everything, so that we can look for another Python.
|
# Reset everything, so that we can look for another Python.
|
||||||
m4_foreach([mym4pythonver],
|
m4_foreach([mym4pythonver],
|
||||||
[[2.7],[3.4],[3.5],[3.6],[3.7],[3.8],[3.9],[3.10],
|
[[2.7],[3.6],[3.8],[3.9],[3.10],[3.11],[3.12],[all]],
|
||||||
[3.11],[3.12],[all]],
|
|
||||||
[unset PYTHON
|
[unset PYTHON
|
||||||
unset PYTHON_VERSION
|
unset PYTHON_VERSION
|
||||||
unset PYTHON_CPPFLAGS
|
unset PYTHON_CPPFLAGS
|
||||||
@ -607,7 +624,7 @@ if test "$found_py" = "1"; then
|
|||||||
unset am_cv_python_pythondir
|
unset am_cv_python_pythondir
|
||||||
unset am_cv_python_pyexecdir
|
unset am_cv_python_pyexecdir
|
||||||
AM_PATH_PYTHON(mym4pythonver, [
|
AM_PATH_PYTHON(mym4pythonver, [
|
||||||
AX_PYTHON_DEVEL
|
AX_PYTHON_DEVEL([], [true])
|
||||||
if test "$PYTHON_VERSION"; then
|
if test "$PYTHON_VERSION"; then
|
||||||
PYTHONS="$(echo $PYTHONS $PYTHON)"
|
PYTHONS="$(echo $PYTHONS $PYTHON)"
|
||||||
PYTHON_VERSIONS="$(echo $PYTHON_VERSIONS $PYTHON_VERSION)"
|
PYTHON_VERSIONS="$(echo $PYTHON_VERSIONS $PYTHON_VERSION)"
|
||||||
@ -1146,7 +1163,9 @@ AC_CONFIG_FILES([lang/python/Makefile
|
|||||||
AC_CONFIG_FILES([lang/python/setup.py], [chmod a+x lang/python/setup.py])
|
AC_CONFIG_FILES([lang/python/setup.py], [chmod a+x lang/python/setup.py])
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
if test "$want_qt5" = "yes"; then
|
if test "$want_qt5" = "yes" -a "$want_qt6" = "yes"; then
|
||||||
|
enabled_languages_v=$(echo ${enabled_languages_v:-$enabled_languages} | sed "s/qt/qt (Qt 5, Qt 6)/")
|
||||||
|
elif test "$want_qt5" = "yes"; then
|
||||||
enabled_languages_v=$(echo ${enabled_languages_v:-$enabled_languages} | sed "s/qt/qt (Qt 5)/")
|
enabled_languages_v=$(echo ${enabled_languages_v:-$enabled_languages} | sed "s/qt/qt (Qt 5)/")
|
||||||
elif test "$want_qt6" = "yes"; then
|
elif test "$want_qt6" = "yes"; then
|
||||||
enabled_languages_v=$(echo ${enabled_languages_v:-$enabled_languages} | sed "s/qt/qt (Qt 6)/")
|
enabled_languages_v=$(echo ${enabled_languages_v:-$enabled_languages} | sed "s/qt/qt (Qt 6)/")
|
||||||
|
137
doc/gpgme.texi
137
doc/gpgme.texi
@ -589,10 +589,16 @@ mode (@code{_LARGEFILE64_SOURCE}).
|
|||||||
@cindex automake
|
@cindex automake
|
||||||
@cindex autoconf
|
@cindex autoconf
|
||||||
|
|
||||||
It is much easier if you use GNU Automake instead of writing your own
|
You can simply use @code{PKG_CHECK_MODULES} macro with @command{pkg-config}:
|
||||||
Makefiles. If you do that you do not have to worry about finding and
|
@example
|
||||||
invoking the @command{pkg-config} script at all. @acronym{GPGME}
|
PKG_CHECK_MODULES([GPGME], [gpgme >= 1.23.1])
|
||||||
provides an extension to Automake that does all the work for you.
|
@end example
|
||||||
|
|
||||||
|
Alternatively, instead of using @command{pkg-config}, for building on
|
||||||
|
an environment with no pkg-config, @acronym{GPGME} provides an
|
||||||
|
extension to Automake that does all the work for you. Please note
|
||||||
|
that it is required to have gpgrt-config from libgpg-error installed
|
||||||
|
in this case.
|
||||||
|
|
||||||
@c A simple macro for optional variables.
|
@c A simple macro for optional variables.
|
||||||
@macro ovar{varname}
|
@macro ovar{varname}
|
||||||
@ -2601,7 +2607,7 @@ addresses is not supported.
|
|||||||
|
|
||||||
The function @code{gpgme_set_sender} specifies the sender address for
|
The function @code{gpgme_set_sender} specifies the sender address for
|
||||||
use in sign and verify operations. @var{address} is expected to be
|
use in sign and verify operations. @var{address} is expected to be
|
||||||
the ``addr-spec'' part of an address but my also be a complete mailbox
|
the ``addr-spec'' part of an address but may also be a complete mailbox
|
||||||
address, in which case this function extracts the ``addr-spec'' from
|
address, in which case this function extracts the ``addr-spec'' from
|
||||||
it. Using @code{NULL} for @var{address} clears the sender address.
|
it. Using @code{NULL} for @var{address} clears the sender address.
|
||||||
|
|
||||||
@ -3273,6 +3279,12 @@ The string given in @var{value} is passed to the GnuPG engine to use as
|
|||||||
filter when importing keys. Valid values are documented in the GnuPG
|
filter when importing keys. Valid values are documented in the GnuPG
|
||||||
manual and the gpg man page under the option @option{--import-filter}.
|
manual and the gpg man page under the option @option{--import-filter}.
|
||||||
|
|
||||||
|
@item "import-options"
|
||||||
|
@since{1.24.0}
|
||||||
|
The string given in @var{value} is passed to the GnuPG engine to use as
|
||||||
|
options when importing keys. Valid values are documented in the GnuPG
|
||||||
|
manual and the gpg man page under the option @option{--import-options}.
|
||||||
|
|
||||||
@item "no-auto-check-trustdb"
|
@item "no-auto-check-trustdb"
|
||||||
@since{1.19.0}
|
@since{1.19.0}
|
||||||
Setting the @var{value} to "1" forces the GPG backend to disable the
|
Setting the @var{value} to "1" forces the GPG backend to disable the
|
||||||
@ -3560,6 +3572,10 @@ be missing but this field may be set nevertheless.
|
|||||||
|
|
||||||
Reserved for the time of the last update of this key.
|
Reserved for the time of the last update of this key.
|
||||||
|
|
||||||
|
@item gpgme_revocation_key_t revkeys
|
||||||
|
@since{1.24.0}
|
||||||
|
This is a linked list with the revocation keys for the key.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
@end deftp
|
@end deftp
|
||||||
|
|
||||||
@ -3902,6 +3918,37 @@ This is a linked list with the notation data and policy URLs.
|
|||||||
@end deftp
|
@end deftp
|
||||||
|
|
||||||
|
|
||||||
|
@deftp {Data type} gpgme_revocation_key_t
|
||||||
|
@since{1.24.0}
|
||||||
|
|
||||||
|
The @code{gpgme_revocation_key_t} type is a pointer to a revocation key
|
||||||
|
structure. Revocation key structures are one component of a
|
||||||
|
@code{gpgme_key_t} object. They provide information about the designated
|
||||||
|
revocation keys for a key.
|
||||||
|
|
||||||
|
The revocation key structure has the following members:
|
||||||
|
|
||||||
|
@table @code
|
||||||
|
@item gpgme_revocation_key_t next
|
||||||
|
This is a pointer to the next revocation key structure in the linked list,
|
||||||
|
or @code{NULL} if this is the last element.
|
||||||
|
|
||||||
|
@item gpgme_pubkey_algo_t pubkey_algo
|
||||||
|
This is the public key algorithm of the revocation key.
|
||||||
|
|
||||||
|
@item char *fpr
|
||||||
|
This is the fingerprint of the revocation_key in hexadecimal digits.
|
||||||
|
|
||||||
|
@item unsigned int key_class
|
||||||
|
This is the class of the revocation key signature subpacket.
|
||||||
|
|
||||||
|
@item unsigned int sensitive : 1
|
||||||
|
This is true if the revocation key is marked as sensitive.
|
||||||
|
|
||||||
|
@end table
|
||||||
|
@end deftp
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@node Listing Keys
|
@node Listing Keys
|
||||||
@subsection Listing Keys
|
@subsection Listing Keys
|
||||||
@ -4349,6 +4396,14 @@ override this check.
|
|||||||
|
|
||||||
Request generation of keys that do not expire.
|
Request generation of keys that do not expire.
|
||||||
|
|
||||||
|
@item GPGME_CREATE_ADSK
|
||||||
|
@since{1.24.0}
|
||||||
|
|
||||||
|
Add an ADSK to the key. With this flag @var{algo} is expected to be
|
||||||
|
the hexified fingerprint of the ADSK to be added; this must be a
|
||||||
|
subkey. If the string "default" is used for @var{algo} the engine
|
||||||
|
will add all ADSK as it would do for new keys.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
After the operation completed successfully, information about the
|
After the operation completed successfully, information about the
|
||||||
@ -4424,6 +4479,10 @@ values for timestamps and thus can only encode dates up to the year
|
|||||||
@var{flags} takes the same values as described above for
|
@var{flags} takes the same values as described above for
|
||||||
@code{gpgme_op_createkey}.
|
@code{gpgme_op_createkey}.
|
||||||
|
|
||||||
|
If the @code{GPGME_CREATE_ADSK} flag is set, the subkey fingerprint
|
||||||
|
given in the @code{algo} parameter is added as an ADSK
|
||||||
|
to the key.
|
||||||
|
|
||||||
After the operation completed successfully, information about the
|
After the operation completed successfully, information about the
|
||||||
created key can be retrieved with @code{gpgme_op_genkey_result}.
|
created key can be retrieved with @code{gpgme_op_genkey_result}.
|
||||||
|
|
||||||
@ -5377,16 +5436,19 @@ operation was started successfully, and @code{GPG_ERR_INV_VALUE} if
|
|||||||
@var{ctx} or @var{key} is not a valid pointer.
|
@var{ctx} or @var{key} is not a valid pointer.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
The following functions allow only to use one particular flag.
|
The following functions allow only to use one particular flag. Their
|
||||||
|
use is thus deprecated.
|
||||||
|
|
||||||
@deftypefun gpgme_error_t gpgme_op_delete (@w{gpgme_ctx_t @var{ctx}}, @w{const gpgme_key_t @var{key}}, @w{int @var{allow_secret}})
|
@deftypefun gpgme_error_t gpgme_op_delete (@w{gpgme_ctx_t @var{ctx}}, @w{const gpgme_key_t @var{key}}, @w{int @var{allow_secret}})
|
||||||
Similar to @code{gpgme_op_delete_ext}, but only the flag
|
Similar to @code{gpgme_op_delete_ext}, but only the flag
|
||||||
@code{GPGME_DELETE_ALLOW_SECRET} can be provided.
|
@code{GPGME_DELETE_ALLOW_SECRET} can be provided. Actually all true
|
||||||
|
values are mapped to this flag.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
@deftypefun gpgme_error_t gpgme_op_delete_start (@w{gpgme_ctx_t @var{ctx}}, @w{const gpgme_key_t @var{key}}, @w{int @var{allow_secret}})
|
@deftypefun gpgme_error_t gpgme_op_delete_start (@w{gpgme_ctx_t @var{ctx}}, @w{const gpgme_key_t @var{key}}, @w{int @var{allow_secret}})
|
||||||
Similar to @code{gpgme_op_delete_ext_start}, but only the flag
|
Similar to @code{gpgme_op_delete_ext_start}, but only the flag
|
||||||
@code{GPGME_DELETE_ALLOW_SECRET} can be provided.
|
@code{GPGME_DELETE_ALLOW_SECRET} can be provided. Actually all true
|
||||||
|
values are mapped to this flag.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
|
|
||||||
@ -5630,7 +5692,9 @@ An error code describing the reason why the key was found invalid.
|
|||||||
The function @code{gpgme_op_decrypt} decrypts the ciphertext in the
|
The function @code{gpgme_op_decrypt} decrypts the ciphertext in the
|
||||||
data object @var{cipher} or, if a file name is set on the data object,
|
data object @var{cipher} or, if a file name is set on the data object,
|
||||||
the ciphertext stored in the corresponding file. The decrypted
|
the ciphertext stored in the corresponding file. The decrypted
|
||||||
ciphertext is stored into the data object @var{plain}.
|
ciphertext is stored into the data object @var{plain} or written to
|
||||||
|
the file set with @code{gpgme_data_set_file_name} for the data object
|
||||||
|
@var{plain}.
|
||||||
|
|
||||||
The function returns the error code @code{GPG_ERR_NO_ERROR} if the
|
The function returns the error code @code{GPG_ERR_NO_ERROR} if the
|
||||||
ciphertext could be decrypted successfully, @code{GPG_ERR_INV_VALUE}
|
ciphertext could be decrypted successfully, @code{GPG_ERR_INV_VALUE}
|
||||||
@ -5846,7 +5910,9 @@ writable data object that will contain the plaintext after successful
|
|||||||
verification. If a file name is set on the data object @var{sig} (or
|
verification. If a file name is set on the data object @var{sig} (or
|
||||||
on the data object @var{signed_text}), then the data of the signature
|
on the data object @var{signed_text}), then the data of the signature
|
||||||
(resp. the data of the signed text) is not read from the data object
|
(resp. the data of the signed text) is not read from the data object
|
||||||
but from the file with the given file name.
|
but from the file with the given file name. If a file name is set on
|
||||||
|
the data object @var{plain} then the plaintext is not stored in the
|
||||||
|
data object but it is written to a file with the given file name.
|
||||||
|
|
||||||
The results of the individual signature verifications can be retrieved
|
The results of the individual signature verifications can be retrieved
|
||||||
with @code{gpgme_op_verify_result}.
|
with @code{gpgme_op_verify_result}.
|
||||||
@ -6366,6 +6432,16 @@ A signed archive is created from the given files and directories. This
|
|||||||
feature is currently only supported for the OpenPGP crypto engine and requires
|
feature is currently only supported for the OpenPGP crypto engine and requires
|
||||||
GnuPG 2.4.1.
|
GnuPG 2.4.1.
|
||||||
|
|
||||||
|
@item GPGME_SIG_MODE_FILE
|
||||||
|
@since{1.24.0}
|
||||||
|
|
||||||
|
The filename set with @code{gpgme_data_set_file_name} for the data object
|
||||||
|
@var{plain} is passed to gpg, so that gpg reads the plaintext directly from
|
||||||
|
this file instead of from the data object @var{plain}. This flag can be
|
||||||
|
combined with @code{GPGME_SIG_MODE_NORMAL}, @code{GPGME_SIG_MODE_DETACH},
|
||||||
|
and @code{GPGME_SIG_MODE_CLEAR}, but not with @code{GPGME_SIG_MODE_ARCHIVE}.
|
||||||
|
This feature is currently only supported for the OpenPGP crypto engine.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
@end deftp
|
@end deftp
|
||||||
|
|
||||||
@ -6379,12 +6455,17 @@ if that is not set, by the encoding specified for @var{sig}), the text
|
|||||||
mode attributes set for the context @var{ctx} and the requested signature
|
mode attributes set for the context @var{ctx} and the requested signature
|
||||||
mode @var{mode}.
|
mode @var{mode}.
|
||||||
|
|
||||||
If signature mode @code{GPGME_SIG_MODE_ARCHIVE} is requested, then a
|
If the signature mode flag @code{GPGME_SIG_MODE_FILE} is set and a filename
|
||||||
|
has been set with @code{gpgme_data_set_file_name} for the data object
|
||||||
|
@var{plain}, then this filename is passed to gpg, so that gpg reads the
|
||||||
|
plaintext directly from this file instead of from the data object @var{plain}.
|
||||||
|
|
||||||
|
If signature mode @code{GPGME_SIG_MODE_ARCHIVE} is requested then a
|
||||||
signed archive is created from the files and directories given as
|
signed archive is created from the files and directories given as
|
||||||
NUL-separated list in the data object @var{plain} and returned in the
|
NUL-separated list in the data object @var{plain}. The paths of the files
|
||||||
data object @var{sig}. The paths of the files and directories have to
|
and directories have to be given as paths relative to the current working
|
||||||
be given as paths relative to the current working directory or relative
|
directory or relative to the base directory set with
|
||||||
to the base directory set with @code{gpgme_data_set_file_name}.
|
@code{gpgme_data_set_file_name} for the data object @var{plain}.
|
||||||
|
|
||||||
After the operation completed successfully, the result can be
|
After the operation completed successfully, the result can be
|
||||||
retrieved with @code{gpgme_op_sign_result}.
|
retrieved with @code{gpgme_op_sign_result}.
|
||||||
@ -6557,14 +6638,21 @@ file set with @code{gpgme_data_set_file_name} for the data object
|
|||||||
@var{cipher}. The type of the ciphertext created is determined by the
|
@var{cipher}. The type of the ciphertext created is determined by the
|
||||||
@acronym{ASCII} armor (or, if that is not set, by the encoding specified
|
@acronym{ASCII} armor (or, if that is not set, by the encoding specified
|
||||||
for @var{cipher}) and the text mode attributes set for the context
|
for @var{cipher}) and the text mode attributes set for the context
|
||||||
@var{ctx}.
|
@var{ctx}. If a filename has been set with @code{gpgme_data_set_file_name}
|
||||||
|
for the data object @var{plain} then this filename is stored in the
|
||||||
|
ciphertext.
|
||||||
|
|
||||||
|
If the flag @code{GPGME_ENCRYPT_FILE} is set and a filename has been set
|
||||||
|
with @code{gpgme_data_set_file_name} for the data object @var{plain},
|
||||||
|
then this filename is passed to gpg, so that gpg reads the plaintext
|
||||||
|
directly from this file instead of from the data object @var{plain}.
|
||||||
|
|
||||||
If the flag @code{GPGME_ENCRYPT_ARCHIVE} is set, then an encrypted
|
If the flag @code{GPGME_ENCRYPT_ARCHIVE} is set, then an encrypted
|
||||||
archive is created from the files and directories given as NUL-separated
|
archive is created from the files and directories given as NUL-separated
|
||||||
list in the data object @var{plain} and returned in the data object
|
list in the data object @var{plain}. The paths of the files and
|
||||||
@var{cipher}. The paths of the files and directories have to
|
directories have to be given as paths relative to the current working
|
||||||
be given as paths relative to the current working directory or relative
|
directory or relative to the base directory set with
|
||||||
to the base directory set with @code{gpgme_data_set_file_name}.
|
@code{gpgme_data_set_file_name} for the data object @var{plain}.
|
||||||
|
|
||||||
@var{recp} must be a @code{NULL}-terminated array of keys. The user
|
@var{recp} must be a @code{NULL}-terminated array of keys. The user
|
||||||
must keep references for all keys during the whole duration of the
|
must keep references for all keys during the whole duration of the
|
||||||
@ -6653,6 +6741,15 @@ NUL-separated list of file paths and directory paths that shall be
|
|||||||
encrypted into an archive. This feature is currently only supported
|
encrypted into an archive. This feature is currently only supported
|
||||||
for the OpenPGP crypto engine and requires GnuPG 2.4.1.
|
for the OpenPGP crypto engine and requires GnuPG 2.4.1.
|
||||||
|
|
||||||
|
@item GPGME_ENCRYPT_FILE
|
||||||
|
@since{1.24.0}
|
||||||
|
|
||||||
|
The @code{GPGME_ENCRYPT_FILE} symbol specifies that the filename set
|
||||||
|
with @code{gpgme_data_set_file_name} for the data object @var{plain}
|
||||||
|
is passed to gpg, so that gpg reads the plaintext directly from this
|
||||||
|
file instead of from the data object @var{plain}. This feature is
|
||||||
|
currently only supported for the OpenPGP crypto engine.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
If @code{GPG_ERR_UNUSABLE_PUBKEY} is returned, some recipients in
|
If @code{GPG_ERR_UNUSABLE_PUBKEY} is returned, some recipients in
|
||||||
|
@ -88,6 +88,14 @@ else
|
|||||||
libsuffix=.so
|
libsuffix=.so
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
copied_headers = $(gpgmepp_headers:%=gpgme++/%) $(interface_headers:%=gpgme++/%)
|
||||||
|
|
||||||
|
$(copied_headers): Makefile.am
|
||||||
|
mkdir -p $(builddir)/gpgme++/interfaces
|
||||||
|
echo -n "#include \"$(abs_srcdir)" > "$@"
|
||||||
|
echo -n "$@" | sed "s/gpgme++//" >> "$@"
|
||||||
|
echo "\"" >> "$@"
|
||||||
|
|
||||||
if HAVE_W32_SYSTEM
|
if HAVE_W32_SYSTEM
|
||||||
GpgmeppConfig.cmake: GpgmeppConfig-w32.cmake.in
|
GpgmeppConfig.cmake: GpgmeppConfig-w32.cmake.in
|
||||||
sed -e 's|[@]resolved_bindir@|$(bindir)|g' < "$<" | \
|
sed -e 's|[@]resolved_bindir@|$(bindir)|g' < "$<" | \
|
||||||
@ -115,5 +123,8 @@ install-data-local: install-cmake-files
|
|||||||
|
|
||||||
uninstall-local: uninstall-cmake-files
|
uninstall-local: uninstall-cmake-files
|
||||||
|
|
||||||
|
BUILT_SOURCES = $(copied_headers)
|
||||||
|
|
||||||
CLEANFILES = GpgmeppConfig.cmake GpgmeppConfigVersion.cmake \
|
CLEANFILES = GpgmeppConfig.cmake GpgmeppConfigVersion.cmake \
|
||||||
gpgmepp_version.h GpgmeppConfig.cmake.in
|
gpgmepp_version.h GpgmeppConfig.cmake.in \
|
||||||
|
$(copied_headers)
|
||||||
|
@ -257,158 +257,6 @@ Type Option::alternateType() const
|
|||||||
return isNull() ? NoType : static_cast<Type>(opt->alt_type) ;
|
return isNull() ? NoType : static_cast<Type>(opt->alt_type) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
static Option::Variant argument_to_variant(gpgme_conf_type_t type, bool list, gpgme_conf_arg_t arg)
|
|
||||||
{
|
|
||||||
assert(arg);
|
|
||||||
switch (type) {
|
|
||||||
case GPGME_CONF_NONE:
|
|
||||||
if (list) {
|
|
||||||
// return the count (number of times set):
|
|
||||||
return arg->value.count;
|
|
||||||
} else {
|
|
||||||
return none;
|
|
||||||
}
|
|
||||||
case GPGME_CONF_INT32:
|
|
||||||
if (list) {
|
|
||||||
std::vector<int> result;
|
|
||||||
for (gpgme_conf_arg_t a = arg ; a ; a = a->next) {
|
|
||||||
result.push_back(a->value.int32);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
} else {
|
|
||||||
return arg->value.int32;
|
|
||||||
}
|
|
||||||
case GPGME_CONF_UINT32:
|
|
||||||
if (list) {
|
|
||||||
std::vector<unsigned int> result;
|
|
||||||
for (gpgme_conf_arg_t a = arg ; a ; a = a->next) {
|
|
||||||
result.push_back(a->value.uint32);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
} else {
|
|
||||||
return arg->value.uint32;
|
|
||||||
}
|
|
||||||
case GPGME_CONF_FILENAME:
|
|
||||||
case GPGME_CONF_LDAP_SERVER:
|
|
||||||
case GPGME_CONF_KEY_FPR:
|
|
||||||
case GPGME_CONF_PUB_KEY:
|
|
||||||
case GPGME_CONF_SEC_KEY:
|
|
||||||
case GPGME_CONF_ALIAS_LIST:
|
|
||||||
// these should not happen in alt_type, but fall through
|
|
||||||
case GPGME_CONF_STRING:
|
|
||||||
if (list) {
|
|
||||||
std::vector<const char *> result;
|
|
||||||
for (gpgme_conf_arg_t a = arg ; a ; a = a->next) {
|
|
||||||
result.push_back(a->value.string);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
} else {
|
|
||||||
return arg->value.string;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assert(!"Option: unknown alt_type!");
|
|
||||||
return Option::Variant();
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace
|
|
||||||
{
|
|
||||||
inline const void *to_void_star(const char *s)
|
|
||||||
{
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
inline const void *to_void_star(const std::string &s)
|
|
||||||
{
|
|
||||||
return s.c_str();
|
|
||||||
}
|
|
||||||
inline const void *to_void_star(const int &i)
|
|
||||||
{
|
|
||||||
return &i; // const-&: sic!
|
|
||||||
}
|
|
||||||
inline const void *to_void_star(const unsigned int &i)
|
|
||||||
{
|
|
||||||
return &i; // const-&: sic!
|
|
||||||
}
|
|
||||||
|
|
||||||
struct VariantToArgumentVisitor : boost::static_visitor<gpgme_conf_arg_t> {
|
|
||||||
static gpgme_conf_arg_t make_argument(gpgme_conf_type_t type, const void *value)
|
|
||||||
{
|
|
||||||
gpgme_conf_arg_t arg = 0;
|
|
||||||
#ifdef HAVE_GPGME_CONF_ARG_NEW_WITH_CONST_VALUE
|
|
||||||
if (const gpgme_error_t err = gpgme_conf_arg_new(&arg, type, value)) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if (const gpgme_error_t err = gpgme_conf_arg_new(&arg, type, const_cast<void *>(value))) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
else {
|
|
||||||
return arg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gpgme_conf_arg_t operator()(bool v) const
|
|
||||||
{
|
|
||||||
return v ? make_argument(0) : 0 ;
|
|
||||||
}
|
|
||||||
|
|
||||||
gpgme_conf_arg_t operator()(const char *s) const
|
|
||||||
{
|
|
||||||
return make_argument(s ? s : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
gpgme_conf_arg_t operator()(const std::string &s) const
|
|
||||||
{
|
|
||||||
return operator()(s.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
gpgme_conf_arg_t operator()(int i) const
|
|
||||||
{
|
|
||||||
return make_argument(&i);
|
|
||||||
}
|
|
||||||
|
|
||||||
gpgme_conf_arg_t operator()(unsigned int i) const
|
|
||||||
{
|
|
||||||
return make_argument(&i);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
gpgme_conf_arg_t operator()(const std::vector<T> &value) const
|
|
||||||
{
|
|
||||||
gpgme_conf_arg_t result = 0;
|
|
||||||
gpgme_conf_arg_t last = 0;
|
|
||||||
for (typename std::vector<T>::const_iterator it = value.begin(), end = value.end() ; it != end ; ++it) {
|
|
||||||
if (gpgme_conf_arg_t arg = make_argument(to_void_star(*it))) {
|
|
||||||
if (last) {
|
|
||||||
last = last->next = arg;
|
|
||||||
} else {
|
|
||||||
result = last = arg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
static gpgme_conf_arg_t variant_to_argument(const Option::Variant &value)
|
|
||||||
{
|
|
||||||
VariantToArgumentVisitor v;
|
|
||||||
return apply_visitor(v, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
optional<Option::Variant> Option::defaultValue() const
|
|
||||||
{
|
|
||||||
if (isNull()) {
|
|
||||||
return optional<Variant>();
|
|
||||||
} else {
|
|
||||||
return argument_to_variant(opt->alt_type, opt->flags & GPGME_CONF_LIST, opt->default_value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Argument Option::defaultValue() const
|
Argument Option::defaultValue() const
|
||||||
{
|
{
|
||||||
if (isNull()) {
|
if (isNull()) {
|
||||||
|
@ -130,6 +130,13 @@ const char *Error::asString() const
|
|||||||
return mMessage.c_str();
|
return mMessage.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string Error::asStdString() const
|
||||||
|
{
|
||||||
|
std::string message;
|
||||||
|
format_error(static_cast<gpgme_error_t>(mErr), message);
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
int Error::code() const
|
int Error::code() const
|
||||||
{
|
{
|
||||||
return gpgme_err_code(mErr);
|
return gpgme_err_code(mErr);
|
||||||
@ -147,11 +154,7 @@ bool Error::isCanceled() const
|
|||||||
|
|
||||||
int Error::toErrno() const
|
int Error::toErrno() const
|
||||||
{
|
{
|
||||||
//#ifdef HAVE_GPGME_GPG_ERROR_WRAPPERS
|
|
||||||
return gpgme_err_code_to_errno(static_cast<gpgme_err_code_t>(code()));
|
return gpgme_err_code_to_errno(static_cast<gpgme_err_code_t>(code()));
|
||||||
//#else
|
|
||||||
// return gpg_err_code_to_errno( static_cast<gpg_err_code_t>( code() ) );
|
|
||||||
//#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
@ -192,7 +195,7 @@ Error Error::fromCode(unsigned int err, unsigned int src)
|
|||||||
|
|
||||||
std::ostream &operator<<(std::ostream &os, const Error &err)
|
std::ostream &operator<<(std::ostream &os, const Error &err)
|
||||||
{
|
{
|
||||||
return os << "GpgME::Error(" << err.encodedError() << " (" << err.asString() << "))";
|
return os << "GpgME::Error(" << err.encodedError() << " (" << err.asStdString() << "))";
|
||||||
}
|
}
|
||||||
|
|
||||||
Context::KeyListModeSaver::KeyListModeSaver(Context *ctx)
|
Context::KeyListModeSaver::KeyListModeSaver(Context *ctx)
|
||||||
@ -1301,6 +1304,9 @@ static gpgme_sig_mode_t sigflags2sigflags(SignatureMode flags)
|
|||||||
if (flags & SignatureMode::SignArchive) {
|
if (flags & SignatureMode::SignArchive) {
|
||||||
result |= GPGME_SIG_MODE_ARCHIVE;
|
result |= GPGME_SIG_MODE_ARCHIVE;
|
||||||
}
|
}
|
||||||
|
if (flags & SignatureMode::SignFile) {
|
||||||
|
result |= GPGME_SIG_MODE_FILE;
|
||||||
|
}
|
||||||
return static_cast<gpgme_sig_mode_t>(result);
|
return static_cast<gpgme_sig_mode_t>(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1363,6 +1369,9 @@ static gpgme_encrypt_flags_t encryptflags2encryptflags(Context::EncryptionFlags
|
|||||||
if (flags & Context::EncryptArchive) {
|
if (flags & Context::EncryptArchive) {
|
||||||
result |= GPGME_ENCRYPT_ARCHIVE;
|
result |= GPGME_ENCRYPT_ARCHIVE;
|
||||||
}
|
}
|
||||||
|
if (flags & Context::EncryptFile) {
|
||||||
|
result |= GPGME_ENCRYPT_FILE;
|
||||||
|
}
|
||||||
return static_cast<gpgme_encrypt_flags_t>(result);
|
return static_cast<gpgme_encrypt_flags_t>(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1793,6 +1802,16 @@ Error Context::startRevokeSignature(const Key &key, const Key &signingKey,
|
|||||||
key.impl(), signingKey.impl(), uids.c_str(), flags));
|
key.impl(), signingKey.impl(), uids.c_str(), flags));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Error Context::addAdsk(const Key &k, const char *adsk)
|
||||||
|
{
|
||||||
|
return Error(d->lasterr = gpgme_op_createsubkey(d->ctx, k.impl(), adsk, 0, 0, GPGME_CREATE_ADSK));
|
||||||
|
}
|
||||||
|
|
||||||
|
Error Context::startAddAdsk(const Key &k, const char *adsk)
|
||||||
|
{
|
||||||
|
return Error(d->lasterr = gpgme_op_createsubkey_start(d->ctx, k.impl(), adsk, 0, 0, GPGME_CREATE_ADSK));
|
||||||
|
}
|
||||||
|
|
||||||
Error Context::setFlag(const char *name, const char *value)
|
Error Context::setFlag(const char *name, const char *value)
|
||||||
{
|
{
|
||||||
return Error(d->lasterr = gpgme_set_ctx_flag(d->ctx, name, value));
|
return Error(d->lasterr = gpgme_set_ctx_flag(d->ctx, name, value));
|
||||||
@ -1927,6 +1946,7 @@ std::ostream &operator<<(std::ostream &os, SignatureMode mode)
|
|||||||
}
|
}
|
||||||
#define CHECK( x ) if ( !(mode & (x)) ) {} else do { os << #x " "; } while (0)
|
#define CHECK( x ) if ( !(mode & (x)) ) {} else do { os << #x " "; } while (0)
|
||||||
CHECK(SignArchive);
|
CHECK(SignArchive);
|
||||||
|
CHECK(SignFile);
|
||||||
#undef CHECK
|
#undef CHECK
|
||||||
return os << ')';
|
return os << ')';
|
||||||
}
|
}
|
||||||
@ -1945,6 +1965,7 @@ std::ostream &operator<<(std::ostream &os, Context::EncryptionFlags flags)
|
|||||||
CHECK(EncryptWrap);
|
CHECK(EncryptWrap);
|
||||||
CHECK(WantAddress);
|
CHECK(WantAddress);
|
||||||
CHECK(EncryptArchive);
|
CHECK(EncryptArchive);
|
||||||
|
CHECK(EncryptFile);
|
||||||
#undef CHECK
|
#undef CHECK
|
||||||
return os << ')';
|
return os << ')';
|
||||||
}
|
}
|
||||||
|
@ -324,6 +324,9 @@ public:
|
|||||||
Error startRevokeSignature(const Key &key, const Key &signingKey,
|
Error startRevokeSignature(const Key &key, const Key &signingKey,
|
||||||
const std::vector<UserID> &userIds = std::vector<UserID>());
|
const std::vector<UserID> &userIds = std::vector<UserID>());
|
||||||
|
|
||||||
|
Error addAdsk(const Key &k, const char *adsk);
|
||||||
|
Error startAddAdsk(const Key &k, const char *adsk);
|
||||||
|
|
||||||
// using TofuInfo::Policy
|
// using TofuInfo::Policy
|
||||||
Error setTofuPolicy(const Key &k, unsigned int policy);
|
Error setTofuPolicy(const Key &k, unsigned int policy);
|
||||||
Error setTofuPolicyStart(const Key &k, unsigned int policy);
|
Error setTofuPolicyStart(const Key &k, unsigned int policy);
|
||||||
@ -450,7 +453,8 @@ public:
|
|||||||
ThrowKeyIds = 64,
|
ThrowKeyIds = 64,
|
||||||
EncryptWrap = 128,
|
EncryptWrap = 128,
|
||||||
WantAddress = 256,
|
WantAddress = 256,
|
||||||
EncryptArchive = 512
|
EncryptArchive = 512,
|
||||||
|
EncryptFile = 1024
|
||||||
};
|
};
|
||||||
EncryptionResult encrypt(const std::vector<Key> &recipients, const Data &plainText, Data &cipherText, EncryptionFlags flags);
|
EncryptionResult encrypt(const std::vector<Key> &recipients, const Data &plainText, Data &cipherText, EncryptionFlags flags);
|
||||||
GpgME::Error encryptSymmetrically(const Data &plainText, Data &cipherText);
|
GpgME::Error encryptSymmetrically(const Data &plainText, Data &cipherText);
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
context_glib.cpp - wraps a gpgme key context, gpgme-glib-specific functions
|
|
||||||
Copyright (C) 2007 Klarälvdalens Datakonsult AB
|
|
||||||
2016 Bundesamt für Sicherheit in der Informationstechnik
|
|
||||||
Software engineering by Intevation GmbH
|
|
||||||
|
|
||||||
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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <global.h>
|
|
||||||
|
|
||||||
extern "C" GIOChannel *gpgme_get_fdptr(int);
|
|
||||||
|
|
||||||
GIOChannel *GpgME::getGIOChannel(int fd)
|
|
||||||
{
|
|
||||||
return gpgme_get_fdptr(fd);
|
|
||||||
}
|
|
||||||
|
|
||||||
QIODevice *GpgME::getQIODevice(int fd)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
context_qt.cpp - wraps a gpgme key context, gpgme-qt-specific functions
|
|
||||||
Copyright (C) 2007 Klarälvdalens Datakonsult AB
|
|
||||||
2016 Bundesamt für Sicherheit in der Informationstechnik
|
|
||||||
Software engineering by Intevation GmbH
|
|
||||||
|
|
||||||
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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <global.h>
|
|
||||||
|
|
||||||
extern "C" QIODevice *gpgme_get_fdptr(int);
|
|
||||||
|
|
||||||
GIOChannel *GpgME::getGIOChannel(int)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
QIODevice *GpgME::getQIODevice(int fd)
|
|
||||||
{
|
|
||||||
return gpgme_get_fdptr(fd);
|
|
||||||
}
|
|
@ -25,7 +25,7 @@
|
|||||||
#ifndef __GPGMEPP_DEFAULTASSUANTRANSACTION_H__
|
#ifndef __GPGMEPP_DEFAULTASSUANTRANSACTION_H__
|
||||||
#define __GPGMEPP_DEFAULTASSUANTRANSACTION_H__
|
#define __GPGMEPP_DEFAULTASSUANTRANSACTION_H__
|
||||||
|
|
||||||
#include <interfaces/assuantransaction.h>
|
#include "interfaces/assuantransaction.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -52,6 +52,7 @@ using namespace GpgME;
|
|||||||
|
|
||||||
static const char *status_to_string(unsigned int status);
|
static const char *status_to_string(unsigned int status);
|
||||||
static Error status_to_error(unsigned int status);
|
static Error status_to_error(unsigned int status);
|
||||||
|
static Error parse_sc_op_failure(const char *args);
|
||||||
|
|
||||||
class EditInteractor::Private
|
class EditInteractor::Private
|
||||||
{
|
{
|
||||||
@ -102,6 +103,9 @@ public:
|
|||||||
} else if (status == GPGME_STATUS_ERROR) {
|
} else if (status == GPGME_STATUS_ERROR) {
|
||||||
err = ei->q->parseStatusError(args);
|
err = ei->q->parseStatusError(args);
|
||||||
ei->state = EditInteractor::ErrorState;
|
ei->state = EditInteractor::ErrorState;
|
||||||
|
} else if (status == GPGME_STATUS_SC_OP_FAILURE) {
|
||||||
|
err = parse_sc_op_failure(args);
|
||||||
|
ei->state = EditInteractor::ErrorState;
|
||||||
} else {
|
} else {
|
||||||
ei->state = ei->q->nextState(status, args, err);
|
ei->state = ei->q->nextState(status, args, err);
|
||||||
}
|
}
|
||||||
@ -134,7 +138,7 @@ public:
|
|||||||
if (writeAll(fd, result, len) != len) {
|
if (writeAll(fd, result, len) != len) {
|
||||||
err = Error::fromSystemError();
|
err = Error::fromSystemError();
|
||||||
if (ei->debug) {
|
if (ei->debug) {
|
||||||
std::fprintf(ei->debug, "EditInteractor: Could not write to fd %d (%s)\n", fd, err.asString());
|
std::fprintf(ei->debug, "EditInteractor: Could not write to fd %d (%s)\n", fd, err.asStdString().c_str());
|
||||||
}
|
}
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
@ -143,7 +147,7 @@ public:
|
|||||||
if (writeAll(fd, "\n", 1) != 1) {
|
if (writeAll(fd, "\n", 1) != 1) {
|
||||||
err = Error::fromSystemError();
|
err = Error::fromSystemError();
|
||||||
if (ei->debug) {
|
if (ei->debug) {
|
||||||
std::fprintf(ei->debug, "EditInteractor: Could not write to fd %d (%s)\n", fd, err.asString());
|
std::fprintf(ei->debug, "EditInteractor: Could not write to fd %d (%s)\n", fd, err.asStdString().c_str());
|
||||||
}
|
}
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
@ -280,6 +284,38 @@ GpgME::Error EditInteractor::parseStatusError(const char *args)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Error sc_op_failure_to_error(unsigned int status)
|
||||||
|
{
|
||||||
|
switch (status) {
|
||||||
|
case 1:
|
||||||
|
// GPG_ERR_CANCELED or GPG_ERR_FULLY_CANCELED
|
||||||
|
return Error::fromCode(GPG_ERR_CANCELED);
|
||||||
|
case 2:
|
||||||
|
// GPG_ERR_BAD_PIN or GPG_ERR_BAD_RESET_CODE [sic]
|
||||||
|
return Error::fromCode(GPG_ERR_BAD_PIN);
|
||||||
|
case 3:
|
||||||
|
return Error::fromCode(GPG_ERR_PIN_BLOCKED);
|
||||||
|
case 4:
|
||||||
|
return Error::fromCode(GPG_ERR_NO_RESET_CODE);
|
||||||
|
}
|
||||||
|
return Error::fromCode(GPG_ERR_CARD);
|
||||||
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
Error parse_sc_op_failure(const char *args)
|
||||||
|
{
|
||||||
|
Error err;
|
||||||
|
|
||||||
|
const auto fields = split(args, ' ');
|
||||||
|
if (fields.size() >= 1) {
|
||||||
|
err = sc_op_failure_to_error(static_cast<unsigned int>(std::stoul(fields[0])));
|
||||||
|
} else {
|
||||||
|
err = Error::fromCode(GPG_ERR_CARD);
|
||||||
|
}
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
static const char *const status_strings[] = {
|
static const char *const status_strings[] = {
|
||||||
"EOF",
|
"EOF",
|
||||||
/* mkstatus processing starts here */
|
/* mkstatus processing starts here */
|
||||||
|
@ -47,7 +47,11 @@ public:
|
|||||||
explicit Error(unsigned int e) : mErr(e), mMessage() {}
|
explicit Error(unsigned int e) : mErr(e), mMessage() {}
|
||||||
|
|
||||||
const char *source() const;
|
const char *source() const;
|
||||||
const char *asString() const;
|
/* This function is deprecated. Use asStdString() instead. asString() may
|
||||||
|
* return wrongly encoded (i.e. not UTF-8) results on Windows for the main
|
||||||
|
* thread if the function was first called from a secondary thread. */
|
||||||
|
GPGMEPP_DEPRECATED const char *asString() const;
|
||||||
|
std::string asStdString() const;
|
||||||
|
|
||||||
int code() const;
|
int code() const;
|
||||||
int sourceID() const;
|
int sourceID() const;
|
||||||
|
@ -79,6 +79,7 @@ enum SignatureMode {
|
|||||||
Detached = 1,
|
Detached = 1,
|
||||||
Clearsigned = 2,
|
Clearsigned = 2,
|
||||||
SignArchive = 4,
|
SignArchive = 4,
|
||||||
|
SignFile = 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class RevocationReason {
|
enum class RevocationReason {
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
#ifndef __GPGMEPP_GPGADDUSERIDEDITINTERACTOR_H__
|
#ifndef __GPGMEPP_GPGADDUSERIDEDITINTERACTOR_H__
|
||||||
#define __GPGMEPP_GPGADDUSERIDEDITINTERACTOR_H__
|
#define __GPGMEPP_GPGADDUSERIDEDITINTERACTOR_H__
|
||||||
|
|
||||||
#include <editinteractor.h>
|
#include "editinteractor.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
#ifndef __GPGMEPP_GPGAGENTGETINFOASSUANTRANSACTION_H__
|
#ifndef __GPGMEPP_GPGAGENTGETINFOASSUANTRANSACTION_H__
|
||||||
#define __GPGMEPP_GPGAGENTGETINFOASSUANTRANSACTION_H__
|
#define __GPGMEPP_GPGAGENTGETINFOASSUANTRANSACTION_H__
|
||||||
|
|
||||||
#include <interfaces/assuantransaction.h>
|
#include "interfaces/assuantransaction.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
#ifndef __GPGMEPP_GPGGENCARDKEYEDITINTERACTOR_H__
|
#ifndef __GPGMEPP_GPGGENCARDKEYEDITINTERACTOR_H__
|
||||||
#define __GPGMEPP_GPGGENCARDKEYEDITINTERACTOR_H__
|
#define __GPGMEPP_GPGGENCARDKEYEDITINTERACTOR_H__
|
||||||
|
|
||||||
#include <editinteractor.h>
|
#include "editinteractor.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
@ -75,4 +75,7 @@ typedef struct _gpgme_tofu_info *gpgme_tofu_info_t;
|
|||||||
struct _gpgme_op_query_swdb_result;
|
struct _gpgme_op_query_swdb_result;
|
||||||
typedef struct _gpgme_op_query_swdb_result *gpgme_query_swdb_result_t;
|
typedef struct _gpgme_op_query_swdb_result *gpgme_query_swdb_result_t;
|
||||||
|
|
||||||
|
struct _gpgme_revocation_key;
|
||||||
|
typedef struct _gpgme_revocation_key *gpgme_revocation_key_t;
|
||||||
|
|
||||||
#endif // __GPGMEPP_GPGMEFW_H__
|
#endif // __GPGMEPP_GPGMEFW_H__
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
#ifndef __GPGMEPP_GPGSETEXPIRYTIMEEDITINTERACTOR_H__
|
#ifndef __GPGMEPP_GPGSETEXPIRYTIMEEDITINTERACTOR_H__
|
||||||
#define __GPGMEPP_GPGSETEXPIRYTIMEEDITINTERACTOR_H__
|
#define __GPGMEPP_GPGSETEXPIRYTIMEEDITINTERACTOR_H__
|
||||||
|
|
||||||
#include <editinteractor.h>
|
#include "editinteractor.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -25,8 +25,8 @@
|
|||||||
#ifndef __GPGMEPP_GPGSETOWNERTRUSTEDITINTERACTOR_H__
|
#ifndef __GPGMEPP_GPGSETOWNERTRUSTEDITINTERACTOR_H__
|
||||||
#define __GPGMEPP_GPGSETOWNERTRUSTEDITINTERACTOR_H__
|
#define __GPGMEPP_GPGSETOWNERTRUSTEDITINTERACTOR_H__
|
||||||
|
|
||||||
#include <editinteractor.h>
|
#include "editinteractor.h"
|
||||||
#include <key.h>
|
#include "key.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
#ifndef __GPGMEPP_GPGSIGNKEYEDITINTERACTOR_H__
|
#ifndef __GPGMEPP_GPGSIGNKEYEDITINTERACTOR_H__
|
||||||
#define __GPGMEPP_GPGSIGNKEYEDITINTERACTOR_H__
|
#define __GPGMEPP_GPGSIGNKEYEDITINTERACTOR_H__
|
||||||
|
|
||||||
#include <editinteractor.h>
|
#include "editinteractor.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
#ifndef __GPGMEPP_INTERFACES_ASSUANTRANSACTION_H__
|
#ifndef __GPGMEPP_INTERFACES_ASSUANTRANSACTION_H__
|
||||||
#define __GPGMEPP_INTERFACES_ASSUANTRANSACTION_H__
|
#define __GPGMEPP_INTERFACES_ASSUANTRANSACTION_H__
|
||||||
|
|
||||||
#include "gpgmepp_export.h"
|
#include "../gpgmepp_export.h"
|
||||||
|
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include "gpgmepp_export.h"
|
#include "../gpgmepp_export.h"
|
||||||
|
|
||||||
#include <gpg-error.h>
|
#include <gpg-error.h>
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
#ifndef __GPGMEPP_INTERFACES_STATUSCONSUMER_H__
|
#ifndef __GPGMEPP_INTERFACES_STATUSCONSUMER_H__
|
||||||
#define __GPGMEPP_INTERFACES_STATUSCONSUMER_H__
|
#define __GPGMEPP_INTERFACES_STATUSCONSUMER_H__
|
||||||
|
|
||||||
#include "gpgmepp_export.h"
|
#include "../gpgmepp_export.h"
|
||||||
|
|
||||||
namespace GpgME
|
namespace GpgME
|
||||||
{
|
{
|
||||||
|
@ -122,6 +122,37 @@ std::vector<Subkey> Key::subkeys() const
|
|||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RevocationKey Key::revocationKey(unsigned int index) const
|
||||||
|
{
|
||||||
|
return RevocationKey(key, index);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int Key::numRevocationKeys() const
|
||||||
|
{
|
||||||
|
if (!key) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
unsigned int count = 0;
|
||||||
|
for (auto revkey = key->revocation_keys; revkey; revkey = revkey->next) {
|
||||||
|
++count;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<RevocationKey> Key::revocationKeys() const
|
||||||
|
{
|
||||||
|
if (!key) {
|
||||||
|
return std::vector<RevocationKey>();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<RevocationKey> v;
|
||||||
|
v.reserve(numRevocationKeys());
|
||||||
|
for (auto revkey = key->revocation_keys; revkey; revkey = revkey->next) {
|
||||||
|
v.push_back(RevocationKey(key, revkey));
|
||||||
|
}
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
Key::OwnerTrust Key::ownerTrust() const
|
Key::OwnerTrust Key::ownerTrust() const
|
||||||
{
|
{
|
||||||
if (!key) {
|
if (!key) {
|
||||||
@ -1256,6 +1287,68 @@ bool UserID::Signature::isBad() const
|
|||||||
return isNull() || isExpired() || isInvalid();
|
return isNull() || isExpired() || isInvalid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// class RevocationKey
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
|
static gpgme_revocation_key_t find_revkey(const shared_gpgme_key_t &key, unsigned int idx)
|
||||||
|
{
|
||||||
|
if (key) {
|
||||||
|
for (gpgme_revocation_key_t s = key->revocation_keys; s; s = s->next, --idx) {
|
||||||
|
if (idx == 0) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gpgme_revocation_key_t verify_revkey(const shared_gpgme_key_t &key, gpgme_revocation_key_t revkey)
|
||||||
|
{
|
||||||
|
if (key) {
|
||||||
|
for (gpgme_revocation_key_t s = key->revocation_keys; s; s = s->next) {
|
||||||
|
if (s == revkey) {
|
||||||
|
return revkey;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
RevocationKey::RevocationKey() : key(), revkey(nullptr) {}
|
||||||
|
|
||||||
|
RevocationKey::RevocationKey(const shared_gpgme_key_t &k, unsigned int idx)
|
||||||
|
: key(k), revkey(find_revkey(k, idx))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
RevocationKey::RevocationKey(const shared_gpgme_key_t &k, gpgme_revocation_key_t sk)
|
||||||
|
: key(k), revkey(verify_revkey(k, sk))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Key RevocationKey::parent() const
|
||||||
|
{
|
||||||
|
return Key(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *RevocationKey::fingerprint() const
|
||||||
|
{
|
||||||
|
return revkey ? revkey->fpr : nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RevocationKey::isSensitive() const
|
||||||
|
{
|
||||||
|
return revkey ? revkey->sensitive : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int RevocationKey::algorithm() const
|
||||||
|
{
|
||||||
|
return revkey ? revkey->pubkey_algo : 0;
|
||||||
|
}
|
||||||
|
|
||||||
std::ostream &operator<<(std::ostream &os, const UserID &uid)
|
std::ostream &operator<<(std::ostream &os, const UserID &uid)
|
||||||
{
|
{
|
||||||
os << "GpgME::UserID(";
|
os << "GpgME::UserID(";
|
||||||
@ -1325,6 +1418,20 @@ std::ostream &operator<<(std::ostream &os, const Key &key)
|
|||||||
const std::vector<Subkey> subkeys = key.subkeys();
|
const std::vector<Subkey> subkeys = key.subkeys();
|
||||||
std::copy(subkeys.begin(), subkeys.end(),
|
std::copy(subkeys.begin(), subkeys.end(),
|
||||||
std::ostream_iterator<Subkey>(os, "\n"));
|
std::ostream_iterator<Subkey>(os, "\n"));
|
||||||
|
os << " revocationKeys:\n";
|
||||||
|
const std::vector<RevocationKey> revkeys = key.revocationKeys();
|
||||||
|
std::copy(revkeys.begin(), revkeys.end(),
|
||||||
|
std::ostream_iterator<RevocationKey>(os, "\n"));
|
||||||
|
}
|
||||||
|
return os << ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostream &operator<<(std::ostream &os, const RevocationKey &revkey)
|
||||||
|
{
|
||||||
|
os << "GpgME::RevocationKey(";
|
||||||
|
if (!revkey.isNull()) {
|
||||||
|
os << "\n fingerprint: " << protect(revkey.fingerprint())
|
||||||
|
<< "\n isSensitive: " << revkey.isSensitive();
|
||||||
}
|
}
|
||||||
return os << ')';
|
return os << ')';
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,7 @@ class Context;
|
|||||||
class Subkey;
|
class Subkey;
|
||||||
class UserID;
|
class UserID;
|
||||||
class TofuInfo;
|
class TofuInfo;
|
||||||
|
class RevocationKey;
|
||||||
|
|
||||||
typedef std::shared_ptr< std::remove_pointer<gpgme_key_t>::type > shared_gpgme_key_t;
|
typedef std::shared_ptr< std::remove_pointer<gpgme_key_t>::type > shared_gpgme_key_t;
|
||||||
|
|
||||||
@ -100,6 +101,10 @@ public:
|
|||||||
std::vector<UserID> userIDs() const;
|
std::vector<UserID> userIDs() const;
|
||||||
std::vector<Subkey> subkeys() const;
|
std::vector<Subkey> subkeys() const;
|
||||||
|
|
||||||
|
RevocationKey revocationKey(unsigned int index) const;
|
||||||
|
unsigned int numRevocationKeys() const;
|
||||||
|
std::vector<RevocationKey> revocationKeys() const;
|
||||||
|
|
||||||
bool isRevoked() const;
|
bool isRevoked() const;
|
||||||
bool isExpired() const;
|
bool isExpired() const;
|
||||||
bool isDisabled() const;
|
bool isDisabled() const;
|
||||||
@ -547,9 +552,53 @@ private:
|
|||||||
gpgme_key_sig_t sig;
|
gpgme_key_sig_t sig;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// class RevocationKey
|
||||||
|
//
|
||||||
|
|
||||||
|
class GPGMEPP_EXPORT RevocationKey
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
RevocationKey();
|
||||||
|
RevocationKey(const shared_gpgme_key_t &key, gpgme_revocation_key_t revkey);
|
||||||
|
RevocationKey(const shared_gpgme_key_t &key, unsigned int idx);
|
||||||
|
|
||||||
|
// Rule of Zero
|
||||||
|
|
||||||
|
void swap(RevocationKey &other)
|
||||||
|
{
|
||||||
|
using std::swap;
|
||||||
|
swap(this->key, other.key);
|
||||||
|
swap(this->revkey, other.revkey);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isNull() const
|
||||||
|
{
|
||||||
|
return !key || !revkey;
|
||||||
|
}
|
||||||
|
|
||||||
|
Key parent() const;
|
||||||
|
|
||||||
|
const char *fingerprint() const;
|
||||||
|
|
||||||
|
bool isSensitive() const;
|
||||||
|
|
||||||
|
int algorithm() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
shared_gpgme_key_t key;
|
||||||
|
gpgme_revocation_key_t revkey;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline void swap(RevocationKey& v1, RevocationKey& v2)
|
||||||
|
{
|
||||||
|
v1.swap(v2);
|
||||||
|
}
|
||||||
|
|
||||||
GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, const UserID &uid);
|
GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, const UserID &uid);
|
||||||
GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, const Subkey &subkey);
|
GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, const Subkey &subkey);
|
||||||
GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, const Key &key);
|
GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, const Key &key);
|
||||||
|
GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, const RevocationKey &revkey);
|
||||||
|
|
||||||
} // namespace GpgME
|
} // namespace GpgME
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
#ifndef __GPGMEPP_SCDGETINFOASSUANTRANSACTION_H__
|
#ifndef __GPGMEPP_SCDGETINFOASSUANTRANSACTION_H__
|
||||||
#define __GPGMEPP_SCDGETINFOASSUANTRANSACTION_H__
|
#define __GPGMEPP_SCDGETINFOASSUANTRANSACTION_H__
|
||||||
|
|
||||||
#include <interfaces/assuantransaction.h>
|
#include "interfaces/assuantransaction.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -200,6 +200,7 @@ GpgME::SignatureMode GpgME::CreatedSignature::mode() const
|
|||||||
case GPGME_SIG_MODE_DETACH: return Detached;
|
case GPGME_SIG_MODE_DETACH: return Detached;
|
||||||
case GPGME_SIG_MODE_CLEAR: return Clearsigned;
|
case GPGME_SIG_MODE_CLEAR: return Clearsigned;
|
||||||
case GPGME_SIG_MODE_ARCHIVE: return SignArchive; // cannot happen
|
case GPGME_SIG_MODE_ARCHIVE: return SignArchive; // cannot happen
|
||||||
|
case GPGME_SIG_MODE_FILE: return SignFile; // cannot happen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
#ifndef __GPGMEPP_STATUSCONSUMERASSUANTRANSACTION_H__
|
#ifndef __GPGMEPP_STATUSCONSUMERASSUANTRANSACTION_H__
|
||||||
#define __GPGMEPP_STATUSCONSUMERASSUANTRANSACTION_H__
|
#define __GPGMEPP_STATUSCONSUMERASSUANTRANSACTION_H__
|
||||||
|
|
||||||
#include <interfaces/assuantransaction.h>
|
#include "interfaces/assuantransaction.h"
|
||||||
|
|
||||||
namespace GpgME
|
namespace GpgME
|
||||||
{
|
{
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
#define __GPGMEPP_TRUSTITEM_H__
|
#define __GPGMEPP_TRUSTITEM_H__
|
||||||
|
|
||||||
#include "gpgmefw.h"
|
#include "gpgmefw.h"
|
||||||
#include <key.h>
|
#include "key.h"
|
||||||
#include "gpgmepp_export.h"
|
#include "gpgmepp_export.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
@ -150,7 +150,7 @@ main (int argc, char **argv)
|
|||||||
const GpgME::Key key = ctx->key (*argv, err, only_secret);
|
const GpgME::Key key = ctx->key (*argv, err, only_secret);
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
|
|
||||||
ss << "Key " << key << " Err: " << err.asString() << "\n";
|
ss << "Key " << key << " Err: " << err.asStdString() << "\n";
|
||||||
|
|
||||||
std::cout << ss.str();
|
std::cout << ss.str();
|
||||||
|
|
||||||
|
@ -153,14 +153,17 @@ main (int argc, char **argv)
|
|||||||
}
|
}
|
||||||
Error err = ctx->startKeyListing (*argv, only_secret);
|
Error err = ctx->startKeyListing (*argv, only_secret);
|
||||||
if (err) {
|
if (err) {
|
||||||
std::cout << "Error: " << err.asString() << "\n";
|
std::cout << "Error: " << err.asStdString() << "\n";
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
GpgME::Key key;
|
GpgME::Key key;
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
do {
|
do {
|
||||||
key = ctx->nextKey(err);
|
key = ctx->nextKey(err);
|
||||||
|
if (!err)
|
||||||
|
{
|
||||||
ss << key << "\n\n";
|
ss << key << "\n\n";
|
||||||
|
}
|
||||||
} while (!err && !key.isNull());
|
} while (!err && !key.isNull());
|
||||||
|
|
||||||
std::cout << ss.str();
|
std::cout << ss.str();
|
||||||
|
@ -75,49 +75,52 @@ main (int argc, char **argv)
|
|||||||
Error err;
|
Error err;
|
||||||
auto ctx = std::unique_ptr<Context>{Context::createForEngine(AssuanEngine, &err)};
|
auto ctx = std::unique_ptr<Context>{Context::createForEngine(AssuanEngine, &err)};
|
||||||
if (!ctx) {
|
if (!ctx) {
|
||||||
std::cerr << "Failed to get context (Error: " << err.asString() << ")\n";
|
std::cerr << "Failed to get context (Error: " << err.asStdString() << ")\n";
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string dirmngrSocket = GpgME::dirInfo("dirmngr-socket");
|
const std::string dirmngrSocket = GpgME::dirInfo("dirmngr-socket");
|
||||||
if ((err = ctx->setEngineFileName(dirmngrSocket.c_str()))) {
|
if ((err = ctx->setEngineFileName(dirmngrSocket.c_str()))) {
|
||||||
std::cerr << "Failed to set engine file name (Error: " << err.asString() << ")\n";
|
std::cerr << "Failed to set engine file name (Error: " << err.asStdString() << ")\n";
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if ((err = ctx->setEngineHomeDirectory(""))) {
|
if ((err = ctx->setEngineHomeDirectory(""))) {
|
||||||
std::cerr << "Failed to set engine home directory (Error: " << err.asString() << ")\n";
|
std::cerr << "Failed to set engine home directory (Error: " << err.asStdString() << ")\n";
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// try to connect to dirmngr
|
// try to connect to dirmngr
|
||||||
err = ctx->assuanTransact("GETINFO version");
|
err = ctx->assuanTransact("GETINFO version");
|
||||||
if (err && err.code() != GPG_ERR_ASS_CONNECT_FAILED) {
|
if (err && err.code() != GPG_ERR_ASS_CONNECT_FAILED) {
|
||||||
std::cerr << "Failed to start assuan transaction (Error: " << err.asString() << ")\n";
|
std::cerr << "Failed to start assuan transaction (Error: " << err.asStdString() << ")\n";
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (err.code() == GPG_ERR_ASS_CONNECT_FAILED) {
|
if (err.code() == GPG_ERR_ASS_CONNECT_FAILED) {
|
||||||
std::cerr << "Starting dirmngr ...\n";
|
std::cerr << "Starting dirmngr ...\n";
|
||||||
auto spawnCtx = std::unique_ptr<Context>{Context::createForEngine(SpawnEngine, &err)};
|
auto spawnCtx = std::unique_ptr<Context>{Context::createForEngine(SpawnEngine, &err)};
|
||||||
if (!spawnCtx) {
|
if (!spawnCtx) {
|
||||||
std::cerr << "Failed to get context for spawn engine (Error: " << err.asString() << ")\n";
|
std::cerr << "Failed to get context for spawn engine (Error: " << err.asStdString() << ")\n";
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto dirmngrProgram = GpgME::dirInfo("dirmngr-name");
|
const auto gpgconfProgram = GpgME::dirInfo("gpgconf-name");
|
||||||
const auto homedir = GpgME::dirInfo("homedir");
|
// replace backslashes with forward slashes in homedir to work around bug T6833
|
||||||
|
std::string homedir{GpgME::dirInfo("homedir")};
|
||||||
|
std::replace(homedir.begin(), homedir.end(), '\\', '/');
|
||||||
const char *argv[] = {
|
const char *argv[] = {
|
||||||
dirmngrProgram,
|
gpgconfProgram,
|
||||||
"--homedir",
|
"--homedir",
|
||||||
homedir,
|
homedir.c_str(),
|
||||||
"--daemon",
|
"--launch",
|
||||||
|
"dirmngr",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
auto ignoreIO = Data{Data::null};
|
auto ignoreIO = Data{Data::null};
|
||||||
err = spawnCtx->spawnAsync(dirmngrProgram, argv,
|
err = spawnCtx->spawn(gpgconfProgram, argv,
|
||||||
ignoreIO, ignoreIO, ignoreIO,
|
ignoreIO, ignoreIO, ignoreIO,
|
||||||
Context::SpawnDetached);
|
Context::SpawnDetached);
|
||||||
if (err) {
|
if (err) {
|
||||||
std::cerr << "Failed to start dirmngr (Error: " << err.asString() << ")\n";
|
std::cerr << "Failed to start dirmngr (Error: " << err.asStdString() << ")\n";
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,7 +137,7 @@ main (int argc, char **argv)
|
|||||||
const auto cmd = std::string{"WKD_GET "} + email;
|
const auto cmd = std::string{"WKD_GET "} + email;
|
||||||
err = ctx->assuanTransact(cmd.c_str());
|
err = ctx->assuanTransact(cmd.c_str());
|
||||||
if (err && err.code() != GPG_ERR_NO_NAME && err.code() != GPG_ERR_NO_DATA) {
|
if (err && err.code() != GPG_ERR_NO_NAME && err.code() != GPG_ERR_NO_DATA) {
|
||||||
std::cerr << "Error: WKD_GET returned " << err.asString() << "\n";
|
std::cerr << "Error: WKD_GET returned " << err.asStdString() << "\n";
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ CLEANFILES = copystamp \
|
|||||||
# 'make distclean' clears the write bit, breaking rm -rf. Fix the
|
# 'make distclean' clears the write bit, breaking rm -rf. Fix the
|
||||||
# permissions.
|
# permissions.
|
||||||
clean-local:
|
clean-local:
|
||||||
rm -rf -- build
|
rm -rf -- build dist gpg.egg-info
|
||||||
for PYTHON in $(PYTHONS); do \
|
for PYTHON in $(PYTHONS); do \
|
||||||
find "$$(basename "$${PYTHON}")-gpg" -type d ! -perm -200 -exec chmod u+w {} ';' ; \
|
find "$$(basename "$${PYTHON}")-gpg" -type d ! -perm -200 -exec chmod u+w {} ';' ; \
|
||||||
rm -rf -- "$$(basename "$${PYTHON}")-gpg" ; \
|
rm -rf -- "$$(basename "$${PYTHON}")-gpg" ; \
|
||||||
@ -101,8 +101,12 @@ install-exec-local:
|
|||||||
done
|
done
|
||||||
|
|
||||||
uninstall-local:
|
uninstall-local:
|
||||||
set -x; GV=$$(echo $(VERSION) | tr - _); for PYTHON in $(PYTHONS); do \
|
set -x; \
|
||||||
|
GV=$$(echo $(VERSION) | tr - _); \
|
||||||
|
normalizedGV=$$(echo $$GV | sed s/_beta/b/); \
|
||||||
|
for PYTHON in $(PYTHONS); do \
|
||||||
PLATLIB="$(prefix)/$$("$${PYTHON}" -c 'import sysconfig, os; print(os.path.relpath(sysconfig.get_path("platlib", scheme="posix_prefix"), sysconfig.get_config_var("prefix")))')" ; \
|
PLATLIB="$(prefix)/$$("$${PYTHON}" -c 'import sysconfig, os; print(os.path.relpath(sysconfig.get_path("platlib", scheme="posix_prefix"), sysconfig.get_config_var("prefix")))')" ; \
|
||||||
rm -rf -- "$(DESTDIR)$${PLATLIB}/gpg" \
|
rm -rf -- "$(DESTDIR)$${PLATLIB}/gpg" \
|
||||||
"$(DESTDIR)$${PLATLIB}"/gpg-$$GV-py*.egg-info ; \
|
"$(DESTDIR)$${PLATLIB}"/gpg-$$GV-py*.egg-info \
|
||||||
|
"$(DESTDIR)$${PLATLIB}"/gpg-$$normalizedGV-py*.egg ; \
|
||||||
done
|
done
|
||||||
|
@ -2945,7 +2945,7 @@ Save that into a file called =keycount.pyx= and then create a
|
|||||||
=setup.py= file which contains this:
|
=setup.py= file which contains this:
|
||||||
|
|
||||||
#+BEGIN_SRC python -i
|
#+BEGIN_SRC python -i
|
||||||
from distutils.core import setup
|
from setuptools import setup
|
||||||
from Cython.Build import cythonize
|
from Cython.Build import cythonize
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from distutils.core import setup
|
from setuptools import setup
|
||||||
from Cython.Build import cythonize
|
from Cython.Build import cythonize
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
|
@ -18,8 +18,12 @@
|
|||||||
# License along with this library; if not, write to the Free Software
|
# License along with this library; if not, write to the Free Software
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
from distutils.core import setup, Extension
|
try:
|
||||||
from distutils.command.build import build
|
from setuptools import setup, Extension
|
||||||
|
from setuptools.command.build import build
|
||||||
|
except ImportError:
|
||||||
|
from distutils.core import setup, Extension
|
||||||
|
from distutils.command.build import build
|
||||||
|
|
||||||
import glob
|
import glob
|
||||||
import os
|
import os
|
||||||
@ -225,9 +229,8 @@ class BuildExtFirstHack(build):
|
|||||||
build.run(self)
|
build.run(self)
|
||||||
|
|
||||||
|
|
||||||
py3 = [] if sys.version_info.major < 3 else ['-py3']
|
|
||||||
swig_sources = []
|
swig_sources = []
|
||||||
swig_opts = ['-threads'] + py3 + extra_swig_opts
|
swig_opts = ['-threads'] + extra_swig_opts
|
||||||
swige = Extension(
|
swige = Extension(
|
||||||
'gpg._gpgme',
|
'gpg._gpgme',
|
||||||
sources=swig_sources,
|
sources=swig_sources,
|
||||||
@ -282,10 +285,12 @@ GPGME and these bindings is available here:
|
|||||||
'Programming Language :: Python :: 2',
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
'Programming Language :: Python :: 3',
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.4',
|
|
||||||
'Programming Language :: Python :: 3.5',
|
|
||||||
'Programming Language :: Python :: 3.6',
|
'Programming Language :: Python :: 3.6',
|
||||||
'Programming Language :: Python :: 3.7',
|
'Programming Language :: Python :: 3.8',
|
||||||
|
'Programming Language :: Python :: 3.9',
|
||||||
|
'Programming Language :: Python :: 3.10',
|
||||||
|
'Programming Language :: Python :: 3.11',
|
||||||
|
'Programming Language :: Python :: 3.12',
|
||||||
'Operating System :: POSIX',
|
'Operating System :: POSIX',
|
||||||
'Operating System :: Microsoft :: Windows',
|
'Operating System :: Microsoft :: Windows',
|
||||||
'Topic :: Communications :: Email',
|
'Topic :: Communications :: Email',
|
||||||
|
@ -1,22 +1,22 @@
|
|||||||
# Makefile.am for GPGMEPP.
|
# Makefile.am - Makefile for QGpgME.
|
||||||
# Copyright (C) 2016 Bundesamt für Sicherheit in der Informationstechnik
|
# Copyright (C) 2016 Bundesamt für Sicherheit in der Informationstechnik
|
||||||
# Software engineering by Intevation GmbH
|
# Software engineering by Intevation GmbH
|
||||||
#
|
#
|
||||||
# This file is part of GPGMEPP.
|
# This file is part of QGpgME, the Qt API binding for GpgME.
|
||||||
#
|
#
|
||||||
# GPGME-CL is free software; you can redistribute it and/or modify it
|
# QGpgME is free software; you can redistribute it and/or modify it
|
||||||
# under the terms of the GNU General Public License as published by
|
# under the terms of the GNU General Public License as published by
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
# (at your option) any later version.
|
# (at your option) any later version.
|
||||||
#
|
#
|
||||||
# GPGME-CL is distributed in the hope that it will be useful,
|
# QGpgME is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
# GNU Lesser General Public License for more details.
|
# General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public
|
# You should have received a copy of the GNU General Public License
|
||||||
# License along with this program; if not, see <https://gnu.org/licenses/>.
|
# along with this program; if not, see <https://gnu.org/licenses/>.
|
||||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
if RUN_GPG_TESTS
|
if RUN_GPG_TESTS
|
||||||
tests = tests
|
tests = tests
|
||||||
|
@ -32,7 +32,7 @@ To use QGpgME first you need to obtain a Protocol class
|
|||||||
either for CMS (S/MIME) or OpenPGP. This Protocol class
|
either for CMS (S/MIME) or OpenPGP. This Protocol class
|
||||||
can then be used to create a Job.
|
can then be used to create a Job.
|
||||||
|
|
||||||
Each Job can be started asynchronusly and emits a result
|
Each Job can be started asynchronously and emits a result
|
||||||
signal when done. The jobs are deleted automatically
|
signal when done. The jobs are deleted automatically
|
||||||
with QObject::deleteLater so they can be started without
|
with QObject::deleteLater so they can be started without
|
||||||
result handlers.
|
result handlers.
|
||||||
@ -53,7 +53,7 @@ in the result signal.
|
|||||||
Jobs also provide progress signal whenever GnuPG emits
|
Jobs also provide progress signal whenever GnuPG emits
|
||||||
a progress status line.
|
a progress status line.
|
||||||
|
|
||||||
Most jobs also provide a way synchronusly execute them.
|
Most jobs also provide a way synchronously execute them.
|
||||||
Please not that synchronous use does not cause the autodeletion
|
Please not that synchronous use does not cause the autodeletion
|
||||||
to take place so you have to manually delete them.
|
to take place so you have to manually delete them.
|
||||||
|
|
||||||
|
@ -1,21 +1,22 @@
|
|||||||
# Makefile.am - Makefile for GPGME Qt docs.
|
# Makefile.am - Makefile for QGpgME docs.
|
||||||
# Copyright (C) 2016 Bundesamt für Sicherheit in der Informationstechnik
|
# Copyright (C) 2016 Bundesamt für Sicherheit in der Informationstechnik
|
||||||
# Software engineering by Intevation GmbH
|
# Software engineering by Intevation GmbH
|
||||||
#
|
#
|
||||||
# This file is part of GPGME.
|
# This file is part of QGpgME.
|
||||||
#
|
#
|
||||||
# GPGME is free software; you can redistribute it and/or modify it
|
# QGpgME is free software; you can redistribute it and/or modify it
|
||||||
# under the terms of the GNU Lesser General Public License as
|
# under the terms of the GNU General Public License as published by
|
||||||
# published by the Free Software Foundation; either version 2.1 of the
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
# License, or (at your option) any later version.
|
# (at your option) any later version.
|
||||||
#
|
#
|
||||||
# GPGME is distributed in the hope that it will be useful, but WITHOUT
|
# QGpgME is distributed in the hope that it will be useful,
|
||||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
# Public License for more details.
|
# General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU Lesser General Public
|
# You should have received a copy of the GNU General Public License
|
||||||
# License along with this program; if not, see <https://www.gnu.org/licenses/>.
|
# along with this program; if not, see <https://gnu.org/licenses/>.
|
||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
## Process this file with automake to produce Makefile.in
|
## Process this file with automake to produce Makefile.in
|
||||||
|
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
# Makefile.am for GPGMEPP.
|
# Makefile.am for QGpgME.
|
||||||
# Copyright (C) 2016 Bundesamt für Sicherheit in der Informationstechnik
|
# Copyright (C) 2016 Bundesamt für Sicherheit in der Informationstechnik
|
||||||
# Software engineering by Intevation GmbH
|
# Software engineering by Intevation GmbH
|
||||||
#
|
#
|
||||||
# This file is part of GPGMEPP.
|
# This file is part of QGpgME, the Qt API binding for GpgME.
|
||||||
#
|
#
|
||||||
# GPGME-CL is free software; you can redistribute it and/or modify it
|
# QGpgME is free software; you can redistribute it and/or modify it
|
||||||
# under the terms of the GNU General Public License as published by
|
# under the terms of the GNU General Public License as published by
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
# (at your option) any later version.
|
# (at your option) any later version.
|
||||||
#
|
#
|
||||||
# GPGME-CL is distributed in the hope that it will be useful,
|
# QGpgME is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
# GNU Lesser General Public License for more details.
|
# General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
@ -20,11 +20,12 @@
|
|||||||
# 02111-1307, USA
|
# 02111-1307, USA
|
||||||
|
|
||||||
if WANT_QT5
|
if WANT_QT5
|
||||||
lib_LTLIBRARIES = libqgpgme.la
|
libqgpgme_la = libqgpgme.la
|
||||||
endif
|
endif
|
||||||
if WANT_QT6
|
if WANT_QT6
|
||||||
lib_LTLIBRARIES = libqgpgmeqt6.la
|
libqgpgmeqt6_la = libqgpgmeqt6.la
|
||||||
endif
|
endif
|
||||||
|
lib_LTLIBRARIES = $(libqgpgme_la) $(libqgpgmeqt6_la)
|
||||||
|
|
||||||
EXTRA_DIST = QGpgmeConfig.cmake.in.in QGpgmeConfigVersion.cmake.in \
|
EXTRA_DIST = QGpgmeConfig.cmake.in.in QGpgmeConfigVersion.cmake.in \
|
||||||
qgpgme_debug.h qgpgme_version.h.in \
|
qgpgme_debug.h qgpgme_version.h.in \
|
||||||
@ -36,6 +37,7 @@ qgpgme_sources = \
|
|||||||
dataprovider.cpp \
|
dataprovider.cpp \
|
||||||
debug.cpp \
|
debug.cpp \
|
||||||
decryptverifyarchivejob.cpp \
|
decryptverifyarchivejob.cpp \
|
||||||
|
decryptverifyjob.cpp \
|
||||||
encryptarchivejob.cpp \
|
encryptarchivejob.cpp \
|
||||||
filelistdataprovider.cpp \
|
filelistdataprovider.cpp \
|
||||||
job.cpp multideletejob.cpp qgpgmeadduseridjob.cpp \
|
job.cpp multideletejob.cpp qgpgmeadduseridjob.cpp \
|
||||||
@ -65,8 +67,11 @@ qgpgme_sources = \
|
|||||||
signarchivejob.cpp \
|
signarchivejob.cpp \
|
||||||
signencryptjob.cpp \
|
signencryptjob.cpp \
|
||||||
signencryptarchivejob.cpp \
|
signencryptarchivejob.cpp \
|
||||||
|
signjob.cpp \
|
||||||
dn.cpp cryptoconfig.cpp wkdlookupresult.cpp \
|
dn.cpp cryptoconfig.cpp wkdlookupresult.cpp \
|
||||||
util.cpp \
|
util.cpp \
|
||||||
|
verifydetachedjob.cpp \
|
||||||
|
verifyopaquejob.cpp \
|
||||||
wkdrefreshjob.cpp
|
wkdrefreshjob.cpp
|
||||||
|
|
||||||
# If you add one here make sure that you also add one in camelcase
|
# If you add one here make sure that you also add one in camelcase
|
||||||
@ -179,6 +184,7 @@ private_qgpgme_headers = \
|
|||||||
changeexpiryjob_p.h \
|
changeexpiryjob_p.h \
|
||||||
cleaner.h \
|
cleaner.h \
|
||||||
decryptverifyarchivejob_p.h \
|
decryptverifyarchivejob_p.h \
|
||||||
|
decryptverifyjob_p.h \
|
||||||
encryptarchivejob_p.h \
|
encryptarchivejob_p.h \
|
||||||
encryptjob_p.h \
|
encryptjob_p.h \
|
||||||
importjob_p.h \
|
importjob_p.h \
|
||||||
@ -226,8 +232,11 @@ private_qgpgme_headers = \
|
|||||||
signarchivejob_p.h \
|
signarchivejob_p.h \
|
||||||
signencryptjob_p.h \
|
signencryptjob_p.h \
|
||||||
signencryptarchivejob_p.h \
|
signencryptarchivejob_p.h \
|
||||||
|
signjob_p.h \
|
||||||
threadedjobmixin.h \
|
threadedjobmixin.h \
|
||||||
util.h \
|
util.h \
|
||||||
|
verifydetachedjob_p.h \
|
||||||
|
verifyopaquejob_p.h \
|
||||||
wkdrefreshjob_p.h
|
wkdrefreshjob_p.h
|
||||||
|
|
||||||
qgpgme_moc_sources = \
|
qgpgme_moc_sources = \
|
||||||
@ -311,33 +320,84 @@ qgpgme_moc_sources = \
|
|||||||
gpgcardjob.moc \
|
gpgcardjob.moc \
|
||||||
qgpgmegpgcardjob.moc
|
qgpgmegpgcardjob.moc
|
||||||
|
|
||||||
qgpgmeincludedir = $(includedir)/qgpgme
|
if WANT_QT5
|
||||||
qgpgmeinclude_HEADERS = $(qgpgme_headers)
|
includeprefix5 = qgpgme-qt5
|
||||||
camelcaseincludedir = $(includedir)/QGpgME
|
qgpgme5includedir = $(includedir)/$(includeprefix5)/qgpgme
|
||||||
camelcaseinclude_HEADERS = $(camelcase_headers)
|
qgpgme5include_HEADERS = $(qgpgme_headers)
|
||||||
nodist_qgpgmeinclude_HEADERS = qgpgme_version.h
|
nodist_qgpgme5include_HEADERS = qgpgme_version.h
|
||||||
|
camelcase5includedir = $(includedir)/$(includeprefix5)/QGpgME
|
||||||
|
nodist_camelcase5include_HEADERS = $(camelcase_headers)
|
||||||
|
endif
|
||||||
|
if WANT_QT6
|
||||||
|
includeprefix6 = qgpgme-qt6
|
||||||
|
qgpgme6includedir = $(includedir)/$(includeprefix6)/qgpgme
|
||||||
|
qgpgme6include_HEADERS = $(qgpgme_headers)
|
||||||
|
nodist_qgpgme6include_HEADERS = qgpgme_version.h
|
||||||
|
camelcase6includedir = $(includedir)/$(includeprefix6)/QGpgME
|
||||||
|
nodist_camelcase6include_HEADERS = $(camelcase_headers)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# generate the moc files in two steps:
|
||||||
|
# 1. generate Qt 5/6-specific moc files in builddir with extension .moc5/.moc6;
|
||||||
|
# this ensures correct dependencies on the source files
|
||||||
|
# 2. generate forwarding headers in subfolders moc5/moc6 with extension .moc;
|
||||||
|
# this ensures that the "foo.moc" includes in the source files work and
|
||||||
|
# include the correct version of the generated moc files for Qt 5/6
|
||||||
|
# GNU make's pattern rules would make this easier, but we don't want to use them
|
||||||
|
if WANT_QT5
|
||||||
|
moc5_dir = moc5
|
||||||
|
qgpgme_moc5_sources = $(qgpgme_moc_sources:%.moc=%.moc5)
|
||||||
|
qgpgme_moc5_forward_headers = $(qgpgme_moc_sources:%=$(moc5_dir)/%)
|
||||||
|
|
||||||
|
.h.moc5:
|
||||||
|
$(MOC5) `test -f '$<' || echo '$(srcdir)/'`$< -o $@
|
||||||
|
|
||||||
|
$(moc5_dir):
|
||||||
|
mkdir $(moc5_dir)
|
||||||
|
|
||||||
|
$(qgpgme_moc5_forward_headers): Makefile.am | $(moc5_dir)
|
||||||
|
echo "#include \"../$(notdir $@)5\"" > "$@"
|
||||||
|
endif
|
||||||
|
if WANT_QT6
|
||||||
|
moc6_dir = moc6
|
||||||
|
qgpgme_moc6_sources = $(qgpgme_moc_sources:%.moc=%.moc6)
|
||||||
|
qgpgme_moc6_forward_headers = $(qgpgme_moc_sources:%=$(moc6_dir)/%)
|
||||||
|
|
||||||
|
.h.moc6:
|
||||||
|
$(MOC6) `test -f '$<' || echo '$(srcdir)/'`$< -o $@
|
||||||
|
|
||||||
|
$(moc6_dir):
|
||||||
|
mkdir $(moc6_dir)
|
||||||
|
|
||||||
|
$(qgpgme_moc6_forward_headers): Makefile.am | $(moc6_dir)
|
||||||
|
echo "#include \"../$(notdir $@)6\"" > "$@"
|
||||||
|
endif
|
||||||
|
|
||||||
if WANT_QT5
|
if WANT_QT5
|
||||||
AM_CPPFLAGS = -I$(top_srcdir)/lang/cpp/src -I$(top_builddir)/src \
|
libqgpgme_la_CPPFLAGS = -I./moc5 -I$(top_builddir)/lang/cpp/src -I$(top_builddir)/src \
|
||||||
@GPGME_QT5_CFLAGS@ @GPG_ERROR_CFLAGS@ @LIBASSUAN_CFLAGS@ \
|
@GPGME_QT5_CFLAGS@ @GPG_ERROR_CFLAGS@ @LIBASSUAN_CFLAGS@ \
|
||||||
-DBUILDING_QGPGME -Wsuggest-override \
|
-DBUILDING_QGPGME -Wsuggest-override \
|
||||||
-Wzero-as-null-pointer-constant
|
-Wzero-as-null-pointer-constant
|
||||||
|
|
||||||
libqgpgme_la_SOURCES = $(qgpgme_sources) $(qgpgme_headers) $(private_qgpgme_headers)
|
libqgpgme_la_SOURCES = $(qgpgme_sources) $(qgpgme_headers) $(private_qgpgme_headers)
|
||||||
|
|
||||||
|
nodist_libqgpgme_la_SOURCES = $(qgpgme_moc5_sources) $(qgpgme_moc5_forward_headers)
|
||||||
|
|
||||||
libqgpgme_la_LIBADD = ../../cpp/src/libgpgmepp.la ../../../src/libgpgme.la \
|
libqgpgme_la_LIBADD = ../../cpp/src/libgpgmepp.la ../../../src/libgpgme.la \
|
||||||
@LIBASSUAN_LIBS@ @GPG_ERROR_LIBS@ @GPGME_QT5_LIBS@
|
@LIBASSUAN_LIBS@ @GPG_ERROR_LIBS@ @GPGME_QT5_LIBS@
|
||||||
libqgpgme_la_LDFLAGS = -no-undefined -version-info \
|
libqgpgme_la_LDFLAGS = -no-undefined -version-info \
|
||||||
@LIBQGPGME_LT_CURRENT@:@LIBQGPGME_LT_REVISION@:@LIBQGPGME_LT_AGE@
|
@LIBQGPGME_LT_CURRENT@:@LIBQGPGME_LT_REVISION@:@LIBQGPGME_LT_AGE@
|
||||||
endif
|
endif
|
||||||
if WANT_QT6
|
if WANT_QT6
|
||||||
AM_CPPFLAGS = -I$(top_srcdir)/lang/cpp/src -I$(top_builddir)/src \
|
libqgpgmeqt6_la_CPPFLAGS = -I./moc6 -I$(top_builddir)/lang/cpp/src -I$(top_builddir)/src \
|
||||||
@GPGME_QT6_CFLAGS@ @GPG_ERROR_CFLAGS@ @LIBASSUAN_CFLAGS@ \
|
@GPGME_QT6_CFLAGS@ @GPG_ERROR_CFLAGS@ @LIBASSUAN_CFLAGS@ \
|
||||||
-DBUILDING_QGPGME -Wsuggest-override \
|
-DBUILDING_QGPGME -Wsuggest-override \
|
||||||
-Wzero-as-null-pointer-constant
|
-Wzero-as-null-pointer-constant
|
||||||
|
|
||||||
libqgpgmeqt6_la_SOURCES = $(qgpgme_sources) $(qgpgme_headers) $(private_qgpgme_headers)
|
libqgpgmeqt6_la_SOURCES = $(qgpgme_sources) $(qgpgme_headers) $(private_qgpgme_headers)
|
||||||
|
|
||||||
|
nodist_libqgpgmeqt6_la_SOURCES = $(qgpgme_moc6_sources) $(qgpgme_moc6_forward_headers)
|
||||||
|
|
||||||
libqgpgmeqt6_la_LIBADD = ../../cpp/src/libgpgmepp.la ../../../src/libgpgme.la \
|
libqgpgmeqt6_la_LIBADD = ../../cpp/src/libgpgmepp.la ../../../src/libgpgme.la \
|
||||||
@LIBASSUAN_LIBS@ @GPG_ERROR_LIBS@ @GPGME_QT6_LIBS@
|
@LIBASSUAN_LIBS@ @GPG_ERROR_LIBS@ @GPGME_QT6_LIBS@
|
||||||
libqgpgmeqt6_la_LDFLAGS = -no-undefined -version-info \
|
libqgpgmeqt6_la_LDFLAGS = -no-undefined -version-info \
|
||||||
@ -355,12 +415,12 @@ if HAVE_W32_SYSTEM
|
|||||||
QGpgmeConfig.cmake: QGpgmeConfig-w32.cmake.in
|
QGpgmeConfig.cmake: QGpgmeConfig-w32.cmake.in
|
||||||
sed -e 's|[@]resolved_bindir@|$(bindir)|g' < "$<" | \
|
sed -e 's|[@]resolved_bindir@|$(bindir)|g' < "$<" | \
|
||||||
sed -e 's|[@]resolved_libdir@|$(libdir)|g' | \
|
sed -e 's|[@]resolved_libdir@|$(libdir)|g' | \
|
||||||
sed -e 's|[@]resolved_includedir@|$(includedir)|g' > $@
|
sed -e 's|[@]resolved_includedir@|$(includedir)/$(includeprefix5)|g' > $@
|
||||||
else
|
else
|
||||||
QGpgmeConfig.cmake: QGpgmeConfig.cmake.in
|
QGpgmeConfig.cmake: QGpgmeConfig.cmake.in
|
||||||
sed -e 's|[@]resolved_libdir@|$(libdir)|g' < "$<" | \
|
sed -e 's|[@]resolved_libdir@|$(libdir)|g' < "$<" | \
|
||||||
sed -e 's|[@]libsuffix@|$(libsuffix)|g' | \
|
sed -e 's|[@]libsuffix@|$(libsuffix)|g' | \
|
||||||
sed -e 's|[@]resolved_includedir@|$(includedir)|g' > $@
|
sed -e 's|[@]resolved_includedir@|$(includedir)/$(includeprefix5)|g' > $@
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
if WANT_QT6
|
if WANT_QT6
|
||||||
@ -368,12 +428,12 @@ if HAVE_W32_SYSTEM
|
|||||||
QGpgmeQt6Config.cmake: QGpgmeQt6Config-w32.cmake.in
|
QGpgmeQt6Config.cmake: QGpgmeQt6Config-w32.cmake.in
|
||||||
sed -e 's|[@]resolved_bindir@|$(bindir)|g' < "$<" | \
|
sed -e 's|[@]resolved_bindir@|$(bindir)|g' < "$<" | \
|
||||||
sed -e 's|[@]resolved_libdir@|$(libdir)|g' | \
|
sed -e 's|[@]resolved_libdir@|$(libdir)|g' | \
|
||||||
sed -e 's|[@]resolved_includedir@|$(includedir)|g' > $@
|
sed -e 's|[@]resolved_includedir@|$(includedir)/$(includeprefix6)|g' > $@
|
||||||
else
|
else
|
||||||
QGpgmeQt6Config.cmake: QGpgmeQt6Config.cmake.in
|
QGpgmeQt6Config.cmake: QGpgmeQt6Config.cmake.in
|
||||||
sed -e 's|[@]resolved_libdir@|$(libdir)|g' < "$<" | \
|
sed -e 's|[@]resolved_libdir@|$(libdir)|g' < "$<" | \
|
||||||
sed -e 's|[@]libsuffix@|$(libsuffix)|g' | \
|
sed -e 's|[@]libsuffix@|$(libsuffix)|g' | \
|
||||||
sed -e 's|[@]resolved_includedir@|$(includedir)|g' > $@
|
sed -e 's|[@]resolved_includedir@|$(includedir)/$(includeprefix6)|g' > $@
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -383,50 +443,65 @@ $(camelcase_headers): Makefile.am
|
|||||||
echo ".h\"" >> "$@"
|
echo ".h\"" >> "$@"
|
||||||
|
|
||||||
if WANT_QT5
|
if WANT_QT5
|
||||||
install-cmake-files: QGpgmeConfig.cmake QGpgmeConfigVersion.cmake
|
install-cmake-files-qt5: QGpgmeConfig.cmake QGpgmeConfigVersion.cmake
|
||||||
-$(INSTALL) -d $(DESTDIR)$(libdir)/cmake/QGpgme
|
-$(INSTALL) -d $(DESTDIR)$(libdir)/cmake/QGpgme
|
||||||
$(INSTALL) -m 644 QGpgmeConfig.cmake \
|
$(INSTALL) -m 644 QGpgmeConfig.cmake \
|
||||||
$(DESTDIR)$(libdir)/cmake/QGpgme/QGpgmeConfig.cmake
|
$(DESTDIR)$(libdir)/cmake/QGpgme/QGpgmeConfig.cmake
|
||||||
$(INSTALL) -m 644 QGpgmeConfigVersion.cmake \
|
$(INSTALL) -m 644 QGpgmeConfigVersion.cmake \
|
||||||
$(DESTDIR)$(libdir)/cmake/QGpgme/QGpgmeConfigVersion.cmake
|
$(DESTDIR)$(libdir)/cmake/QGpgme/QGpgmeConfigVersion.cmake
|
||||||
|
install_cmake_files_qt5 = install-cmake-files-qt5
|
||||||
|
|
||||||
uninstall-cmake-files:
|
uninstall-cmake-files-qt5:
|
||||||
-rm $(DESTDIR)$(libdir)/cmake/QGpgme/QGpgmeConfigVersion.cmake
|
-rm $(DESTDIR)$(libdir)/cmake/QGpgme/QGpgmeConfigVersion.cmake
|
||||||
-rm $(DESTDIR)$(libdir)/cmake/QGpgme/QGpgmeConfig.cmake
|
-rm $(DESTDIR)$(libdir)/cmake/QGpgme/QGpgmeConfig.cmake
|
||||||
-rmdir $(DESTDIR)$(libdir)/cmake/QGpgme/
|
-rmdir $(DESTDIR)$(libdir)/cmake/QGpgme/
|
||||||
|
uninstall_cmake_files_qt5 = uninstall-cmake-files-qt5
|
||||||
|
|
||||||
|
uninstall-include-dirs-qt5:
|
||||||
|
-rmdir $(DESTDIR)$(qgpgme5includedir)
|
||||||
|
-rmdir $(DESTDIR)$(camelcase5includedir)
|
||||||
|
-rmdir $(DESTDIR)$(includedir)/$(includeprefix5)
|
||||||
|
uninstall_include_dirs_qt5 = uninstall-include-dirs-qt5
|
||||||
endif
|
endif
|
||||||
if WANT_QT6
|
if WANT_QT6
|
||||||
install-cmake-files: QGpgmeQt6Config.cmake QGpgmeQt6ConfigVersion.cmake
|
install-cmake-files-qt6: QGpgmeQt6Config.cmake QGpgmeQt6ConfigVersion.cmake
|
||||||
-$(INSTALL) -d $(DESTDIR)$(libdir)/cmake/QGpgmeQt6
|
-$(INSTALL) -d $(DESTDIR)$(libdir)/cmake/QGpgmeQt6
|
||||||
$(INSTALL) -m 644 QGpgmeQt6Config.cmake \
|
$(INSTALL) -m 644 QGpgmeQt6Config.cmake \
|
||||||
$(DESTDIR)$(libdir)/cmake/QGpgmeQt6/QGpgmeQt6Config.cmake
|
$(DESTDIR)$(libdir)/cmake/QGpgmeQt6/QGpgmeQt6Config.cmake
|
||||||
$(INSTALL) -m 644 QGpgmeQt6ConfigVersion.cmake \
|
$(INSTALL) -m 644 QGpgmeQt6ConfigVersion.cmake \
|
||||||
$(DESTDIR)$(libdir)/cmake/QGpgmeQt6/QGpgmeQt6ConfigVersion.cmake
|
$(DESTDIR)$(libdir)/cmake/QGpgmeQt6/QGpgmeQt6ConfigVersion.cmake
|
||||||
|
install_cmake_files_qt6 = install-cmake-files-qt6
|
||||||
|
|
||||||
uninstall-cmake-files:
|
uninstall-cmake-files-qt6:
|
||||||
-rm $(DESTDIR)$(libdir)/cmake/QGpgmeQt6/QGpgmeQt6ConfigVersion.cmake
|
-rm $(DESTDIR)$(libdir)/cmake/QGpgmeQt6/QGpgmeQt6ConfigVersion.cmake
|
||||||
-rm $(DESTDIR)$(libdir)/cmake/QGpgmeQt6/QGpgmeQt6Config.cmake
|
-rm $(DESTDIR)$(libdir)/cmake/QGpgmeQt6/QGpgmeQt6Config.cmake
|
||||||
-rmdir $(DESTDIR)$(libdir)/cmake/QGpgmeQt6/
|
-rmdir $(DESTDIR)$(libdir)/cmake/QGpgmeQt6/
|
||||||
|
uninstall_cmake_files_qt6 = uninstall-cmake-files-qt6
|
||||||
|
|
||||||
|
uninstall-include-dirs-qt6:
|
||||||
|
-rmdir $(DESTDIR)$(qgpgme6includedir)
|
||||||
|
-rmdir $(DESTDIR)$(camelcase6includedir)
|
||||||
|
-rmdir $(DESTDIR)$(includedir)/$(includeprefix6)
|
||||||
|
uninstall_include_dirs_qt6 = uninstall-include-dirs-qt6
|
||||||
endif
|
endif
|
||||||
|
|
||||||
install-data-local: install-cmake-files
|
install-data-local: $(install_cmake_files_qt5) $(install_cmake_files_qt6)
|
||||||
|
|
||||||
uninstall-local: uninstall-cmake-files
|
uninstall-hook: $(uninstall_cmake_files_qt5) $(uninstall_cmake_files_qt6) \
|
||||||
|
$(uninstall_include_dirs_qt5) $(uninstall_include_dirs_qt6)
|
||||||
|
|
||||||
BUILT_SOURCES = $(qgpgme_moc_sources) $(camelcase_headers)
|
BUILT_SOURCES = $(qgpgme_moc5_sources) $(qgpgme_moc5_forward_headers) \
|
||||||
|
$(qgpgme_moc6_sources) $(qgpgme_moc6_forward_headers) \
|
||||||
|
$(camelcase_headers)
|
||||||
|
|
||||||
CLEANFILES = $(qgpgme_moc_sources) $(camelcase_headers) QGpgmeConfig.cmake \
|
CLEANFILES = $(qgpgme_moc5_sources) $(qgpgme_moc5_forward_headers) \
|
||||||
|
$(qgpgme_moc6_sources) $(qgpgme_moc6_forward_headers) \
|
||||||
|
$(camelcase_headers) QGpgmeConfig.cmake \
|
||||||
qgpgme_version.h QGpgmeConfig.cmake.in \
|
qgpgme_version.h QGpgmeConfig.cmake.in \
|
||||||
QGpgmeConfig-w32.cmake.in QGpgmeConfigVersion.cmake \
|
QGpgmeConfig-w32.cmake.in QGpgmeConfigVersion.cmake \
|
||||||
QGpgmeQt6Config.cmake.in QGpgmeQt6Config-w32.cmake.in \
|
QGpgmeQt6Config.cmake.in QGpgmeQt6Config-w32.cmake.in \
|
||||||
QGpgmeQt6Config.cmake QGpgmeQt6ConfigVersion.cmake
|
QGpgmeQt6Config.cmake QGpgmeQt6ConfigVersion.cmake
|
||||||
|
|
||||||
if WANT_QT5
|
clean-local:
|
||||||
nodist_libqgpgme_la_SOURCES = $(qgpgme_moc_sources)
|
-test -z "$(moc5_dir)" || rm -rf $(moc5_dir)
|
||||||
endif
|
-test -z "$(moc6_dir)" || rm -rf $(moc6_dir)
|
||||||
if WANT_QT6
|
|
||||||
nodist_libqgpgmeqt6_la_SOURCES = $(qgpgme_moc_sources)
|
|
||||||
endif
|
|
||||||
|
|
||||||
.h.moc:
|
|
||||||
$(MOC) `test -f '$<' || echo '$(srcdir)/'`$< -o $@
|
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
# CMake Config file for QGPGME.
|
# CMake Config file for QGPGME.
|
||||||
# Copyright (C) 2016 Intevation GmbH
|
# Copyright (C) 2016 Intevation GmbH
|
||||||
#
|
#
|
||||||
# This file is part of GPGME.
|
# This file is part of QGpgME.
|
||||||
#
|
#
|
||||||
# GPGME-CL is free software; you can redistribute it and/or modify it
|
# QGpgME is free software; you can redistribute it and/or modify it
|
||||||
# under the terms of the GNU General Public License as published by
|
# under the terms of the GNU General Public License as published by
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
# (at your option) any later version.
|
# (at your option) any later version.
|
||||||
#
|
#
|
||||||
# GPGME-CL is distributed in the hope that it will be useful,
|
# QGpgME is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU Lesser General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
# CMake Config file for QGPGME.
|
# CMake Config file for QGPGME.
|
||||||
# Copyright (C) 2016 Intevation GmbH
|
# Copyright (C) 2016 Intevation GmbH
|
||||||
#
|
#
|
||||||
# This file is part of GPGME.
|
# This file is part of QGpgME.
|
||||||
#
|
#
|
||||||
# GPGME-CL is free software; you can redistribute it and/or modify it
|
# QGpgME is free software; you can redistribute it and/or modify it
|
||||||
# under the terms of the GNU General Public License as published by
|
# under the terms of the GNU General Public License as published by
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
# (at your option) any later version.
|
# (at your option) any later version.
|
||||||
#
|
#
|
||||||
# GPGME-CL is distributed in the hope that it will be useful,
|
# QGpgME is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU Lesser General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
# CMake Version file for QGPGME.
|
# CMake Version file for QGPGME.
|
||||||
# Copyright (C) 2016 Intevation GmbH
|
# Copyright (C) 2016 Intevation GmbH
|
||||||
#
|
#
|
||||||
# This file is part of GPGME.
|
# This file is part of QGpgME.
|
||||||
#
|
#
|
||||||
# GPGME-CL is free software; you can redistribute it and/or modify it
|
# QGpgME is free software; you can redistribute it and/or modify it
|
||||||
# under the terms of the GNU General Public License as published by
|
# under the terms of the GNU General Public License as published by
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
# (at your option) any later version.
|
# (at your option) any later version.
|
||||||
#
|
#
|
||||||
# GPGME-CL is distributed in the hope that it will be useful,
|
# QGpgME is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU Lesser General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# CMake Config file for QGpgME for Qt 6
|
# CMake Config file for QGpgME for Qt 6
|
||||||
# Copyright (C) 2016 Intevation GmbH
|
# Copyright (C) 2016 Intevation GmbH
|
||||||
#
|
#
|
||||||
# This file is part of GPGME.
|
# This file is part of QGpgME.
|
||||||
#
|
#
|
||||||
# QGpgME is free software; you can redistribute it and/or modify it
|
# QGpgME is free software; you can redistribute it and/or modify it
|
||||||
# under the terms of the GNU General Public License as published by
|
# under the terms of the GNU General Public License as published by
|
||||||
@ -11,7 +11,7 @@
|
|||||||
# QGpgME is distributed in the hope that it will be useful,
|
# QGpgME is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU Lesser General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# CMake Config file for QGpgME for Qt 6
|
# CMake Config file for QGpgME for Qt 6
|
||||||
# Copyright (C) 2016 Intevation GmbH
|
# Copyright (C) 2016 Intevation GmbH
|
||||||
#
|
#
|
||||||
# This file is part of GPGME.
|
# This file is part of QGpgME.
|
||||||
#
|
#
|
||||||
# QGpgME is free software; you can redistribute it and/or modify it
|
# QGpgME is free software; you can redistribute it and/or modify it
|
||||||
# under the terms of the GNU General Public License as published by
|
# under the terms of the GNU General Public License as published by
|
||||||
@ -11,7 +11,7 @@
|
|||||||
# QGpgME is distributed in the hope that it will be useful,
|
# QGpgME is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU Lesser General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# CMake Version file for QGpgME for Qt 6
|
# CMake Version file for QGpgME for Qt 6
|
||||||
# Copyright (C) 2016 Intevation GmbH
|
# Copyright (C) 2016 Intevation GmbH
|
||||||
#
|
#
|
||||||
# This file is part of GPGME.
|
# This file is part of QGpgME.
|
||||||
#
|
#
|
||||||
# QGpgME is free software; you can redistribute it and/or modify it
|
# QGpgME is free software; you can redistribute it and/or modify it
|
||||||
# under the terms of the GNU General Public License as published by
|
# under the terms of the GNU General Public License as published by
|
||||||
@ -11,7 +11,7 @@
|
|||||||
# QGpgME is distributed in the hope that it will be useful,
|
# QGpgME is distributed in the hope that it will be useful,
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
# GNU Lesser General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program; if not, write to the Free Software
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
#include "changeexpiryjob.h"
|
#include "changeexpiryjob.h"
|
||||||
#include "changeexpiryjob_p.h"
|
#include "changeexpiryjob_p.h"
|
||||||
|
|
||||||
#include <context.h>
|
#include <gpgme++/context.h>
|
||||||
|
|
||||||
using namespace GpgME;
|
using namespace GpgME;
|
||||||
using namespace QGpgME;
|
using namespace QGpgME;
|
||||||
|
@ -37,11 +37,7 @@
|
|||||||
|
|
||||||
#include "job.h"
|
#include "job.h"
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
#include <gpgme++/key.h>
|
||||||
# include "key.h"
|
|
||||||
#else
|
|
||||||
# include <gpgme++/key.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
@ -37,11 +37,7 @@
|
|||||||
|
|
||||||
#include "job.h"
|
#include "job.h"
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
#include <gpgme++/key.h>
|
||||||
# include "key.h"
|
|
||||||
#else
|
|
||||||
# include <gpgme++/key.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace QGpgME
|
namespace QGpgME
|
||||||
{
|
{
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
/* dataprovider.cpp
|
/* dataprovider.cpp
|
||||||
|
|
||||||
|
This file is part of qgpgme, the Qt API binding for gpgme
|
||||||
Copyright (C) 2004 Klarävdalens Datakonsult AB
|
Copyright (C) 2004 Klarävdalens Datakonsult AB
|
||||||
Copyright (c) 2016 by Bundesamt für Sicherheit in der Informationstechnik
|
Copyright (c) 2016 by Bundesamt für Sicherheit in der Informationstechnik
|
||||||
Software engineering by Intevation GmbH
|
Software engineering by Intevation GmbH
|
||||||
|
|
||||||
This file is part of QGPGME.
|
QGpgME is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
QGPGME is free software; you can redistribute it and/or modify it
|
QGpgME is distributed in the hope that it will be useful,
|
||||||
under the terms of the GNU Library General Public License as published
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
by the Free Software Foundation; either version 2 of the License, or
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
(at your option) any later version.
|
General Public License for more details.
|
||||||
|
|
||||||
QGPGME is distributed in the hope that it will be useful, but
|
You should have received a copy of the GNU General Public License
|
||||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
along with this program; if not, write to the Free Software
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
GNU Library General Public License for more details.
|
*/
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public License
|
|
||||||
along with QGPGME; 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++ -*-
|
// -*- c++ -*-
|
||||||
|
|
||||||
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
#include <dataprovider.h>
|
#include <dataprovider.h>
|
||||||
|
|
||||||
#include <error.h>
|
#include <gpgme++/error.h>
|
||||||
|
|
||||||
#include <QIODevice>
|
#include <QIODevice>
|
||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
/* dataprovider.h
|
/* dataprovider.h
|
||||||
|
|
||||||
|
This file is part of qgpgme, the Qt API binding for gpgme
|
||||||
Copyright (C) 2004 Klarälvdalens Datakonsult AB
|
Copyright (C) 2004 Klarälvdalens Datakonsult AB
|
||||||
Copyright (c) 2016 by Bundesamt für Sicherheit in der Informationstechnik
|
Copyright (c) 2016 by Bundesamt für Sicherheit in der Informationstechnik
|
||||||
Software engineering by Intevation GmbH
|
Software engineering by Intevation GmbH
|
||||||
|
|
||||||
This file is part of QGPGME.
|
QGpgME is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
QGPGME is free software; you can redistribute it and/or modify it
|
QGpgME is distributed in the hope that it will be useful,
|
||||||
under the terms of the GNU Library General Public License as published
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
by the Free Software Foundation; either version 2 of the License, or
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
(at your option) any later version.
|
General Public License for more details.
|
||||||
|
|
||||||
QGPGME is distributed in the hope that it will be useful, but
|
You should have received a copy of the GNU General Public License
|
||||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
along with this program; if not, write to the Free Software
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
GNU Library General Public License for more details.
|
*/
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public License
|
|
||||||
along with QGPGME; 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++ -*-
|
// -*- c++ -*-
|
||||||
#ifndef __QGPGME_DATAPROVIDER_H__
|
#ifndef __QGPGME_DATAPROVIDER_H__
|
||||||
@ -26,11 +26,7 @@
|
|||||||
|
|
||||||
#include "qgpgme_export.h"
|
#include "qgpgme_export.h"
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
|
||||||
#include <interfaces/dataprovider.h>
|
|
||||||
#else
|
|
||||||
#include <gpgme++/interfaces/dataprovider.h>
|
#include <gpgme++/interfaces/dataprovider.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "error.h"
|
#include <gpgme++/error.h>
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
@ -44,9 +44,9 @@ QDebug operator<<(QDebug debug, const GpgME::Error &err)
|
|||||||
{
|
{
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
// On Windows, we tell libgpg-error to return (translated) error messages as UTF-8
|
// On Windows, we tell libgpg-error to return (translated) error messages as UTF-8
|
||||||
const auto errAsString = QString::fromUtf8(err.asString());
|
const auto errAsString = QString::fromStdString(err.asStdString());
|
||||||
#else
|
#else
|
||||||
const auto errAsString = QString::fromLocal8Bit(err.asString());
|
const auto errAsString = QString::fromLocal8Bit(err.asStdString().c_str());
|
||||||
#endif
|
#endif
|
||||||
const bool oldSetting = debug.autoInsertSpaces();
|
const bool oldSetting = debug.autoInsertSpaces();
|
||||||
debug.nospace() << errAsString << " (code: " << err.code() << ", source: " << err.source() << ")";
|
debug.nospace() << errAsString << " (code: " << err.code() << ", source: " << err.source() << ")";
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
#include "decryptverifyarchivejob.h"
|
#include "decryptverifyarchivejob.h"
|
||||||
#include "decryptverifyarchivejob_p.h"
|
#include "decryptverifyarchivejob_p.h"
|
||||||
|
|
||||||
#include <engineinfo.h>
|
#include <gpgme++/engineinfo.h>
|
||||||
|
|
||||||
using namespace QGpgME;
|
using namespace QGpgME;
|
||||||
|
|
||||||
|
@ -36,11 +36,7 @@
|
|||||||
|
|
||||||
#include "job.h"
|
#include "job.h"
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
#include <gpgme++/context.h>
|
||||||
# include "context.h"
|
|
||||||
#else
|
|
||||||
# include <gpgme++/context.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace GpgME
|
namespace GpgME
|
||||||
{
|
{
|
||||||
|
74
lang/qt/src/decryptverifyjob.cpp
Normal file
74
lang/qt/src/decryptverifyjob.cpp
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
decryptverifyjob.cpp
|
||||||
|
|
||||||
|
This file is part of qgpgme, the Qt API binding for gpgme
|
||||||
|
Copyright (c) 2023 g10 Code GmbH
|
||||||
|
Software engineering by Ingo Klöcker <dev@ingo-kloecker.de>
|
||||||
|
|
||||||
|
QGpgME is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
QGpgME 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
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
In addition, as a special exception, the copyright holders give
|
||||||
|
permission to link the code of this program with any edition of
|
||||||
|
the Qt library by Trolltech AS, Norway (or with modified versions
|
||||||
|
of Qt that use the same license as Qt), and distribute linked
|
||||||
|
combinations including the two. You must obey the GNU General
|
||||||
|
Public License in all respects for all of the code used other than
|
||||||
|
Qt. If you modify this file, you may extend this exception to
|
||||||
|
your version of the file, but you are not obligated to do so. If
|
||||||
|
you do not wish to do so, delete this exception statement from
|
||||||
|
your version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "decryptverifyjob.h"
|
||||||
|
#include "decryptverifyjob_p.h"
|
||||||
|
|
||||||
|
using namespace QGpgME;
|
||||||
|
|
||||||
|
DecryptVerifyJob::DecryptVerifyJob(QObject *parent)
|
||||||
|
: Job{parent}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
DecryptVerifyJob::~DecryptVerifyJob() = default;
|
||||||
|
|
||||||
|
void DecryptVerifyJob::setInputFile(const QString &path)
|
||||||
|
{
|
||||||
|
auto d = jobPrivate<DecryptVerifyJobPrivate>(this);
|
||||||
|
d->m_inputFilePath = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString DecryptVerifyJob::inputFile() const
|
||||||
|
{
|
||||||
|
auto d = jobPrivate<DecryptVerifyJobPrivate>(this);
|
||||||
|
return d->m_inputFilePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DecryptVerifyJob::setOutputFile(const QString &path)
|
||||||
|
{
|
||||||
|
auto d = jobPrivate<DecryptVerifyJobPrivate>(this);
|
||||||
|
d->m_outputFilePath = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString DecryptVerifyJob::outputFile() const
|
||||||
|
{
|
||||||
|
auto d = jobPrivate<DecryptVerifyJobPrivate>(this);
|
||||||
|
return d->m_outputFilePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "decryptverifyjob.moc"
|
@ -62,6 +62,14 @@ namespace QGpgME
|
|||||||
DecryptVerifyJob instance will have scheduled it's own destruction with
|
DecryptVerifyJob instance will have scheduled it's own destruction with
|
||||||
a call to QObject::deleteLater().
|
a call to QObject::deleteLater().
|
||||||
|
|
||||||
|
Alternatively, the job can be started with startIt() after setting
|
||||||
|
an input file and an output file. If the job is started this way then
|
||||||
|
the backend reads the input and writes the output directly from/to the
|
||||||
|
specified input file and output file. In this case the plainText value of
|
||||||
|
the result signal will always be empty. This direct IO mode is currently
|
||||||
|
only supported for OpenPGP. Note that startIt() does not schedule the job's
|
||||||
|
destruction if starting the job failed.
|
||||||
|
|
||||||
After result() is emitted, the DecryptVerifyJob will schedule it's own
|
After result() is emitted, the DecryptVerifyJob will schedule it's own
|
||||||
destruction by calling QObject::deleteLater().
|
destruction by calling QObject::deleteLater().
|
||||||
*/
|
*/
|
||||||
@ -71,7 +79,27 @@ class QGPGME_EXPORT DecryptVerifyJob : public Job
|
|||||||
protected:
|
protected:
|
||||||
explicit DecryptVerifyJob(QObject *parent);
|
explicit DecryptVerifyJob(QObject *parent);
|
||||||
public:
|
public:
|
||||||
~DecryptVerifyJob();
|
~DecryptVerifyJob() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the path of the file to decrypt (and verify).
|
||||||
|
*
|
||||||
|
* Used if the job is started with startIt().
|
||||||
|
*/
|
||||||
|
void setInputFile(const QString &path);
|
||||||
|
QString inputFile() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the path of the file to write the result to.
|
||||||
|
*
|
||||||
|
* Used if the job is started with startIt().
|
||||||
|
*
|
||||||
|
* \note If a file with this path exists, then the job will fail, i.e. you
|
||||||
|
* need to delete an existing file that shall be overwritten before you
|
||||||
|
* start the job.
|
||||||
|
*/
|
||||||
|
void setOutputFile(const QString &path);
|
||||||
|
QString outputFile() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Starts the combined decryption and verification operation.
|
Starts the combined decryption and verification operation.
|
||||||
|
50
lang/qt/src/decryptverifyjob_p.h
Normal file
50
lang/qt/src/decryptverifyjob_p.h
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
decryptverifyjob_p.h
|
||||||
|
|
||||||
|
This file is part of qgpgme, the Qt API binding for gpgme
|
||||||
|
Copyright (c) 2023 g10 Code GmbH
|
||||||
|
Software engineering by Ingo Klöcker <dev@ingo-kloecker.de>
|
||||||
|
|
||||||
|
QGpgME is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
QGpgME 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
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
In addition, as a special exception, the copyright holders give
|
||||||
|
permission to link the code of this program with any edition of
|
||||||
|
the Qt library by Trolltech AS, Norway (or with modified versions
|
||||||
|
of Qt that use the same license as Qt), and distribute linked
|
||||||
|
combinations including the two. You must obey the GNU General
|
||||||
|
Public License in all respects for all of the code used other than
|
||||||
|
Qt. If you modify this file, you may extend this exception to
|
||||||
|
your version of the file, but you are not obligated to do so. If
|
||||||
|
you do not wish to do so, delete this exception statement from
|
||||||
|
your version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __QGPGME_DECRYPTVERIFYJOB_P_H__
|
||||||
|
#define __QGPGME_DECRYPTVERIFYJOB_P_H__
|
||||||
|
|
||||||
|
#include "job_p.h"
|
||||||
|
|
||||||
|
namespace QGpgME
|
||||||
|
{
|
||||||
|
|
||||||
|
struct DecryptVerifyJobPrivate : public JobPrivate
|
||||||
|
{
|
||||||
|
QString m_inputFilePath;
|
||||||
|
QString m_outputFilePath;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __QGPGME_DECRYPTVERIFYJOB_P_H__
|
@ -51,7 +51,7 @@ class QGPGME_DEPRECATED_EXPORT DefaultKeyGenerationJob : public Job
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit DefaultKeyGenerationJob(QObject *parent = Q_NULLPTR);
|
explicit DefaultKeyGenerationJob(QObject *parent = nullptr);
|
||||||
~DefaultKeyGenerationJob();
|
~DefaultKeyGenerationJob();
|
||||||
|
|
||||||
GpgME::Error start(const QString &email, const QString &name);
|
GpgME::Error start(const QString &email, const QString &name);
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
#include "encryptarchivejob.h"
|
#include "encryptarchivejob.h"
|
||||||
#include "encryptarchivejob_p.h"
|
#include "encryptarchivejob_p.h"
|
||||||
|
|
||||||
#include <engineinfo.h>
|
#include <gpgme++/engineinfo.h>
|
||||||
|
|
||||||
using namespace QGpgME;
|
using namespace QGpgME;
|
||||||
|
|
||||||
|
@ -36,11 +36,7 @@
|
|||||||
|
|
||||||
#include "job.h"
|
#include "job.h"
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
#include <gpgme++/context.h>
|
||||||
# include "context.h"
|
|
||||||
#else
|
|
||||||
# include <gpgme++/context.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace GpgME
|
namespace GpgME
|
||||||
{
|
{
|
||||||
|
@ -40,6 +40,13 @@
|
|||||||
|
|
||||||
using namespace QGpgME;
|
using namespace QGpgME;
|
||||||
|
|
||||||
|
EncryptJob::EncryptJob(QObject *parent)
|
||||||
|
: Job{parent}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
EncryptJob::~EncryptJob() = default;
|
||||||
|
|
||||||
void EncryptJob::setFileName(const QString &fileName)
|
void EncryptJob::setFileName(const QString &fileName)
|
||||||
{
|
{
|
||||||
auto d = jobPrivate<EncryptJobPrivate>(this);
|
auto d = jobPrivate<EncryptJobPrivate>(this);
|
||||||
@ -63,3 +70,53 @@ GpgME::Data::Encoding EncryptJob::inputEncoding() const
|
|||||||
auto d = jobPrivate<EncryptJobPrivate>(this);
|
auto d = jobPrivate<EncryptJobPrivate>(this);
|
||||||
return d->m_inputEncoding;
|
return d->m_inputEncoding;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EncryptJob::setRecipients(const std::vector<GpgME::Key> &recipients)
|
||||||
|
{
|
||||||
|
auto d = jobPrivate<EncryptJobPrivate>(this);
|
||||||
|
d->m_recipients = recipients;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<GpgME::Key> EncryptJob::recipients() const
|
||||||
|
{
|
||||||
|
auto d = jobPrivate<EncryptJobPrivate>(this);
|
||||||
|
return d->m_recipients;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EncryptJob::setInputFile(const QString &path)
|
||||||
|
{
|
||||||
|
auto d = jobPrivate<EncryptJobPrivate>(this);
|
||||||
|
d->m_inputFilePath = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString EncryptJob::inputFile() const
|
||||||
|
{
|
||||||
|
auto d = jobPrivate<EncryptJobPrivate>(this);
|
||||||
|
return d->m_inputFilePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EncryptJob::setOutputFile(const QString &path)
|
||||||
|
{
|
||||||
|
auto d = jobPrivate<EncryptJobPrivate>(this);
|
||||||
|
d->m_outputFilePath = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString EncryptJob::outputFile() const
|
||||||
|
{
|
||||||
|
auto d = jobPrivate<EncryptJobPrivate>(this);
|
||||||
|
return d->m_outputFilePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EncryptJob::setEncryptionFlags(GpgME::Context::EncryptionFlags flags)
|
||||||
|
{
|
||||||
|
auto d = jobPrivate<EncryptJobPrivate>(this);
|
||||||
|
d->m_encryptionFlags = static_cast<GpgME::Context::EncryptionFlags>(flags | GpgME::Context::EncryptFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
GpgME::Context::EncryptionFlags EncryptJob::encryptionFlags() const
|
||||||
|
{
|
||||||
|
auto d = jobPrivate<EncryptJobPrivate>(this);
|
||||||
|
return d->m_encryptionFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "encryptjob.moc"
|
||||||
|
@ -38,16 +38,12 @@
|
|||||||
#define __KLEO_ENCRYPTJOB_H__
|
#define __KLEO_ENCRYPTJOB_H__
|
||||||
|
|
||||||
#include "job.h"
|
#include "job.h"
|
||||||
#include "data.h"
|
#include <gpgme++/data.h>
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
#include <gpgme++/context.h>
|
||||||
# include "context.h"
|
|
||||||
#else
|
|
||||||
# include <gpgme++/context.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class QByteArray;
|
class QByteArray;
|
||||||
class QIODevice;
|
class QIODevice;
|
||||||
@ -72,6 +68,15 @@ namespace QGpgME
|
|||||||
EncryptJob instance will have scheduled it's own destruction with
|
EncryptJob instance will have scheduled it's own destruction with
|
||||||
a call to QObject::deleteLater().
|
a call to QObject::deleteLater().
|
||||||
|
|
||||||
|
Alternatively, the job can be started with startIt() after setting
|
||||||
|
an input file and an output file and, optionally, recipients or flags.
|
||||||
|
If the job is started this way then the backend reads the input and
|
||||||
|
writes the output directly from/to the specified input file and output
|
||||||
|
file. In this case the cipherText value of the result signal will always
|
||||||
|
be empty. This direct IO mode is currently only supported for OpenPGP.
|
||||||
|
Note that startIt() does not schedule the job's destruction if starting
|
||||||
|
the job failed.
|
||||||
|
|
||||||
After result() is emitted, the EncryptJob will schedule it's own
|
After result() is emitted, the EncryptJob will schedule it's own
|
||||||
destruction by calling QObject::deleteLater().
|
destruction by calling QObject::deleteLater().
|
||||||
*/
|
*/
|
||||||
@ -81,14 +86,63 @@ class QGPGME_EXPORT EncryptJob : public Job
|
|||||||
protected:
|
protected:
|
||||||
explicit EncryptJob(QObject *parent);
|
explicit EncryptJob(QObject *parent);
|
||||||
public:
|
public:
|
||||||
~EncryptJob();
|
~EncryptJob() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the file name to embed in the encryption result.
|
||||||
|
*
|
||||||
|
* This is only used if one of the start() functions is used.
|
||||||
|
*/
|
||||||
void setFileName(const QString &fileName);
|
void setFileName(const QString &fileName);
|
||||||
QString fileName() const;
|
QString fileName() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the encoding of the plaintext.
|
||||||
|
*
|
||||||
|
* This is only used if one of the start() functions is used.
|
||||||
|
*/
|
||||||
void setInputEncoding(GpgME::Data::Encoding);
|
void setInputEncoding(GpgME::Data::Encoding);
|
||||||
GpgME::Data::Encoding inputEncoding() const;
|
GpgME::Data::Encoding inputEncoding() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the keys to use for encryption.
|
||||||
|
*
|
||||||
|
* Used if the job is started with startIt().
|
||||||
|
*/
|
||||||
|
void setRecipients(const std::vector<GpgME::Key> &recipients);
|
||||||
|
std::vector<GpgME::Key> recipients() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the path of the file to encrypt.
|
||||||
|
*
|
||||||
|
* Used if the job is started with startIt().
|
||||||
|
*/
|
||||||
|
void setInputFile(const QString &path);
|
||||||
|
QString inputFile() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the path of the file to write the encryption result to.
|
||||||
|
*
|
||||||
|
* Used if the job is started with startIt().
|
||||||
|
*
|
||||||
|
* \note If a file with this path exists, then the job will fail, i.e. you
|
||||||
|
* need to delete an existing file that shall be overwritten before you
|
||||||
|
* start the job.
|
||||||
|
*/
|
||||||
|
void setOutputFile(const QString &path);
|
||||||
|
QString outputFile() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the flags to use for encryption.
|
||||||
|
*
|
||||||
|
* Defaults to \c EncryptFile.
|
||||||
|
*
|
||||||
|
* Used if the job is started with startIt(). The \c EncryptFile flag is
|
||||||
|
* always assumed set.
|
||||||
|
*/
|
||||||
|
void setEncryptionFlags(GpgME::Context::EncryptionFlags flags);
|
||||||
|
GpgME::Context::EncryptionFlags encryptionFlags() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Starts the encryption operation. \a recipients is the a list of
|
Starts the encryption operation. \a recipients is the a list of
|
||||||
keys to encrypt \a plainText to. Empty (null) keys are
|
keys to encrypt \a plainText to. Empty (null) keys are
|
||||||
|
@ -35,15 +35,24 @@
|
|||||||
#define __QGPGME_ENCRYPTJOB_P_H__
|
#define __QGPGME_ENCRYPTJOB_P_H__
|
||||||
|
|
||||||
#include "job_p.h"
|
#include "job_p.h"
|
||||||
#include "data.h"
|
|
||||||
|
#include <gpgme++/data.h>
|
||||||
|
#include <gpgme++/key.h>
|
||||||
|
|
||||||
namespace QGpgME
|
namespace QGpgME
|
||||||
{
|
{
|
||||||
|
|
||||||
struct EncryptJobPrivate : public JobPrivate
|
struct EncryptJobPrivate : public JobPrivate
|
||||||
{
|
{
|
||||||
|
// used by start() functions
|
||||||
QString m_fileName;
|
QString m_fileName;
|
||||||
GpgME::Data::Encoding m_inputEncoding;
|
GpgME::Data::Encoding m_inputEncoding;
|
||||||
|
|
||||||
|
// used by startIt()
|
||||||
|
std::vector<GpgME::Key> m_recipients;
|
||||||
|
QString m_inputFilePath;
|
||||||
|
QString m_outputFilePath;
|
||||||
|
GpgME::Context::EncryptionFlags m_encryptionFlags = GpgME::Context::EncryptFile;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -80,6 +80,12 @@ public:
|
|||||||
|
|
||||||
virtual void setExportFlags (unsigned int flags);
|
virtual void setExportFlags (unsigned int flags);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Starts the export operation synchronously, otherwise behaves identical to
|
||||||
|
* ExportJob::start
|
||||||
|
*/
|
||||||
|
virtual GpgME::Error exec(const QStringList &patterns, QByteArray &data);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void result(const GpgME::Error &result, const QByteArray &keyData, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error());
|
void result(const GpgME::Error &result, const QByteArray &keyData, const QString &auditLogAsHtml = QString(), const GpgME::Error &auditLogError = GpgME::Error());
|
||||||
};
|
};
|
||||||
|
@ -41,7 +41,7 @@
|
|||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
#include <error.h>
|
#include <gpgme++/error.h>
|
||||||
|
|
||||||
#include <numeric>
|
#include <numeric>
|
||||||
|
|
||||||
|
@ -36,11 +36,7 @@
|
|||||||
|
|
||||||
#include "qgpgme_export.h"
|
#include "qgpgme_export.h"
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
|
||||||
#include <interfaces/dataprovider.h>
|
|
||||||
#else
|
|
||||||
#include <gpgme++/interfaces/dataprovider.h>
|
#include <gpgme++/interfaces/dataprovider.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -39,11 +39,7 @@
|
|||||||
#include "keylistjob.h"
|
#include "keylistjob.h"
|
||||||
#include "cryptobackend.h"
|
#include "cryptobackend.h"
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
|
||||||
# include "keylistresult.h"
|
|
||||||
#else
|
|
||||||
#include <gpgme++/keylistresult.h>
|
#include <gpgme++/keylistresult.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
#include "importjob.h"
|
#include "importjob.h"
|
||||||
#include "importjob_p.h"
|
#include "importjob_p.h"
|
||||||
|
|
||||||
#include <context.h>
|
#include <gpgme++/context.h>
|
||||||
|
|
||||||
using namespace GpgME;
|
using namespace GpgME;
|
||||||
using namespace QGpgME;
|
using namespace QGpgME;
|
||||||
@ -55,6 +55,18 @@ QString QGpgME::ImportJob::importFilter() const
|
|||||||
return d->m_importFilter;
|
return d->m_importFilter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QGpgME::ImportJob::setImportOptions(const QStringList &options)
|
||||||
|
{
|
||||||
|
const auto d = jobPrivate<ImportJobPrivate>(this);
|
||||||
|
d->m_importOptions = options;
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList QGpgME::ImportJob::importOptions() const
|
||||||
|
{
|
||||||
|
const auto d = jobPrivate<ImportJobPrivate>(this);
|
||||||
|
return d->m_importOptions;
|
||||||
|
}
|
||||||
|
|
||||||
void ImportJob::setKeyOrigin(GpgME::Key::Origin origin, const QString &url)
|
void ImportJob::setKeyOrigin(GpgME::Key::Origin origin, const QString &url)
|
||||||
{
|
{
|
||||||
const auto d = jobPrivate<ImportJobPrivate>(this);
|
const auto d = jobPrivate<ImportJobPrivate>(this);
|
||||||
|
@ -40,11 +40,7 @@
|
|||||||
#include "abstractimportjob.h"
|
#include "abstractimportjob.h"
|
||||||
#include "qgpgme_export.h"
|
#include "qgpgme_export.h"
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
#include <gpgme++/key.h>
|
||||||
# include <key.h>
|
|
||||||
#else
|
|
||||||
# include <gpgme++/key.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace GpgME
|
namespace GpgME
|
||||||
{
|
{
|
||||||
@ -79,6 +75,9 @@ public:
|
|||||||
void setImportFilter(const QString &filter);
|
void setImportFilter(const QString &filter);
|
||||||
QString importFilter() const;
|
QString importFilter() const;
|
||||||
|
|
||||||
|
void setImportOptions(const QStringList &options);
|
||||||
|
QStringList importOptions() const;
|
||||||
|
|
||||||
void setKeyOrigin(GpgME::Key::Origin origin, const QString &url = {});
|
void setKeyOrigin(GpgME::Key::Origin origin, const QString &url = {});
|
||||||
GpgME::Key::Origin keyOrigin() const;
|
GpgME::Key::Origin keyOrigin() const;
|
||||||
QString keyOriginUrl() const;
|
QString keyOriginUrl() const;
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
#include "job_p.h"
|
#include "job_p.h"
|
||||||
|
|
||||||
#include <key.h>
|
#include <gpgme++/key.h>
|
||||||
|
|
||||||
namespace QGpgME
|
namespace QGpgME
|
||||||
{
|
{
|
||||||
@ -44,6 +44,7 @@ namespace QGpgME
|
|||||||
struct ImportJobPrivate : public JobPrivate
|
struct ImportJobPrivate : public JobPrivate
|
||||||
{
|
{
|
||||||
QString m_importFilter;
|
QString m_importFilter;
|
||||||
|
QStringList m_importOptions;
|
||||||
GpgME::Key::Origin m_keyOrigin = GpgME::Key::OriginUnknown;
|
GpgME::Key::Origin m_keyOrigin = GpgME::Key::OriginUnknown;
|
||||||
QString m_keyOriginUrl;
|
QString m_keyOriginUrl;
|
||||||
};
|
};
|
||||||
|
@ -43,14 +43,8 @@
|
|||||||
|
|
||||||
#include "keylistjob.h"
|
#include "keylistjob.h"
|
||||||
#include "listallkeysjob.h"
|
#include "listallkeysjob.h"
|
||||||
#include "encryptjob.h"
|
|
||||||
#include "decryptjob.h"
|
#include "decryptjob.h"
|
||||||
#include "decryptverifyjob.h"
|
|
||||||
#include "signjob.h"
|
|
||||||
#include "signkeyjob.h"
|
#include "signkeyjob.h"
|
||||||
#include "signencryptjob.h"
|
|
||||||
#include "verifydetachedjob.h"
|
|
||||||
#include "verifyopaquejob.h"
|
|
||||||
#include "keygenerationjob.h"
|
#include "keygenerationjob.h"
|
||||||
#include "importjob.h"
|
#include "importjob.h"
|
||||||
#include "importfromkeyserverjob.h"
|
#include "importfromkeyserverjob.h"
|
||||||
@ -164,14 +158,8 @@ void QGpgME::Job::startNow()
|
|||||||
|
|
||||||
make_job_subclass(KeyListJob)
|
make_job_subclass(KeyListJob)
|
||||||
make_job_subclass(ListAllKeysJob)
|
make_job_subclass(ListAllKeysJob)
|
||||||
make_job_subclass(EncryptJob)
|
|
||||||
make_job_subclass(DecryptJob)
|
make_job_subclass(DecryptJob)
|
||||||
make_job_subclass(DecryptVerifyJob)
|
|
||||||
make_job_subclass(SignJob)
|
|
||||||
make_job_subclass(SignEncryptJob)
|
|
||||||
make_job_subclass(SignKeyJob)
|
make_job_subclass(SignKeyJob)
|
||||||
make_job_subclass(VerifyDetachedJob)
|
|
||||||
make_job_subclass(VerifyOpaqueJob)
|
|
||||||
make_job_subclass(KeyGenerationJob)
|
make_job_subclass(KeyGenerationJob)
|
||||||
make_job_subclass(AbstractImportJob)
|
make_job_subclass(AbstractImportJob)
|
||||||
make_job_subclass_ext(ImportJob, AbstractImportJob)
|
make_job_subclass_ext(ImportJob, AbstractImportJob)
|
||||||
@ -202,14 +190,8 @@ make_job_subclass(SetPrimaryUserIDJob)
|
|||||||
|
|
||||||
#include "keylistjob.moc"
|
#include "keylistjob.moc"
|
||||||
#include "listallkeysjob.moc"
|
#include "listallkeysjob.moc"
|
||||||
#include "encryptjob.moc"
|
|
||||||
#include "decryptjob.moc"
|
#include "decryptjob.moc"
|
||||||
#include "decryptverifyjob.moc"
|
|
||||||
#include "signjob.moc"
|
|
||||||
#include "signencryptjob.moc"
|
|
||||||
#include "signkeyjob.moc"
|
#include "signkeyjob.moc"
|
||||||
#include "verifydetachedjob.moc"
|
|
||||||
#include "verifyopaquejob.moc"
|
|
||||||
#include "keygenerationjob.moc"
|
#include "keygenerationjob.moc"
|
||||||
#include "abstractimportjob.moc"
|
#include "abstractimportjob.moc"
|
||||||
#include "importjob.moc"
|
#include "importjob.moc"
|
||||||
|
@ -41,11 +41,7 @@
|
|||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
#include <gpgme++/error.h>
|
||||||
# include "error.h"
|
|
||||||
#else
|
|
||||||
# include <gpgme++/error.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class QWidget;
|
class QWidget;
|
||||||
|
|
||||||
@ -97,7 +93,10 @@ public:
|
|||||||
|
|
||||||
/** Starts the job.
|
/** Starts the job.
|
||||||
*
|
*
|
||||||
* Starts the job with the values set for the concrete job.
|
* Starts the job with the values set for the concrete job. If starting
|
||||||
|
* the job failed then you are responsible for destroying it. Therefore,
|
||||||
|
* it's recommended to store the job in a std::unique_ptr until it has
|
||||||
|
* been started successfully.
|
||||||
*/
|
*/
|
||||||
GpgME::Error startIt();
|
GpgME::Error startIt();
|
||||||
|
|
||||||
|
@ -37,11 +37,7 @@
|
|||||||
|
|
||||||
#include "job.h"
|
#include "job.h"
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
#include <gpgme++/key.h>
|
||||||
# include "key.h"
|
|
||||||
#else
|
|
||||||
# include <gpgme++/key.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace GpgME
|
namespace GpgME
|
||||||
{
|
{
|
||||||
|
@ -38,11 +38,7 @@
|
|||||||
#include "job.h"
|
#include "job.h"
|
||||||
#include "qgpgme_export.h"
|
#include "qgpgme_export.h"
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
#include <gpgme++/key.h>
|
||||||
# include "key.h"
|
|
||||||
#else
|
|
||||||
# include <gpgme++/key.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <QtCore/QStringList>
|
#include <QtCore/QStringList>
|
||||||
|
|
||||||
|
@ -40,11 +40,7 @@
|
|||||||
#include "job.h"
|
#include "job.h"
|
||||||
#include "qgpgme_export.h"
|
#include "qgpgme_export.h"
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
#include <gpgme++/key.h>
|
||||||
# include "key.h"
|
|
||||||
#else
|
|
||||||
# include <gpgme++/key.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
@ -38,9 +38,9 @@
|
|||||||
#include "protocol.h"
|
#include "protocol.h"
|
||||||
#include "deletejob.h"
|
#include "deletejob.h"
|
||||||
|
|
||||||
#include <key.h>
|
#include <gpgme++/key.h>
|
||||||
#include <context.h>
|
#include <gpgme++/context.h>
|
||||||
#include <data.h>
|
#include <gpgme++/data.h>
|
||||||
|
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
|
||||||
|
@ -41,10 +41,10 @@
|
|||||||
|
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
|
|
||||||
#include "context.h"
|
#include <gpgme++/context.h>
|
||||||
#include "data.h"
|
#include <gpgme++/data.h>
|
||||||
#include "gpgaddexistingsubkeyeditinteractor.h"
|
#include <gpgme++/gpgaddexistingsubkeyeditinteractor.h>
|
||||||
#include "key.h"
|
#include <gpgme++/key.h>
|
||||||
|
|
||||||
#include <gpg-error.h>
|
#include <gpg-error.h>
|
||||||
|
|
||||||
@ -90,7 +90,6 @@ Error QGpgMEAddExistingSubkeyJob::start(const GpgME::Key &key, const GpgME::Subk
|
|||||||
Error QGpgMEAddExistingSubkeyJob::exec(const GpgME::Key &key, const GpgME::Subkey &subkey)
|
Error QGpgMEAddExistingSubkeyJob::exec(const GpgME::Key &key, const GpgME::Subkey &subkey)
|
||||||
{
|
{
|
||||||
const result_type r = add_subkey(context(), key, subkey);
|
const result_type r = add_subkey(context(), key, subkey);
|
||||||
resultHook(r);
|
|
||||||
return std::get<0>(r);
|
return std::get<0>(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,10 +40,10 @@
|
|||||||
|
|
||||||
#include "dataprovider.h"
|
#include "dataprovider.h"
|
||||||
|
|
||||||
#include "context.h"
|
#include <gpgme++/context.h>
|
||||||
#include "data.h"
|
#include <gpgme++/data.h>
|
||||||
#include "gpgadduserideditinteractor.h"
|
#include <gpgme++/gpgadduserideditinteractor.h>
|
||||||
#include "key.h"
|
#include <gpgme++/key.h>
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
@ -40,8 +40,8 @@
|
|||||||
|
|
||||||
#include "qgpgmegpgcardjob.h"
|
#include "qgpgmegpgcardjob.h"
|
||||||
|
|
||||||
#include "error.h"
|
#include <gpgme++/error.h>
|
||||||
#include "engineinfo.h"
|
#include <gpgme++/engineinfo.h>
|
||||||
|
|
||||||
#include "protocol_p.h"
|
#include "protocol_p.h"
|
||||||
|
|
||||||
|
@ -68,8 +68,8 @@ public:
|
|||||||
static const char OpenPGP[];
|
static const char OpenPGP[];
|
||||||
static const char SMIME[];
|
static const char SMIME[];
|
||||||
|
|
||||||
bool checkForOpenPGP(QString *reason = Q_NULLPTR) const;
|
bool checkForOpenPGP(QString *reason = nullptr) const;
|
||||||
bool checkForSMIME(QString *reason = Q_NULLPTR) const;
|
bool checkForSMIME(QString *reason = nullptr) const;
|
||||||
bool checkForProtocol(const char *name, QString *reason) const;
|
bool checkForProtocol(const char *name, QString *reason) const;
|
||||||
|
|
||||||
bool supportsOpenPGP() const
|
bool supportsOpenPGP() const
|
||||||
|
@ -42,8 +42,8 @@
|
|||||||
|
|
||||||
#include "changeexpiryjob_p.h"
|
#include "changeexpiryjob_p.h"
|
||||||
|
|
||||||
#include "context.h"
|
#include <gpgme++/context.h>
|
||||||
#include "key.h"
|
#include <gpgme++/key.h>
|
||||||
|
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
|
|
||||||
|
@ -40,10 +40,10 @@
|
|||||||
|
|
||||||
#include "dataprovider.h"
|
#include "dataprovider.h"
|
||||||
|
|
||||||
#include "context.h"
|
#include <gpgme++/context.h>
|
||||||
#include "data.h"
|
#include <gpgme++/data.h>
|
||||||
#include "gpgsetownertrusteditinteractor.h"
|
#include <gpgme++/gpgsetownertrusteditinteractor.h>
|
||||||
#include "key.h"
|
#include <gpgme++/key.h>
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
@ -40,9 +40,9 @@
|
|||||||
|
|
||||||
#include "dataprovider.h"
|
#include "dataprovider.h"
|
||||||
|
|
||||||
#include "context.h"
|
#include <gpgme++/context.h>
|
||||||
#include "data.h"
|
#include <gpgme++/data.h>
|
||||||
#include "key.h"
|
#include <gpgme++/key.h>
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
@ -40,9 +40,9 @@
|
|||||||
|
|
||||||
#include "dataprovider.h"
|
#include "dataprovider.h"
|
||||||
|
|
||||||
#include "context.h"
|
#include <gpgme++/context.h>
|
||||||
#include "decryptionresult.h"
|
#include <gpgme++/decryptionresult.h>
|
||||||
#include "data.h"
|
#include <gpgme++/data.h>
|
||||||
|
|
||||||
#include <QBuffer>
|
#include <QBuffer>
|
||||||
|
|
||||||
@ -122,15 +122,7 @@ GpgME::DecryptionResult QGpgME::QGpgMEDecryptJob::exec(const QByteArray &cipherT
|
|||||||
{
|
{
|
||||||
const result_type r = decrypt_qba(context(), cipherText);
|
const result_type r = decrypt_qba(context(), cipherText);
|
||||||
plainText = std::get<1>(r);
|
plainText = std::get<1>(r);
|
||||||
resultHook(r);
|
return std::get<0>(r);
|
||||||
return mResult;
|
|
||||||
}
|
|
||||||
|
|
||||||
//PENDING(marc) implement showErrorDialog()
|
|
||||||
|
|
||||||
void QGpgMEDecryptJob::resultHook(const result_type &tuple)
|
|
||||||
{
|
|
||||||
mResult = std::get<0>(tuple);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "qgpgmedecryptjob.moc"
|
#include "qgpgmedecryptjob.moc"
|
||||||
|
@ -39,11 +39,7 @@
|
|||||||
|
|
||||||
#include "threadedjobmixin.h"
|
#include "threadedjobmixin.h"
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
|
||||||
# include "decryptionresult.h"
|
|
||||||
#else
|
|
||||||
#include <gpgme++/decryptionresult.h>
|
#include <gpgme++/decryptionresult.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace QGpgME
|
namespace QGpgME
|
||||||
{
|
{
|
||||||
@ -73,12 +69,6 @@ public:
|
|||||||
/* from DecryptJob */
|
/* from DecryptJob */
|
||||||
GpgME::DecryptionResult exec(const QByteArray &cipherText,
|
GpgME::DecryptionResult exec(const QByteArray &cipherText,
|
||||||
QByteArray &plainText) override;
|
QByteArray &plainText) override;
|
||||||
|
|
||||||
/* from ThreadedJobMixin */
|
|
||||||
void resultHook(const result_type &r) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
GpgME::DecryptionResult mResult;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@
|
|||||||
|
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
|
||||||
#include <data.h>
|
#include <gpgme++/data.h>
|
||||||
|
|
||||||
using namespace QGpgME;
|
using namespace QGpgME;
|
||||||
using namespace GpgME;
|
using namespace GpgME;
|
||||||
|
@ -38,8 +38,8 @@
|
|||||||
|
|
||||||
#include "threadedjobmixin.h"
|
#include "threadedjobmixin.h"
|
||||||
|
|
||||||
#include <decryptionresult.h>
|
#include <gpgme++/decryptionresult.h>
|
||||||
#include <verificationresult.h>
|
#include <gpgme++/verificationresult.h>
|
||||||
|
|
||||||
namespace QGpgME
|
namespace QGpgME
|
||||||
{
|
{
|
||||||
|
@ -39,25 +39,56 @@
|
|||||||
#include "qgpgmedecryptverifyjob.h"
|
#include "qgpgmedecryptverifyjob.h"
|
||||||
|
|
||||||
#include "dataprovider.h"
|
#include "dataprovider.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "decryptverifyjob_p.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
#include "context.h"
|
#include <gpgme++/context.h>
|
||||||
#include "decryptionresult.h"
|
#include <gpgme++/decryptionresult.h>
|
||||||
#include "verificationresult.h"
|
#include <gpgme++/verificationresult.h>
|
||||||
#include "data.h"
|
#include <gpgme++/data.h>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include "qgpgme_debug.h"
|
#include "qgpgme_debug.h"
|
||||||
|
|
||||||
#include <QBuffer>
|
#include <QBuffer>
|
||||||
|
#include <QFile>
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
using namespace QGpgME;
|
using namespace QGpgME;
|
||||||
using namespace GpgME;
|
using namespace GpgME;
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
|
||||||
|
class QGpgMEDecryptVerifyJobPrivate : public DecryptVerifyJobPrivate
|
||||||
|
{
|
||||||
|
QGpgMEDecryptVerifyJob *q = nullptr;
|
||||||
|
|
||||||
|
public:
|
||||||
|
QGpgMEDecryptVerifyJobPrivate(QGpgMEDecryptVerifyJob *qq)
|
||||||
|
: q{qq}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
~QGpgMEDecryptVerifyJobPrivate() override = default;
|
||||||
|
|
||||||
|
private:
|
||||||
|
GpgME::Error startIt() override;
|
||||||
|
|
||||||
|
void startNow() override
|
||||||
|
{
|
||||||
|
q->run();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
QGpgMEDecryptVerifyJob::QGpgMEDecryptVerifyJob(Context *context)
|
QGpgMEDecryptVerifyJob::QGpgMEDecryptVerifyJob(Context *context)
|
||||||
: mixin_type(context)
|
: mixin_type(context)
|
||||||
{
|
{
|
||||||
|
setJobPrivate(this, std::unique_ptr<QGpgMEDecryptVerifyJobPrivate>{new QGpgMEDecryptVerifyJobPrivate{this}});
|
||||||
lateInitialization();
|
lateInitialization();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,7 +119,7 @@ static QGpgMEDecryptVerifyJob::result_type decrypt_verify(Context *ctx, QThread
|
|||||||
const std::pair<DecryptionResult, VerificationResult> res = ctx->decryptAndVerify(indata, outdata);
|
const std::pair<DecryptionResult, VerificationResult> res = ctx->decryptAndVerify(indata, outdata);
|
||||||
Error ae;
|
Error ae;
|
||||||
const QString log = _detail::audit_log_as_html(ctx, ae);
|
const QString log = _detail::audit_log_as_html(ctx, ae);
|
||||||
qCDebug(QGPGME_LOG) << __func__ << "- End no plainText. Error:" << ae.asString();
|
qCDebug(QGPGME_LOG) << __func__ << "- End no plainText. Error:" << ae;
|
||||||
return std::make_tuple(res.first, res.second, out.data(), log, ae);
|
return std::make_tuple(res.first, res.second, out.data(), log, ae);
|
||||||
} else {
|
} else {
|
||||||
QGpgME::QIODeviceDataProvider out(plainText);
|
QGpgME::QIODeviceDataProvider out(plainText);
|
||||||
@ -97,7 +128,7 @@ static QGpgMEDecryptVerifyJob::result_type decrypt_verify(Context *ctx, QThread
|
|||||||
const std::pair<DecryptionResult, VerificationResult> res = ctx->decryptAndVerify(indata, outdata);
|
const std::pair<DecryptionResult, VerificationResult> res = ctx->decryptAndVerify(indata, outdata);
|
||||||
Error ae;
|
Error ae;
|
||||||
const QString log = _detail::audit_log_as_html(ctx, ae);
|
const QString log = _detail::audit_log_as_html(ctx, ae);
|
||||||
qCDebug(QGPGME_LOG) << __func__ << "- End plainText. Error:" << ae.asString();
|
qCDebug(QGPGME_LOG) << __func__ << "- End plainText. Error:" << ae;
|
||||||
return std::make_tuple(res.first, res.second, QByteArray(), log, ae);
|
return std::make_tuple(res.first, res.second, QByteArray(), log, ae);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -112,6 +143,43 @@ static QGpgMEDecryptVerifyJob::result_type decrypt_verify_qba(Context *ctx, cons
|
|||||||
return decrypt_verify(ctx, nullptr, buffer, std::shared_ptr<QIODevice>());
|
return decrypt_verify(ctx, nullptr, buffer, std::shared_ptr<QIODevice>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QGpgMEDecryptVerifyJob::result_type decrypt_verify_from_filename(Context *ctx,
|
||||||
|
const QString &inputFilePath,
|
||||||
|
const QString &outputFilePath)
|
||||||
|
{
|
||||||
|
Data indata;
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
indata.setFileName(inputFilePath.toUtf8().constData());
|
||||||
|
#else
|
||||||
|
indata.setFileName(QFile::encodeName(inputFilePath).constData());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PartialFileGuard partFileGuard{outputFilePath};
|
||||||
|
if (partFileGuard.tempFileName().isEmpty()) {
|
||||||
|
return std::make_tuple(DecryptionResult{Error::fromCode(GPG_ERR_EEXIST)}, VerificationResult{Error::fromCode(GPG_ERR_EEXIST)}, QByteArray{}, QString{}, Error{});
|
||||||
|
}
|
||||||
|
|
||||||
|
Data outdata;
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
outdata.setFileName(partFileGuard.tempFileName().toUtf8().constData());
|
||||||
|
#else
|
||||||
|
outdata.setFileName(QFile::encodeName(partFileGuard.tempFileName()).constData());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const auto results = ctx->decryptAndVerify(indata, outdata);
|
||||||
|
const auto &decryptionResult = results.first;
|
||||||
|
const auto &verificationResult = results.second;
|
||||||
|
|
||||||
|
if (!decryptionResult.error().code() && !verificationResult.error().code()) {
|
||||||
|
// the operation succeeded -> save the result under the requested file name
|
||||||
|
partFileGuard.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
Error ae;
|
||||||
|
const QString log = _detail::audit_log_as_html(ctx, ae);
|
||||||
|
return std::make_tuple(decryptionResult, verificationResult, QByteArray{}, log, ae);
|
||||||
|
}
|
||||||
|
|
||||||
Error QGpgMEDecryptVerifyJob::start(const QByteArray &cipherText)
|
Error QGpgMEDecryptVerifyJob::start(const QByteArray &cipherText)
|
||||||
{
|
{
|
||||||
run(std::bind(&decrypt_verify_qba, std::placeholders::_1, cipherText));
|
run(std::bind(&decrypt_verify_qba, std::placeholders::_1, cipherText));
|
||||||
@ -128,14 +196,20 @@ QGpgME::QGpgMEDecryptVerifyJob::exec(const QByteArray &cipherText, QByteArray &p
|
|||||||
{
|
{
|
||||||
const result_type r = decrypt_verify_qba(context(), cipherText);
|
const result_type r = decrypt_verify_qba(context(), cipherText);
|
||||||
plainText = std::get<2>(r);
|
plainText = std::get<2>(r);
|
||||||
resultHook(r);
|
return std::make_pair(std::get<0>(r), std::get<1>(r));
|
||||||
return mResult;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//PENDING(marc) implement showErrorDialog()
|
GpgME::Error QGpgMEDecryptVerifyJobPrivate::startIt()
|
||||||
|
|
||||||
void QGpgMEDecryptVerifyJob::resultHook(const result_type &tuple)
|
|
||||||
{
|
{
|
||||||
mResult = std::make_pair(std::get<0>(tuple), std::get<1>(tuple));
|
if (m_inputFilePath.isEmpty() || m_outputFilePath.isEmpty()) {
|
||||||
|
return Error::fromCode(GPG_ERR_INV_VALUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
q->run([=](Context *ctx) {
|
||||||
|
return decrypt_verify_from_filename(ctx, m_inputFilePath, m_outputFilePath);
|
||||||
|
});
|
||||||
|
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "qgpgmedecryptverifyjob.moc"
|
#include "qgpgmedecryptverifyjob.moc"
|
||||||
|
@ -39,16 +39,8 @@
|
|||||||
|
|
||||||
#include "threadedjobmixin.h"
|
#include "threadedjobmixin.h"
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
|
||||||
# include "decryptionresult.h"
|
|
||||||
#else
|
|
||||||
#include <gpgme++/decryptionresult.h>
|
#include <gpgme++/decryptionresult.h>
|
||||||
#endif
|
|
||||||
#ifdef BUILDING_QGPGME
|
|
||||||
# include "verificationresult.h"
|
|
||||||
#else
|
|
||||||
#include <gpgme++/verificationresult.h>
|
#include <gpgme++/verificationresult.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace QGpgME
|
namespace QGpgME
|
||||||
{
|
{
|
||||||
@ -78,12 +70,6 @@ public:
|
|||||||
/* from DecryptVerifyJob */
|
/* from DecryptVerifyJob */
|
||||||
std::pair<GpgME::DecryptionResult, GpgME::VerificationResult>
|
std::pair<GpgME::DecryptionResult, GpgME::VerificationResult>
|
||||||
exec(const QByteArray &cipherText, QByteArray &plainText) override;
|
exec(const QByteArray &cipherText, QByteArray &plainText) override;
|
||||||
|
|
||||||
/* from ThreadedJobMixin */
|
|
||||||
void resultHook(const result_type &r) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::pair<GpgME::DecryptionResult, GpgME::VerificationResult> mResult;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -38,8 +38,8 @@
|
|||||||
|
|
||||||
#include "qgpgmedeletejob.h"
|
#include "qgpgmedeletejob.h"
|
||||||
|
|
||||||
#include "context.h"
|
#include <gpgme++/context.h>
|
||||||
#include "key.h"
|
#include <gpgme++/key.h>
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
|
@ -40,8 +40,8 @@
|
|||||||
|
|
||||||
#include "dataprovider.h"
|
#include "dataprovider.h"
|
||||||
|
|
||||||
#include "context.h"
|
#include <gpgme++/context.h>
|
||||||
#include "data.h"
|
#include <gpgme++/data.h>
|
||||||
|
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
|
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
|
||||||
#include <data.h>
|
#include <gpgme++/data.h>
|
||||||
|
|
||||||
using namespace QGpgME;
|
using namespace QGpgME;
|
||||||
using namespace GpgME;
|
using namespace GpgME;
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
#include "threadedjobmixin.h"
|
#include "threadedjobmixin.h"
|
||||||
|
|
||||||
#include <encryptionresult.h>
|
#include <gpgme++/encryptionresult.h>
|
||||||
|
|
||||||
namespace QGpgME
|
namespace QGpgME
|
||||||
{
|
{
|
||||||
|
@ -40,13 +40,13 @@
|
|||||||
|
|
||||||
#include "qgpgmeencryptjob.h"
|
#include "qgpgmeencryptjob.h"
|
||||||
|
|
||||||
#include "encryptjob_p.h"
|
|
||||||
|
|
||||||
#include "dataprovider.h"
|
#include "dataprovider.h"
|
||||||
|
#include "encryptjob_p.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
#include "context.h"
|
#include <gpgme++/context.h>
|
||||||
#include "encryptionresult.h"
|
#include <gpgme++/data.h>
|
||||||
#include "data.h"
|
#include <gpgme++/encryptionresult.h>
|
||||||
|
|
||||||
#include <QBuffer>
|
#include <QBuffer>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
@ -72,11 +72,7 @@ public:
|
|||||||
~QGpgMEEncryptJobPrivate() override = default;
|
~QGpgMEEncryptJobPrivate() override = default;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GpgME::Error startIt() override
|
GpgME::Error startIt() override;
|
||||||
{
|
|
||||||
Q_ASSERT(!"Not supported by this Job class.");
|
|
||||||
return Error::fromCode(GPG_ERR_NOT_SUPPORTED);
|
|
||||||
}
|
|
||||||
|
|
||||||
void startNow() override
|
void startNow() override
|
||||||
{
|
{
|
||||||
@ -168,6 +164,44 @@ static QGpgMEEncryptJob::result_type encrypt_qba(Context *ctx, const std::vector
|
|||||||
return encrypt(ctx, nullptr, recipients, buffer, std::shared_ptr<QIODevice>(), eflags, outputIsBsse64Encoded, inputEncoding, fileName);
|
return encrypt(ctx, nullptr, recipients, buffer, std::shared_ptr<QIODevice>(), eflags, outputIsBsse64Encoded, inputEncoding, fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QGpgMEEncryptJob::result_type encrypt_to_filename(Context *ctx,
|
||||||
|
const std::vector<Key> &recipients,
|
||||||
|
const QString &inputFilePath,
|
||||||
|
const QString &outputFilePath,
|
||||||
|
Context::EncryptionFlags flags)
|
||||||
|
{
|
||||||
|
Data indata;
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
indata.setFileName(inputFilePath.toUtf8().constData());
|
||||||
|
#else
|
||||||
|
indata.setFileName(QFile::encodeName(inputFilePath).constData());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PartialFileGuard partFileGuard{outputFilePath};
|
||||||
|
if (partFileGuard.tempFileName().isEmpty()) {
|
||||||
|
return std::make_tuple(EncryptionResult{Error::fromCode(GPG_ERR_EEXIST)}, QByteArray{}, QString{}, Error{});
|
||||||
|
}
|
||||||
|
|
||||||
|
Data outdata;
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
outdata.setFileName(partFileGuard.tempFileName().toUtf8().constData());
|
||||||
|
#else
|
||||||
|
outdata.setFileName(QFile::encodeName(partFileGuard.tempFileName()).constData());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
flags = static_cast<Context::EncryptionFlags>(flags | Context::EncryptFile);
|
||||||
|
const auto encryptionResult = ctx->encrypt(recipients, indata, outdata, flags);
|
||||||
|
|
||||||
|
if (!encryptionResult.error().code()) {
|
||||||
|
// the operation succeeded -> save the result under the requested file name
|
||||||
|
partFileGuard.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
Error ae;
|
||||||
|
const QString log = _detail::audit_log_as_html(ctx, ae);
|
||||||
|
return std::make_tuple(encryptionResult, QByteArray{}, log, ae);
|
||||||
|
}
|
||||||
|
|
||||||
Error QGpgMEEncryptJob::start(const std::vector<Key> &recipients, const QByteArray &plainText, bool alwaysTrust)
|
Error QGpgMEEncryptJob::start(const std::vector<Key> &recipients, const QByteArray &plainText, bool alwaysTrust)
|
||||||
{
|
{
|
||||||
run(std::bind(&encrypt_qba, std::placeholders::_1, recipients, plainText,
|
run(std::bind(&encrypt_qba, std::placeholders::_1, recipients, plainText,
|
||||||
@ -194,8 +228,7 @@ EncryptionResult QGpgMEEncryptJob::exec(const std::vector<Key> &recipients, cons
|
|||||||
{
|
{
|
||||||
const result_type r = encrypt_qba(context(), recipients, plainText, eflags, mOutputIsBase64Encoded, inputEncoding(), fileName());
|
const result_type r = encrypt_qba(context(), recipients, plainText, eflags, mOutputIsBase64Encoded, inputEncoding(), fileName());
|
||||||
cipherText = std::get<1>(r);
|
cipherText = std::get<1>(r);
|
||||||
resultHook(r);
|
return std::get<0>(r);
|
||||||
return mResult;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QGpgMEEncryptJob::start(const std::vector<Key> &recipients, const std::shared_ptr<QIODevice> &plainText, const std::shared_ptr<QIODevice> &cipherText, bool alwaysTrust)
|
void QGpgMEEncryptJob::start(const std::vector<Key> &recipients, const std::shared_ptr<QIODevice> &plainText, const std::shared_ptr<QIODevice> &cipherText, bool alwaysTrust)
|
||||||
@ -208,17 +241,17 @@ EncryptionResult QGpgMEEncryptJob::exec(const std::vector<Key> &recipients, cons
|
|||||||
return exec(recipients, plainText, alwaysTrust ? Context::AlwaysTrust : Context::None, cipherText);
|
return exec(recipients, plainText, alwaysTrust ? Context::AlwaysTrust : Context::None, cipherText);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QGpgMEEncryptJob::resultHook(const result_type &tuple)
|
GpgME::Error QGpgMEEncryptJobPrivate::startIt()
|
||||||
{
|
{
|
||||||
mResult = std::get<0>(tuple);
|
if (m_inputFilePath.isEmpty() || m_outputFilePath.isEmpty()) {
|
||||||
|
return Error::fromCode(GPG_ERR_INV_VALUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
q->run([=](Context *ctx) {
|
||||||
|
return encrypt_to_filename(ctx, m_recipients, m_inputFilePath, m_outputFilePath, m_encryptionFlags);
|
||||||
|
});
|
||||||
|
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
void QGpgMEEncryptJob::showErrorDialog(QWidget *parent, const QString &caption) const
|
|
||||||
{
|
|
||||||
if (mResult.error() && !mResult.error().isCanceled()) {
|
|
||||||
MessageBox::error(parent, mResult, this, caption);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#include "qgpgmeencryptjob.moc"
|
#include "qgpgmeencryptjob.moc"
|
||||||
|
@ -39,16 +39,8 @@
|
|||||||
|
|
||||||
#include "threadedjobmixin.h"
|
#include "threadedjobmixin.h"
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
|
||||||
# include "encryptionresult.h"
|
|
||||||
#else
|
|
||||||
#include <gpgme++/encryptionresult.h>
|
#include <gpgme++/encryptionresult.h>
|
||||||
#endif
|
|
||||||
#ifdef BUILDING_QGPGME
|
|
||||||
# include "key.h"
|
|
||||||
#else
|
|
||||||
#include <gpgme++/key.h>
|
#include <gpgme++/key.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace QGpgME
|
namespace QGpgME
|
||||||
{
|
{
|
||||||
@ -97,12 +89,8 @@ public:
|
|||||||
/* from EncryptJob */
|
/* from EncryptJob */
|
||||||
void setOutputIsBase64Encoded(bool on) override;
|
void setOutputIsBase64Encoded(bool on) override;
|
||||||
|
|
||||||
/* from ThreadedJobMixin */
|
|
||||||
void resultHook(const result_type &r) override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool mOutputIsBase64Encoded;
|
bool mOutputIsBase64Encoded;
|
||||||
GpgME::EncryptionResult mResult;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -42,9 +42,9 @@
|
|||||||
|
|
||||||
#include "dataprovider.h"
|
#include "dataprovider.h"
|
||||||
|
|
||||||
#include "context.h"
|
#include <gpgme++/context.h>
|
||||||
#include "data.h"
|
#include <gpgme++/data.h>
|
||||||
#include "key.h"
|
#include <gpgme++/key.h>
|
||||||
|
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
|
|
||||||
@ -88,6 +88,14 @@ Error QGpgMEExportJob::start(const QStringList &patterns)
|
|||||||
return Error();
|
return Error();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Error QGpgMEExportJob::exec(const QStringList &patterns, QByteArray &data)
|
||||||
|
{
|
||||||
|
auto mode = m_exportMode | m_additionalExportModeFlags;
|
||||||
|
const result_type r = export_qba(context(), patterns, mode);
|
||||||
|
data = std::get<1>(r);
|
||||||
|
return std::get<0>(r);
|
||||||
|
}
|
||||||
|
|
||||||
void QGpgMEExportJob::setExportFlags(unsigned int flags)
|
void QGpgMEExportJob::setExportFlags(unsigned int flags)
|
||||||
{
|
{
|
||||||
m_additionalExportModeFlags = flags;
|
m_additionalExportModeFlags = flags;
|
||||||
@ -97,4 +105,11 @@ void QGpgMEExportJob::setExportFlags(unsigned int flags)
|
|||||||
void ExportJob::setExportFlags(unsigned int)
|
void ExportJob::setExportFlags(unsigned int)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* For ABI compat not pure virtual. */
|
||||||
|
GpgME::Error ExportJob::exec(const QStringList &, QByteArray &)
|
||||||
|
{
|
||||||
|
return Error();
|
||||||
|
}
|
||||||
|
|
||||||
#include "qgpgmeexportjob.moc"
|
#include "qgpgmeexportjob.moc"
|
||||||
|
@ -69,6 +69,7 @@ public:
|
|||||||
|
|
||||||
/* from ExportJob */
|
/* from ExportJob */
|
||||||
GpgME::Error start(const QStringList &patterns) override;
|
GpgME::Error start(const QStringList &patterns) override;
|
||||||
|
GpgME::Error exec(const QStringList &patterns, QByteArray &data) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
unsigned int m_exportMode;
|
unsigned int m_exportMode;
|
||||||
|
@ -122,7 +122,6 @@ Error QGpgMEGpgCardJob::exec(const QStringList &cmds, QString &std_out, QString
|
|||||||
return Error(make_error(GPG_ERR_NOT_SUPPORTED));
|
return Error(make_error(GPG_ERR_NOT_SUPPORTED));
|
||||||
}
|
}
|
||||||
const result_type r = do_work(cmds, cardpath);
|
const result_type r = do_work(cmds, cardpath);
|
||||||
resultHook(r);
|
|
||||||
std_out = std::get<0>(r);
|
std_out = std::get<0>(r);
|
||||||
std_err = std::get<1>(r);
|
std_err = std::get<1>(r);
|
||||||
exitCode = std::get<2>(r);
|
exitCode = std::get<2>(r);
|
||||||
|
@ -40,9 +40,9 @@
|
|||||||
|
|
||||||
#include "dataprovider.h"
|
#include "dataprovider.h"
|
||||||
|
|
||||||
#include "context.h"
|
#include <gpgme++/context.h>
|
||||||
#include "data.h"
|
#include <gpgme++/data.h>
|
||||||
#include "key.h"
|
#include <gpgme++/key.h>
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
|
||||||
@ -74,14 +74,7 @@ Error QGpgMEImportFromKeyserverJob::start(const std::vector<Key> &keys)
|
|||||||
GpgME::ImportResult QGpgME::QGpgMEImportFromKeyserverJob::exec(const std::vector<Key> &keys)
|
GpgME::ImportResult QGpgME::QGpgMEImportFromKeyserverJob::exec(const std::vector<Key> &keys)
|
||||||
{
|
{
|
||||||
const result_type r = importfromkeyserver(context(), keys);
|
const result_type r = importfromkeyserver(context(), keys);
|
||||||
resultHook(r);
|
return std::get<0>(r);
|
||||||
return mResult;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// PENDING(marc) implement showErrorDialog()
|
|
||||||
|
|
||||||
void QGpgME::QGpgMEImportFromKeyserverJob::resultHook(const result_type &tuple)
|
|
||||||
{
|
|
||||||
mResult = std::get<0>(tuple);
|
|
||||||
}
|
|
||||||
#include "qgpgmeimportfromkeyserverjob.moc"
|
#include "qgpgmeimportfromkeyserverjob.moc"
|
||||||
|
@ -39,11 +39,7 @@
|
|||||||
|
|
||||||
#include "threadedjobmixin.h"
|
#include "threadedjobmixin.h"
|
||||||
|
|
||||||
#ifdef BUILDING_QGPGME
|
|
||||||
# include "importresult.h"
|
|
||||||
#else
|
|
||||||
#include <gpgme++/importresult.h>
|
#include <gpgme++/importresult.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace QGpgME
|
namespace QGpgME
|
||||||
{
|
{
|
||||||
@ -69,12 +65,6 @@ public:
|
|||||||
|
|
||||||
/* from ImportFromKeyserverJob */
|
/* from ImportFromKeyserverJob */
|
||||||
GpgME::ImportResult exec(const std::vector<GpgME::Key> &keys) override;
|
GpgME::ImportResult exec(const std::vector<GpgME::Key> &keys) override;
|
||||||
|
|
||||||
/* from ThreadedJobMixin */
|
|
||||||
void resultHook(const result_type &r) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
GpgME::ImportResult mResult;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user