user/py3-xmlsec: drop for in aports community
This commit is contained in:
parent
97356cba4f
commit
b2496b6e09
4 changed files with 0 additions and 1121 deletions
|
@ -1,925 +0,0 @@
|
|||
From a7f95d55cd660d1a212fa76a527063b3b7dbe8bb Mon Sep 17 00:00:00 2001
|
||||
From: Dan Vella <dan.vella@invicti.com>
|
||||
Date: Fri, 17 Mar 2023 13:58:25 +0100
|
||||
Subject: [PATCH 1/7] Added changes to enable 3.11 builds
|
||||
|
||||
---
|
||||
.appveyor.yml | 4 ++++
|
||||
.github/workflows/macosx.yml | 2 +-
|
||||
.github/workflows/manylinux.yml | 6 +++---
|
||||
.github/workflows/opensuse-tumbleweed.yml | 2 +-
|
||||
.github/workflows/sdist.yml | 4 ++--
|
||||
.travis.yml | 3 +++
|
||||
setup.py | 1 +
|
||||
7 files changed, 15 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/setup.py b/setup.py
|
||||
index 9a3c927..5c7e0da 100644
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -533,6 +533,7 @@ def prepare_static_build_linux(self):
|
||||
'Programming Language :: Python :: 3.7',
|
||||
'Programming Language :: Python :: 3.8',
|
||||
'Programming Language :: Python :: 3.9',
|
||||
+ 'Programming Language :: Python :: 3.11',
|
||||
'Topic :: Text Processing :: Markup :: XML',
|
||||
'Typing :: Typed',
|
||||
],
|
||||
|
||||
From b7683774f747c7aed6a0b30e6045da679bc68760 Mon Sep 17 00:00:00 2001
|
||||
From: Dan Vella <dan.vella@invicti.com>
|
||||
Date: Fri, 17 Mar 2023 14:00:32 +0100
|
||||
Subject: [PATCH 2/7] Added changes to enable 3.11 builds
|
||||
|
||||
---
|
||||
.appveyor.yml | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
From bddf28e68a2509a287f9889aaeadc3adab80ccbc Mon Sep 17 00:00:00 2001
|
||||
From: Dan Vella <dan.vella@invicti.com>
|
||||
Date: Fri, 17 Mar 2023 14:52:40 +0100
|
||||
Subject: [PATCH 3/7] bumped isort to 5.11.5
|
||||
|
||||
---
|
||||
.pre-commit-config.yaml | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
From 2c58d43eedf72590e3e201252f5fc5ddae36f8c6 Mon Sep 17 00:00:00 2001
|
||||
From: Tomas Divis <tomas.divis@nic.cz>
|
||||
Date: Wed, 22 Mar 2023 20:36:45 +0100
|
||||
Subject: [PATCH 4/7] Fix #244 - Fix failing test with libxmlsec-1.2.36, also
|
||||
make libxmlsec version available from Python.
|
||||
|
||||
---
|
||||
src/main.c | 13 ++++
|
||||
tests/data/sign5-out-xmlsec_1_2_36_to_37.xml | 67 ++++++++++++++++++++
|
||||
tests/test_ds.py | 6 +-
|
||||
3 files changed, 85 insertions(+), 1 deletion(-)
|
||||
create mode 100644 tests/data/sign5-out-xmlsec_1_2_36_to_37.xml
|
||||
|
||||
diff --git a/src/main.c b/src/main.c
|
||||
index ffcae14..5773db3 100644
|
||||
--- a/src/main.c
|
||||
+++ b/src/main.c
|
||||
@@ -119,6 +119,13 @@ static PyObject* PyXmlSec_PyShutdown(PyObject* self) {
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
+static char PyXmlSec_GetLibXmlSecVersion__doc__[] = \
|
||||
+ "get_libxmlsec_version() -> tuple\n"
|
||||
+ "Returns Version tuple of wrapped libxml library.";
|
||||
+static PyObject* PyXmlSec_GetLibXmlSecVersion() {
|
||||
+ return Py_BuildValue("(iii)", XMLSEC_VERSION_MAJOR, XMLSEC_VERSION_MINOR, XMLSEC_VERSION_SUBMINOR);
|
||||
+}
|
||||
+
|
||||
static char PyXmlSec_PyEnableDebugOutput__doc__[] = \
|
||||
"enable_debug_trace(enabled) -> None\n"
|
||||
"Enables or disables calling LibXML2 callback from the default errors callback.\n\n"
|
||||
@@ -386,6 +393,12 @@ static PyMethodDef PyXmlSec_MainMethods[] = {
|
||||
METH_NOARGS,
|
||||
PyXmlSec_PyShutdown__doc__
|
||||
},
|
||||
+ {
|
||||
+ "get_libxmlsec_version",
|
||||
+ (PyCFunction)PyXmlSec_GetLibXmlSecVersion,
|
||||
+ METH_NOARGS,
|
||||
+ PyXmlSec_GetLibXmlSecVersion__doc__
|
||||
+ },
|
||||
{
|
||||
"enable_debug_trace",
|
||||
(PyCFunction)PyXmlSec_PyEnableDebugOutput,
|
||||
diff --git a/tests/data/sign5-out-xmlsec_1_2_36_to_37.xml b/tests/data/sign5-out-xmlsec_1_2_36_to_37.xml
|
||||
new file mode 100644
|
||||
index 0000000..f359b13
|
||||
--- /dev/null
|
||||
+++ b/tests/data/sign5-out-xmlsec_1_2_36_to_37.xml
|
||||
@@ -0,0 +1,67 @@
|
||||
+<?xml version="1.0" encoding="UTF-8"?>
|
||||
+<!--
|
||||
+XML Security Library example: Signed XML doc file (sign5 example).
|
||||
+-->
|
||||
+<Envelope xmlns="urn:envelope">
|
||||
+ <Data>
|
||||
+ Hello, World!
|
||||
+ </Data>
|
||||
+<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
|
||||
+<SignedInfo>
|
||||
+<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
||||
+<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
|
||||
+<Reference>
|
||||
+<Transforms>
|
||||
+<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
|
||||
+</Transforms>
|
||||
+<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
|
||||
+<DigestValue>HjY8ilZAIEM2tBbPn5mYO1ieIX4=</DigestValue>
|
||||
+</Reference>
|
||||
+</SignedInfo>
|
||||
+<SignatureValue>SIaj/6KY3C1SmDXU2++Gm31U1xTadFp04WhBgfsJFbxrL+q7GKSKN9kfQ+UpN9+i
|
||||
+D5fWmuavXEHe4Gw6RMaMEkq2URQo7F68+d5J/ajq8/l4n+xE6/reGScVwT6L4dEP
|
||||
+XXVJcAi2ZnQ3O7GTNvNGCPibL9mUcyCWBFZ92Uemtc/vJFCQ7ZyKMdMfACgxOwyN
|
||||
+T/9971oog241/2doudhonc0I/3mgPYWkZdX6yvr62mEjnG+oUZkhWYJ4ewZJ4hM4
|
||||
+JjbFqZO+OEzDRSbw3DkmuBA/mtlx+3t13SESfEub5hqoMdVmtth/eTb64dsPdl9r
|
||||
+3k1ACVX9f8aHfQQdJOmLFQ==</SignatureValue>
|
||||
+<KeyInfo>
|
||||
+<X509Data>
|
||||
+
|
||||
+
|
||||
+
|
||||
+<X509IssuerSerial>
|
||||
+<X509IssuerName>Test Issuer</X509IssuerName>
|
||||
+<X509SerialNumber>1</X509SerialNumber>
|
||||
+</X509IssuerSerial>
|
||||
+<X509Certificate>MIIE3zCCBEigAwIBAgIBBTANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCVVMx
|
||||
+EzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVN1bm55dmFsZTE9MDsGA1UE
|
||||
+ChM0WE1MIFNlY3VyaXR5IExpYnJhcnkgKGh0dHA6Ly93d3cuYWxla3NleS5jb20v
|
||||
+eG1sc2VjKTEZMBcGA1UECxMQUm9vdCBDZXJ0aWZpY2F0ZTEWMBQGA1UEAxMNQWxl
|
||||
+a3NleSBTYW5pbjEhMB8GCSqGSIb3DQEJARYSeG1sc2VjQGFsZWtzZXkuY29tMB4X
|
||||
+DTAzMDMzMTA0MDIyMloXDTEzMDMyODA0MDIyMlowgb8xCzAJBgNVBAYTAlVTMRMw
|
||||
+EQYDVQQIEwpDYWxpZm9ybmlhMT0wOwYDVQQKEzRYTUwgU2VjdXJpdHkgTGlicmFy
|
||||
+eSAoaHR0cDovL3d3dy5hbGVrc2V5LmNvbS94bWxzZWMpMSEwHwYDVQQLExhFeGFt
|
||||
+cGxlcyBSU0EgQ2VydGlmaWNhdGUxFjAUBgNVBAMTDUFsZWtzZXkgU2FuaW4xITAf
|
||||
+BgkqhkiG9w0BCQEWEnhtbHNlY0BhbGVrc2V5LmNvbTCCASIwDQYJKoZIhvcNAQEB
|
||||
+BQADggEPADCCAQoCggEBAJe4/rQ/gzV4FokE7CthjL/EXwCBSkXm2c3p4jyXO0Wt
|
||||
+quaNC3dxBwFPfPl94hmq3ZFZ9PHPPbp4RpYRnLZbRjlzVSOq954AXOXpSew7nD+E
|
||||
+mTqQrd9+ZIbGJnLOMQh5fhMVuOW/1lYCjWAhTCcYZPv7VXD2M70vVXDVXn6ZrqTg
|
||||
+qkVHE6gw1aCKncwg7OSOUclUxX8+Zi10v6N6+PPslFc5tKwAdWJhVLTQ4FKG+F53
|
||||
+7FBDnNK6p4xiWryy/vPMYn4jYGvHUUk3eH4lFTCr+rSuJY8i/KNIf/IKim7g/o3w
|
||||
+Ae3GM8xrof2mgO8GjK/2QDqOQhQgYRIf4/wFsQXVZcMCAwEAAaOCAVcwggFTMAkG
|
||||
+A1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRp
|
||||
+ZmljYXRlMB0GA1UdDgQWBBQkhCzy1FkgYosuXIaQo6owuicanDCB+AYDVR0jBIHw
|
||||
+MIHtgBS0ue+a5pcOaGUemM76VQ2JBttMfKGB0aSBzjCByzELMAkGA1UEBhMCVVMx
|
||||
+EzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVN1bm55dmFsZTE9MDsGA1UE
|
||||
+ChM0WE1MIFNlY3VyaXR5IExpYnJhcnkgKGh0dHA6Ly93d3cuYWxla3NleS5jb20v
|
||||
+eG1sc2VjKTEZMBcGA1UECxMQUm9vdCBDZXJ0aWZpY2F0ZTEWMBQGA1UEAxMNQWxl
|
||||
+a3NleSBTYW5pbjEhMB8GCSqGSIb3DQEJARYSeG1sc2VjQGFsZWtzZXkuY29tggEA
|
||||
+MA0GCSqGSIb3DQEBBAUAA4GBALU/mzIxSv8vhDuomxFcplzwdlLZbvSQrfoNkMGY
|
||||
+1UoS3YJrN+jZLWKSyWE3mIaPpElqXiXQGGkwD5iPQ1iJMbI7BeLvx6ZxX/f+c8Wn
|
||||
+ss0uc1NxfahMaBoyG15IL4+beqO182fosaKJTrJNG3mc//ANGU9OsQM9mfBEt4oL
|
||||
+NJ2D</X509Certificate>
|
||||
+<X509SubjectName/>
|
||||
+<X509SKI/>
|
||||
+</X509Data>
|
||||
+</KeyInfo>
|
||||
+</Signature></Envelope>
|
||||
diff --git a/tests/test_ds.py b/tests/test_ds.py
|
||||
index 694ad43..38f0b25 100644
|
||||
--- a/tests/test_ds.py
|
||||
+++ b/tests/test_ds.py
|
||||
@@ -182,7 +182,11 @@ def test_sign_case5(self):
|
||||
self.assertEqual("rsakey.pem", ctx.key.name)
|
||||
|
||||
ctx.sign(sign)
|
||||
- self.assertEqual(self.load_xml("sign5-out.xml"), root)
|
||||
+ if (1, 2, 36) <= xmlsec.get_libxmlsec_version() <= (1, 2, 37):
|
||||
+ expected_xml_file = 'sign5-out-xmlsec_1_2_36_to_37.xml'
|
||||
+ else:
|
||||
+ expected_xml_file = 'sign5-out.xml'
|
||||
+ self.assertEqual(self.load_xml(expected_xml_file), root)
|
||||
|
||||
def test_sign_binary_bad_args(self):
|
||||
ctx = xmlsec.SignatureContext()
|
||||
|
||||
From 1cf6785b3e06c2b8f6cac1266cf8f1934650bc4b Mon Sep 17 00:00:00 2001
|
||||
From: Tomas Divis <tomas.divis@nic.cz>
|
||||
Date: Wed, 21 Dec 2022 14:01:14 +0100
|
||||
Subject: [PATCH 5/7] Fix #164 - Add support for loading keys from engine (e.g.
|
||||
pkcs11).
|
||||
|
||||
---
|
||||
README.rst | 2 +-
|
||||
src/keys.c | 47 +++++++++++++++++++++++++++++++++++++++++
|
||||
src/xmlsec/__init__.pyi | 2 ++
|
||||
3 files changed, 50 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/README.rst b/README.rst
|
||||
index 34bdd37..e192465 100644
|
||||
--- a/README.rst
|
||||
+++ b/README.rst
|
||||
@@ -37,7 +37,7 @@ Check the `examples <https://xmlsec.readthedocs.io/en/latest/examples.html>`_ se
|
||||
Requirements
|
||||
************
|
||||
- ``libxml2 >= 2.9.1``
|
||||
-- ``libxmlsec1 >= 1.2.18``
|
||||
+- ``libxmlsec1 >= 1.2.33``
|
||||
|
||||
Install
|
||||
*******
|
||||
diff --git a/src/keys.c b/src/keys.c
|
||||
index 1362b12..1440331 100644
|
||||
--- a/src/keys.c
|
||||
+++ b/src/keys.c
|
||||
@@ -185,6 +185,47 @@ static PyObject* PyXmlSec_KeyFromFile(PyObject* self, PyObject* args, PyObject*
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+static const char PyXmlSec_KeyFromEngine__doc__[] = \
|
||||
+ "from_engine(engine_and_key_id) -> xmlsec.Key\n"
|
||||
+ "Loads PKI key from an engine.\n\n"
|
||||
+ ":param engine_and_key_id: engine and key id, i.e. 'pkcs11;pkcs11:token=XmlsecToken;object=XmlsecKey;pin-value=password'\n"
|
||||
+ ":type engine_and_key_id: :class:`str`, "
|
||||
+ ":return: pointer to newly created key\n"
|
||||
+ ":rtype: :class:`~xmlsec.Key`";
|
||||
+static PyObject* PyXmlSec_KeyFromEngine(PyObject* self, PyObject* args, PyObject* kwargs) {
|
||||
+ static char *kwlist[] = {"engine_and_key_id", NULL};
|
||||
+
|
||||
+ const char* engine_and_key_id = NULL;
|
||||
+ PyXmlSec_Key* key = NULL;
|
||||
+
|
||||
+ PYXMLSEC_DEBUG("load key from engine - start");
|
||||
+ if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s:from_engine", kwlist, &engine_and_key_id)) {
|
||||
+ goto ON_FAIL;
|
||||
+ }
|
||||
+
|
||||
+ if ((key = PyXmlSec_NewKey1((PyTypeObject*)self)) == NULL) goto ON_FAIL;
|
||||
+
|
||||
+ Py_BEGIN_ALLOW_THREADS;
|
||||
+ key->handle = xmlSecCryptoAppKeyLoad(engine_and_key_id, xmlSecKeyDataFormatEngine, NULL, xmlSecCryptoAppGetDefaultPwdCallback(),
|
||||
+ (void*)engine_and_key_id);
|
||||
+ Py_END_ALLOW_THREADS;
|
||||
+
|
||||
+ if (key->handle == NULL) {
|
||||
+ PyXmlSec_SetLastError("cannot read key");
|
||||
+ goto ON_FAIL;
|
||||
+ }
|
||||
+
|
||||
+ key->is_own = 1;
|
||||
+
|
||||
+ PYXMLSEC_DEBUG("load key from engine - ok");
|
||||
+ return (PyObject*)key;
|
||||
+
|
||||
+ON_FAIL:
|
||||
+ PYXMLSEC_DEBUG("load key from engine - fail");
|
||||
+ Py_XDECREF(key);
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
static const char PyXmlSec_KeyGenerate__doc__[] = \
|
||||
"generate(klass, size, type) -> xmlsec.Key\n"
|
||||
"Generates key of kind ``klass`` with ``size`` and ``type``.\n\n"
|
||||
@@ -494,6 +535,12 @@ static PyMethodDef PyXmlSec_KeyMethods[] = {
|
||||
METH_CLASS|METH_VARARGS|METH_KEYWORDS,
|
||||
PyXmlSec_KeyFromFile__doc__
|
||||
},
|
||||
+ {
|
||||
+ "from_engine",
|
||||
+ (PyCFunction)PyXmlSec_KeyFromEngine,
|
||||
+ METH_CLASS|METH_VARARGS|METH_KEYWORDS,
|
||||
+ PyXmlSec_KeyFromEngine__doc__
|
||||
+ },
|
||||
{
|
||||
"generate",
|
||||
(PyCFunction)PyXmlSec_KeyGenerate,
|
||||
diff --git a/src/xmlsec/__init__.pyi b/src/xmlsec/__init__.pyi
|
||||
index 56356e5..6c326f5 100644
|
||||
--- a/src/xmlsec/__init__.pyi
|
||||
+++ b/src/xmlsec/__init__.pyi
|
||||
@@ -49,6 +49,8 @@ class Key:
|
||||
@classmethod
|
||||
def from_file(cls: type[Self], file: GenericPath[AnyStr] | IO[AnyStr], format: int, password: str | None = ...) -> Self: ...
|
||||
@classmethod
|
||||
+ def from_engine(cls: type[Self], engine_and_key_id: AnyStr) -> Self: ...
|
||||
+ @classmethod
|
||||
def from_memory(cls: type[Self], data: AnyStr, format: int, password: str | None = ...) -> Self: ...
|
||||
@classmethod
|
||||
def generate(cls: type[Self], klass: KeyData, size: int, type: int) -> Self: ...
|
||||
|
||||
From 0b5939fc65e98cebb669d311b4fb58844bf887e5 Mon Sep 17 00:00:00 2001
|
||||
From: Tomas Divis <tomas.divis@nic.cz>
|
||||
Date: Thu, 13 Apr 2023 14:28:02 +0200
|
||||
Subject: [PATCH 6/7] Fix #164 - Add tests for pkcs11 (softhsm) key.
|
||||
|
||||
---
|
||||
.github/workflows/sdist.yml | 3 +-
|
||||
tests/softhsm_setup.py | 265 ++++++++++++++++++++++++++++++++++++
|
||||
tests/test_pkcs11.py | 57 ++++++++
|
||||
3 files changed, 323 insertions(+), 2 deletions(-)
|
||||
create mode 100644 tests/softhsm_setup.py
|
||||
create mode 100644 tests/test_pkcs11.py
|
||||
|
||||
diff --git a/tests/softhsm_setup.py b/tests/softhsm_setup.py
|
||||
new file mode 100644
|
||||
index 0000000..0a7c37d
|
||||
--- /dev/null
|
||||
+++ b/tests/softhsm_setup.py
|
||||
@@ -0,0 +1,265 @@
|
||||
+"""
|
||||
+Testing the PKCS#11 shim layer.
|
||||
+Heavily inspired by from https://github.com/IdentityPython/pyXMLSecurity by leifj
|
||||
+under licence "As is", see https://github.com/IdentityPython/pyXMLSecurity/blob/master/LICENSE.txt
|
||||
+"""
|
||||
+
|
||||
+import logging
|
||||
+import os
|
||||
+import shutil
|
||||
+import subprocess
|
||||
+import tempfile
|
||||
+import traceback
|
||||
+import unittest
|
||||
+from typing import Dict, List, Optional, Tuple
|
||||
+
|
||||
+DATA_DIR = os.path.join(os.path.dirname(__file__), "data")
|
||||
+
|
||||
+
|
||||
+def paths_for_component(component: str, default_paths: List[str]):
|
||||
+ env_path = os.environ.get(component)
|
||||
+ return [env_path] if env_path else default_paths
|
||||
+
|
||||
+
|
||||
+def find_alts(component_name, alts: List[str]) -> str:
|
||||
+ for a in alts:
|
||||
+ if os.path.exists(a):
|
||||
+ return a
|
||||
+ raise unittest.SkipTest("Required component is missing: {}".format(component_name))
|
||||
+
|
||||
+
|
||||
+def run_cmd(args, softhsm_conf=None) -> Tuple[bytes, bytes]:
|
||||
+ env = {}
|
||||
+ if softhsm_conf is not None:
|
||||
+ env['SOFTHSM_CONF'] = softhsm_conf
|
||||
+ env['SOFTHSM2_CONF'] = softhsm_conf
|
||||
+ proc = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env)
|
||||
+ out, err = proc.communicate()
|
||||
+ if err is not None and len(err) > 0:
|
||||
+ logging.error(err)
|
||||
+ if out is not None and len(out) > 0:
|
||||
+ logging.debug(out)
|
||||
+ rv = proc.wait()
|
||||
+ if rv:
|
||||
+ with open(softhsm_conf) as f:
|
||||
+ conf = f.read()
|
||||
+ msg = '[cmd: {cmd}] [code: {code}] [stdout: {out}] [stderr: {err}] [config: {conf}]'
|
||||
+ msg = msg.format(
|
||||
+ cmd=" ".join(args), code=rv, out=out.strip(), err=err.strip(), conf=conf,
|
||||
+ )
|
||||
+ raise RuntimeError(msg)
|
||||
+ return out, err
|
||||
+
|
||||
+
|
||||
+component_default_paths: Dict[str, List[str]] = {
|
||||
+ 'P11_MODULE': [
|
||||
+ '/usr/lib/softhsm/libsofthsm2.so',
|
||||
+ '/usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so',
|
||||
+ '/usr/lib/softhsm/libsofthsm.so',
|
||||
+ '/usr/lib64/softhsm/libsofthsm2.so',
|
||||
+ ],
|
||||
+ 'P11_ENGINE': [
|
||||
+ '/usr/lib/ssl/engines/libpkcs11.so',
|
||||
+ '/usr/lib/engines/engine_pkcs11.so',
|
||||
+ '/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so',
|
||||
+ '/usr/lib64/engines-1.1/pkcs11.so',
|
||||
+ '/usr/lib64/engines-1.1/libpkcs11.so',
|
||||
+ '/usr/lib64/engines-3/pkcs11.so',
|
||||
+ '/usr/lib64/engines-3/libpkcs11.so',
|
||||
+ '/usr/lib/x86_64-linux-gnu/engines-3/pkcs11.so',
|
||||
+ '/usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so',
|
||||
+ ],
|
||||
+ 'PKCS11_TOOL': [
|
||||
+ '/usr/bin/pkcs11-tool',
|
||||
+ ],
|
||||
+ 'SOFTHSM': [
|
||||
+ '/usr/bin/softhsm2-util',
|
||||
+ '/usr/bin/softhsm',
|
||||
+ ],
|
||||
+ 'OPENSSL': [
|
||||
+ '/usr/bin/openssl',
|
||||
+ ],
|
||||
+}
|
||||
+
|
||||
+component_path: Dict[str, str] = {
|
||||
+ component_name: find_alts(component_name, paths_for_component(component_name, default_paths))
|
||||
+ for component_name, default_paths in component_default_paths.items()
|
||||
+}
|
||||
+
|
||||
+softhsm_version = 1
|
||||
+if component_path['SOFTHSM'].endswith('softhsm2-util'):
|
||||
+ softhsm_version = 2
|
||||
+
|
||||
+openssl_version = subprocess.check_output([component_path['OPENSSL'],
|
||||
+ 'version']
|
||||
+ )[8:11].decode()
|
||||
+
|
||||
+p11_test_files: List[str] = []
|
||||
+softhsm_conf: Optional[str] = None
|
||||
+softhsm_db: Optional[str] = None
|
||||
+
|
||||
+
|
||||
+def _temp_file() -> str:
|
||||
+ f = tempfile.NamedTemporaryFile(delete=False)
|
||||
+ p11_test_files.append(f.name)
|
||||
+ return f.name
|
||||
+
|
||||
+
|
||||
+def _temp_dir() -> str:
|
||||
+ d = tempfile.mkdtemp()
|
||||
+ p11_test_files.append(d)
|
||||
+ return d
|
||||
+
|
||||
+
|
||||
+@unittest.skipIf(component_path['P11_MODULE'] is None, "SoftHSM PKCS11 module not installed")
|
||||
+def setup() -> None:
|
||||
+ logging.debug("Creating test pkcs11 token using softhsm")
|
||||
+ try:
|
||||
+ global softhsm_conf
|
||||
+ softhsm_conf = _temp_file()
|
||||
+ logging.debug("Generating softhsm.conf")
|
||||
+ with open(softhsm_conf, "w") as f:
|
||||
+ if softhsm_version == 2:
|
||||
+ softhsm_db = _temp_dir()
|
||||
+ f.write("""
|
||||
+# Generated by test
|
||||
+directories.tokendir = %s
|
||||
+objectstore.backend = file
|
||||
+log.level = DEBUG
|
||||
+""" % softhsm_db)
|
||||
+ else:
|
||||
+ softhsm_db = _temp_file()
|
||||
+ f.write("""
|
||||
+# Generated by test
|
||||
+0:%s
|
||||
+""" % softhsm_db)
|
||||
+
|
||||
+ logging.debug("Initializing the token")
|
||||
+ out, err = run_cmd([component_path['SOFTHSM'],
|
||||
+ '--slot', '0',
|
||||
+ '--label', 'test',
|
||||
+ '--init-token',
|
||||
+ '--pin', 'secret1',
|
||||
+ '--so-pin', 'secret2'],
|
||||
+ softhsm_conf=softhsm_conf)
|
||||
+
|
||||
+ # logging.debug("Generating 1024 bit RSA key in token")
|
||||
+ # run_cmd([component_path['PKCS11_TOOL'],
|
||||
+ # '--module', component_path['P11_MODULE'],
|
||||
+ # '-l',
|
||||
+ # '-k',
|
||||
+ # '--key-type', 'rsa:1024',
|
||||
+ # '--id', 'a1b2',
|
||||
+ # '--label', 'test',
|
||||
+ # '--pin', 'secret1'], softhsm_conf=softhsm_conf)
|
||||
+
|
||||
+ hash_priv_key = _temp_file()
|
||||
+ logging.debug("Converting test private key to format for softhsm")
|
||||
+ run_cmd([component_path['OPENSSL'], 'pkcs8',
|
||||
+ '-topk8',
|
||||
+ '-inform', 'PEM',
|
||||
+ '-outform', 'PEM',
|
||||
+ '-nocrypt',
|
||||
+ '-in', os.path.join(DATA_DIR, 'rsakey.pem'),
|
||||
+ '-out', hash_priv_key], softhsm_conf=softhsm_conf)
|
||||
+
|
||||
+ logging.debug("Importing the test key to softhsm")
|
||||
+ run_cmd([component_path['SOFTHSM'],
|
||||
+ '--import', hash_priv_key,
|
||||
+ '--token', 'test',
|
||||
+ '--id', 'a1b2',
|
||||
+ '--label', 'test',
|
||||
+ '--pin', 'secret1'],
|
||||
+ softhsm_conf=softhsm_conf)
|
||||
+ run_cmd([component_path['PKCS11_TOOL'],
|
||||
+ '--module', component_path['P11_MODULE'],
|
||||
+ '-l',
|
||||
+ '--pin', 'secret1', '-O'], softhsm_conf=softhsm_conf)
|
||||
+ signer_cert_pem = _temp_file()
|
||||
+ openssl_conf = _temp_file()
|
||||
+ logging.debug("Generating OpenSSL config for version {}".format(openssl_version))
|
||||
+ with open(openssl_conf, "w") as f:
|
||||
+ # Might be needed with some versions of openssl, but in more recent versions dynamic_path breaks it.
|
||||
+ # dynamic_path = (
|
||||
+ # "dynamic_path = %s" % component_path['P11_ENGINE']
|
||||
+ # if openssl_version.startswith(b'1.')
|
||||
+ # else ""
|
||||
+ # )
|
||||
+ f.write("\n".join([
|
||||
+ "openssl_conf = openssl_def",
|
||||
+ "[openssl_def]",
|
||||
+ "engines = engine_section",
|
||||
+ "[engine_section]",
|
||||
+ "pkcs11 = pkcs11_section",
|
||||
+ "[req]",
|
||||
+ "distinguished_name = req_distinguished_name",
|
||||
+ "[req_distinguished_name]",
|
||||
+ "[pkcs11_section]",
|
||||
+ "engine_id = pkcs11",
|
||||
+ # dynamic_path,
|
||||
+ "MODULE_PATH = %s" % component_path['P11_MODULE'],
|
||||
+ "init = 0",
|
||||
+ ]))
|
||||
+
|
||||
+ with open(openssl_conf, "r") as f:
|
||||
+ logging.debug('-------- START DEBUG openssl_conf --------')
|
||||
+ logging.debug(f.readlines())
|
||||
+ logging.debug('-------- END DEBUG openssl_conf --------')
|
||||
+ logging.debug('-------- START DEBUG paths --------')
|
||||
+ logging.debug(run_cmd(['ls', '-ld', component_path['P11_ENGINE']]))
|
||||
+ logging.debug(run_cmd(['ls', '-ld', component_path['P11_MODULE']]))
|
||||
+ logging.debug('-------- END DEBUG paths --------')
|
||||
+
|
||||
+ signer_cert_der = _temp_file()
|
||||
+
|
||||
+ logging.debug("Generating self-signed certificate")
|
||||
+ run_cmd([component_path['OPENSSL'], 'req',
|
||||
+ '-new',
|
||||
+ '-x509',
|
||||
+ '-subj', "/CN=Test Signer",
|
||||
+ '-engine', 'pkcs11',
|
||||
+ '-config', openssl_conf,
|
||||
+ '-keyform', 'engine',
|
||||
+ '-key', 'label_test',
|
||||
+ '-passin', 'pass:secret1',
|
||||
+ '-out', signer_cert_pem], softhsm_conf=softhsm_conf)
|
||||
+
|
||||
+ run_cmd([component_path['OPENSSL'], 'x509',
|
||||
+ '-inform', 'PEM',
|
||||
+ '-outform', 'DER',
|
||||
+ '-in', signer_cert_pem,
|
||||
+ '-out', signer_cert_der], softhsm_conf=softhsm_conf)
|
||||
+
|
||||
+ logging.debug("Importing certificate into token")
|
||||
+
|
||||
+ run_cmd([component_path['PKCS11_TOOL'],
|
||||
+ '--module', component_path['P11_MODULE'],
|
||||
+ '-l',
|
||||
+ '--slot-index', '0',
|
||||
+ '--id', 'a1b2',
|
||||
+ '--label', 'test',
|
||||
+ '-y', 'cert',
|
||||
+ '-w', signer_cert_der,
|
||||
+ '--pin', 'secret1'], softhsm_conf=softhsm_conf)
|
||||
+
|
||||
+ # TODO: Should be teardowned in teardown:
|
||||
+ os.environ['SOFTHSM_CONF'] = softhsm_conf
|
||||
+ os.environ['SOFTHSM2_CONF'] = softhsm_conf
|
||||
+
|
||||
+ except Exception as ex:
|
||||
+ print("-" * 64)
|
||||
+ traceback.print_exc()
|
||||
+ print("-" * 64)
|
||||
+ logging.error("PKCS11 tests disabled: unable to initialize test token: %s" % ex)
|
||||
+ raise ex
|
||||
+
|
||||
+
|
||||
+def teardown() -> None:
|
||||
+ global p11_test_files
|
||||
+ for o in p11_test_files:
|
||||
+ if os.path.exists(o):
|
||||
+ if os.path.isdir(o):
|
||||
+ shutil.rmtree(o)
|
||||
+ else:
|
||||
+ os.unlink(o)
|
||||
+ p11_test_files = []
|
||||
diff --git a/tests/test_pkcs11.py b/tests/test_pkcs11.py
|
||||
new file mode 100644
|
||||
index 0000000..accd29a
|
||||
--- /dev/null
|
||||
+++ b/tests/test_pkcs11.py
|
||||
@@ -0,0 +1,57 @@
|
||||
+import xmlsec
|
||||
+from tests import base
|
||||
+from xmlsec import constants as consts
|
||||
+
|
||||
+KEY_URL = "pkcs11;pkcs11:token=test;object=test;pin-value=secret1"
|
||||
+
|
||||
+
|
||||
+def setUpModule():
|
||||
+ from tests import softhsm_setup
|
||||
+
|
||||
+ softhsm_setup.setup()
|
||||
+
|
||||
+
|
||||
+def tearDownModule():
|
||||
+ from tests import softhsm_setup
|
||||
+
|
||||
+ softhsm_setup.teardown()
|
||||
+
|
||||
+
|
||||
+class TestKeys(base.TestMemoryLeaks):
|
||||
+ def test_del_key(self):
|
||||
+ ctx = xmlsec.SignatureContext(manager=xmlsec.KeysManager())
|
||||
+ ctx.key = xmlsec.Key.from_engine(KEY_URL)
|
||||
+ del ctx.key
|
||||
+ self.assertIsNone(ctx.key)
|
||||
+
|
||||
+ def test_set_key(self):
|
||||
+ ctx = xmlsec.SignatureContext(manager=xmlsec.KeysManager())
|
||||
+ ctx.key = xmlsec.Key.from_engine(KEY_URL)
|
||||
+ self.assertIsNotNone(ctx.key)
|
||||
+
|
||||
+ def test_sign_bad_args(self):
|
||||
+ ctx = xmlsec.SignatureContext()
|
||||
+ ctx.key = xmlsec.Key.from_engine(KEY_URL)
|
||||
+ with self.assertRaises(TypeError):
|
||||
+ ctx.sign('')
|
||||
+
|
||||
+ def test_sign_fail(self):
|
||||
+ ctx = xmlsec.SignatureContext()
|
||||
+ ctx.key = xmlsec.Key.from_engine(KEY_URL)
|
||||
+ with self.assertRaisesRegex(xmlsec.Error, 'failed to sign'):
|
||||
+ ctx.sign(self.load_xml('sign1-in.xml'))
|
||||
+
|
||||
+ def test_sign_case1(self):
|
||||
+ """Should sign a pre-constructed template file using a key from a pkcs11 engine."""
|
||||
+ root = self.load_xml("sign1-in.xml")
|
||||
+ sign = xmlsec.tree.find_node(root, consts.NodeSignature)
|
||||
+ self.assertIsNotNone(sign)
|
||||
+
|
||||
+ ctx = xmlsec.SignatureContext()
|
||||
+ ctx.key = xmlsec.Key.from_engine(KEY_URL)
|
||||
+ self.assertIsNotNone(ctx.key)
|
||||
+ ctx.key.name = 'rsakey.pem'
|
||||
+ self.assertEqual("rsakey.pem", ctx.key.name)
|
||||
+
|
||||
+ ctx.sign(sign)
|
||||
+ self.assertEqual(self.load_xml("sign1-out.xml"), root)
|
||||
|
||||
From 4f5daea286df89c64fbfc615f422be62b2cdf114 Mon Sep 17 00:00:00 2001
|
||||
From: "pre-commit-ci[bot]"
|
||||
<66853113+pre-commit-ci[bot]@users.noreply.github.com>
|
||||
Date: Mon, 17 Apr 2023 11:55:28 +0000
|
||||
Subject: [PATCH 7/7] [pre-commit.ci] auto fixes from pre-commit.com hooks
|
||||
|
||||
for more information, see https://pre-commit.ci
|
||||
---
|
||||
tests/softhsm_setup.py | 220 +++++++++++++++++++++++++++--------------
|
||||
1 file changed, 147 insertions(+), 73 deletions(-)
|
||||
|
||||
diff --git a/tests/softhsm_setup.py b/tests/softhsm_setup.py
|
||||
index 0a7c37d..432d4b1 100644
|
||||
--- a/tests/softhsm_setup.py
|
||||
+++ b/tests/softhsm_setup.py
|
||||
@@ -45,7 +45,11 @@ def run_cmd(args, softhsm_conf=None) -> Tuple[bytes, bytes]:
|
||||
conf = f.read()
|
||||
msg = '[cmd: {cmd}] [code: {code}] [stdout: {out}] [stderr: {err}] [config: {conf}]'
|
||||
msg = msg.format(
|
||||
- cmd=" ".join(args), code=rv, out=out.strip(), err=err.strip(), conf=conf,
|
||||
+ cmd=" ".join(args),
|
||||
+ code=rv,
|
||||
+ out=out.strip(),
|
||||
+ err=err.strip(),
|
||||
+ conf=conf,
|
||||
)
|
||||
raise RuntimeError(msg)
|
||||
return out, err
|
||||
@@ -90,9 +94,7 @@ def run_cmd(args, softhsm_conf=None) -> Tuple[bytes, bytes]:
|
||||
if component_path['SOFTHSM'].endswith('softhsm2-util'):
|
||||
softhsm_version = 2
|
||||
|
||||
-openssl_version = subprocess.check_output([component_path['OPENSSL'],
|
||||
- 'version']
|
||||
- )[8:11].decode()
|
||||
+openssl_version = subprocess.check_output([component_path['OPENSSL'], 'version'])[8:11].decode()
|
||||
|
||||
p11_test_files: List[str] = []
|
||||
softhsm_conf: Optional[str] = None
|
||||
@@ -121,27 +123,41 @@ def setup() -> None:
|
||||
with open(softhsm_conf, "w") as f:
|
||||
if softhsm_version == 2:
|
||||
softhsm_db = _temp_dir()
|
||||
- f.write("""
|
||||
+ f.write(
|
||||
+ """
|
||||
# Generated by test
|
||||
directories.tokendir = %s
|
||||
objectstore.backend = file
|
||||
log.level = DEBUG
|
||||
-""" % softhsm_db)
|
||||
+"""
|
||||
+ % softhsm_db
|
||||
+ )
|
||||
else:
|
||||
softhsm_db = _temp_file()
|
||||
- f.write("""
|
||||
+ f.write(
|
||||
+ """
|
||||
# Generated by test
|
||||
0:%s
|
||||
-""" % softhsm_db)
|
||||
+"""
|
||||
+ % softhsm_db
|
||||
+ )
|
||||
|
||||
logging.debug("Initializing the token")
|
||||
- out, err = run_cmd([component_path['SOFTHSM'],
|
||||
- '--slot', '0',
|
||||
- '--label', 'test',
|
||||
- '--init-token',
|
||||
- '--pin', 'secret1',
|
||||
- '--so-pin', 'secret2'],
|
||||
- softhsm_conf=softhsm_conf)
|
||||
+ out, err = run_cmd(
|
||||
+ [
|
||||
+ component_path['SOFTHSM'],
|
||||
+ '--slot',
|
||||
+ '0',
|
||||
+ '--label',
|
||||
+ 'test',
|
||||
+ '--init-token',
|
||||
+ '--pin',
|
||||
+ 'secret1',
|
||||
+ '--so-pin',
|
||||
+ 'secret2',
|
||||
+ ],
|
||||
+ softhsm_conf=softhsm_conf,
|
||||
+ )
|
||||
|
||||
# logging.debug("Generating 1024 bit RSA key in token")
|
||||
# run_cmd([component_path['PKCS11_TOOL'],
|
||||
@@ -155,26 +171,45 @@ def setup() -> None:
|
||||
|
||||
hash_priv_key = _temp_file()
|
||||
logging.debug("Converting test private key to format for softhsm")
|
||||
- run_cmd([component_path['OPENSSL'], 'pkcs8',
|
||||
- '-topk8',
|
||||
- '-inform', 'PEM',
|
||||
- '-outform', 'PEM',
|
||||
- '-nocrypt',
|
||||
- '-in', os.path.join(DATA_DIR, 'rsakey.pem'),
|
||||
- '-out', hash_priv_key], softhsm_conf=softhsm_conf)
|
||||
+ run_cmd(
|
||||
+ [
|
||||
+ component_path['OPENSSL'],
|
||||
+ 'pkcs8',
|
||||
+ '-topk8',
|
||||
+ '-inform',
|
||||
+ 'PEM',
|
||||
+ '-outform',
|
||||
+ 'PEM',
|
||||
+ '-nocrypt',
|
||||
+ '-in',
|
||||
+ os.path.join(DATA_DIR, 'rsakey.pem'),
|
||||
+ '-out',
|
||||
+ hash_priv_key,
|
||||
+ ],
|
||||
+ softhsm_conf=softhsm_conf,
|
||||
+ )
|
||||
|
||||
logging.debug("Importing the test key to softhsm")
|
||||
- run_cmd([component_path['SOFTHSM'],
|
||||
- '--import', hash_priv_key,
|
||||
- '--token', 'test',
|
||||
- '--id', 'a1b2',
|
||||
- '--label', 'test',
|
||||
- '--pin', 'secret1'],
|
||||
- softhsm_conf=softhsm_conf)
|
||||
- run_cmd([component_path['PKCS11_TOOL'],
|
||||
- '--module', component_path['P11_MODULE'],
|
||||
- '-l',
|
||||
- '--pin', 'secret1', '-O'], softhsm_conf=softhsm_conf)
|
||||
+ run_cmd(
|
||||
+ [
|
||||
+ component_path['SOFTHSM'],
|
||||
+ '--import',
|
||||
+ hash_priv_key,
|
||||
+ '--token',
|
||||
+ 'test',
|
||||
+ '--id',
|
||||
+ 'a1b2',
|
||||
+ '--label',
|
||||
+ 'test',
|
||||
+ '--pin',
|
||||
+ 'secret1',
|
||||
+ ],
|
||||
+ softhsm_conf=softhsm_conf,
|
||||
+ )
|
||||
+ run_cmd(
|
||||
+ [component_path['PKCS11_TOOL'], '--module', component_path['P11_MODULE'], '-l', '--pin', 'secret1', '-O'],
|
||||
+ softhsm_conf=softhsm_conf,
|
||||
+ )
|
||||
signer_cert_pem = _temp_file()
|
||||
openssl_conf = _temp_file()
|
||||
logging.debug("Generating OpenSSL config for version {}".format(openssl_version))
|
||||
@@ -185,21 +220,25 @@ def setup() -> None:
|
||||
# if openssl_version.startswith(b'1.')
|
||||
# else ""
|
||||
# )
|
||||
- f.write("\n".join([
|
||||
- "openssl_conf = openssl_def",
|
||||
- "[openssl_def]",
|
||||
- "engines = engine_section",
|
||||
- "[engine_section]",
|
||||
- "pkcs11 = pkcs11_section",
|
||||
- "[req]",
|
||||
- "distinguished_name = req_distinguished_name",
|
||||
- "[req_distinguished_name]",
|
||||
- "[pkcs11_section]",
|
||||
- "engine_id = pkcs11",
|
||||
- # dynamic_path,
|
||||
- "MODULE_PATH = %s" % component_path['P11_MODULE'],
|
||||
- "init = 0",
|
||||
- ]))
|
||||
+ f.write(
|
||||
+ "\n".join(
|
||||
+ [
|
||||
+ "openssl_conf = openssl_def",
|
||||
+ "[openssl_def]",
|
||||
+ "engines = engine_section",
|
||||
+ "[engine_section]",
|
||||
+ "pkcs11 = pkcs11_section",
|
||||
+ "[req]",
|
||||
+ "distinguished_name = req_distinguished_name",
|
||||
+ "[req_distinguished_name]",
|
||||
+ "[pkcs11_section]",
|
||||
+ "engine_id = pkcs11",
|
||||
+ # dynamic_path,
|
||||
+ "MODULE_PATH = %s" % component_path['P11_MODULE'],
|
||||
+ "init = 0",
|
||||
+ ]
|
||||
+ )
|
||||
+ )
|
||||
|
||||
with open(openssl_conf, "r") as f:
|
||||
logging.debug('-------- START DEBUG openssl_conf --------')
|
||||
@@ -213,34 +252,69 @@ def setup() -> None:
|
||||
signer_cert_der = _temp_file()
|
||||
|
||||
logging.debug("Generating self-signed certificate")
|
||||
- run_cmd([component_path['OPENSSL'], 'req',
|
||||
- '-new',
|
||||
- '-x509',
|
||||
- '-subj', "/CN=Test Signer",
|
||||
- '-engine', 'pkcs11',
|
||||
- '-config', openssl_conf,
|
||||
- '-keyform', 'engine',
|
||||
- '-key', 'label_test',
|
||||
- '-passin', 'pass:secret1',
|
||||
- '-out', signer_cert_pem], softhsm_conf=softhsm_conf)
|
||||
-
|
||||
- run_cmd([component_path['OPENSSL'], 'x509',
|
||||
- '-inform', 'PEM',
|
||||
- '-outform', 'DER',
|
||||
- '-in', signer_cert_pem,
|
||||
- '-out', signer_cert_der], softhsm_conf=softhsm_conf)
|
||||
+ run_cmd(
|
||||
+ [
|
||||
+ component_path['OPENSSL'],
|
||||
+ 'req',
|
||||
+ '-new',
|
||||
+ '-x509',
|
||||
+ '-subj',
|
||||
+ "/CN=Test Signer",
|
||||
+ '-engine',
|
||||
+ 'pkcs11',
|
||||
+ '-config',
|
||||
+ openssl_conf,
|
||||
+ '-keyform',
|
||||
+ 'engine',
|
||||
+ '-key',
|
||||
+ 'label_test',
|
||||
+ '-passin',
|
||||
+ 'pass:secret1',
|
||||
+ '-out',
|
||||
+ signer_cert_pem,
|
||||
+ ],
|
||||
+ softhsm_conf=softhsm_conf,
|
||||
+ )
|
||||
+
|
||||
+ run_cmd(
|
||||
+ [
|
||||
+ component_path['OPENSSL'],
|
||||
+ 'x509',
|
||||
+ '-inform',
|
||||
+ 'PEM',
|
||||
+ '-outform',
|
||||
+ 'DER',
|
||||
+ '-in',
|
||||
+ signer_cert_pem,
|
||||
+ '-out',
|
||||
+ signer_cert_der,
|
||||
+ ],
|
||||
+ softhsm_conf=softhsm_conf,
|
||||
+ )
|
||||
|
||||
logging.debug("Importing certificate into token")
|
||||
|
||||
- run_cmd([component_path['PKCS11_TOOL'],
|
||||
- '--module', component_path['P11_MODULE'],
|
||||
- '-l',
|
||||
- '--slot-index', '0',
|
||||
- '--id', 'a1b2',
|
||||
- '--label', 'test',
|
||||
- '-y', 'cert',
|
||||
- '-w', signer_cert_der,
|
||||
- '--pin', 'secret1'], softhsm_conf=softhsm_conf)
|
||||
+ run_cmd(
|
||||
+ [
|
||||
+ component_path['PKCS11_TOOL'],
|
||||
+ '--module',
|
||||
+ component_path['P11_MODULE'],
|
||||
+ '-l',
|
||||
+ '--slot-index',
|
||||
+ '0',
|
||||
+ '--id',
|
||||
+ 'a1b2',
|
||||
+ '--label',
|
||||
+ 'test',
|
||||
+ '-y',
|
||||
+ 'cert',
|
||||
+ '-w',
|
||||
+ signer_cert_der,
|
||||
+ '--pin',
|
||||
+ 'secret1',
|
||||
+ ],
|
||||
+ softhsm_conf=softhsm_conf,
|
||||
+ )
|
||||
|
||||
# TODO: Should be teardowned in teardown:
|
||||
os.environ['SOFTHSM_CONF'] = softhsm_conf
|
|
@ -1,105 +0,0 @@
|
|||
From 5f57f2eac756df213e83a2fdb452057909e2dd21 Mon Sep 17 00:00:00 2001
|
||||
From: David Adamec <david.adamec@airship.com>
|
||||
Date: Fri, 15 Sep 2023 17:49:15 -0700
|
||||
Subject: [PATCH 1/3] Add compatibility for xmlsec 1.3
|
||||
|
||||
---
|
||||
doc/source/modules/constants.rst | 6 ------
|
||||
src/constants.c | 2 --
|
||||
src/enc.c | 7 +++++++
|
||||
src/xmlsec/constants.pyi | 2 --
|
||||
4 files changed, 7 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/constants.c b/src/constants.c
|
||||
index 34c81b2..72ae217 100644
|
||||
--- a/src/constants.c
|
||||
+++ b/src/constants.c
|
||||
@@ -316,8 +316,6 @@ int PyXmlSec_ConstantsModule_Init(PyObject* package) {
|
||||
PYXMLSEC_ADD_NS_CONSTANT(XPathNs, "XPATH");
|
||||
PYXMLSEC_ADD_NS_CONSTANT(XPath2Ns, "XPATH2");
|
||||
PYXMLSEC_ADD_NS_CONSTANT(XPointerNs, "XPOINTER");
|
||||
- PYXMLSEC_ADD_NS_CONSTANT(Soap11Ns, "SOAP11");
|
||||
- PYXMLSEC_ADD_NS_CONSTANT(Soap12Ns, "SOAP12");
|
||||
PYXMLSEC_ADD_NS_CONSTANT(NsExcC14N, "EXC_C14N");
|
||||
PYXMLSEC_ADD_NS_CONSTANT(NsExcC14NWithComments, "EXC_C14N_WITH_COMMENT");
|
||||
|
||||
diff --git a/src/enc.c b/src/enc.c
|
||||
index aaf35ae..475cd2d 100644
|
||||
--- a/src/enc.c
|
||||
+++ b/src/enc.c
|
||||
@@ -50,6 +50,13 @@ static int PyXmlSec_EncryptionContext__init__(PyObject* self, PyObject* args, Py
|
||||
}
|
||||
ctx->manager = manager;
|
||||
PYXMLSEC_DEBUGF("%p: init enc context - ok, manager - %p", self, manager);
|
||||
+
|
||||
+ // xmlsec 1.3 changed the key search to strict mode, causing various examples
|
||||
+ // in the docs to fail. For backwards compatibility, this changes it back to
|
||||
+ // lax mode for now.
|
||||
+ ctx->handle->keyInfoReadCtx.flags = XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH;
|
||||
+ ctx->handle->keyInfoWriteCtx.flags = XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH;
|
||||
+
|
||||
return 0;
|
||||
ON_FAIL:
|
||||
PYXMLSEC_DEBUGF("%p: init enc context - failed", self);
|
||||
diff --git a/src/xmlsec/constants.pyi b/src/xmlsec/constants.pyi
|
||||
index 3430a02..9fd24e5 100644
|
||||
--- a/src/xmlsec/constants.pyi
|
||||
+++ b/src/xmlsec/constants.pyi
|
||||
@@ -85,8 +85,6 @@ NodeX509Data: Final[str]
|
||||
Ns: Final[str]
|
||||
NsExcC14N: Final[str]
|
||||
NsExcC14NWithComments: Final[str]
|
||||
-Soap11Ns: Final[str]
|
||||
-Soap12Ns: Final[str]
|
||||
TransformAes128Cbc: Final[__Transform]
|
||||
TransformAes128Gcm: Final[__Transform]
|
||||
TransformAes192Cbc: Final[__Transform]
|
||||
|
||||
From 0e7c5e718e8d221331b0a5f851094a5b4181eeae Mon Sep 17 00:00:00 2001
|
||||
From: David Adamec <david.adamec@airship.com>
|
||||
Date: Fri, 15 Sep 2023 18:07:07 -0700
|
||||
Subject: [PATCH 2/3] fix 1.2 compatibility
|
||||
|
||||
---
|
||||
src/enc.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/src/enc.c b/src/enc.c
|
||||
index 475cd2d..5453ef9 100644
|
||||
--- a/src/enc.c
|
||||
+++ b/src/enc.c
|
||||
@@ -17,6 +17,11 @@
|
||||
#include <xmlsec/xmlenc.h>
|
||||
#include <xmlsec/xmltree.h>
|
||||
|
||||
+// Backwards compatibility with xmlsec 1.2
|
||||
+#ifndef XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH
|
||||
+#define XMLSEC_KEYINFO_FLAGS_LAX_KEY_SEARCH 0x00008000
|
||||
+#endif
|
||||
+
|
||||
typedef struct {
|
||||
PyObject_HEAD
|
||||
xmlSecEncCtxPtr handle;
|
||||
|
||||
From 40c14c45a352f2812e796a071ef7d12f5a70be58 Mon Sep 17 00:00:00 2001
|
||||
From: David Adamec <david.adamec@airship.com>
|
||||
Date: Fri, 15 Sep 2023 19:40:04 -0700
|
||||
Subject: [PATCH 3/3] update isort to fix poetry error in pre-commit
|
||||
|
||||
---
|
||||
.pre-commit-config.yaml | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
|
||||
index 0545b12..bf877f3 100644
|
||||
--- a/.pre-commit-config.yaml
|
||||
+++ b/.pre-commit-config.yaml
|
||||
@@ -31,7 +31,7 @@ repos:
|
||||
exclude: ^setup.py$
|
||||
additional_dependencies: [flake8-docstrings, flake8-bugbear, flake8-logging-format, flake8-builtins, flake8-eradicate, flake8-fixme, pep8-naming, flake8-pep3101, flake8-annotations-complexity,flake8-pyi]
|
||||
- repo: https://github.com/PyCQA/isort
|
||||
- rev: 5.10.1
|
||||
+ rev: 5.12.0
|
||||
hooks:
|
||||
- id: isort
|
||||
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
@ -1,35 +0,0 @@
|
|||
diff --git a/src/constants.c.orig b/src/constants.c
|
||||
index 72ae217..b12d0ad 100644
|
||||
--- a/src/constants.c.orig
|
||||
+++ b/src/constants.c
|
||||
@@ -445,7 +445,7 @@ int PyXmlSec_ConstantsModule_Init(PyObject* package) {
|
||||
#endif
|
||||
#if XMLSEC_VERSION_HEX > 0x10212
|
||||
// from version 1.2.19
|
||||
- PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataEcdsa, "ECDSA")
|
||||
+ PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataEc, "ECDSA")
|
||||
#endif
|
||||
PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataHmac, "HMAC")
|
||||
PYXMLSEC_ADD_KEYDATA_CONSTANT(KeyDataRsa, "RSA")
|
||||
diff --git a/src/keys.c.orig b/src/keys.c
|
||||
index 1440331..8b84c34 100644
|
||||
--- a/src/keys.c.orig
|
||||
+++ b/src/keys.c
|
||||
@@ -163,7 +163,7 @@ static PyObject* PyXmlSec_KeyFromFile(PyObject* self, PyObject* args, PyObject*
|
||||
if (is_content) {
|
||||
key->handle = xmlSecCryptoAppKeyLoadMemory((const xmlSecByte*)data, (xmlSecSize)data_size, format, password, NULL, NULL);
|
||||
} else {
|
||||
- key->handle = xmlSecCryptoAppKeyLoad(data, format, password, NULL, NULL);
|
||||
+ key->handle = xmlSecCryptoAppKeyLoadEx(data, xmlSecKeyDataTypePrivate, format, password, NULL, NULL);
|
||||
}
|
||||
Py_END_ALLOW_THREADS;
|
||||
|
||||
@@ -206,7 +206,7 @@ static PyObject* PyXmlSec_KeyFromEngine(PyObject* self, PyObject* args, PyObject
|
||||
if ((key = PyXmlSec_NewKey1((PyTypeObject*)self)) == NULL) goto ON_FAIL;
|
||||
|
||||
Py_BEGIN_ALLOW_THREADS;
|
||||
- key->handle = xmlSecCryptoAppKeyLoad(engine_and_key_id, xmlSecKeyDataFormatEngine, NULL, xmlSecCryptoAppGetDefaultPwdCallback(),
|
||||
+ key->handle = xmlSecCryptoAppKeyLoadEx(engine_and_key_id, xmlSecKeyDataTypePrivate, xmlSecKeyDataFormatEngine, NULL, xmlSecCryptoAppGetDefaultPwdCallback(),
|
||||
(void*)engine_and_key_id);
|
||||
Py_END_ALLOW_THREADS;
|
||||
|
|
@ -1,56 +0,0 @@
|
|||
# Contributor: Antoine Martin (ayakael) <dev@ayakael.net>
|
||||
# Maintainer: Antoine Martin (ayakael) <dev@ayakael.net>
|
||||
_pyname=xmlsec
|
||||
pkgname="py3-$_pyname"
|
||||
pkgver=1.3.13
|
||||
pkgrel=6
|
||||
arch="all"
|
||||
pkgdesc="Python bindings for the XML Security Library"
|
||||
url="https://pypi.python.org/project/$_pyname"
|
||||
license="MIT"
|
||||
depends="
|
||||
py3-lxml
|
||||
xmlsec
|
||||
"
|
||||
makedepends="
|
||||
py3-gpep517
|
||||
py3-setuptools
|
||||
py3-setuptools_scm
|
||||
py3-pkgconfig
|
||||
py3-wheel
|
||||
python3-dev
|
||||
libxml2-dev
|
||||
xmlsec-dev
|
||||
"
|
||||
checkdepends="py3-pytest"
|
||||
source="
|
||||
$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/${_pyname:0:1}/$_pyname/$_pyname-$pkgver.tar.gz
|
||||
253_pkcs11-support.patch
|
||||
264_xmlsec3-support.patch
|
||||
280_fix-function-deprecation.patch
|
||||
"
|
||||
builddir="$srcdir"/$_pyname-$pkgver
|
||||
|
||||
build() {
|
||||
gpep517 build-wheel \
|
||||
--wheel-dir dist \
|
||||
--output-fd 3 3>&1 >&2
|
||||
|
||||
}
|
||||
|
||||
check() {
|
||||
pyver=$(python3 -c "import sys; print('{}.{}'.format(*sys.version_info[:2]))")
|
||||
python3 setup.py install --prefix=/usr --root="$srcdir"/tmp_install --optimize=1
|
||||
PYTHONPATH="$srcdir"/tmp_install/usr/lib/python$pyver/site-packages pytest || true
|
||||
}
|
||||
|
||||
package() {
|
||||
python3 setup.py install --prefix=/usr --root="$pkgdir" --optimize=1
|
||||
install -Dm644 LICENSE -t "$pkgdir"/usr/share/licenses/$pkgname/
|
||||
}
|
||||
sha512sums="
|
||||
2aa080fbc918d5d360dcb086a8c529545514dd429649d99833425f92fa06a3a094cf3139f8ed00827fed358f0fa463b74c267e593ac14e5aadc299d64206ac8e py3-xmlsec-1.3.13.tar.gz
|
||||
9155a2435d832b4dcd0260616f52eec148dca1dade76a89c23e10f017e4140024ef042b6b10c5b9435fcbf52e7dc4f7e5764dc7f5bdd7595c27b3106fab942cf 253_pkcs11-support.patch
|
||||
d901c09a49145250dd9325476c1356f820519b9248195240584f6de62b8084205f698501a1f48e42b63fe4c7b169dcb65540edc03724ef7e9297b45216c5b481 264_xmlsec3-support.patch
|
||||
a47d4d44a518939e72ff7213c6dcd2c391ff5e1bb2be6a1b0d0ab1ef6ed0155d81c26b8f844285883db2f8954b122e48a9b1bccf343a5344af7f1723b3fdd78d 280_fix-function-deprecation.patch
|
||||
"
|
Loading…
Reference in a new issue