mirror of https://github.com/JakubMelka/PDF4QT.git
Public key encryption: code refactoring
This commit is contained in:
parent
1c03bd85cd
commit
c20959c190
|
@ -47,8 +47,11 @@ SOURCES += \
|
||||||
sources/pdfannotation.cpp \
|
sources/pdfannotation.cpp \
|
||||||
sources/pdfblendfunction.cpp \
|
sources/pdfblendfunction.cpp \
|
||||||
sources/pdfccittfaxdecoder.cpp \
|
sources/pdfccittfaxdecoder.cpp \
|
||||||
|
sources/pdfcertificatemanager.cpp \
|
||||||
|
sources/pdfcertificatemanagerdialog.cpp \
|
||||||
sources/pdfcms.cpp \
|
sources/pdfcms.cpp \
|
||||||
sources/pdfcompiler.cpp \
|
sources/pdfcompiler.cpp \
|
||||||
|
sources/pdfcreatecertificatedialog.cpp \
|
||||||
sources/pdfdiff.cpp \
|
sources/pdfdiff.cpp \
|
||||||
sources/pdfdocumentbuilder.cpp \
|
sources/pdfdocumentbuilder.cpp \
|
||||||
sources/pdfdocumentmanipulator.cpp \
|
sources/pdfdocumentmanipulator.cpp \
|
||||||
|
@ -121,8 +124,11 @@ HEADERS += \
|
||||||
sources/pdfannotation.h \
|
sources/pdfannotation.h \
|
||||||
sources/pdfblendfunction.h \
|
sources/pdfblendfunction.h \
|
||||||
sources/pdfccittfaxdecoder.h \
|
sources/pdfccittfaxdecoder.h \
|
||||||
|
sources/pdfcertificatemanager.h \
|
||||||
|
sources/pdfcertificatemanagerdialog.h \
|
||||||
sources/pdfcms.h \
|
sources/pdfcms.h \
|
||||||
sources/pdfcompiler.h \
|
sources/pdfcompiler.h \
|
||||||
|
sources/pdfcreatecertificatedialog.h \
|
||||||
sources/pdfdbgheap.h \
|
sources/pdfdbgheap.h \
|
||||||
sources/pdfdiff.h \
|
sources/pdfdiff.h \
|
||||||
sources/pdfdocumentbuilder.h \
|
sources/pdfdocumentbuilder.h \
|
||||||
|
@ -202,6 +208,8 @@ HEADERS += \
|
||||||
sources/pdfimage.h
|
sources/pdfimage.h
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
|
sources/pdfcertificatemanagerdialog.ui \
|
||||||
|
sources/pdfcreatecertificatedialog.ui \
|
||||||
sources/pdfpagecontenteditorstylesettings.ui \
|
sources/pdfpagecontenteditorstylesettings.ui \
|
||||||
sources/pdfpagecontenteditorwidget.ui \
|
sources/pdfpagecontenteditorwidget.ui \
|
||||||
sources/pdfrenderingerrorswidget.ui \
|
sources/pdfrenderingerrorswidget.ui \
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with PDF4QT. If not, see <https://www.gnu.org/licenses/>.
|
// along with PDF4QT. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#include "certificatemanager.h"
|
#include "pdfcertificatemanager.h"
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
@ -32,10 +32,10 @@
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
namespace pdfplugin
|
namespace pdf
|
||||||
{
|
{
|
||||||
|
|
||||||
CertificateManager::CertificateManager()
|
PDFCertificateManager::PDFCertificateManager()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ CertificateManager::CertificateManager()
|
||||||
template<typename T>
|
template<typename T>
|
||||||
using openssl_ptr = std::unique_ptr<T, void(*)(T*)>;
|
using openssl_ptr = std::unique_ptr<T, void(*)(T*)>;
|
||||||
|
|
||||||
void CertificateManager::createCertificate(const NewCertificateInfo& info)
|
void PDFCertificateManager::createCertificate(const NewCertificateInfo& info)
|
||||||
{
|
{
|
||||||
openssl_ptr<BIO> pksBuffer(BIO_new(BIO_s_mem()), &BIO_free_all);
|
openssl_ptr<BIO> pksBuffer(BIO_new(BIO_s_mem()), &BIO_free_all);
|
||||||
|
|
||||||
|
@ -132,19 +132,19 @@ void CertificateManager::createCertificate(const NewCertificateInfo& info)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QFileInfoList CertificateManager::getCertificates()
|
QFileInfoList PDFCertificateManager::getCertificates()
|
||||||
{
|
{
|
||||||
QDir directory(getCertificateDirectory());
|
QDir directory(getCertificateDirectory());
|
||||||
return directory.entryInfoList(QStringList() << "*.pfx", QDir::Files | QDir::NoDotAndDotDot | QDir::Readable, QDir::Name);
|
return directory.entryInfoList(QStringList() << "*.pfx", QDir::Files | QDir::NoDotAndDotDot | QDir::Readable, QDir::Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString CertificateManager::getCertificateDirectory()
|
QString PDFCertificateManager::getCertificateDirectory()
|
||||||
{
|
{
|
||||||
QDir directory(QStandardPaths::standardLocations(QStandardPaths::AppDataLocation).front() + "/certificates/");
|
QDir directory(QStandardPaths::standardLocations(QStandardPaths::AppDataLocation).front() + "/certificates/");
|
||||||
return directory.absolutePath();
|
return directory.absolutePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString CertificateManager::generateCertificateFileName()
|
QString PDFCertificateManager::generateCertificateFileName()
|
||||||
{
|
{
|
||||||
QString directoryString = getCertificateDirectory();
|
QString directoryString = getCertificateDirectory();
|
||||||
QDir directory(directoryString);
|
QDir directory(directoryString);
|
||||||
|
@ -162,7 +162,7 @@ QString CertificateManager::generateCertificateFileName()
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CertificateManager::isCertificateValid(QString fileName, QString password)
|
bool PDFCertificateManager::isCertificateValid(QString fileName, QString password)
|
||||||
{
|
{
|
||||||
QFile file(fileName);
|
QFile file(fileName);
|
||||||
if (file.open(QFile::ReadOnly))
|
if (file.open(QFile::ReadOnly))
|
||||||
|
@ -190,7 +190,7 @@ bool CertificateManager::isCertificateValid(QString fileName, QString password)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SignatureFactory::sign(QString certificateName, QString password, QByteArray data, QByteArray& result)
|
bool PDFSignatureFactory::sign(QString certificateName, QString password, QByteArray data, QByteArray& result)
|
||||||
{
|
{
|
||||||
QFile file(certificateName);
|
QFile file(certificateName);
|
||||||
if (file.open(QFile::ReadOnly))
|
if (file.open(QFile::ReadOnly))
|
||||||
|
@ -247,4 +247,4 @@ bool SignatureFactory::sign(QString certificateName, QString password, QByteArra
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace pdfplugin
|
} // namespace pdf
|
|
@ -15,19 +15,21 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with PDF4QT. If not, see <https://www.gnu.org/licenses/>.
|
// along with PDF4QT. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#ifndef CERTIFICATEMANAGER_H
|
#ifndef PDFCERTIFICATEMANAGER_H
|
||||||
#define CERTIFICATEMANAGER_H
|
#define PDFCERTIFICATEMANAGER_H
|
||||||
|
|
||||||
|
#include "pdfglobal.h"
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QFileInfoList>
|
#include <QFileInfoList>
|
||||||
|
|
||||||
namespace pdfplugin
|
namespace pdf
|
||||||
{
|
{
|
||||||
|
|
||||||
class CertificateManager
|
class PDF4QTLIBSHARED_EXPORT PDFCertificateManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CertificateManager();
|
PDFCertificateManager();
|
||||||
|
|
||||||
struct NewCertificateInfo
|
struct NewCertificateInfo
|
||||||
{
|
{
|
||||||
|
@ -53,12 +55,12 @@ public:
|
||||||
static bool isCertificateValid(QString fileName, QString password);
|
static bool isCertificateValid(QString fileName, QString password);
|
||||||
};
|
};
|
||||||
|
|
||||||
class SignatureFactory
|
class PDF4QTLIBSHARED_EXPORT PDFSignatureFactory
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static bool sign(QString certificateName, QString password, QByteArray data, QByteArray& result);
|
static bool sign(QString certificateName, QString password, QByteArray data, QByteArray& result);
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace pdfplugin
|
} // namespace pdf
|
||||||
|
|
||||||
#endif // CERTIFICATEMANAGER_H
|
#endif // PDFCERTIFICATEMANAGER_H
|
|
@ -15,9 +15,9 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with PDF4QT. If not, see <https://www.gnu.org/licenses/>.
|
// along with PDF4QT. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#include "certificatemanagerdialog.h"
|
#include "pdfcertificatemanagerdialog.h"
|
||||||
#include "ui_certificatemanagerdialog.h"
|
#include "ui_pdfcertificatemanagerdialog.h"
|
||||||
#include "createcertificatedialog.h"
|
#include "pdfcreatecertificatedialog.h"
|
||||||
|
|
||||||
#include "pdfwidgetutils.h"
|
#include "pdfwidgetutils.h"
|
||||||
|
|
||||||
|
@ -28,12 +28,12 @@
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
|
||||||
namespace pdfplugin
|
namespace pdf
|
||||||
{
|
{
|
||||||
|
|
||||||
CertificateManagerDialog::CertificateManagerDialog(QWidget *parent) :
|
PDFCertificateManagerDialog::PDFCertificateManagerDialog(QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::CertificateManagerDialog),
|
ui(new Ui::PDFCertificateManagerDialog),
|
||||||
m_newCertificateButton(nullptr),
|
m_newCertificateButton(nullptr),
|
||||||
m_openCertificateDirectoryButton(nullptr),
|
m_openCertificateDirectoryButton(nullptr),
|
||||||
m_deleteCertificateButton(nullptr),
|
m_deleteCertificateButton(nullptr),
|
||||||
|
@ -42,10 +42,10 @@ CertificateManagerDialog::CertificateManagerDialog(QWidget *parent) :
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
QDir::root().mkpath(CertificateManager::getCertificateDirectory());
|
QDir::root().mkpath(PDFCertificateManager::getCertificateDirectory());
|
||||||
|
|
||||||
m_certificateFileModel = new QFileSystemModel(this);
|
m_certificateFileModel = new QFileSystemModel(this);
|
||||||
QModelIndex rootIndex = m_certificateFileModel->setRootPath(CertificateManager::getCertificateDirectory());
|
QModelIndex rootIndex = m_certificateFileModel->setRootPath(PDFCertificateManager::getCertificateDirectory());
|
||||||
ui->fileView->setModel(m_certificateFileModel);
|
ui->fileView->setModel(m_certificateFileModel);
|
||||||
ui->fileView->setRootIndex(rootIndex);
|
ui->fileView->setRootIndex(rootIndex);
|
||||||
|
|
||||||
|
@ -54,35 +54,35 @@ CertificateManagerDialog::CertificateManagerDialog(QWidget *parent) :
|
||||||
m_deleteCertificateButton = ui->buttonBox->addButton(tr("Delete"), QDialogButtonBox::ActionRole);
|
m_deleteCertificateButton = ui->buttonBox->addButton(tr("Delete"), QDialogButtonBox::ActionRole);
|
||||||
m_importCertificateButton = ui->buttonBox->addButton(tr("Import"), QDialogButtonBox::ActionRole);
|
m_importCertificateButton = ui->buttonBox->addButton(tr("Import"), QDialogButtonBox::ActionRole);
|
||||||
|
|
||||||
connect(m_newCertificateButton, &QPushButton::clicked, this, &CertificateManagerDialog::onNewCertificateClicked);
|
connect(m_newCertificateButton, &QPushButton::clicked, this, &PDFCertificateManagerDialog::onNewCertificateClicked);
|
||||||
connect(m_openCertificateDirectoryButton, &QPushButton::clicked, this, &CertificateManagerDialog::onOpenCertificateDirectoryClicked);
|
connect(m_openCertificateDirectoryButton, &QPushButton::clicked, this, &PDFCertificateManagerDialog::onOpenCertificateDirectoryClicked);
|
||||||
connect(m_deleteCertificateButton, &QPushButton::clicked, this, &CertificateManagerDialog::onDeleteCertificateClicked);
|
connect(m_deleteCertificateButton, &QPushButton::clicked, this, &PDFCertificateManagerDialog::onDeleteCertificateClicked);
|
||||||
connect(m_importCertificateButton, &QPushButton::clicked, this, &CertificateManagerDialog::onImportCertificateClicked);
|
connect(m_importCertificateButton, &QPushButton::clicked, this, &PDFCertificateManagerDialog::onImportCertificateClicked);
|
||||||
|
|
||||||
setMinimumSize(pdf::PDFWidgetUtils::scaleDPI(this, QSize(640, 480)));
|
setMinimumSize(pdf::PDFWidgetUtils::scaleDPI(this, QSize(640, 480)));
|
||||||
}
|
}
|
||||||
|
|
||||||
CertificateManagerDialog::~CertificateManagerDialog()
|
PDFCertificateManagerDialog::~PDFCertificateManagerDialog()
|
||||||
{
|
{
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CertificateManagerDialog::onNewCertificateClicked()
|
void PDFCertificateManagerDialog::onNewCertificateClicked()
|
||||||
{
|
{
|
||||||
CreateCertificateDialog dialog(this);
|
PDFCreateCertificateDialog dialog(this);
|
||||||
if (dialog.exec() == CreateCertificateDialog::Accepted)
|
if (dialog.exec() == PDFCreateCertificateDialog::Accepted)
|
||||||
{
|
{
|
||||||
const CertificateManager::NewCertificateInfo info = dialog.getNewCertificateInfo();
|
const PDFCertificateManager::NewCertificateInfo info = dialog.getNewCertificateInfo();
|
||||||
m_certificateManager.createCertificate(info);
|
m_certificateManager.createCertificate(info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CertificateManagerDialog::onOpenCertificateDirectoryClicked()
|
void PDFCertificateManagerDialog::onOpenCertificateDirectoryClicked()
|
||||||
{
|
{
|
||||||
QDesktopServices::openUrl(QString("file:///%1").arg(CertificateManager::getCertificateDirectory(), QUrl::TolerantMode));
|
QDesktopServices::openUrl(QString("file:///%1").arg(PDFCertificateManager::getCertificateDirectory(), QUrl::TolerantMode));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CertificateManagerDialog::onDeleteCertificateClicked()
|
void PDFCertificateManagerDialog::onDeleteCertificateClicked()
|
||||||
{
|
{
|
||||||
QFileInfo fileInfo = m_certificateFileModel->fileInfo(ui->fileView->currentIndex());
|
QFileInfo fileInfo = m_certificateFileModel->fileInfo(ui->fileView->currentIndex());
|
||||||
if (fileInfo.exists())
|
if (fileInfo.exists())
|
||||||
|
@ -98,7 +98,7 @@ void CertificateManagerDialog::onDeleteCertificateClicked()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CertificateManagerDialog::onImportCertificateClicked()
|
void PDFCertificateManagerDialog::onImportCertificateClicked()
|
||||||
{
|
{
|
||||||
QString selectedFile = QFileDialog::getOpenFileName(this, tr("Import Certificate"), QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), tr("Certificate file (*.pfx);;All files (*.*)"));
|
QString selectedFile = QFileDialog::getOpenFileName(this, tr("Import Certificate"), QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), tr("Certificate file (*.pfx);;All files (*.*)"));
|
||||||
|
|
||||||
|
@ -110,7 +110,7 @@ void CertificateManagerDialog::onImportCertificateClicked()
|
||||||
QFile file(selectedFile);
|
QFile file(selectedFile);
|
||||||
if (file.exists())
|
if (file.exists())
|
||||||
{
|
{
|
||||||
QString path = CertificateManager::getCertificateDirectory();
|
QString path = PDFCertificateManager::getCertificateDirectory();
|
||||||
QString targetFile = QString("%1/%2").arg(path, QFileInfo(file).fileName());
|
QString targetFile = QString("%1/%2").arg(path, QFileInfo(file).fileName());
|
||||||
if (QFile::exists(targetFile))
|
if (QFile::exists(targetFile))
|
||||||
{
|
{
|
||||||
|
@ -130,4 +130,4 @@ void CertificateManagerDialog::onImportCertificateClicked()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace pdfplugin
|
} // namespace pdf
|
|
@ -15,10 +15,10 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with PDF4QT. If not, see <https://www.gnu.org/licenses/>.
|
// along with PDF4QT. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#ifndef CERTIFICATEMANAGERDIALOG_H
|
#ifndef PDFCERTIFICATEMANAGERDIALOG_H
|
||||||
#define CERTIFICATEMANAGERDIALOG_H
|
#define PDFCERTIFICATEMANAGERDIALOG_H
|
||||||
|
|
||||||
#include "certificatemanager.h"
|
#include "pdfcertificatemanager.h"
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
|
||||||
|
@ -27,19 +27,19 @@ class QFileSystemModel;
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
class CertificateManagerDialog;
|
class PDFCertificateManagerDialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace pdfplugin
|
namespace pdf
|
||||||
{
|
{
|
||||||
|
|
||||||
class CertificateManagerDialog : public QDialog
|
class PDF4QTLIBSHARED_EXPORT PDFCertificateManagerDialog : public QDialog
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit CertificateManagerDialog(QWidget* parent);
|
explicit PDFCertificateManagerDialog(QWidget* parent);
|
||||||
virtual ~CertificateManagerDialog() override;
|
virtual ~PDFCertificateManagerDialog() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void onNewCertificateClicked();
|
void onNewCertificateClicked();
|
||||||
|
@ -47,8 +47,8 @@ private:
|
||||||
void onDeleteCertificateClicked();
|
void onDeleteCertificateClicked();
|
||||||
void onImportCertificateClicked();
|
void onImportCertificateClicked();
|
||||||
|
|
||||||
Ui::CertificateManagerDialog* ui;
|
Ui::PDFCertificateManagerDialog* ui;
|
||||||
CertificateManager m_certificateManager;
|
PDFCertificateManager m_certificateManager;
|
||||||
QPushButton* m_newCertificateButton;
|
QPushButton* m_newCertificateButton;
|
||||||
QPushButton* m_openCertificateDirectoryButton;
|
QPushButton* m_openCertificateDirectoryButton;
|
||||||
QPushButton* m_deleteCertificateButton;
|
QPushButton* m_deleteCertificateButton;
|
||||||
|
@ -56,6 +56,6 @@ private:
|
||||||
QFileSystemModel* m_certificateFileModel;
|
QFileSystemModel* m_certificateFileModel;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace pdfplugin
|
} // namespace pdf
|
||||||
|
|
||||||
#endif // CERTIFICATEMANAGERDIALOG_H
|
#endif // PDFCERTIFICATEMANAGERDIALOG_H
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ui version="4.0">
|
<ui version="4.0">
|
||||||
<class>CertificateManagerDialog</class>
|
<class>PDFCertificateManagerDialog</class>
|
||||||
<widget class="QDialog" name="CertificateManagerDialog">
|
<widget class="QDialog" name="PDFCertificateManagerDialog">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
<connection>
|
<connection>
|
||||||
<sender>buttonBox</sender>
|
<sender>buttonBox</sender>
|
||||||
<signal>accepted()</signal>
|
<signal>accepted()</signal>
|
||||||
<receiver>CertificateManagerDialog</receiver>
|
<receiver>PDFCertificateManagerDialog</receiver>
|
||||||
<slot>accept()</slot>
|
<slot>accept()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
<connection>
|
<connection>
|
||||||
<sender>buttonBox</sender>
|
<sender>buttonBox</sender>
|
||||||
<signal>rejected()</signal>
|
<signal>rejected()</signal>
|
||||||
<receiver>CertificateManagerDialog</receiver>
|
<receiver>PDFCertificateManagerDialog</receiver>
|
||||||
<slot>reject()</slot>
|
<slot>reject()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
|
@ -15,27 +15,27 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with PDF4QT. If not, see <https://www.gnu.org/licenses/>.
|
// along with PDF4QT. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#include "createcertificatedialog.h"
|
#include "pdfcreatecertificatedialog.h"
|
||||||
#include "ui_createcertificatedialog.h"
|
#include "ui_pdfcreatecertificatedialog.h"
|
||||||
|
|
||||||
#include "certificatemanager.h"
|
#include "pdfcertificatemanager.h"
|
||||||
|
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QInputDialog>
|
#include <QInputDialog>
|
||||||
#include <QDate>
|
#include <QDate>
|
||||||
#include <QCalendar>
|
#include <QCalendar>
|
||||||
|
|
||||||
namespace pdfplugin
|
namespace pdf
|
||||||
{
|
{
|
||||||
|
|
||||||
CreateCertificateDialog::CreateCertificateDialog(QWidget *parent) :
|
PDFCreateCertificateDialog::PDFCreateCertificateDialog(QWidget *parent) :
|
||||||
QDialog(parent),
|
QDialog(parent),
|
||||||
ui(new Ui::CreateCertificateDialog)
|
ui(new Ui::PDFCreateCertificateDialog)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
ui->fileNameEdit->setReadOnly(true);
|
ui->fileNameEdit->setReadOnly(true);
|
||||||
ui->fileNameEdit->setText(CertificateManager::generateCertificateFileName());
|
ui->fileNameEdit->setText(PDFCertificateManager::generateCertificateFileName());
|
||||||
|
|
||||||
ui->keyLengthCombo->addItem(tr("1024 bits"), 1024);
|
ui->keyLengthCombo->addItem(tr("1024 bits"), 1024);
|
||||||
ui->keyLengthCombo->addItem(tr("2048 bits"), 2048);
|
ui->keyLengthCombo->addItem(tr("2048 bits"), 2048);
|
||||||
|
@ -88,12 +88,12 @@ CreateCertificateDialog::CreateCertificateDialog(QWidget *parent) :
|
||||||
ui->validTillEdit->setSelectedDate(selectedDate);
|
ui->validTillEdit->setSelectedDate(selectedDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
CreateCertificateDialog::~CreateCertificateDialog()
|
PDFCreateCertificateDialog::~PDFCreateCertificateDialog()
|
||||||
{
|
{
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateCertificateDialog::accept()
|
void PDFCreateCertificateDialog::accept()
|
||||||
{
|
{
|
||||||
if (validate())
|
if (validate())
|
||||||
{
|
{
|
||||||
|
@ -132,7 +132,7 @@ void CreateCertificateDialog::accept()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CreateCertificateDialog::validate()
|
bool PDFCreateCertificateDialog::validate()
|
||||||
{
|
{
|
||||||
// validate empty text fields
|
// validate empty text fields
|
||||||
if (ui->commonNameEdit->text().isEmpty())
|
if (ui->commonNameEdit->text().isEmpty())
|
||||||
|
@ -159,4 +159,4 @@ bool CreateCertificateDialog::validate()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace plugin
|
} // namespace pdf
|
|
@ -15,22 +15,22 @@
|
||||||
// You should have received a copy of the GNU Lesser General Public License
|
// You should have received a copy of the GNU Lesser General Public License
|
||||||
// along with PDF4QT. If not, see <https://www.gnu.org/licenses/>.
|
// along with PDF4QT. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
#ifndef CREATECERTIFICATEDIALOG_H
|
#ifndef PDFCREATECERTIFICATEDIALOG_H
|
||||||
#define CREATECERTIFICATEDIALOG_H
|
#define PDFCREATECERTIFICATEDIALOG_H
|
||||||
|
|
||||||
#include "certificatemanager.h"
|
#include "pdfcertificatemanager.h"
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
|
||||||
namespace Ui
|
namespace Ui
|
||||||
{
|
{
|
||||||
class CreateCertificateDialog;
|
class PDFCreateCertificateDialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace pdfplugin
|
namespace pdf
|
||||||
{
|
{
|
||||||
|
|
||||||
class CreateCertificateDialog : public QDialog
|
class PDF4QTLIBSHARED_EXPORT PDFCreateCertificateDialog : public QDialog
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
@ -38,10 +38,10 @@ private:
|
||||||
using BaseClass = QDialog;
|
using BaseClass = QDialog;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit CreateCertificateDialog(QWidget* parent);
|
explicit PDFCreateCertificateDialog(QWidget* parent);
|
||||||
virtual ~CreateCertificateDialog() override;
|
virtual ~PDFCreateCertificateDialog() override;
|
||||||
|
|
||||||
const CertificateManager::NewCertificateInfo& getNewCertificateInfo() const { return m_newCertificateInfo; }
|
const PDFCertificateManager::NewCertificateInfo& getNewCertificateInfo() const { return m_newCertificateInfo; }
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
virtual void accept() override;
|
virtual void accept() override;
|
||||||
|
@ -49,11 +49,11 @@ public slots:
|
||||||
private:
|
private:
|
||||||
bool validate();
|
bool validate();
|
||||||
|
|
||||||
CertificateManager::NewCertificateInfo m_newCertificateInfo;
|
PDFCertificateManager::NewCertificateInfo m_newCertificateInfo;
|
||||||
|
|
||||||
Ui::CreateCertificateDialog* ui;
|
Ui::PDFCreateCertificateDialog* ui;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace plugin
|
} // namespace pdf
|
||||||
|
|
||||||
#endif // CREATECERTIFICATEDIALOG_H
|
#endif // PDFCREATECERTIFICATEDIALOG_H
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ui version="4.0">
|
<ui version="4.0">
|
||||||
<class>CreateCertificateDialog</class>
|
<class>PDFCreateCertificateDialog</class>
|
||||||
<widget class="QDialog" name="CreateCertificateDialog">
|
<widget class="QDialog" name="PDFCreateCertificateDialog">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
|
@ -149,7 +149,7 @@
|
||||||
<connection>
|
<connection>
|
||||||
<sender>buttonBox</sender>
|
<sender>buttonBox</sender>
|
||||||
<signal>accepted()</signal>
|
<signal>accepted()</signal>
|
||||||
<receiver>CreateCertificateDialog</receiver>
|
<receiver>PDFCreateCertificateDialog</receiver>
|
||||||
<slot>accept()</slot>
|
<slot>accept()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
||||||
|
@ -165,7 +165,7 @@
|
||||||
<connection>
|
<connection>
|
||||||
<sender>buttonBox</sender>
|
<sender>buttonBox</sender>
|
||||||
<signal>rejected()</signal>
|
<signal>rejected()</signal>
|
||||||
<receiver>CreateCertificateDialog</receiver>
|
<receiver>PDFCreateCertificateDialog</receiver>
|
||||||
<slot>reject()</slot>
|
<slot>reject()</slot>
|
||||||
<hints>
|
<hints>
|
||||||
<hint type="sourcelabel">
|
<hint type="sourcelabel">
|
File diff suppressed because it is too large
Load Diff
|
@ -35,6 +35,7 @@ enum class EncryptionMode
|
||||||
{
|
{
|
||||||
None, ///< Document is not encrypted
|
None, ///< Document is not encrypted
|
||||||
Standard, ///< Document is encrypted and using standard security handler
|
Standard, ///< Document is encrypted and using standard security handler
|
||||||
|
PublicKey, ///< Document is encrypted and using public key security handler
|
||||||
Custom ///< Document is encrypted and using custom security handler. Custom handlers must return this value.
|
Custom ///< Document is encrypted and using custom security handler. Custom handlers must return this value.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -68,11 +69,14 @@ struct CryptFilter
|
||||||
CryptFilterType type = CryptFilterType::None;
|
CryptFilterType type = CryptFilterType::None;
|
||||||
AuthEvent authEvent = AuthEvent::DocOpen;
|
AuthEvent authEvent = AuthEvent::DocOpen;
|
||||||
int keyLength = 0; ///< Key length in bytes
|
int keyLength = 0; ///< Key length in bytes
|
||||||
|
QByteArrayList recipients; ///< Recipients for public key security handler
|
||||||
};
|
};
|
||||||
|
|
||||||
class PDFSecurityHandler;
|
class PDFSecurityHandler;
|
||||||
using PDFSecurityHandlerPointer = QSharedPointer<PDFSecurityHandler>;
|
using PDFSecurityHandlerPointer = QSharedPointer<PDFSecurityHandler>;
|
||||||
|
|
||||||
|
class PDFStandardSecurityHandler;
|
||||||
|
|
||||||
class PDFSecurityHandler
|
class PDFSecurityHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -196,6 +200,14 @@ public:
|
||||||
static PDFSecurityHandlerPointer createSecurityHandler(const PDFObject& encryptionDictionaryObject, const QByteArray& id);
|
static PDFSecurityHandlerPointer createSecurityHandler(const PDFObject& encryptionDictionaryObject, const QByteArray& id);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
static QByteArray parseName(const PDFDictionary* dictionary, const char* key, bool required, const char* defaultValue = nullptr);
|
||||||
|
static PDFInteger parseInt(const PDFDictionary* dictionary, const char* key, bool required, PDFInteger defaultValue = -1);
|
||||||
|
static CryptFilter parseCryptFilter(PDFInteger length, const PDFObject& object);
|
||||||
|
static PDFSecurityHandlerPointer createSecurityHandlerInstance(const PDFDictionary* dictionary);
|
||||||
|
static QByteArrayList parseRecipients(const PDFDictionary* dictionary);
|
||||||
|
|
||||||
|
static void parseCryptFilters(const PDFDictionary* dictionary, PDFSecurityHandler& handler, int Length);
|
||||||
|
static void parseDataStandardSecurityHandler(const PDFDictionary* dictionary, const QByteArray& id, int Length, PDFStandardSecurityHandler& handler);
|
||||||
|
|
||||||
/// Fills encryption dictionary with basic data
|
/// Fills encryption dictionary with basic data
|
||||||
/// \param factory Factory
|
/// \param factory Factory
|
||||||
|
@ -242,23 +254,15 @@ public:
|
||||||
virtual PDFObject createEncryptionDictionaryObject() const override { return PDFObject(); }
|
virtual PDFObject createEncryptionDictionaryObject() const override { return PDFObject(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Specifies the security using standard security handler (see PDF specification
|
class PDFStandardOrPublicSecurityHandler : public PDFSecurityHandler
|
||||||
/// for details).
|
|
||||||
class PDFStandardSecurityHandler : public PDFSecurityHandler
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual EncryptionMode getMode() const override { return EncryptionMode::Standard; }
|
|
||||||
virtual PDFSecurityHandler* clone() const override;
|
|
||||||
virtual AuthorizationResult authenticate(const std::function<QString(bool*)>& getPasswordCallback, bool authorizeOwnerOnly) override;
|
|
||||||
virtual QByteArray decrypt(const QByteArray& data, PDFObjectReference reference, EncryptionScope encryptionScope) const override;
|
virtual QByteArray decrypt(const QByteArray& data, PDFObjectReference reference, EncryptionScope encryptionScope) const override;
|
||||||
virtual QByteArray decryptByFilter(const QByteArray& data, const QByteArray& filterName, PDFObjectReference reference) const override;
|
virtual QByteArray decryptByFilter(const QByteArray& data, const QByteArray& filterName, PDFObjectReference reference) const override;
|
||||||
virtual QByteArray encrypt(const QByteArray& data, PDFObjectReference reference, EncryptionScope encryptionScope) const override;
|
virtual QByteArray encrypt(const QByteArray& data, PDFObjectReference reference, EncryptionScope encryptionScope) const override;
|
||||||
virtual QByteArray encryptByFilter(const QByteArray& data, const QByteArray& filterName, PDFObjectReference reference) const override;
|
virtual QByteArray encryptByFilter(const QByteArray& data, const QByteArray& filterName, PDFObjectReference reference) const override;
|
||||||
virtual bool isMetadataEncrypted() const override { return m_encryptMetadata; }
|
|
||||||
virtual bool isAllowed(Permission permission) const override { return m_authorizationData.authorizationResult == AuthorizationResult::OwnerAuthorized || (m_permissions & static_cast<uint32_t>(permission)); }
|
|
||||||
virtual bool isEncryptionAllowed() const override { return m_authorizationData.isAuthorized(); }
|
|
||||||
virtual AuthorizationResult getAuthorizationResult() const override { return m_authorizationData.authorizationResult; }
|
virtual AuthorizationResult getAuthorizationResult() const override { return m_authorizationData.authorizationResult; }
|
||||||
virtual PDFObject createEncryptionDictionaryObject() const override;
|
virtual bool isEncryptionAllowed() const override { return m_authorizationData.isAuthorized(); }
|
||||||
|
|
||||||
struct AuthorizationData
|
struct AuthorizationData
|
||||||
{
|
{
|
||||||
|
@ -268,10 +272,46 @@ public:
|
||||||
QByteArray fileEncryptionKey;
|
QByteArray fileEncryptionKey;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/// Decrypts data using specified filter. This function can be called only, if authorization was successfull.
|
||||||
|
/// \param data Data to be decrypted
|
||||||
|
/// \param filter Filter to be used for decryption
|
||||||
|
/// \param reference Object reference for key generation
|
||||||
|
/// \returns Decrypted data
|
||||||
|
QByteArray decryptUsingFilter(const QByteArray& data, CryptFilter filter, PDFObjectReference reference) const;
|
||||||
|
|
||||||
|
/// Encrypts data using specified filter. This function can be called only, if authorization was successfull.
|
||||||
|
/// \param data Data to be encrypted
|
||||||
|
/// \param filter Filter to be used for encryption
|
||||||
|
/// \param reference Object reference for key generation
|
||||||
|
/// \returns Encrypted data
|
||||||
|
QByteArray encryptUsingFilter(const QByteArray& data, CryptFilter filter, PDFObjectReference reference) const;
|
||||||
|
|
||||||
|
std::vector<uint8_t> createV2_ObjectEncryptionKey(PDFObjectReference reference, CryptFilter filter) const;
|
||||||
|
std::vector<uint8_t> createAESV2_ObjectEncryptionKey(PDFObjectReference reference) const;
|
||||||
|
CryptFilter getCryptFilter(EncryptionScope encryptionScope) const;
|
||||||
|
|
||||||
|
/// Authorization data
|
||||||
|
AuthorizationData m_authorizationData;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Specifies the security using standard security handler (see PDF specification
|
||||||
|
/// for details).
|
||||||
|
class PDFStandardSecurityHandler : public PDFStandardOrPublicSecurityHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual EncryptionMode getMode() const override { return EncryptionMode::Standard; }
|
||||||
|
virtual PDFSecurityHandler* clone() const override;
|
||||||
|
virtual AuthorizationResult authenticate(const std::function<QString(bool*)>& getPasswordCallback, bool authorizeOwnerOnly) override;
|
||||||
|
virtual bool isMetadataEncrypted() const override { return m_encryptMetadata; }
|
||||||
|
virtual bool isAllowed(Permission permission) const override { return m_authorizationData.authorizationResult == AuthorizationResult::OwnerAuthorized || (m_permissions & static_cast<uint32_t>(permission)); }
|
||||||
|
virtual PDFObject createEncryptionDictionaryObject() const override;
|
||||||
|
|
||||||
/// Adjusts the password according to the PDF specification
|
/// Adjusts the password according to the PDF specification
|
||||||
static QByteArray adjustPassword(const QString& password, int revision);
|
static QByteArray adjustPassword(const QString& password, int revision);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
friend class PDFSecurityHandler;
|
||||||
friend class PDFSecurityHandlerFactory;
|
friend class PDFSecurityHandlerFactory;
|
||||||
friend PDFSecurityHandlerPointer PDFSecurityHandler::createSecurityHandler(const PDFObject& encryptionDictionaryObject, const QByteArray& id);
|
friend PDFSecurityHandlerPointer PDFSecurityHandler::createSecurityHandler(const PDFObject& encryptionDictionaryObject, const QByteArray& id);
|
||||||
|
|
||||||
|
@ -311,25 +351,6 @@ private:
|
||||||
/// Parses parts of the user/owner data (U/O values of the encryption dictionary)
|
/// Parses parts of the user/owner data (U/O values of the encryption dictionary)
|
||||||
UserOwnerData_r6 parseParts(const QByteArray& data) const;
|
UserOwnerData_r6 parseParts(const QByteArray& data) const;
|
||||||
|
|
||||||
|
|
||||||
/// Decrypts data using specified filter. This function can be called only, if authorization was successfull.
|
|
||||||
/// \param data Data to be decrypted
|
|
||||||
/// \param filter Filter to be used for decryption
|
|
||||||
/// \param reference Object reference for key generation
|
|
||||||
/// \returns Decrypted data
|
|
||||||
QByteArray decryptUsingFilter(const QByteArray& data, CryptFilter filter, PDFObjectReference reference) const;
|
|
||||||
|
|
||||||
/// Encrypts data using specified filter. This function can be called only, if authorization was successfull.
|
|
||||||
/// \param data Data to be encrypted
|
|
||||||
/// \param filter Filter to be used for encryption
|
|
||||||
/// \param reference Object reference for key generation
|
|
||||||
/// \returns Encrypted data
|
|
||||||
QByteArray encryptUsingFilter(const QByteArray& data, CryptFilter filter, PDFObjectReference reference) const;
|
|
||||||
|
|
||||||
std::vector<uint8_t> createV2_ObjectEncryptionKey(PDFObjectReference reference, CryptFilter filter) const;
|
|
||||||
std::vector<uint8_t> createAESV2_ObjectEncryptionKey(PDFObjectReference reference) const;
|
|
||||||
CryptFilter getCryptFilter(EncryptionScope encryptionScope) const;
|
|
||||||
|
|
||||||
/// Returns true, if character with unicode code is non-ascii space character
|
/// Returns true, if character with unicode code is non-ascii space character
|
||||||
/// according the RFC 3454, section C.1.2
|
/// according the RFC 3454, section C.1.2
|
||||||
/// \param unicode Unicode code to be tested
|
/// \param unicode Unicode code to be tested
|
||||||
|
@ -372,9 +393,19 @@ private:
|
||||||
|
|
||||||
/// First part of the id of the document
|
/// First part of the id of the document
|
||||||
QByteArray m_ID;
|
QByteArray m_ID;
|
||||||
|
};
|
||||||
|
|
||||||
/// Authorization data
|
/// Specifies the security using public key security handler (see PDF specification
|
||||||
AuthorizationData m_authorizationData;
|
/// for details).
|
||||||
|
class PDFPublicKeySecurityHandler : public PDFStandardOrPublicSecurityHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual EncryptionMode getMode() const override { return EncryptionMode::PublicKey; }
|
||||||
|
virtual PDFSecurityHandler* clone() const override;
|
||||||
|
virtual AuthorizationResult authenticate(const std::function<QString(bool*)>& getPasswordCallback, bool authorizeOwnerOnly) override;
|
||||||
|
virtual bool isMetadataEncrypted() const override;
|
||||||
|
virtual bool isAllowed(Permission permission) const override;
|
||||||
|
virtual PDFObject createEncryptionDictionaryObject() const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Factory, which creates security handler based on settings.
|
/// Factory, which creates security handler based on settings.
|
||||||
|
|
|
@ -189,6 +189,10 @@ void PDFDocumentPropertiesDialog::initializeSecurity(const pdf::PDFDocument* doc
|
||||||
modeString = tr("Standard");
|
modeString = tr("Standard");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case pdf::EncryptionMode::PublicKey:
|
||||||
|
modeString = tr("Public Key");
|
||||||
|
break;
|
||||||
|
|
||||||
case pdf::EncryptionMode::Custom:
|
case pdf::EncryptionMode::Custom:
|
||||||
modeString = tr("Custom");
|
modeString = tr("Custom");
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -40,16 +40,10 @@ INCLUDEPATH += $$Pdf4Qt_OPENSSL_PATH/OpenSSL/Win_x64/include
|
||||||
DEPENDPATH += $$Pdf4Qt_OPENSSL_PATH/OpenSSL/Win_x64/include
|
DEPENDPATH += $$Pdf4Qt_OPENSSL_PATH/OpenSSL/Win_x64/include
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
certificatemanager.cpp \
|
|
||||||
certificatemanagerdialog.cpp \
|
|
||||||
createcertificatedialog.cpp \
|
|
||||||
signatureplugin.cpp \
|
signatureplugin.cpp \
|
||||||
signdialog.cpp
|
signdialog.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
certificatemanager.h \
|
|
||||||
certificatemanagerdialog.h \
|
|
||||||
createcertificatedialog.h \
|
|
||||||
signatureplugin.h \
|
signatureplugin.h \
|
||||||
signdialog.h
|
signdialog.h
|
||||||
|
|
||||||
|
@ -62,7 +56,5 @@ RESOURCES += \
|
||||||
icons.qrc
|
icons.qrc
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
certificatemanagerdialog.ui \
|
|
||||||
createcertificatedialog.ui \
|
|
||||||
signdialog.ui
|
signdialog.ui
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
#include "pdfpagecontenteditorwidget.h"
|
#include "pdfpagecontenteditorwidget.h"
|
||||||
#include "pdfpagecontenteditorstylesettings.h"
|
#include "pdfpagecontenteditorstylesettings.h"
|
||||||
#include "pdfdocumentbuilder.h"
|
#include "pdfdocumentbuilder.h"
|
||||||
#include "certificatemanagerdialog.h"
|
#include "pdfcertificatemanagerdialog.h"
|
||||||
#include "signdialog.h"
|
#include "signdialog.h"
|
||||||
#include "pdfdocumentwriter.h"
|
#include "pdfdocumentwriter.h"
|
||||||
|
|
||||||
|
@ -314,11 +314,11 @@ void SignaturePlugin::onSignDigitally()
|
||||||
// Jakub Melka: do we have certificates? If not,
|
// Jakub Melka: do we have certificates? If not,
|
||||||
// open certificate dialog, so the user can create
|
// open certificate dialog, so the user can create
|
||||||
// a new one.
|
// a new one.
|
||||||
if (CertificateManager::getCertificates().isEmpty())
|
if (pdf::PDFCertificateManager::getCertificates().isEmpty())
|
||||||
{
|
{
|
||||||
onOpenCertificatesManager();
|
onOpenCertificatesManager();
|
||||||
|
|
||||||
if (CertificateManager::getCertificates().isEmpty())
|
if (pdf::PDFCertificateManager::getCertificates().isEmpty())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -329,7 +329,7 @@ void SignaturePlugin::onSignDigitally()
|
||||||
{
|
{
|
||||||
QByteArray data = "SampleDataToBeSigned" + QByteArray::number(QDateTime::currentMSecsSinceEpoch());
|
QByteArray data = "SampleDataToBeSigned" + QByteArray::number(QDateTime::currentMSecsSinceEpoch());
|
||||||
QByteArray signature;
|
QByteArray signature;
|
||||||
if (!SignatureFactory::sign(dialog.getCertificatePath(), dialog.getPassword(), data, signature))
|
if (!pdf::PDFSignatureFactory::sign(dialog.getCertificatePath(), dialog.getPassword(), data, signature))
|
||||||
{
|
{
|
||||||
QMessageBox::critical(m_widget, tr("Error"), tr("Failed to create digital signature."));
|
QMessageBox::critical(m_widget, tr("Error"), tr("Failed to create digital signature."));
|
||||||
return;
|
return;
|
||||||
|
@ -458,7 +458,7 @@ void SignaturePlugin::onSignDigitally()
|
||||||
buffer.seek(i3);
|
buffer.seek(i3);
|
||||||
dataToBeSigned.append(buffer.read(i4));
|
dataToBeSigned.append(buffer.read(i4));
|
||||||
|
|
||||||
if (!SignatureFactory::sign(dialog.getCertificatePath(), dialog.getPassword(), dataToBeSigned, signature))
|
if (!pdf::PDFSignatureFactory::sign(dialog.getCertificatePath(), dialog.getPassword(), dataToBeSigned, signature))
|
||||||
{
|
{
|
||||||
QMessageBox::critical(m_widget, tr("Error"), tr("Failed to create digital signature."));
|
QMessageBox::critical(m_widget, tr("Error"), tr("Failed to create digital signature."));
|
||||||
buffer.close();
|
buffer.close();
|
||||||
|
@ -492,7 +492,7 @@ QString SignaturePlugin::getSignedFileName() const
|
||||||
|
|
||||||
void SignaturePlugin::onOpenCertificatesManager()
|
void SignaturePlugin::onOpenCertificatesManager()
|
||||||
{
|
{
|
||||||
CertificateManagerDialog dialog(m_dataExchangeInterface->getMainWindow());
|
pdf::PDFCertificateManagerDialog dialog(m_dataExchangeInterface->getMainWindow());
|
||||||
dialog.exec();
|
dialog.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
#include "signdialog.h"
|
#include "signdialog.h"
|
||||||
#include "ui_signdialog.h"
|
#include "ui_signdialog.h"
|
||||||
|
|
||||||
#include "certificatemanager.h"
|
#include "pdfcertificatemanager.h"
|
||||||
|
|
||||||
#include <openssl/pkcs7.h>
|
#include <openssl/pkcs7.h>
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ SignDialog::SignDialog(QWidget* parent, bool isSceneEmpty) :
|
||||||
ui->methodCombo->addItem(tr("Sign digitally (invisible signature)"), SignDigitallyInvisible);
|
ui->methodCombo->addItem(tr("Sign digitally (invisible signature)"), SignDigitallyInvisible);
|
||||||
ui->methodCombo->setCurrentIndex(0);
|
ui->methodCombo->setCurrentIndex(0);
|
||||||
|
|
||||||
QFileInfoList certificates = CertificateManager::getCertificates();
|
QFileInfoList certificates = pdf::PDFCertificateManager::getCertificates();
|
||||||
for (const QFileInfo& certificateFileInfo : certificates)
|
for (const QFileInfo& certificateFileInfo : certificates)
|
||||||
{
|
{
|
||||||
ui->certificateCombo->addItem(certificateFileInfo.fileName(), certificateFileInfo.absoluteFilePath());
|
ui->certificateCombo->addItem(certificateFileInfo.fileName(), certificateFileInfo.absoluteFilePath());
|
||||||
|
@ -89,7 +89,7 @@ void SignDialog::accept()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check we can access the certificate
|
// Check we can access the certificate
|
||||||
if (!CertificateManager::isCertificateValid(getCertificatePath(), ui->certificatePasswordEdit->text()))
|
if (!pdf::PDFCertificateManager::isCertificateValid(getCertificatePath(), ui->certificatePasswordEdit->text()))
|
||||||
{
|
{
|
||||||
QMessageBox::critical(this, tr("Error"), tr("Password to open certificate is invalid."));
|
QMessageBox::critical(this, tr("Error"), tr("Password to open certificate is invalid."));
|
||||||
ui->certificatePasswordEdit->setFocus();
|
ui->certificatePasswordEdit->setFocus();
|
||||||
|
|
|
@ -179,6 +179,10 @@ int PDFToolInfoApplication::execute(const PDFToolOptions& options)
|
||||||
modeString = PDFToolTranslationContext::tr("Standard");
|
modeString = PDFToolTranslationContext::tr("Standard");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case pdf::EncryptionMode::PublicKey:
|
||||||
|
modeString = PDFToolTranslationContext::tr("Public Key");
|
||||||
|
break;
|
||||||
|
|
||||||
case pdf::EncryptionMode::Custom:
|
case pdf::EncryptionMode::Custom:
|
||||||
modeString = PDFToolTranslationContext::tr("Custom");
|
modeString = PDFToolTranslationContext::tr("Custom");
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue