Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
onlyoffice_core
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boris Kocherov
onlyoffice_core
Commits
d356a305
Commit
d356a305
authored
Apr 17, 2017
by
Oleg Korshul
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tests (mscrypto)
parent
2dbec241
Changes
4
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
772 additions
and
0 deletions
+772
-0
DesktopEditor/xmlsec/test/windows/main.cpp
DesktopEditor/xmlsec/test/windows/main.cpp
+274
-0
DesktopEditor/xmlsec/test/windows/test.pro
DesktopEditor/xmlsec/test/windows/test.pro
+45
-0
DesktopEditor/xmlsec/test/windows_list_serts/main.cpp
DesktopEditor/xmlsec/test/windows_list_serts/main.cpp
+442
-0
DesktopEditor/xmlsec/test/windows_list_serts/test.pro
DesktopEditor/xmlsec/test/windows_list_serts/test.pro
+11
-0
No files found.
DesktopEditor/xmlsec/test/windows/main.cpp
0 → 100644
View file @
d356a305
/**
* XML Security Library example: Signing a file with a dynamicaly created template and an X509 certificate.
*
* Signs a file using a dynamicaly created template, key from PEM file and
* an X509 certificate. The signature has one reference with one enveloped
* transform to sign the whole document except the <dsig:Signature/> node
* itself. The key certificate is written in the <dsig:X509Data/> node.
*
* This example was developed and tested with OpenSSL crypto library. The
* certificates management policies for another crypto library may break it.
*
* Usage:
* sign3 <xml-doc> <pem-key>
*
* Example:
* ./sign3 sign3-doc.xml rsakey.pem rsacert.pem > sign3-res.xml
*
* The result signature could be validated using verify3 example:
* ./verify3 sign3-res.xml ca2cert.pem cacert.pem
*
* This is free software; see Copyright file in the source
* distribution for preciese wording.
*
* Copyright (C) 2002-2016 Aleksey Sanin <aleksey@aleksey.com>. All Rights Reserved.
*/
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <libxml/tree.h>
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>
#ifndef XMLSEC_NO_XSLT
#include <libxslt/xslt.h>
#include <libxslt/security.h>
#endif
/* XMLSEC_NO_XSLT */
#include <xmlsec/xmlsec.h>
#include <xmlsec/xmltree.h>
#include <xmlsec/xmldsig.h>
#include <xmlsec/templates.h>
#include <xmlsec/crypto.h>
int
sign_file
(
const
char
*
xml_file
,
const
char
*
key_file
,
const
char
*
cert_file
);
int
main
(
int
argc
,
char
**
argv
)
{
#ifndef XMLSEC_NO_XSLT
xsltSecurityPrefsPtr
xsltSecPrefs
=
NULL
;
#endif
/* XMLSEC_NO_XSLT */
assert
(
argv
);
if
(
argc
!=
4
)
{
fprintf
(
stderr
,
"Error: wrong number of arguments.
\n
"
);
fprintf
(
stderr
,
"Usage: %s <xml-file> <key-file> <cert-file>
\n
"
,
argv
[
0
]);
return
(
1
);
}
/* Init libxml and libxslt libraries */
xmlInitParser
();
//LIBXML_TEST_VERSION
//xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
xmlSubstituteEntitiesDefault
(
1
);
#ifndef XMLSEC_NO_XSLT
xmlIndentTreeOutput
=
1
;
#endif
/* XMLSEC_NO_XSLT */
/* Init libxslt */
#ifndef XMLSEC_NO_XSLT
/* disable everything */
xsltSecPrefs
=
xsltNewSecurityPrefs
();
xsltSetSecurityPrefs
(
xsltSecPrefs
,
XSLT_SECPREF_READ_FILE
,
xsltSecurityForbid
);
xsltSetSecurityPrefs
(
xsltSecPrefs
,
XSLT_SECPREF_WRITE_FILE
,
xsltSecurityForbid
);
xsltSetSecurityPrefs
(
xsltSecPrefs
,
XSLT_SECPREF_CREATE_DIRECTORY
,
xsltSecurityForbid
);
xsltSetSecurityPrefs
(
xsltSecPrefs
,
XSLT_SECPREF_READ_NETWORK
,
xsltSecurityForbid
);
xsltSetSecurityPrefs
(
xsltSecPrefs
,
XSLT_SECPREF_WRITE_NETWORK
,
xsltSecurityForbid
);
xsltSetDefaultSecurityPrefs
(
xsltSecPrefs
);
#endif
/* XMLSEC_NO_XSLT */
/* Init xmlsec library */
if
(
xmlSecInit
()
<
0
)
{
fprintf
(
stderr
,
"Error: xmlsec initialization failed.
\n
"
);
return
(
-
1
);
}
/* Check loaded library version */
if
(
xmlSecCheckVersion
()
!=
1
)
{
fprintf
(
stderr
,
"Error: loaded xmlsec library version is not compatible.
\n
"
);
return
(
-
1
);
}
/* Load default crypto engine if we are supporting dynamic
* loading for xmlsec-crypto libraries. Use the crypto library
* name ("openssl", "nss", etc.) to load corresponding
* xmlsec-crypto library.
*/
#ifdef XMLSEC_CRYPTO_DYNAMIC_LOADING
if
(
xmlSecCryptoDLLoadLibrary
(
NULL
)
<
0
)
{
fprintf
(
stderr
,
"Error: unable to load default xmlsec-crypto library. Make sure
\n
"
"that you have it installed and check shared libraries path
\n
"
"(LD_LIBRARY_PATH) envornment variable.
\n
"
);
return
(
-
1
);
}
#endif
/* XMLSEC_CRYPTO_DYNAMIC_LOADING */
/* Init crypto library */
if
(
xmlSecCryptoAppInit
(
NULL
)
<
0
)
{
fprintf
(
stderr
,
"Error: crypto initialization failed.
\n
"
);
return
(
-
1
);
}
/* Init xmlsec-crypto library */
if
(
xmlSecCryptoInit
()
<
0
)
{
fprintf
(
stderr
,
"Error: xmlsec-crypto initialization failed.
\n
"
);
return
(
-
1
);
}
if
(
sign_file
(
argv
[
1
],
argv
[
2
],
argv
[
3
])
<
0
)
{
return
(
-
1
);
}
/* Shutdown xmlsec-crypto library */
xmlSecCryptoShutdown
();
/* Shutdown crypto library */
xmlSecCryptoAppShutdown
();
/* Shutdown xmlsec library */
xmlSecShutdown
();
/* Shutdown libxslt/libxml */
#ifndef XMLSEC_NO_XSLT
xsltFreeSecurityPrefs
(
xsltSecPrefs
);
xsltCleanupGlobals
();
#endif
/* XMLSEC_NO_XSLT */
xmlCleanupParser
();
return
(
0
);
}
/**
* sign_file:
* @xml_file: the XML file name.
* @key_file: the PEM private key file name.
* @cert_file: the x509 certificate PEM file.
*
* Signs the @xml_file using private key from @key_file and dynamicaly
* created enveloped signature template. The certificate from @cert_file
* is placed in the <dsig:X509Data/> node.
*
* Returns 0 on success or a negative value if an error occurs.
*/
int
sign_file
(
const
char
*
xml_file
,
const
char
*
key_file
,
const
char
*
cert_file
)
{
xmlDocPtr
doc
=
NULL
;
xmlNodePtr
signNode
=
NULL
;
xmlNodePtr
refNode
=
NULL
;
xmlNodePtr
keyInfoNode
=
NULL
;
xmlNodePtr
x509DataNode
=
NULL
;
xmlSecDSigCtxPtr
dsigCtx
=
NULL
;
int
res
=
-
1
;
assert
(
xml_file
);
assert
(
key_file
);
assert
(
cert_file
);
/* load doc file */
doc
=
xmlParseFile
(
xml_file
);
if
((
doc
==
NULL
)
||
(
xmlDocGetRootElement
(
doc
)
==
NULL
)){
fprintf
(
stderr
,
"Error: unable to parse file
\"
%s
\"\n
"
,
xml_file
);
goto
done
;
}
/* create signature template for RSA-SHA1 enveloped signature */
signNode
=
xmlSecTmplSignatureCreate
(
doc
,
xmlSecTransformExclC14NId
,
xmlSecTransformRsaSha1Id
,
NULL
);
if
(
signNode
==
NULL
)
{
fprintf
(
stderr
,
"Error: failed to create signature template
\n
"
);
goto
done
;
}
/* add <dsig:Signature/> node to the doc */
xmlAddChild
(
xmlDocGetRootElement
(
doc
),
signNode
);
/* add reference */
refNode
=
xmlSecTmplSignatureAddReference
(
signNode
,
xmlSecTransformSha1Id
,
NULL
,
NULL
,
NULL
);
if
(
refNode
==
NULL
)
{
fprintf
(
stderr
,
"Error: failed to add reference to signature template
\n
"
);
goto
done
;
}
/* add enveloped transform */
if
(
xmlSecTmplReferenceAddTransform
(
refNode
,
xmlSecTransformEnvelopedId
)
==
NULL
)
{
fprintf
(
stderr
,
"Error: failed to add enveloped transform to reference
\n
"
);
goto
done
;
}
/* add <dsig:KeyInfo/> and <dsig:X509Data/> */
keyInfoNode
=
xmlSecTmplSignatureEnsureKeyInfo
(
signNode
,
NULL
);
if
(
keyInfoNode
==
NULL
)
{
fprintf
(
stderr
,
"Error: failed to add key info
\n
"
);
goto
done
;
}
x509DataNode
=
xmlSecTmplKeyInfoAddX509Data
(
keyInfoNode
);
if
(
x509DataNode
==
NULL
)
{
fprintf
(
stderr
,
"Error: failed to add X509Data node
\n
"
);
goto
done
;
}
if
(
xmlSecTmplX509DataAddSubjectName
(
x509DataNode
)
==
NULL
)
{
fprintf
(
stderr
,
"Error: failed to add X509SubjectName node
\n
"
);
goto
done
;
}
if
(
xmlSecTmplX509DataAddCertificate
(
x509DataNode
)
==
NULL
)
{
fprintf
(
stderr
,
"Error: failed to add X509Certificate node
\n
"
);
goto
done
;
}
/* create signature context, we don't need keys manager in this example */
dsigCtx
=
xmlSecDSigCtxCreate
(
NULL
);
if
(
dsigCtx
==
NULL
)
{
fprintf
(
stderr
,
"Error: failed to create signature context
\n
"
);
goto
done
;
}
/* load private key, assuming that there is not password */
dsigCtx
->
signKey
=
xmlSecCryptoAppKeyLoad
(
key_file
,
xmlSecKeyDataFormatPem
,
NULL
,
NULL
,
NULL
);
if
(
dsigCtx
->
signKey
==
NULL
)
{
fprintf
(
stderr
,
"Error: failed to load private pem key from
\"
%s
\"\n
"
,
key_file
);
goto
done
;
}
/* load certificate and add to the key */
if
(
xmlSecCryptoAppKeyCertLoad
(
dsigCtx
->
signKey
,
cert_file
,
xmlSecKeyDataFormatPem
)
<
0
)
{
fprintf
(
stderr
,
"Error: failed to load pem certificate
\"
%s
\"\n
"
,
cert_file
);
goto
done
;
}
/* set key name to the file name, this is just an example! */
if
(
xmlSecKeySetName
(
dsigCtx
->
signKey
,
(
const
xmlChar
*
)
key_file
)
<
0
)
{
fprintf
(
stderr
,
"Error: failed to set key name for key from
\"
%s
\"\n
"
,
key_file
);
goto
done
;
}
/* sign the template */
if
(
xmlSecDSigCtxSign
(
dsigCtx
,
signNode
)
<
0
)
{
fprintf
(
stderr
,
"Error: signature failed
\n
"
);
goto
done
;
}
/* print signed document to stdout */
xmlDocDump
(
stdout
,
doc
);
/* success */
res
=
0
;
done:
/* cleanup */
if
(
dsigCtx
!=
NULL
)
{
xmlSecDSigCtxDestroy
(
dsigCtx
);
}
if
(
doc
!=
NULL
)
{
xmlFreeDoc
(
doc
);
}
return
(
res
);
}
DesktopEditor/xmlsec/test/windows/test.pro
0 → 100644
View file @
d356a305
QT
-=
core
gui
TARGET
=
test
TEMPLATE
=
app
CONFIG
+=
console
CONFIG
-=
app_bundle
DEFINES
+=
UNICODE
CORE_ROOT_DIR
=
$$
PWD
/../../../..
PWD_ROOT_DIR
=
$$
PWD
include
(
$$
CORE_ROOT_DIR
/
Common
/
base
.
pri
)
#
DEFINES
+=
XMLSEC_CRYPTO_DYNAMIC_LOADING
DEFINES
+=
XMLSEC_CRYPTO_MSCRYPTO
INCLUDEPATH
+=
\
$$
CORE_ROOT_DIR
/
DesktopEditor
/
xml
/
libxml2
/
include
\
$$
CORE_ROOT_DIR
/
DesktopEditor
/
xml
/
libxml2
/
include
/
libxml
\
\
$$
CORE_ROOT_DIR
/
DesktopEditor
/
xmlsec
/
xmlsec
/
include
DEFINES
+=
\
LIBXML_READER_ENABLED
\
LIBXML_PUSH_ENABLED
\
LIBXML_HTML_ENABLED
\
LIBXML_XPATH_ENABLED
\
LIBXML_OUTPUT_ENABLED
\
LIBXML_C14N_ENABLED
\
LIBXML_SAX1_ENABLED
\
LIBXML_TREE_ENABLED
\
LIBXML_XPTR_ENABLED
DEFINES
+=
XMLSEC_NO_XSLT
DEFINES
+=
XMLSEC_STATIC
LIBS
+=
-
L
$$
CORE_BUILDS_LIBRARIES_PATH
-
llibxmlsec
LIBS
+=
-
lcrypt32
LIBS
+=
-
lcryptui
LIBS
+=
-
lAdvapi32
SOURCES
+=
main
.
cpp
DesktopEditor/xmlsec/test/windows_list_serts/main.cpp
0 → 100644
View file @
d356a305
This diff is collapsed.
Click to expand it.
DesktopEditor/xmlsec/test/windows_list_serts/test.pro
0 → 100644
View file @
d356a305
QT
-=
core
gui
TARGET
=
test
TEMPLATE
=
app
CONFIG
+=
console
CONFIG
-=
app_bundle
DEFINES
-=
UNICODE
SOURCES
+=
main
.
cpp
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment