//======================================================================== // // GPGMECryptoSignBackend.h // // This file is licensed under the GPLv2 or later // // Copyright 2023 g10 Code GmbH, Author: Sune Stolborg Vuorela //======================================================================== #include "CryptoSignBackend.h" #include #include #include class GpgSignatureBackend : public CryptoSign::Backend { public: GpgSignatureBackend(); std::unique_ptr createVerificationHandler(std::vector &&pkcs7) final; std::unique_ptr createSigningHandler(const std::string &certID, HashAlgorithm digestAlgTag) final; std::vector> getAvailableSigningCertificates() final; static bool hasSufficientVersion(); }; class GpgSignatureCreation : public CryptoSign::SigningInterface { public: GpgSignatureCreation(const std::string &certId); void addData(unsigned char *dataBlock, int dataLen) final; std::unique_ptr getCertificateInfo() const final; std::optional signDetached(const std::string &password) final; private: std::unique_ptr gpgContext; GpgME::Data gpgData; std::optional key; }; class GpgSignatureVerification : public CryptoSign::VerificationInterface { public: explicit GpgSignatureVerification(const std::vector &pkcs7data); SignatureValidationStatus validateSignature() final; void addData(unsigned char *dataBlock, int dataLen) final; std::chrono::system_clock::time_point getSigningTime() const final; std::string getSignerName() const final; std::string getSignerSubjectDN() const final; HashAlgorithm getHashAlgorithm() const final; CertificateValidationStatus validateCertificate(std::chrono::system_clock::time_point validation_time, bool ocspRevocationCheck, bool useAIACertFetch) final; std::unique_ptr getCertificateInfo() const final; private: std::unique_ptr gpgContext; GpgME::Data signatureData; GpgME::Data signedData; std::optional gpgResult; };