Add support openssl engine for sign/verify on windows

This commit is contained in:
Oleg Korshul
2021-05-15 22:01:10 +03:00
parent 8ae8b79e9e
commit d34b9bb1dd
7 changed files with 116 additions and 24 deletions

View File

@ -37,25 +37,24 @@ SOURCES += \
src/OOXMLVerifier.cpp
core_windows {
HEADERS += \
src/XmlSigner_mscrypto.h
CONFIG += windows_use_mscrypto
LIBS += -lcrypt32
LIBS += -lcryptui
LIBS += -lAdvapi32
LIBS += -lws2_32
LIBS += -lUser32
}
!core_windows {
windows_use_mscrypto {
HEADERS += \
src/XmlSigner_openssl.h
DEFINES += USE_MS_CRYPTO
HEADERS += src/XmlSigner_mscrypto.h
SOURCES += \
src/XmlSigner_openssl.cpp
} else {
HEADERS += src/XmlSigner_openssl.h
SOURCES += src/XmlSigner_openssl.cpp
}

View File

@ -1,4 +1,4 @@
#ifdef WIN32
#ifdef USE_MS_CRYPTO
#include "./XmlSigner_mscrypto.h"
#define CCertificate CCertificate_mscrypto
@ -15,22 +15,16 @@ namespace NSOpenSSL
}
}
#else
#include "./XmlSigner_openssl.h"
#define XML_CERTIFICATE_USE_OPENSSL
#define CCertificate CCertificate_openssl
#endif
#include "../../../common/File.h"
#if defined(_LINUX) && !defined(_MAC)
#include "./XmlSigner_openssl.h"
#define XML_CERTIFICATE_USE_OPENSSL
#define CCertificate CCertificate_openssl
#endif
#ifdef _MAC
#include "./XmlSigner_openssl.h"
#define XML_CERTIFICATE_USE_OPENSSL
#define CCertificate CCertificate_openssl
#endif
int ICertificate::GetOOXMLHashAlg(const std::string& sAlg)
{
if ("http://www.w3.org/2000/09/xmldsig#rsa-sha1" == sAlg ||
@ -158,7 +152,7 @@ CCertificateInfo ICertificate::GetDefault()
{
CCertificateInfo info;
#ifdef WIN32
#ifdef USE_MS_CRYPTO
// detect user name
std::wstring sUserName;
@ -191,7 +185,7 @@ CCertificateInfo ICertificate::GetDefault()
ICertificate* ICertificate::GetById(const std::string& id)
{
#ifdef WIN32
#ifdef USE_MS_CRYPTO
HANDLE hStoreHandle = CertOpenSystemStoreA(NULL, "MY");
if (!hStoreHandle)
return NULL;

View File

@ -4,7 +4,10 @@
#include "../../../common/StringExt.h"
#include "../../../common/BigInteger.h"
#ifndef _WIN32
#include <unistd.h>
#endif
#include <openssl/bio.h>
#include <openssl/err.h>
#include <openssl/pem.h>

View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIUZkxUOBHNgjQsqvql1sCl5/U5mccwDQYJKoZIhvcNAQEL
BQAwcjELMAkGA1UEBhMCUlUxCzAJBgNVBAgMAk5OMQswCQYDVQQHDAJOTjEQMA4G
A1UECgwHUkstVGVjaDELMAkGA1UECwwCUksxDTALBgNVBAMMBE9sZWcxGzAZBgkq
hkiG9w0BCQEWDG9sZWdAbWFpbC5ydTAeFw0yMTA1MTUxODAzNDdaFw0yMjA1MTUx
ODAzNDdaMHIxCzAJBgNVBAYTAlJVMQswCQYDVQQIDAJOTjELMAkGA1UEBwwCTk4x
EDAOBgNVBAoMB1JLLVRlY2gxCzAJBgNVBAsMAlJLMQ0wCwYDVQQDDARPbGVnMRsw
GQYJKoZIhvcNAQkBFgxvbGVnQG1haWwucnUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQDHrOA0UDjknxjpjF8CH4UwhVSwHWk3Rx93mvr95fu5VG2eUNsb
yijyq+qJ2mEvaGxTgIYrYnxxA9UEaoMNq9aNzq9Bba1yud8DyRxGL1CUwa8Wqr8N
AyijwrewqLkBJ1mOdhBFhQavPVaY6n0pvgg09/vWcr0ssctNMRUQ3oEYYaNaVHCw
TFzxFL5Z7bGiDhY6YIEScm+tlPt0XSd+dch97o4wCOtu5+861VyBhELrEszR8J7y
N1C95Iyt3V+uSzhzuEtmK8luisHGVF3f6Fyf+QQdyE9TX9xFov24xBsKRPTVg10l
cFlj4ER5HLQWd3wYMkzWCcV5kVfmPTv11vyrAgMBAAGjUzBRMB0GA1UdDgQWBBTT
hdFuCGGIz8MC3nlTDrESH+14UzAfBgNVHSMEGDAWgBTThdFuCGGIz8MC3nlTDrES
H+14UzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBHosOvxJJT
xltJ21jHkw7rMkrmNNDqgpnhdwjtKEsoDPXdGzZfLL/DkjjCie5biU4Np/OgBDzx
lqEpiyshlkmOf9CY/bRvQMSEJOk1Al1y559CKLFLcahdvjFwKWlBzmgC+6ckqQXM
i/hpjjquv21SJtJ1ejTHGR+qhEURcEgE//eYksmEchpZLOapFlJr9McNFeRKrvwO
PJ1cKPcg5Fx+yFNfN2EEZyzIymmskh8u16dsgbpS6570MnRo3XrXMyEYJoAqWeom
hGSE2qY4zVjeFBdE3h6MqfUtcuq+MSRgTQbJHAGsgIUHY3zfe24xNr00g+KDIMiZ
lLldzlgwZwNP
-----END CERTIFICATE-----

View File

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDHrOA0UDjknxjp
jF8CH4UwhVSwHWk3Rx93mvr95fu5VG2eUNsbyijyq+qJ2mEvaGxTgIYrYnxxA9UE
aoMNq9aNzq9Bba1yud8DyRxGL1CUwa8Wqr8NAyijwrewqLkBJ1mOdhBFhQavPVaY
6n0pvgg09/vWcr0ssctNMRUQ3oEYYaNaVHCwTFzxFL5Z7bGiDhY6YIEScm+tlPt0
XSd+dch97o4wCOtu5+861VyBhELrEszR8J7yN1C95Iyt3V+uSzhzuEtmK8luisHG
VF3f6Fyf+QQdyE9TX9xFov24xBsKRPTVg10lcFlj4ER5HLQWd3wYMkzWCcV5kVfm
PTv11vyrAgMBAAECggEBAKXY3zhUUY0C4ExLvTYkPBo7BEZrh1LUjjxny4VLmrMq
fwn6GqOQXEaDqIDrk8EuuJr6q3YpjTbJegr69PNMAR8zxrlPgbtCywt35TYeYo3L
+cOX+quyLfUm7C+dVFyy9F2xjn5PqWewSNcmHOOo5WQpfVF3Z81Rt4zb8aVbSlqW
dSGEMArFN5MAtv+Kd5Nlsd9Fd0MRTpiE3BU8EnpqTWxKbLY1dr2yKlSsHY7eRgUl
GMqOZaBxHZM0q66GOdOX1rB3JfON6BwiKeEgYB16rDGb5hAQqSgJU2LmgA9lVVO5
hDaEEUe6Ulj66t3efA7UUEyvcqP0XFm5qyyVGq44+FECgYEA+Rgl0wkUfH/JmSKb
lWwsApx2p1NngNuPnP9PpcGJJVQNRhHEaTkPHiB/Sf/ERozPFk1Yu5FhxZNUBGi0
hyhV9jVU2MH7GIEs2pD9POWH3QUSMTS8lGntLORZrCLYMhxGqxAUnc/cmx4TrZ5l
gAQUXKOzycwhXtXOe4va1lyI9l0CgYEAzTX+yfqHmXIl6rg9hl2uzv8R6smHEF87
7gABU9go/uV7KqzBrX2jR0PccZYYfbOu+l0+LvNbBcBtanxJsutdTis/jZEue3kv
G9s/4/QNb8YOMGVGfgsLJdYxVERM0yGZdRXN+Tp9c3FVRFUzv0ECq2taVKID3VxB
7hdk8wdm/qcCgYEA40n9eYsXfmK7+Vdyz+1cWyWZvySDlTjC2ma8rmriUYVYd09P
ARRnjv3oKAWRey6Q57C7/qqxpC7CwyMnVwyfI4GWYhLeo4V7ABS8fgyS5EH0T6Hn
USU2nXffuwowa8kRUpXhuf4pNgFDw3B8/Uq7qaxWKRRyfq5pMqJylJbrAqECgYA+
u+oHTyqTE11aEzbj09Hz//A3SaKbs7F7gc7mFef6fKcZlbSj2AvJZoqGwu77xqmQ
al7vNYA3EuugKRzSsLdWhUwpeB+wqYxoRK+UfXB6Ih8GVn+lWrTuvTtZWoPt65Ch
RagxL9tYJmZ9vFpUdohdZTU5OEpcKq8RHV/EGBg5cwKBgDGDWwTA14Rxm2n0s12k
BB+qJYzlHvBXAod9EkuHWAfzdSoxhA3PKCNBj4Cd4DFk9xDn9ccwY6USlWoiDbOy
28i61C/C0T6yZsgXdUqVSen0oYBPsb1LmKUBkwPif88GpyUMVf77O2qoVFsWmM5e
PDSgIcrOMIRzHNa+TgpgqlZy
-----END PRIVATE KEY-----

View File

@ -0,0 +1,28 @@
#include "../../../common/File.h"
#include "../include/XmlCertificate.h"
#include "../include/OOXMLSigner.h"
#include "../include/OOXMLVerifier.h"
#ifdef _WIN32
//#define USE_MS_CRYPTO
#endif
int main()
{
#ifdef USE_MS_CRYPTO
// TODO: Load sertificate from store
#else
std::wstring sTestDir = NSFile::GetProcessDirectory() + L"/../../keys/";
ICertificate* pCertificate = ICertificate::CreateInstance();
pCertificate->FromFiles(sTestDir + L"key.key", "", sTestDir + L"cert.crt", "");
delete pCertificate;
#endif
return 0;
}

View File

@ -0,0 +1,17 @@
QT -= core gui
TARGET = test
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CORE_ROOT_DIR = $$PWD/../../../..
PWD_ROOT_DIR = $$PWD
include($$CORE_ROOT_DIR/Common/base.pri)
ADD_DEPENDENCY(kernel, ooxmlsignature)
SOURCES += main.cpp
DESTDIR = $$PWD/build/$$CORE_BUILDS_PLATFORM_PREFIX