Compare commits

..

No commits in common. "a10s" and "c9" have entirely different histories.
a10s ... c9

15 changed files with 312 additions and 153 deletions

18
.gitignore vendored
View File

@ -1,17 +1 @@
/awscrt-0.16.13.tar.gz SOURCES/awscrt-0.27.2.tar.gz
/awscrt-0.16.16.tar.gz
/awscrt-0.16.17.tar.gz
/awscrt-0.16.18.tar.gz
/awscrt-0.16.19.tar.gz
/awscrt-0.16.21.tar.gz
/awscrt-0.16.24.tar.gz
/awscrt-0.16.25.tar.gz
/awscrt-0.17.0.tar.gz
/awscrt-0.18.0.tar.gz
/awscrt-0.19.1.tar.gz
/awscrt-0.19.2.tar.gz
/awscrt-0.19.3.tar.gz
/awscrt-0.19.6.tar.gz
/awscrt-0.19.13.tar.gz
/awscrt-0.19.19.tar.gz
/awscrt-0.20.2.tar.gz

View File

@ -1,29 +0,0 @@
upstream_package_name: awscrt
downstream_package_name: python-awscrt
upstream_project_url: https://github.com/awslabs/aws-crt-python
upstream_tag_template: v{version}
specfile_path: python-awscrt.spec
copy_upstream_release_description: true
jobs:
- job: pull_from_upstream
trigger: release
dist_git_branches:
- fedora-all
- epel9
- job: koji_build
trigger: commit
dist_git_branches:
- fedora-all
- epel9
- job: bodhi_update
trigger: commit
dist_git_branches:
- fedora-branched # rawhide updates are created automatically
- epel9

1
.python-awscrt.metadata Normal file
View File

@ -0,0 +1 @@
9951436161fdbf91db142b85d6aa208614dc2b0b SOURCES/awscrt-0.27.2.tar.gz

View File

@ -1,3 +0,0 @@
# python-awscrt
Python bindings for the AWS Common Runtime

View File

@ -1,3 +0,0 @@
This repository is maintained by packit.
https://packit.dev/
The file was generated using packit 0.87.1.post1.dev11+gd1f7091b.

36
SOURCES/der-c.patch Normal file
View File

@ -0,0 +1,36 @@
--- a/crt/aws-c-cal/source/der.c 2025-08-29 10:43:04.487705098 +0100
+++ B/crt/aws-c-cal/source/der.c 2025-08-29 14:27:00.649373755 +0100
@@ -80,21 +80,28 @@
if (len_bytes & 0x80) {
len_bytes &= 0x7f;
switch (len_bytes) {
- case 1:
- if (!aws_byte_cursor_read_u8(cur, (uint8_t *)&len)) {
+ case 1: {
+ uint8_t len8;
+ if (!aws_byte_cursor_read_u8(cur, &len8)) {
return aws_raise_error(AWS_ERROR_CAL_MALFORMED_ASN1_ENCOUNTERED);
}
+ len = len8;
break;
- case 2:
- if (!aws_byte_cursor_read_be16(cur, (uint16_t *)&len)) {
+ }
+ case 2: {
+ uint16_t len16;
+ if (!aws_byte_cursor_read_be16(cur, &len16)) {
return aws_raise_error(AWS_ERROR_CAL_MALFORMED_ASN1_ENCOUNTERED);
}
+ len = len16;
break;
- case 4:
+ }
+ case 4: {
if (!aws_byte_cursor_read_be32(cur, &len)) {
return aws_raise_error(AWS_ERROR_CAL_MALFORMED_ASN1_ENCOUNTERED);
}
break;
+ }
default:
return aws_raise_error(AWS_ERROR_CAL_MALFORMED_ASN1_ENCOUNTERED);
}

View File

@ -0,0 +1,29 @@
diff --git a/crt/s2n/crypto/s2n_fips.c b/crt/s2n/crypto/s2n_fips.c
index 13f9f77c0..b8af2e36e 100644
--- a/crt/s2n/crypto/s2n_fips.c
+++ b/crt/s2n/crypto/s2n_fips.c
@@ -57,15 +57,15 @@ int s2n_fips_init(void)
{
s2n_fips_mode_enabled = s2n_libcrypto_is_fips();
- /* When using Openssl, ONLY 3.0 currently supports FIPS.
- * openssl-1.0.2-fips is no longer supported.
- * openssl >= 3.5 will likely have a FIPS 140-3 certificate instead of a
- * FIPS 140-2 certificate, which will require additional review in order
- * to properly integrate.
- */
-#if defined(OPENSSL_FIPS) || S2N_OPENSSL_VERSION_AT_LEAST(3, 5, 0)
- POSIX_ENSURE(!s2n_fips_mode_enabled, S2N_ERR_FIPS_MODE_UNSUPPORTED);
-#endif
+// /* When using Openssl, ONLY 3.0 currently supports FIPS.
+// * openssl-1.0.2-fips is no longer supported.
+// * openssl >= 3.5 will likely have a FIPS 140-3 certificate instead of a
+// * FIPS 140-2 certificate, which will require additional review in order
+// * to properly integrate.
+// */
+// #if defined(OPENSSL_FIPS) || S2N_OPENSSL_VERSION_AT_LEAST(3, 5, 0)
+// POSIX_ENSURE(!s2n_fips_mode_enabled, S2N_ERR_FIPS_MODE_UNSUPPORTED);
+// #endif
return S2N_SUCCESS;
}

View File

@ -0,0 +1,58 @@
diff --git a/test/test_crypto.py b/test/test_crypto.py
index 628900f..7f2296d 100644
--- a/test/test_crypto.py
+++ b/test/test_crypto.py
@@ -236,15 +236,11 @@ class TestCredentials(NativeResourceTest):
def test_rsa_signing_roundtrip(self):
param_list = [RSASignatureAlgorithm.PKCS1_5_SHA256,
- RSASignatureAlgorithm.PSS_SHA256,
- RSASignatureAlgorithm.PKCS1_5_SHA1]
+ RSASignatureAlgorithm.PSS_SHA256]
for p in param_list:
with self.subTest(msg="RSA Signing Roundtrip using algo p", p=p):
- if (p == RSASignatureAlgorithm.PKCS1_5_SHA1):
- h = Hash.sha1_new()
- else:
- h = Hash.sha256_new()
+ h = Hash.sha256_new()
h.update(b'totally original test string')
digest = h.digest()
@@ -257,15 +253,11 @@ class TestCredentials(NativeResourceTest):
def test_rsa_signing_roundtrip_pkcs8(self):
param_list = [RSASignatureAlgorithm.PKCS1_5_SHA256,
- RSASignatureAlgorithm.PSS_SHA256,
- RSASignatureAlgorithm.PKCS1_5_SHA1]
+ RSASignatureAlgorithm.PSS_SHA256]
for p in param_list:
with self.subTest(msg="RSA Signing Roundtrip using algo p", p=p):
- if (p == RSASignatureAlgorithm.PKCS1_5_SHA1):
- h = Hash.sha1_new()
- else:
- h = Hash.sha256_new()
+ h = Hash.sha256_new()
h.update(b'totally original test string')
digest = h.digest()
@@ -275,15 +267,11 @@ class TestCredentials(NativeResourceTest):
def test_rsa_signing_roundtrip_der(self):
param_list = [RSASignatureAlgorithm.PKCS1_5_SHA256,
- RSASignatureAlgorithm.PSS_SHA256,
- RSASignatureAlgorithm.PKCS1_5_SHA1]
+ RSASignatureAlgorithm.PSS_SHA256]
for p in param_list:
with self.subTest(msg="RSA Signing Roundtrip using algo p", p=p):
- if (p == RSASignatureAlgorithm.PKCS1_5_SHA1):
- h = Hash.sha1_new()
- else:
- h = Hash.sha256_new()
+ h = Hash.sha256_new()
h.update(b'totally original test string')
digest = h.digest()

View File

@ -0,0 +1,20 @@
diff --git a/test/test_http_client.py b/test/test_http_client.py
index f79f39a..7498a96 100644
--- a/test/test_http_client.py
+++ b/test/test_http_client.py
@@ -353,6 +353,7 @@ class TestClient(NativeResourceTest):
tls_connection_options=tls_conn_opt)
return connection_future.result(self.timeout)
+ @unittest.skip("Requires network")
def test_h2_client(self):
url = urlparse("https://d1cz66xoahf9cl.cloudfront.net/http_test_doc.txt")
connection = self._new_h2_client_connection(url)
@@ -375,6 +376,7 @@ class TestClient(NativeResourceTest):
self.assertEqual(None, connection.close().exception(self.timeout))
+ @unittest.skip("Requires network")
def test_h2_manual_write_exception(self):
url = urlparse("https://d1cz66xoahf9cl.cloudfront.net/http_test_doc.txt")
connection = self._new_h2_client_connection(url)

26
SOURCES/websockets.patch Normal file
View File

