Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package gpgmepp for openSUSE:Factory checked in at 2026-09-04 12:36:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gpgmepp (Old) and /work/SRC/openSUSE:Factory/.gpgmepp.new.1265 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gpgmepp" Fri Sep 4 12:36:32 2026 rev:3 rq:1375528 version:2.2.0 Changes: -------- --- /work/SRC/openSUSE:Factory/gpgmepp/gpgmepp.changes 2026-06-01 17:58:45.965284382 +0200 +++ /work/SRC/openSUSE:Factory/.gpgmepp.new.1265/gpgmepp.changes 2026-09-04 12:37:22.300181223 +0200 @@ -1,0 +2,11 @@ +Thu Sep 3 06:00:30 UTC 2026 - Andreas Stieger <[email protected]> + +- Update to 2.2.0: + * Signature now provides issuer serial number and issuer name for + S/MIME certificates used for signing that are not included in a + signature + * Added missing getters for the number of notations of a + signature and the numbers of created signatures and of invalid + signing keys of a signing result + +------------------------------------------------------------------- Old: ---- gpgmepp-2.1.0.tar.xz gpgmepp-2.1.0.tar.xz.sig New: ---- gpgmepp-2.2.0.tar.xz gpgmepp-2.2.0.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gpgmepp.spec ++++++ --- /var/tmp/diff_new_pack.kywIrf/_old 2026-09-04 12:37:23.072208329 +0200 +++ /var/tmp/diff_new_pack.kywIrf/_new 2026-09-04 12:37:23.074208399 +0200 @@ -18,7 +18,7 @@ %define sover 7 Name: gpgmepp -Version: 2.1.0 +Version: 2.2.0 Release: 0 Summary: C++ bindings/wrapper for GPGME License: LGPL-2.0-or-later AND LGPL-2.1-or-later @@ -32,7 +32,7 @@ BuildRequires: cmake BuildRequires: pkgconfig BuildRequires: pkgconfig(gpg-error) >= 1.47 -BuildRequires: pkgconfig(gpgme) >= 2.0.0 +BuildRequires: pkgconfig(gpgme) >= 2.2.0 %if 0%{?suse_version} < 1600 BuildRequires: gcc12-c++ %endif ++++++ gpgmepp-2.1.0.tar.xz -> gpgmepp-2.2.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgmepp-2.1.0/CMakeLists.txt new/gpgmepp-2.2.0/CMakeLists.txt --- old/gpgmepp-2.1.0/CMakeLists.txt 2026-05-18 12:04:51.000000000 +0200 +++ new/gpgmepp-2.2.0/CMakeLists.txt 2026-09-01 10:42:34.000000000 +0200 @@ -21,7 +21,7 @@ cmake_minimum_required(VERSION 3.16 FATAL_ERROR) -set(FULL_VERSION "2.1.0") +set(FULL_VERSION "2.2.0") string(REGEX MATCH "^[0-9]+.[0-9]+.[0-9]+" cmake_compat_version ${FULL_VERSION}) project(gpgmepp VERSION ${cmake_compat_version}) @@ -35,13 +35,13 @@ # (Interfaces added/removed/changed: CURRENT++, REVISION=0) # (Interfaces added: AGE++) # (Interfaces removed: AGE=0) -set(LIBGPGMEPP_LT_CURRENT "8") -set(LIBGPGMEPP_LT_AGE "1") +set(LIBGPGMEPP_LT_CURRENT "9") +set(LIBGPGMEPP_LT_AGE "2") set(LIBGPGMEPP_LT_REVISION "0") math(EXPR LIBGPGMEPP_SOVERSION "${LIBGPGMEPP_LT_CURRENT} - ${LIBGPGMEPP_LT_AGE}") set(GPG_ERROR_REQUIRED_VERSION "1.47") -set(GPGME_REQUIRED_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.0") +set(GPGME_REQUIRED_VERSION "2.2.0") option(ENABLE_SHARED "Build shared libraries" ON) option(ENABLE_STATIC "Build static libraries" OFF) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgmepp-2.1.0/ChangeLog new/gpgmepp-2.2.0/ChangeLog --- old/gpgmepp-2.1.0/ChangeLog 2026-05-18 12:04:51.000000000 +0200 +++ new/gpgmepp-2.2.0/ChangeLog 2026-09-01 10:42:34.000000000 +0200 @@ -1,3 +1,44 @@ +2026-09-01 Ingo Klöcker <[email protected]> + + Release 2.2.0. + + commit 1b3da8425856c558fe31d6d85aa99e1f9ec5bc9f + + +2026-08-10 Ingo Klöcker <[email protected]> + + Add missing getters for size of lists. + + commit e52fd1d625f1cd0a69981a372a8ec020e0c5195a + * src/importresult.cpp, src/importresult.h (ImportResult::numImports): + New. + * src/signingresult.cpp, src/signingresult.h + (SigningResult::numCreatedSignatures, + SigningResult::numInvalidSigningKeys): New. + * src/verificationresult.cpp, src/verificationresult.h + (Signature::numNotations): New. + +2026-08-04 Ingo Klöcker <[email protected]> + + Require GpgME 2.1.3. + + commit b7321a42be9bfe525100b38f38d80deeaf52554e + * CMakeLists.txt: Require gpgme 2.1.3 + + Provide serial number and issuer of unknown S/MIME signing certificates. + + commit f5fa2ae19e2b57f66f1e544fddaa021419fd7840 + * src/verificationresult.cpp, src/verificationresult.h + (Signature::issuerSerial, Signature::issuerName): New. + +2026-08-03 tachalorah <[email protected]> + + Add missing header. + + commit 037a5f8d6555a57df52934349bac7c4e5ad6523d + * src/util.cpp: add missing <iterator> for std::back_inserter + +2026-07-08 Ingo Klöcker <[email protected]> + + Add function to check if subkey is primary (sub)key. + + commit 92dc7035b56c300ada0491999e507f34945a9998 + * src/key.cpp, src/key.h (Subkey::isPrimaryKey): New. + 2026-05-18 Werner Koch <[email protected]> Release 2.1.0. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgmepp-2.1.0/NEWS new/gpgmepp-2.2.0/NEWS --- old/gpgmepp-2.1.0/NEWS 2026-05-18 12:04:51.000000000 +0200 +++ new/gpgmepp-2.2.0/NEWS 2026-09-01 10:42:34.000000000 +0200 @@ -1,3 +1,27 @@ +Noteworthy changes in version 2.2.0 (2026-09-01) [C9/A2/R0] +------------------------------------------------ + + * Signature now provides issuer serial number and issuer name for S/MIME + certificates used for signing that are not included in a signature. + [T8369] + + * Added missing getters for the number of notations of a signature + and the numbers of created signatures and of invalid signing keys of + a signing result. [rGPGMEPPe52fd1d6] + + * Interface changes relative to the 2.1.0 release: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Subkey::isPrimaryKey NEW. + Signature::issuerSerial NEW. + Signature::issuerName NEW. + ImportResult::numImports NEW. + Signature::numNotations NEW. + SigningResult::numCreatedSignatures NEW. + SigningResult::numInvalidSigningKeys NEW. + + Release-info: https://dev.gnupg.org/T8431 + + Noteworthy changes in version 2.1.0 (2026-05-18) [C8/A1/R0] ------------------------------------------------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgmepp-2.1.0/VERSION new/gpgmepp-2.2.0/VERSION --- old/gpgmepp-2.1.0/VERSION 2026-05-18 12:04:51.000000000 +0200 +++ new/gpgmepp-2.2.0/VERSION 2026-09-01 10:42:34.000000000 +0200 @@ -1,2 +1,2 @@ -2.1.0 -6a99d7eef09aedd768356792f38aca2cc03659da +2.2.0 +1b3da8425856c558fe31d6d85aa99e1f9ec5bc9f diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgmepp-2.1.0/src/importresult.cpp new/gpgmepp-2.2.0/src/importresult.cpp --- old/gpgmepp-2.1.0/src/importresult.cpp 2026-05-18 12:04:51.000000000 +0200 +++ new/gpgmepp-2.2.0/src/importresult.cpp 2026-09-01 10:42:34.000000000 +0200 @@ -289,6 +289,11 @@ return d ? d->res.skipped_v3_keys : 0 ; } +unsigned int GpgME::ImportResult::numImports() const +{ + return d ? d->imports.size() : 0; +} + GpgME::Import GpgME::ImportResult::import(unsigned int idx) const { return Import(d, idx); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgmepp-2.1.0/src/importresult.h new/gpgmepp-2.2.0/src/importresult.h --- old/gpgmepp-2.1.0/src/importresult.h 2026-05-18 12:04:51.000000000 +0200 +++ new/gpgmepp-2.2.0/src/importresult.h 2026-09-01 10:42:34.000000000 +0200 @@ -91,6 +91,7 @@ int notImported() const; int numV3KeysSkipped() const; + unsigned int numImports() const; Import import(unsigned int idx) const; std::vector<Import> imports() const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgmepp-2.1.0/src/key.cpp new/gpgmepp-2.2.0/src/key.cpp --- old/gpgmepp-2.1.0/src/key.cpp 2026-05-18 12:04:51.000000000 +0200 +++ new/gpgmepp-2.2.0/src/key.cpp 2026-09-01 10:42:34.000000000 +0200 @@ -624,6 +624,11 @@ return subkey && subkey->secret; } +bool Subkey::isPrimaryKey() const +{ + return subkey == key->subkeys; +} + unsigned int Subkey::length() const { return subkey ? subkey->length : 0 ; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgmepp-2.1.0/src/key.h new/gpgmepp-2.2.0/src/key.h --- old/gpgmepp-2.1.0/src/key.h 2026-05-18 12:04:51.000000000 +0200 +++ new/gpgmepp-2.2.0/src/key.h 2026-09-01 10:42:34.000000000 +0200 @@ -163,6 +163,7 @@ const char *issuerName() const; const char *chainID() const; + /*! Returns a pointer to the key ID of the primary (sub)key. */ const char *keyID() const; const char *shortKeyID() const; const char *primaryFingerprint() const; @@ -291,6 +292,9 @@ bool isSecret() const; + /*! Returns true if this is the primary (sub)key. */ + bool isPrimaryKey() const; + /** Same as gpgme_pubkey_algo_t */ enum PubkeyAlgo { AlgoUnknown = 0, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgmepp-2.1.0/src/signingresult.cpp new/gpgmepp-2.2.0/src/signingresult.cpp --- old/gpgmepp-2.1.0/src/signingresult.cpp 2026-05-18 12:04:51.000000000 +0200 +++ new/gpgmepp-2.2.0/src/signingresult.cpp 2026-09-01 10:42:34.000000000 +0200 @@ -107,6 +107,11 @@ make_standard_stuff(SigningResult) +unsigned int GpgME::SigningResult::numCreatedSignatures() const +{ + return d ? d->created.size() : 0; +} + GpgME::CreatedSignature GpgME::SigningResult::createdSignature(unsigned int idx) const { return CreatedSignature(d, idx); @@ -125,6 +130,11 @@ return result; } +unsigned int GpgME::SigningResult::numInvalidSigningKeys() const +{ + return d ? d->invalid.size() : 0; +} + GpgME::InvalidSigningKey GpgME::SigningResult::invalidSigningKey(unsigned int idx) const { return InvalidSigningKey(d, idx); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgmepp-2.1.0/src/signingresult.h new/gpgmepp-2.2.0/src/signingresult.h --- old/gpgmepp-2.1.0/src/signingresult.h 2026-05-18 12:04:51.000000000 +0200 +++ new/gpgmepp-2.2.0/src/signingresult.h 2026-09-01 10:42:34.000000000 +0200 @@ -66,9 +66,11 @@ bool isNull() const; + unsigned int numCreatedSignatures() const; CreatedSignature createdSignature(unsigned int index) const; std::vector<CreatedSignature> createdSignatures() const; + unsigned int numInvalidSigningKeys() const; InvalidSigningKey invalidSigningKey(unsigned int index) const; std::vector<InvalidSigningKey> invalidSigningKeys() const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgmepp-2.1.0/src/util.cpp new/gpgmepp-2.2.0/src/util.cpp --- old/gpgmepp-2.1.0/src/util.cpp 2026-05-18 12:04:51.000000000 +0200 +++ new/gpgmepp-2.2.0/src/util.cpp 2026-09-01 10:42:34.000000000 +0200 @@ -28,6 +28,7 @@ #include "util.h" #include <functional> +#include <iterator> #include <cstring> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgmepp-2.1.0/src/verificationresult.cpp new/gpgmepp-2.2.0/src/verificationresult.cpp --- old/gpgmepp-2.1.0/src/verificationresult.cpp 2026-05-18 12:04:51.000000000 +0200 +++ new/gpgmepp-2.2.0/src/verificationresult.cpp 2026-09-01 10:42:34.000000000 +0200 @@ -70,6 +70,12 @@ # else scopy->pka_address = nullptr; # endif + if (is->issuer_serial) { + scopy->issuer_serial = strdup(is->issuer_serial); + } + if (is->issuer_name) { + scopy->issuer_name = strdup(is->issuer_name); + } scopy->next = nullptr; sigs.push_back(scopy); // copy keys @@ -102,6 +108,8 @@ for (std::vector<gpgme_signature_t>::iterator it = sigs.begin() ; it != sigs.end() ; ++it) { std::free((*it)->fpr); std::free((*it)->pka_address); + std::free((*it)->issuer_serial); + std::free((*it)->issuer_name); delete *it; *it = nullptr; } for (std::vector< std::vector<Nota> >::iterator it = nota.begin() ; it != nota.end() ; ++it) { @@ -248,6 +256,22 @@ return isNull() ? nullptr : d->sigs[idx]->fpr ; } +const char *GpgME::Signature::issuerSerial() const +{ + if (isNull()) { + return nullptr; + } + return d->sigs[idx]->issuer_serial ? d->sigs[idx]->issuer_serial : d->keys[idx].issuerSerial(); +} + +const char *GpgME::Signature::issuerName() const +{ + if (isNull()) { + return nullptr; + } + return d->sigs[idx]->issuer_name ? d->sigs[idx]->issuer_name : d->keys[idx].issuerName(); +} + GpgME::Error GpgME::Signature::status() const { return Error(isNull() ? 0 : d->sigs[idx]->status); @@ -378,6 +402,11 @@ return isNull() ? nullptr : d->purls[idx] ; } +unsigned int GpgME::Signature::numNotations() const +{ + return isNull() ? 0 : d->nota[idx].size(); +} + GpgME::Notation GpgME::Signature::notation(unsigned int nidx) const { return GpgME::Notation(d, idx, nidx); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gpgmepp-2.1.0/src/verificationresult.h new/gpgmepp-2.2.0/src/verificationresult.h --- old/gpgmepp-2.1.0/src/verificationresult.h 2026-05-18 12:04:51.000000000 +0200 +++ new/gpgmepp-2.2.0/src/verificationresult.h 2026-09-01 10:42:34.000000000 +0200 @@ -124,6 +124,11 @@ const char *fingerprint() const; + /*! The issuer serial number of the S/MIME signing certificate. */ + const char *issuerSerial() const; + /*! The issuer name of the S/MIME signing certificate. */ + const char *issuerName() const; + Error status() const; time_t creationTime() const; @@ -155,6 +160,8 @@ const char *hashAlgorithmAsString() const; const char *policyURL() const; + + unsigned int numNotations() const; GpgME::Notation notation(unsigned int index) const; std::vector<GpgME::Notation> notations() const; ++++++ gpgmepp.keyring ++++++ --- /var/tmp/diff_new_pack.kywIrf/_old 2026-09-04 12:37:23.222213595 +0200 +++ /var/tmp/diff_new_pack.kywIrf/_new 2026-09-04 12:37:23.226213736 +0200 @@ -66,30 +66,39 @@ KdYretbGQwo+vXLXfWk9QKHXwF2IdkUSnL/IyFje/thujBW2UJZMTO3vD830px2G k4h1BBATCAAdFiEEAvON/3Mf+XywOaHaVJ5pXpBboggFAmgeDcYACgkQVJ5pXpBb ogis0wD9H38UP4TH3Y19d7mnkSifeHkldKc4iUP/Ok3w/+Di5qkA/iA7xLTtiuhW -jhnuwb68kTxh8Beg023EiqsJb9qWnY8umFMEYWlKoxMJKyQDAwIIAQEHAgMEXpcP -02ZRAOCLJg1uGzUMwnXiYjDzXbBjUdXH/hBZhaIG6eGu9IXFVvOyMPv9a/6/duYw -+sv4zYMvIWJJ7A2ZxLQkR251UEcuY29tIChSZWxlYXNlIFNpZ25pbmcgS2V5IDIw -MjEpiJoEExMIAEIWIQQC843/cx/5fLA5odpUnmlekFuiCAUCYWlKowIbAwUJD3HX -igULCQgHAgMiAgEGFQoJCAsCBBYCAwECHgcCF4AACgkQVJ5pXpBboghOSgD9FhqN -pOXV4QFT8Z2bXajeOsjnk3nFkrZdOpLHblyVXKMA/RfAxb86Dn40PWuLdsCoANVa -UENSzDPzBjGxvQLiRgGSiHUEEBYKAB0WIQRtqm5kp20oQFcbSQJSiJe4JkA62gUC -YWlO8QAKCRBSiJe4JkA62slAAQCHtjLKSMDL9CzXILeOLyIF8hWc9e9uWsjHdJFH -IPBELwEAq1lsS4pO0+WCQtSAyV5Nxkn+8SEkT4a99D2jmBYKoQWIdQQQFgoAHRYh -BMHTS2khnkruwLocIeP9/yGORbcrBQJhaU9aAAoJEOP9/yGORbcrHh4BAOnpoZI3 -99TjEuXxFK9BRWNUD5oJOsxBHeFHCrDyWIXbAQDc7cQLHPp7X4Ogi1igkEEsovB6 -IiewZn/6HldiuldOAJhzBGmcEd0TCSskAwMCCAEBCwMDBFT19o0ILvhUHY7++XKs -7VXucAoXgkq5WEvqBsIzGGSrWlC6fc+L6bDS6YSSw2yRMWmeY7fukPLaDY/BtAFe -6LYHos4tyUkjHcUliMyEPvnIUapDL+ZS8I+ihkt4wlfWPrQkR251UEcuY29tIChS -ZWxlYXNlIFNpZ25pbmcgS2V5IDIwMjYpiNUEExMJAF0WIQQUkyad5h8SSqaaMW46 -3zTr27IApAUCaZwU6xsUgAAAAAAEAA5tYW51MiwyLjUrMS4xMSwyLDICGwMFCQ8M -a4AFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQOt8069uyAKS3FAF/d81D -kMhp98EHpDa/ZLbvIZuTDvz/wngLOzHvMLy+zAm1UQKU4nRT9YCjiz7/hS55AX4w -h36hfXlNvTpP8tXjY+MNo7oMuHx+a23KgB77KTxKCMoF/ZAetYFhVwcubFRk5KOI -dQQQEwgAHRYhBALzjf9zH/l8sDmh2lSeaV6QW6IIBQJpnBZZAAoJEFSeaV6QW6II -+a4BAJsGiYwA0Vwt0p2pxeSh/IGJTSHfFWYkEMf3pt5HGBGBAP9Hxc04lXgkr5yS -AMOkqdhB2Y/VsrU5IltHfPNRWrBUsYh1BBAWCgAdFiEEbapuZKdtKEBXG0kCUoiX -uCZAOtoFAmmcFpkACgkQUoiXuCZAOtq2fQEA4HuVHLXfTB9WNLA07Tuc8jziaGjG -d3g9PrWIQiUMfsEA/2MPh5wwTaX+8YsBc+DwBGtNshzReN+OBDpnyk/ILEoM -=rCfC +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 +jgQ6Z8pPyCxKDA== +=/vKN -----END PGP PUBLIC KEY BLOCK-----
