{"id":50124934,"url":"https://github.com/gpg/gpgmeqt","last_synced_at":"2026-05-23T19:31:35.205Z","repository":{"id":321497382,"uuid":"1001258216","full_name":"gpg/gpgmeqt","owner":"gpg","description":"GnuPG Made Easy (Qt bindings). NOTE: Maintainers are not tracking this mirror. Do not make pull requests here, nor comment any commits, submit them usual way to bug tracker (https://www.gnupg.org/documentation/bts.html) or to the mailing list (https://www.gnupg.org/documentation/mailing-lists.html). ","archived":false,"fork":false,"pushed_at":"2026-05-18T22:03:52.000Z","size":1933,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-19T00:39:08.777Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gpg.png","metadata":{"files":{"readme":"README","changelog":"ChangeLog","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-13T04:51:54.000Z","updated_at":"2026-05-18T22:04:27.000Z","dependencies_parsed_at":"2025-10-30T01:09:29.749Z","dependency_job_id":"f9d11d82-8eb0-450a-bd13-b44d4d7a7b4a","html_url":"https://github.com/gpg/gpgmeqt","commit_stats":null,"previous_names":["gpg/gpgmeqt"],"tags_count":219,"template":false,"template_full_name":null,"purl":"pkg:github/gpg/gpgmeqt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gpg%2Fgpgmeqt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gpg%2Fgpgmeqt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gpg%2Fgpgmeqt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gpg%2Fgpgmeqt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gpg","download_url":"https://codeload.github.com/gpg/gpgmeqt/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gpg%2Fgpgmeqt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33410342,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T18:09:33.147Z","status":"ssl_error","status_checked_at":"2026-05-23T18:09:31.380Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-23T19:31:33.274Z","updated_at":"2026-05-23T19:31:35.192Z","avatar_url":"https://github.com/gpg.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Qt API bindings/wrapper for GPGME\n---------------------------------\nBased on KF5gpgmepp QGpgME and libkleo/backends/qgpgme\n\nPlease note that QGpgME has a different license (GPL only)\nthen GPGME itself. See the License section in this\ndocument for more information.\n\nOverview\n--------\nQGpgme provides a very high level Qt API around GpgMEpp.\nAs such it depends on GpgMEpp additionally to GpgME.\n\nThere are two general concepts in QGpgME. Data abstraction\nthrough GpgMEpp's Dataprovider interface and the Job pattern.\n\nData can be provided with QByteArrayDataProvider or\nQIODeviceDataProvider which can be constructed from their\nrespective types. This means you can pass a QFile, QProcess,\nQString, etc.. directly to GPGME.\n\nTo provide a stable API / ABI and because of historic reasons\nin libkleo (Where QGpgME was originally developed as an abstract\ncrypto backend) QGpgME only provides abstract interfaces as\npublic API while the actual implementation happens in the\nprivate QGpgME prefixed classes.\n\nUsage\n-----\n\nTo use QGpgME first you need to obtain a Protocol class\neither for CMS (S/MIME) or OpenPGP. This Protocol class\ncan then be used to create a Job.\n\nEach Job can be started asynchronously and emits a result\nsignal when done. The jobs are deleted automatically\nwith QObject::deleteLater so they can be started without\nresult handlers.\n\nThe result signal provides a tuple of objects with the\nappropriate result information for this job. For historic\nreasons each result signal also includes an AuditLog\nand an AuditLog Error. These are only useful for\nS/MIME signature validation but are part of other jobs\nfor API stability reasons.\n\nSome jobs like the verification or decryption jobs have\ndedicated result classes. Each result class at least\nhas the member function error() that can be used\nto check if a job failed. Additionally errors are emitted\nin the result signal.\n\nJobs also provide progress signal whenever GnuPG emits\na progress status line.\n\nMost jobs also provide a way synchronously execute them.\nPlease not that synchronous use does not cause the autodeletion\nto take place so you have to manually delete them.\n\nAsync usage:\n\n    /* Create a job */\n    EncryptJob *job = openpgp()-\u003eencryptJob(/*ASCII Armor */false, /* Textmode */ false);\n    /* Connect something to the result signal */\n    connect(job, \u0026EncryptJob::result, this, [] (const GpgME::EncryptionResult \u0026result,\n                                                const QByteArray \u0026cipherText,\n                                                const QString,\n                                                const GpgME::Error) {\n        /* Handle the result / do something with the ciphertext */\n     });\n    /* Start the job */\n    job-\u003estart(keys, inptr, outptr, Context::AlwaysTrust);\n    /* Do not delete the job as it is autodeleted. */\n\nSynchronous usage:\n\n    /* Create a job */\n    KeyListJob *listjob = openpgp()-\u003ekeyListJob(false, false, false);\n    /* Prepare result vector */\n    std::vector\u003cKey\u003e keys;\n    /* Execute it synchronusly */\n    KeyListResult result = listjob-\u003eexec(QStringList() \u003c\u003c QStringLiteral(\"alfa@example.net\"),\n                                         false, keys);\n    /* Delete the job */\n    delete listjob;\n    /* Work with the result */\n\nSee the generated documentation for more info on the classes\nin QGpgME. (Subdir doc)\n\nExamples / Tests\n----------------\n\nThe tests in the tests subdir can be used to get a better\nidea of QGpgME's usage. They also serve to test the C++\nAPI. Kleopatra and KMails Messagelib also make extensive\nuse of QGpgME and can be used as further examples.\n\nHacking\n-------\nQGpgME comes from a KDE background. As such it does not use\nGNU Coding styles but KDE Coding styles. See:\nhttps://community.kde.org/Policies/Frameworks_Coding_Style\n\nLicense\n-------\nQGpgME is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License as\npublished by the Free Software Foundation; either version 2 of the\nLicense, or (at your option) any later version.\n\nQGpgME is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\nGeneral Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n\nIn addition, as a special exception, the copyright holders give\npermission to link the code of this program with any edition of\nthe Qt library by Trolltech AS, Norway (or with modified versions\nof Qt that use the same license as Qt), and distribute linked\ncombinations including the two.  You must obey the GNU General\nPublic License in all respects for all of the code used other than\nQt.  If you modify this file, you may extend this exception to\nyour version of the file, but you are not obligated to do so.  If\nyou do not wish to do so, delete this exception statement from\nyour version.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgpg%2Fgpgmeqt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgpg%2Fgpgmeqt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgpg%2Fgpgmeqt/lists"}