@ -0,0 +1,26 @@
diff --git a/test/test_websocket.py b/test/test_websocket.py
index fcbcedb..ebebbcb 100644
--- a/test/test_websocket.py
+++ b/test/test_websocket.py
@@ -122,6 +122,7 @@ class WebSocketServer:
# that the asyncio server thread has finished startup.
self._server_started_event = threading.Event()
self._server_thread = threading.Thread(target=self._run_server_thread)
+ self._current_connection = None
def __enter__(self):
# main thread is entering the `with` block: start the server...
@@ -179,6 +180,13 @@ class WebSocketServer:
self._current_connection = None
def send_async(self, msg):
+ # Wait for a connection to be established before trying to send
+ max_wait = time() + TIMEOUT
+ while self._current_connection is None:
+ if time() > max_wait:
+ raise RuntimeError("Timeout waiting for WebSocket connection to be established")
+ sleep(0.01)
+
asyncio.run_coroutine_threadsafe(self._current_connection.send(msg), self._server_loop)

141
SPECS/python-awscrt.spec Normal file
View File

@ -0,0 +1,141 @@
%global desc %{expand:
Python bindings for the AWS Common Runtime}
Name: python-awscrt
Version: 0.27.2
Release: 2%{?dist}
Summary: Python bindings for the AWS Common Runtime
# All files are licensed under Apache-2.0, except:
# - crt/aws-c-common/include/aws/common/external/cJSON.h is MIT
# - crt/aws-c-common/source/external/cJSON.c is MIT
# - crt/s2n/pq-crypto/kyber_r3/KeccakP-brg_endian_avx2.h is BSD-3-Clause
License: Apache-2.0 AND MIT AND BSD-3-Clause
URL: https://github.com/awslabs/aws-crt-python
Source0: %{pypi_source awscrt}
# two tests require internet connection, skip them
Patch0: skip-tests-requiring-network.patch
# SHA1 is deprecated - remove it from tests
Patch1: skip-SHA1-in-test_crypto.patch
# https://github.com/awslabs/aws-c-cal/pull/225
Patch2: der-c.patch
# websockets test fail fix
Patch3: websockets.patch
# Remove FIPS version check to build with OpenSSL 3.x
Patch4: s2n-remove-fips-version-check.patch
BuildRequires: python%{python3_pkgversion}-devel
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: cmake
BuildRequires: openssl-devel
BuildRequires: python%{python3_pkgversion}-websockets
%description
%{desc}
%package -n python%{python3_pkgversion}-awscrt
Summary: %{summary}
%description -n python%{python3_pkgversion}-awscrt
%{desc}
%prep
%autosetup -p1 -n awscrt-%{version}
# relax version requirements
sed -i -e 's/setuptools>=75\.3\.1/setuptools/' -e 's/wheel>=0\.45\.1/wheel/' pyproject.toml
# Remove websocket test for now
# TODO: fix the test properly
rm -f test/test_websocket.py
# fix for osci.rpmdeplint test - package builds with the name 'unknown'
sed -i '/setuptools\.setup(/a\ name="awscrt",' setup.py
%generate_buildrequires
%pyproject_buildrequires
%build
export AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO=1
%pyproject_wheel
%install
%pyproject_install
%pyproject_save_files _awscrt awscrt
%check
PYTHONPATH="%{buildroot}%{python3_sitearch}:%{buildroot}%{python3_sitelib}" %{python3} -m unittest
%files -n python%{python3_pkgversion}-awscrt -f %{pyproject_files}
%doc README.md
%changelog
* Wed Nov 26 2025 Kseniia Nivnia <knivnia@redhat.com> - 0.27.2-2
- Add patch fixing FIPS mode crash in awscli2
Resolves: RHEL-131280
* Fri Sep 05 2025 Kseniia Nivnia <knivnia@redhat.com> - 0.27.2-1
- Update to 0.27.2
Resolves: RHEL-113230
* Mon Apr 29 2024 Major Hayden <major@redhat.com> - 0.20.5-3
- Removing extra pkcs11 source now that upstream switched to public domain headers
* Mon Apr 01 2024 Major Hayden <major@redhat.com> - 0.20.5-2
- Bump revision for new build
* Wed Mar 27 2024 Major Hayden <major@redhat.com> - 0.20.5-1
- Update to 0.20.5
* Tue Mar 19 2024 Major Hayden <major@redhat.com> - 0.20.2-4
- Bump revision number for new build
* Tue Feb 13 2024 Major Hayden <major@redhat.com> - 0.20.2-3
- Remove the third party license file from excluded pkcs11.h
* Mon Feb 12 2024 Major Hayden <major@redhat.com> - 0.20.2-2
- Replacing upstream's pkcs11.h with Simo's public domain version.
* Tue Jan 02 2024 Packit <hello@packit.dev> - 0.20.2-1
- [packit] 0.20.2 upstream release
- Resolves rhbz#2254450
* Wed Dec 06 2023 Nikola Forró <nforro@redhat.com> - 0.19.19-2
- Add Packit config
* Thu Nov 30 2023 Packit <hello@packit.dev> - 0.19.19-1
- [packit] 0.19.19 upstream release
- Resolves rhbz#2250726
* Fri Nov 17 2023 Packit <hello@packit.dev> - 0.19.13-1
- [packit] 0.19.13 upstream release
- Resolves rhbz#2247105
* Wed Oct 25 2023 Packit <hello@packit.dev> - 0.19.6-1
- [packit] 0.19.6 upstream release
- Resolves rhbz#2211521 Upstream tag: v0.19.6 Upstream commit: b83949d0
* Mon Oct 16 2023 Packit <hello@packit.dev> - 0.19.3-1
- [packit] 0.19.3 upstream release
* Mon Oct 02 2023 Packit <hello@packit.dev> - 0.19.2-1
- [packit] 0.19.2 upstream release
* Fri Aug 25 2023 Nikola Forró <nforro@redhat.com> - 0.18.0-1
- Initial import for EPEL 9

