bool PgpManager::IsValidSignature (const QCA::PGPKey& pubkey, const QByteArray& message, const QByteArray& signature) { if (pubkey.isNull ()) { warning (QString ("Cannot encrypt: public key is null")); return false; } QCA::OpenPGP pgp; QCA::SecureMessageKey key; QCA::SecureMessage msg (&pgp); key.setPGPPublicKey (pubkey); msg.setSigner (key); msg.setFormat (QCA::SecureMessage::Binary); msg.startVerify (WrapPGP (signature, PGPType::Signature).toUtf8 ()); msg.update (message); msg.end (); msg.waitForFinished (); if (msg.verifySuccess ()) return true; else { info (QString ("Invalid signature: %1").arg (msg.errorCode ())); return false; } }
QByteArray PgpManager::EncryptBody (const QCA::PGPKey& pubkey, const QByteArray& body) { if (pubkey.isNull ()) { warning ("Cannot encrypt: public key is null"); throw GPGExceptions::NullPubkey {}; } QCA::SecureMessageKey msgKey; msgKey.setPGPPublicKey (pubkey); QCA::OpenPGP pgp; QCA::SecureMessage msg (&pgp); msg.setRecipient (msgKey); msg.setFormat (QCA::SecureMessage::Ascii); msg.startEncrypt (); msg.update (body); msg.end (); msg.waitForFinished (); if (!msg.success ()) { info (QString { "Error encrypting: %1 (%2)." } .arg (msg.errorCode ()) .arg (msg.diagnosticText ())); throw GPGExceptions::Encryption { msg.errorCode (), msg.diagnosticText () }; } return msg.read (); }