diff --git a/user/py3-python3-saml/APKBUILD b/user/py3-python3-saml/APKBUILD deleted file mode 100644 index 450d060..0000000 --- a/user/py3-python3-saml/APKBUILD +++ /dev/null @@ -1,30 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -pkgname=py3-python3-saml -_pkgreal=python3-saml -pkgver=1.16.0 -pkgrel=1 -pkgdesc="Saml Python Toolkit. Add SAML support to your Python software using this library" -url="http://packages.python.org/pypi/python3-saml" -arch="noarch" -license="MIT" -depends="py3-xmlsec py3-isodate py3-lxml" -makedepends="py3-setuptools py3-gpep517 py3-wheel poetry" -source="$pkgname-$pkgver.tar.gz::https://pypi.io/packages/source/p/python3-saml/python3-saml-$pkgver.tar.gz" -builddir="$srcdir/$_pkgreal-$pkgver" -subpackages="$pkgname-pyc" - -build() { - gpep517 build-wheel \ - --wheel-dir .dist \ - --output-fd 3 3>&1 >&2 -} - -package() { - python3 -m installer -d "$pkgdir" \ - .dist/*.whl -} - -sha512sums=" -715c96f701be3de9002a37198d01715519f11173d37d2870b8d6f20e007440368f76340abfa17ad8556560296a8dfaa999f1774ccb5dd3d9b04b125afc06ac31 py3-python3-saml-1.16.0.tar.gz -" diff --git a/user/py3-xmlsec/253_pkcs11-support.patch b/user/py3-xmlsec/253_pkcs11-support.patch deleted file mode 100644 index e8be41d..0000000 --- a/user/py3-xmlsec/253_pkcs11-support.patch +++ /dev/null @@ -1,925 +0,0 @@ -From a7f95d55cd660d1a212fa76a527063b3b7dbe8bb Mon Sep 17 00:00:00 2001 -From: Dan Vella -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 -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 -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 -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 @@ -+ -+ -+ -+ -+ Hello, World! -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+HjY8ilZAIEM2tBbPn5mYO1ieIX4= -+ -+ -+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== -+ -+ -+ -+ -+ -+ -+Test Issuer -+1 -+ -+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 -+ -+ -+ -+ -+ -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 -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 `_ 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 -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 diff --git a/user/py3-xmlsec/264_xmlsec3-support.patch b/user/py3-xmlsec/264_xmlsec3-support.patch deleted file mode 100644 index 12096a7..0000000 --- a/user/py3-xmlsec/264_xmlsec3-support.patch +++ /dev/null @@ -1,105 +0,0 @@ -From 5f57f2eac756df213e83a2fdb452057909e2dd21 Mon Sep 17 00:00:00 2001 -From: David Adamec -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 -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 - #include - -+// 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 -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 diff --git a/user/py3-xmlsec/280_fix-function-deprecation.patch b/user/py3-xmlsec/280_fix-function-deprecation.patch deleted file mode 100644 index eab6f1d..0000000 --- a/user/py3-xmlsec/280_fix-function-deprecation.patch +++ /dev/null @@ -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; - diff --git a/user/py3-xmlsec/APKBUILD b/user/py3-xmlsec/APKBUILD deleted file mode 100644 index 64489f0..0000000 --- a/user/py3-xmlsec/APKBUILD +++ /dev/null @@ -1,56 +0,0 @@ -# Contributor: Antoine Martin (ayakael) -# Maintainer: Antoine Martin (ayakael) -_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 -"