View File

@ -1,8 +0,0 @@
* Wed Apr 26 2023 Nikola Forró <nforro@redhat.com> - 0.16.16-1
- New upstream release 0.16.16
* Wed Mar 22 2023 Nikola Forró <nforro@redhat.com> - 0.16.13-2
- Workaround a crash on %%ix86
* Thu Mar 16 2023 Nikola Forró <nforro@redhat.com> - 0.16.13-1
- Initial package

View File

@ -1,80 +0,0 @@
%global desc %{expand:
Python bindings for the AWS Common Runtime}
Name: python-awscrt
Version: 0.20.2
Release: %autorelease
Summary: Python bindings for the AWS Common Runtime
# All files are licensed under Apache-2.0, except:
# - crt/aws-c-common/include/aws/common/external/cJSON.h is MIT
# - crt/aws-c-common/source/external/cJSON.c is MIT
# - crt/s2n/pq-crypto/kyber_r3/KeccakP-brg_endian_avx2.h is BSD-3-Clause
License: Apache-2.0 AND MIT AND BSD-3-Clause
URL: https://github.com/awslabs/aws-crt-python
Source0: %{pypi_source awscrt}
# one test requires internet connection, skip it
Patch0: skip-test-requiring-network.patch
BuildRequires: python%{python3_pkgversion}-devel
BuildRequires: python%{python3_pkgversion}-wheel
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: cmake
BuildRequires: openssl-devel
BuildRequires: python%{python3_pkgversion}-websockets
# https://bugzilla.redhat.com/show_bug.cgi?id=2180988
ExcludeArch: s390x
%description
%{desc}
%package -n python%{python3_pkgversion}-awscrt
Summary: %{summary}
%description -n python%{python3_pkgversion}-awscrt
%{desc}
%prep
%autosetup -p1 -n awscrt-%{version}
%generate_buildrequires
%pyproject_buildrequires
%build
%ifarch %{ix86}
# disable SSE2 instructions to prevent a crash in aws-c-common thread handling
# probably caused by a compiler bug
export CFLAGS="%{optflags} -mno-sse2"
%endif
export AWS_CRT_BUILD_USE_SYSTEM_LIBCRYPTO=1
%pyproject_wheel
%install
%pyproject_install
%pyproject_save_files _awscrt awscrt
%check
PYTHONPATH="%{buildroot}%{python3_sitearch}:%{buildroot}%{python3_sitelib}" %{python3} -m unittest
%files -n python%{python3_pkgversion}-awscrt -f %{pyproject_files}
%doc README.md
%changelog
%autochangelog

View File

@ -1,12 +0,0 @@
diff --git a/test/test_http_client.py b/test/test_http_client.py
index 5af87b6..dd2631a 100644
--- a/test/test_http_client.py
+++ b/test/test_http_client.py
@@ -347,6 +347,7 @@ class TestClient(NativeResourceTest):
tls_connection_options=tls_conn_opt)
return connection_future.result(self.timeout)
+ @unittest.skip("Requires network")
def test_h2_client(self):
url = urlparse("https://d1cz66xoahf9cl.cloudfront.net/http_test_doc.txt")
connection = self._new_h2_client_connection(url)

View File

@ -1 +0,0 @@
SHA512 (awscrt-0.20.2.tar.gz) = 61b90100d2f0a96f341e5bb51e0b5d9f8f5b1e8a9b1d476e6acdfc447beddc9ba103b60a3c62cbf7c1e0b6ab533beeb02bb6b555e5dc83148d51ca2238859a44