From 07a819b3a8e1ce98bfc292b0ee8a76cb713e9645 Mon Sep 17 00:00:00 2001 From: Markus Ottela Date: Mon, 29 Apr 2024 04:33:48 +0300 Subject: [PATCH] 1.24.04 --- LICENSE-3RD-PARTY | 122 +++--- README.md | 30 +- dd.py | 2 +- install.sh | 498 ++++++++++------------ install.sh.asc | 26 +- launchers/TFC-Dev.desktop | 2 +- launchers/TFC-Local-test.desktop | 2 +- launchers/TFC-RP-Qubes.desktop | 2 +- launchers/TFC-RP-Tails.desktop | 6 +- launchers/TFC-RP.desktop | 2 +- launchers/TFC-RxP-Qubes.desktop | 2 +- launchers/TFC-RxP.desktop | 2 +- launchers/TFC-TxP-Qubes.desktop | 2 +- launchers/TFC-TxP.desktop | 2 +- launchers/tfc-qubes-receiver | 2 +- launchers/tfc-qubes-relay | 2 +- launchers/tfc-qubes-transmitter | 2 +- pubkey.asc | 50 +-- qubes/service.sh | 2 +- qubes/writer.py | 2 +- relay.py | 2 +- requirements-dev.txt | 69 ++- requirements-pre.txt | 5 - requirements-relay-tails.txt | 150 ------- requirements-relay.txt | 231 +++++----- requirements-venv.txt | 23 - requirements.txt | 115 ++--- src/__init__.py | 2 +- src/common/__init__.py | 2 +- src/common/crypto.py | 469 ++------------------ src/common/database.py | 2 +- src/common/db_contacts.py | 2 +- src/common/db_groups.py | 2 +- src/common/db_keys.py | 2 +- src/common/db_logs.py | 2 +- src/common/db_masterkey.py | 2 +- src/common/db_onion.py | 2 +- src/common/db_settings.py | 2 +- src/common/encoding.py | 2 +- src/common/exceptions.py | 2 +- src/common/gateway.py | 2 +- src/common/input.py | 2 +- src/common/misc.py | 8 +- src/common/output.py | 2 +- src/common/path.py | 2 +- src/common/statics.py | 8 +- src/common/word_list.py | 2 +- src/receiver/__init__.py | 2 +- src/receiver/commands.py | 2 +- src/receiver/commands_g.py | 2 +- src/receiver/files.py | 2 +- src/receiver/key_exchanges.py | 2 +- src/receiver/messages.py | 2 +- src/receiver/output_loop.py | 2 +- src/receiver/packet.py | 2 +- src/receiver/receiver_loop.py | 2 +- src/receiver/windows.py | 2 +- src/relay/__init__.py | 2 +- src/relay/client.py | 2 +- src/relay/commands.py | 2 +- src/relay/diffs.py | 2 +- src/relay/onion.py | 9 +- src/relay/server.py | 2 +- src/relay/tcb.py | 2 +- src/transmitter/__init__.py | 2 +- src/transmitter/commands.py | 2 +- src/transmitter/commands_g.py | 2 +- src/transmitter/contact.py | 2 +- src/transmitter/files.py | 2 +- src/transmitter/input_loop.py | 2 +- src/transmitter/key_exchanges.py | 2 +- src/transmitter/packet.py | 2 +- src/transmitter/sender_loop.py | 2 +- src/transmitter/traffic_masking.py | 2 +- src/transmitter/user_input.py | 2 +- src/transmitter/window_mock.py | 2 +- src/transmitter/windows.py | 2 +- tests/__init__.py | 2 +- tests/common/__init__.py | 2 +- tests/common/test_crypto.py | 23 +- tests/common/test_database.py | 2 +- tests/common/test_db_contacts.py | 2 +- tests/common/test_db_groups.py | 2 +- tests/common/test_db_keys.py | 2 +- tests/common/test_db_logs.py | 2 +- tests/common/test_db_masterkey.py | 20 +- tests/common/test_db_onion.py | 2 +- tests/common/test_db_settings.py | 2 +- tests/common/test_encoding.py | 2 +- tests/common/test_exceptions.py | 2 +- tests/common/test_gateway.py | 2 +- tests/common/test_input.py | 2 +- tests/common/test_misc.py | 2 +- tests/common/test_output.py | 2 +- tests/common/test_path.py | 2 +- tests/common/test_statics.py | 2 +- tests/common/test_word_list.py | 2 +- tests/mock_classes.py | 2 +- tests/receiver/__init__.py | 2 +- tests/receiver/test_commands.py | 13 +- tests/receiver/test_commands_g.py | 2 +- tests/receiver/test_files.py | 2 +- tests/receiver/test_key_exchanges.py | 2 +- tests/receiver/test_messages.py | 2 +- tests/receiver/test_output_loop.py | 2 +- tests/receiver/test_packet.py | 2 +- tests/receiver/test_receiver_loop.py | 2 +- tests/receiver/test_windows.py | 2 +- tests/relay/__init__.py | 2 +- tests/relay/test_client.py | 2 +- tests/relay/test_commands.py | 2 +- tests/relay/test_diffs.py | 2 +- tests/relay/test_onion.py | 2 +- tests/relay/test_server.py | 2 +- tests/relay/test_tcb.py | 2 +- tests/test_dd.py | 2 +- tests/transmitter/__init__.py | 2 +- tests/transmitter/test_commands.py | 18 +- tests/transmitter/test_commands_g.py | 2 +- tests/transmitter/test_contact.py | 2 +- tests/transmitter/test_files.py | 2 +- tests/transmitter/test_input_loop.py | 2 +- tests/transmitter/test_key_exchanges.py | 2 +- tests/transmitter/test_packet.py | 2 +- tests/transmitter/test_sender_loop.py | 2 +- tests/transmitter/test_traffic_masking.py | 2 +- tests/transmitter/test_user_input.py | 2 +- tests/transmitter/test_window_mock.py | 2 +- tests/transmitter/test_windows.py | 2 +- tests/utils.py | 2 +- tfc.py | 5 +- tfc.yml | 2 +- uninstall.sh | 2 +- 133 files changed, 710 insertions(+), 1412 deletions(-) delete mode 100644 requirements-pre.txt delete mode 100755 requirements-relay-tails.txt delete mode 100755 requirements-venv.txt diff --git a/LICENSE-3RD-PARTY b/LICENSE-3RD-PARTY index d95975d..0b839ee 100755 --- a/LICENSE-3RD-PARTY +++ b/LICENSE-3RD-PARTY @@ -6,45 +6,44 @@ by the TFC installer. applies to: - The Click CLI toolkit, Copyright © 2014, the Pallets team - (https://github.com/pallets/click) + (https://github.com/pallets/click/blob/main/LICENSE.rst) (See 3rd party licenses at https://github.com/pallets/click/blob/master/LICENSE.rst) - The cryptography library, Copyright © Individual contributors - (https://github.com/pyca/cryptography) + (https://github.com/pyca/cryptography/blob/main/LICENSE.BSD) - The Flask web application framework, Copyright © 2010, the Pallets team - (https://github.com/pallets/flask) + (https://github.com/pallets/flask/blob/main/LICENSE.rst) - - The Internationalized Domain Names in Applications (IDNA) library, Copyright © 2013-2018, Kim Davies - (https://github.com/kjd/idna) + - The Internationalized Domain Names in Applications (IDNA) library, Copyright © 2013-2023, Kim Davies + (https://github.com/kjd/idna/blob/master/LICENSE.md) (See 3rd party licenses at https://github.com/kjd/idna/blob/master/LICENSE.rst) - The itsdangerous library, Copyright © 2011, the Pallets team - (https://github.com/pallets/itsdangerous) + (https://github.com/pallets/itsdangerous/blob/main/LICENSE.rst) - - The Jinja2 template engine, Copyright © 2009, the Jinja Team, see AUTHORS for more details. - (https://github.com/pallets/jinja) + - The Jinja2 template engine, Copyright © 2007, the Jinja Team, see AUTHORS for more details. + (https://github.com/pallets/jinja/blob/main/LICENSE.rst) - The MarkupSafe library, Copyright © 2010, the Pallets team - (https://github.com/pallets/markupsafe) + (https://github.com/pallets/markupsafe/blob/main/LICENSE.rst) - - The pycparser C parser, Copyright © 2008-2017, Eli Bendersky - (https://github.com/eliben/pycparser) + - The pycparser C parser, Copyright © 2008-2022, Eli Bendersky + (https://github.com/eliben/pycparser/blob/main/LICENSE) - - The pySerial library, Copyright © 2001-2017, Chris Liechti - (https://github.com/pyserial/pyserial) + - The pySerial library, Copyright © 2001-2020, Chris Liechti + (https://github.com/pyserial/pyserial/blob/master/LICENSE.txt) - The PySocks proxy client, Copyright © 2006, Dan-Haim (https://github.com/Anorov/PySocks) - The Tor application, Copyright © 2001-2004, Roger Dingledine Copyright © 2004-2006, Roger Dingledine, Nick Mathewson - Copyright © 2007-2023, The Tor Project, Inc. - (https://torproject.org) - (See the Tor licence and 3rd party licences at https://gitweb.torproject.org/tor.git/tree/LICENSE) + Copyright © 2007-2019, The Tor Project, Inc. + (https://gitlab.torproject.org/tpo/core/tor/-/blob/HEAD/LICENSE) - The Werkzeug library, Copyright © 2007, the Pallets team - (https://github.com/pallets/werkzeug) + (https://github.com/pallets/werkzeug/blob/main/LICENSE.rst) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -81,49 +80,48 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. applies to: - The appdirs library, Copyright (c) 2010 ActiveState Software Inc. - (https://github.com/ActiveState/appdirs) + (https://github.com/ActiveState/appdirs/blob/master/LICENSE.txt) - The Argon2 library, Copyright © 2015, Hynek Schlawack - (https://github.com/hynek/argon2_cffi) + (https://github.com/hynek/argon2-cffi/blob/main/LICENSE) - The src.common.encoding Base58 implementation, Copyright © 2015, David Keijser - (https://github.com/keis/base58) + (https://github.com/keis/base58/blob/master/COPYING) - - The cffi library, Copyright © 2012-2023, Armin Rigo, Maciej Fijalkowski - (https://bitbucket.org/cffi/cffi/overview) + - The cffi library, Copyright © 2012-2024, Armin Rigo, Maciej Fijalkowski + (https://github.com/python-cffi/cffi/blob/main/LICENSE) - - The Mypy static type checker, Copyright © 2015-2016, Jukka Lehtosalo and contributors - (https://github.com/python/mypy) - (See 3rd party licenses at https://github.com/python/mypy/blob/master/LICENSE) + - The Mypy static type checker, + Copyright © 2015-2016, Jukka Lehtosalo and contributors + Copyright © 2015-2023 Dropbox, Inc. + (https://github.com/python/mypy/blob/master/LICENSE) - - The pip package installer, Copyright © 2008-2023, The pip developers (see AUTHORS.txt file) - (https://github.com/pypa/pip) + - The pip package installer, Copyright © 2008-present, The pip developers (see AUTHORS.txt file) + (https://github.com/pypa/pip/blob/main/LICENSE.txt) - - The pytest framework, Copyright © 2004-2023, Holger Krekel and others - (https://github.com/pytest-dev/pytest) + - The pytest framework, Copyright © 2004, Holger Krekel and others + (https://github.com/pytest-dev/pytest/blob/main/LICENSE) - The pytest-cov plugin, Copyright © 2010, Meme Dough - (https://github.com/pytest-dev/pytest-cov) + (https://github.com/pytest-dev/pytest-cov/blob/master/LICENSE) - - The pytest-xdist plugin, Copyright © Individual contributors - (https://github.com/pytest-dev/pytest-xdist) + - The pytest-xdist plugin, Copyright © 2010 Holger Krekel and contributors. + (https://github.com/pytest-dev/pytest-xdist/blob/master/LICENSE) - - The Setuptools build system, Copyright © 2016, Jason R Coombs - (https://github.com/pypa/setuptools) + - The Setuptools build system, Copyright © Jason R. Coombs + (https://github.com/pypa/setuptools/blob/main/LICENSE) - - The Six library, Copyright © 2010-2023, Benjamin Peterson - (https://github.com/benjaminp/six) + - The Six library, Copyright © 2010-2020, Benjamin Peterson + (https://github.com/benjaminp/six/blob/master/LICENSE) - - The urllib3 library, Copyright © 2008-2023, Andrey Petrov and contributors (see CONTRIBUTORS.txt) - (https://github.com/urllib3/urllib3) + - The urllib3 library, Copyright © 2008-2020, Andrey Petrov and contributors (see CONTRIBUTORS.txt) + (https://github.com/urllib3/urllib3/blob/main/LICENSE.txt) - - The virtualenv tool, Copyright © 2007, Ian Bicking and Contributors - Copyright © 2009, Ian Bicking, The Open Planning Project - Copyright © 2011-2016, The virtualenv developers - (https://github.com/pypa/virtualenv) + - The virtualenv tool, Copyright © 202x, The virtualenv developers + (https://github.com/pypa/virtualenv/blob/main/LICENSE) - The zipp library. Copyright © Jason R. Coombs - (https://github.com/jaraco/zipp) + (https://github.com/jaraco/zipp/blob/main/LICENSE) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -150,8 +148,8 @@ SOFTWARE. ISC License applies to: - - The libsodium library, Copyright © 2013-2023, Frank Denis - (https://github.com/jedisct1/libsodium) + - The libsodium library, Copyright © 2013-2024, Frank Denis + (https://github.com/jedisct1/libsodium/blob/master/LICENSE) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -179,7 +177,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. applies to: - The Git application, Copyright © Linus Torvalds - (https://git.kernel.org/pub/scm/git/git.git/tree/) + (https://git.kernel.org/pub/scm/git/git.git/tree/COPYING) - The net-tools application, Copyright 1996 © Bernd Eckenfels (https://sourceforge.net/projects/net-tools/) @@ -531,12 +529,12 @@ Public License instead of this License. of this license document, but changing it is not allowed. applies to: - - The src.relay.onion Tor class, Copyright © 2014-2023, Micah Lee - (https://github.com/micahflee/onionshare) + - The src.relay.onion Tor class, Copyright © 2014-2022, Micah Lee + (https://github.com/onionshare/onionshare/blob/main/LICENSE.txt) - - gnome-terminal, Copyright © Guilherme de S. Pastore , - Havoc Pennington , - Mariano Suárez-Alvarez + - gnome-terminal, Copyright © Guilherme de S. Pastore , + Havoc Pennington , + Mariano Suárez-Alvarez (https://gitlab.gnome.org/GNOME/gnome-terminal) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1217,17 +1215,17 @@ Public License instead of this License. But first, please read applies to: - The importlib_metadata library, Copyright © 2017-2019 Jason R. Coombs, Barry Warsaw - (https://gitlab.com/python-devs/importlib_metadata) + (https://gitlab.com/python-devs/importlib_metadata/-/blob/master/LICENSE?ref_type=heads) - The OpenSSL library, Copyright © 1995-1998, Eric A. Young, Tim J. Hudson - Copyright © 1999-2018, The OpenSSL Project - (https://github.com/openssl/openssl) + Copyright © 1999-2023, The OpenSSL Project Authors + (https://github.com/openssl/openssl/blob/master/LICENSE.txt) - The PyNaCl library, Copyright © 2013, Donald Stufft and individual contributors - (https://github.com/pyca/pynacl) + (https://github.com/pyca/pynacl/blob/main/LICENSE) - - The Requests library, Copyright © 2018, Kenneth Reitz - (https://github.com/requests/requests) + - The Requests library, Copyright © MMXVIX, Kenneth Reitz + (https://github.com/psf/requests/blob/main/LICENSE) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1797,7 +1795,7 @@ Exhibit B - "Incompatible With Secondary Licenses" Notice applies to: - The Chardet library, Copyright © Daniel Blanchard - (https://github.com/chardet/chardet) + (https://github.com/chardet/chardet/blob/main/LICENSE) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -2488,19 +2486,19 @@ Library. Copyright © 2000, BeOpen.com. All Rights Reserved. - Copyright © 2001-2023, Python Software Foundation. + Copyright © 2001-2024, Python Software Foundation. All Rights Reserved. (https://www.python.org/) - - distlib library Copyright © 2023 [Python Packaging Authority Developers] - (https://bitbucket.org/pypa/distlib/src/master/) + - distlib library Copyright © 2024, Python Software Foundation + (https://bitbucket.org/pypa/distlib/src/master/LICENSE.txt) - The python3-tk library, Copyright © 2006, Matthias Klose This package was debianized by Matthias Klose on Wed, 7 Jun 2006 15:02:31 +0200. It was downloaded from https://python.org/, built by extracting the Tk and gdbm extensions from the upstream tarballs. - (https://packages.ubuntu.com/disco/python3-tk) + (https://packages.ubuntu.com/noble/python3-tk) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/README.md b/README.md index 15867a2..8c45504 100755 --- a/README.md +++ b/README.md @@ -209,25 +209,25 @@ This intermediate isolation mechanism runs on a single computer which means no h ### Supported Operating Systems #### Source/Destination Computer -- Debian 11 -- PureOS 10.0 -- *buntu 22.04 LTS +- Debian 12.5 +- PureOS 10.3 +- *buntu 24.04 LTS - Pop!_OS 22.04 LTS -- Linux Mint 21.1 -- LMDE 5 -- Zorin OS 16.2 -- Qubes 4.1.2 (Debian 11 VM) +- Linux Mint 21.3 +- LMDE 6 +- Zorin OS 17.1 +- Qubes 4.2.1 (Debian 12 VM) #### Networked Computer -- Tails 5.12 -- Debian 11 -- PureOS 10.0 -- *buntu 22.04 LTS +- Tails 6.2 +- Debian 12.5 +- PureOS 10.3 +- *buntu 24.04 LTS - Pop!_OS 22.04 LTS -- Linux Mint 21.1 -- LMDE 5 -- Zorin OS 16.2 -- Qubes 4.1.2 (Debian 11 VM) +- Linux Mint 21.3 +- LMDE 6 +- Zorin OS 17.1 +- Qubes 4.2.1 (Debian 12 VM) ### More information diff --git a/dd.py b/dd.py index 2f69c9e..9e788e0 100755 --- a/dd.py +++ b/dd.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/install.sh b/install.sh index a5d607d..615d79c 100644 --- a/install.sh +++ b/install.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # TFC - Onion-routed, endpoint secure messaging system -# Copyright (C) 2013-2023 Markus Ottela +# Copyright (C) 2013-2024 Markus Ottela # # This file is part of TFC. # @@ -25,10 +25,8 @@ INSTALL_DIR="/opt/tfc" # PIP dependency file hashes declare -A dependency_hashes -dependency_hashes['appdirs-1.4.4-py2.py3-none-any.whl']='8e6c1ea544013ea2567cda2d8b8c7b441bc50ac689aa7f95de67e3795aa083e9592c687d74fdbb37f5a75e0beab398fe47df5bced14ee9c204cfe5ecc364ef44' -dependency_hashes['appdirs-1.4.4.tar.gz']='8b0cdd9fd471d45b186aa47607691cf378dabd3edc7b7026a57bd6d6f57698e86f440818a5e23ba4288b35d6bb8cb6eb0106eae8aab09d8863ee15025d300883' -dependency_hashes['argon2_cffi-21.3.0-py3-none-any.whl']='3093f5ae0220dc4c85f741dcd413ba8b19e8b91be7d253c7f2548a1ec9ec99298b2ce7d809be16f497323ffc6733acd35eb201fadd6d91560e41901ed3c09da9' -dependency_hashes['argon2-cffi-21.3.0.tar.gz']='6cb2a075f3bb7040ee7f552d082bfa2f3df0854649d9c84fdfdb42bb4bee2133b8a35a20be2b3c887931efda12fbbb00815d8d88170b7e20b3ca19c86f97057e' +dependency_hashes['argon2_cffi-23.1.0-py3-none-any.whl']='f0d80298b5617e8ed7ae7442f582caeeb3a5450562af18df4d7b5bd7395cfa99597f5ba31128d3105ee498e6661a50fa34602df374103ea523a2d7e832d7b7d6' +dependency_hashes['argon2_cffi-23.1.0.tar.gz']='7c7730451f5ef9bb40bb5e1bbfa6e69c9718968168f3fa9b54e1020a4f805f98fba6260039bda804241717db2338479d640c7652dc26ce1a6ade076660133383' dependency_hashes['argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='c3218d723db5c8f2dbc9c737a3ce24d52291a8056b855c6e988956821894b695f2afd50b189a581e9cb5a5d1c13b9b1144be9fb6296a62681b209412caf85b42' dependency_hashes['argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='7a77d7e0becc167b7b348b19d5fc65e25fea4dd93a8e26c203b39f88691515a756a78becfb665a4aa965112a9b561be6c4461fe38db422fe20198b3139d652ff' dependency_hashes['argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='1bd48d7a11cb99cc0d8526b2dc156e025002092d1f7c60632a0470275ade2374d3be6138ecf924eae2c33fb5d29fef16729b710294cc0b8f35f50a7544d17cc5' @@ -42,114 +40,115 @@ dependency_hashes['argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_a dependency_hashes['argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='74f931f3262333e3451295075abbfe0c323beadad36ffe73b65143e906f1e8cab924601a56a3f184ca2516fedcb69dc7d8dc6ea1d0ba25bccb21476a89bc46d8' dependency_hashes['argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='740c76d800bf8bea95f800457ef03d4125b262d034e4a62e66615144a8abe35950b37fe5627553e5bc448ffe32f77ebeee5e2a04857409f53604fb30de7d8d72' dependency_hashes['argon2-cffi-bindings-21.2.0.tar.gz']='71d023ae96073ed78599e4f4e42f8efcc985cc329adeea00b14b54eaac1e6a545e6ad9b7f4cfdc60a4e9c396f95053c0ccb6f6f67d92f70265f91315fff4a390' -dependency_hashes['backports.entry_points_selectable-1.2.0-py3-none-any.whl']='758fa1b7ef45b8ebbbfb39996678a3edc5081d2fc6732afc7de790065d5a8e0611b466b93972ae53852d96eb3e62647e9f6f1aea5cf88dcfbde0a7c77557de6d' -dependency_hashes['backports.entry_points_selectable-1.2.0.tar.gz']='de2ff8d5ec54369c8847d4975fd8666f64ca7689aed2c05b7bbe9f1bc1c3816b527786410bd36f6c337e6b57bc04e714e5f77a301828049fa290b65c474c2825' -dependency_hashes['certifi-2022.12.7-py3-none-any.whl']='a7d259277af4948bf960682bc9fb45a44b9ae9a19763c8a7c313cef4aa9ec2d447d843e4a7c409e9312c8c8f863a24487a8ee4ffa6891e9b1c4e111bb4723861' -dependency_hashes['certifi-2022.12.7.tar.gz']='fd08b6bf138aa1b0a47909077642713d80f036e4b18de2c7f236a185521db3d6498a81a60b150124cc4bc21dd7e687badad4324a898117060c9e4ec93dfbdbe8' -dependency_hashes['cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='160432f1765330dab76807ec42052cf41cf33922f7b77713aeac0f99af1da8107f1cee85fdc2d13db620a8d21c24423853dd55936204109e429331828e2c576c' -dependency_hashes['cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='2c125d6b2cbfca5b3174095a6fe653fa2c58762aca9a9c46024d50ae104acdf10ddac2014ccad58ba95dbe3c4c8c2589a26292f23a28c1ffafb9aff4d60878dd' -dependency_hashes['cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl']='73eb0ea04f5f3c1e9e12a07cdb01b2095f7eb329aaaf9686c40087d8e59944acf4d616b6f774139593de176945ceb510fa86fa546d165bd0a2e8c378c23ad552' -dependency_hashes['cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl']='49ef4f829cd9b8e29964b2e0a96a05f8230a510a6ef78b3f5ad10a04e17f4a6356955325be23d2e770518d6439613ebd3e851874a5c3d0e9831018fdd60fde2c' -dependency_hashes['cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='35399df0a0ae1e10699d743e11104f0340a3d99621874cbb33594449653baf99b9ba4d633005165d7e70a2282bc46924e08ce4d7e60d17cd1fa30d0b37da9543' -dependency_hashes['cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl']='2f75e683e617abbf709328ea6500d4d688078e378f5447fd923f7ec9d1722a9a38292061b762098177d0e12b221437c8970bb8a96b0423c3b55f5c2471f71634' -dependency_hashes['cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl']='6cb0451be3df9a5d38b26ce6125d6f924811ccc49e6d7019835d7de9a8524cf8764f852fe688d085610d15b6feedec196d00edad862264b3a06d755f58586483' -dependency_hashes['cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='9569fe3f3af46c7e19b1bca00684856825bb663adf2cf669980b7c003535d278e05b53ddf85004dae01ab7ec582e721a2c8c6087612da438d0445bfd4ac1a241' -dependency_hashes['cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='04fb957a7e40d10461e290b631aeaa02eb9a304ae0397ea5948fdb9de3c8376e2030385fb5bc5696b618659022250bc9a69c4f1b8ef1e637431fbb5d23b26aec' -dependency_hashes['cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl']='d993a2f25c194c16c981583c86ee9de5374cec0602da6f681f655a18c92c51133babbca0c802d02f330009ccab5040bc0e4f7a4cb5cbb05eafa744e93f5c9c3d' -dependency_hashes['cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='c27677ab98eccac495e34e912c5626eed909b72bf8d21493a3c00bfaaec0af7847d91a97fcc5d2834305e6c3b64fb2e4d84c83f7b6dc27b6a165c9f42bb5ab08' -dependency_hashes['cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl']='9911acb9878bbc8c59734839c8cbc164e8f121a493a0589898e1b16df32c41d46d0132ac3a8a36d52cd2f0d857695a8cc6878b5cf6607fb52fad139a43089d66' -dependency_hashes['cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl']='a8cd7b5b695cb89556a7b5c0d4f7d02325d39cd59bade9e6828717623c98c4a4fd5561366549770fc8e412aba06dd5c0cdb5934a49050d182bc27d0a8b4d5601' -dependency_hashes['cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='fde7e4cc649538a32c87bd40cc6f5596d79566c6508e2fa7c30241d68d7bbd51d22b50039910c5a5196f10f4c9d499eeb884367156f156dc8285fc3a1ac103a4' -dependency_hashes['cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl']='0c9980b8f05e7105832ab5e481432f778a09631ce0fd1c09b9582a19f2b08ebd666b491ca97bb718a74feb80d3516998e3f112871ad2838fd4256e7a8eb39ebb' -dependency_hashes['cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl']='d372560553196445c3152b92f4afa011f61aa768825dd63b8ac8b9142481b1b86c97f6f683a92ae0a25e409503ff4ef159c74185dbbfe2a54b22426d9ca991f7' -dependency_hashes['cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl']='9cf0bc15c1d820e45578943222655cc8db8416e01ee825c9b107963174b20f0a0b01fd8277c28d918bcf18eeb5f45de9c1a935210f9c0a2daa5b62f70d747a45' -dependency_hashes['cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl']='bf4d6ed94fda20aa7760d2a7f0c1557ddd70dc90a2f0b2dd391bd274d37f09e298b83ff014e6f0820c6b47e70681db94a4197016bc33b89e01f9223f23403988' -dependency_hashes['cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='862d68482073f468f60d8f093a9f9b5c78562297f2eb36c84bce283a4a00e897d1731aef67b12b17551e373a668288acd32dcd49031fed5a8c621aa8c41fb0b4' -dependency_hashes['cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='36160d9d7c2f138b3cc1debe96365d57b0d204dac9cd7732ee6ab8890d9fc87700a50475336d79d60b26c1656295e26d27998cc3f9f6274613c84a64144c93b0' -dependency_hashes['cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl']='55ea36458d5c3c4a6f9b647215676fe8801704c6facdb65c55f445b4069ed3fdaf155daa8e371ed9f27937f57799e189f7402b945ec70bb85eaaa2f643c70945' -dependency_hashes['cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl']='bb85c0f097eb69d218498dd07f4a40d5bbe280b11062babe64b8d3b9a0df540c42d95e898ee409b14daefdf19c48bc499cec6bb69295d7b6a10dc151fdd6bb6c' -dependency_hashes['cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='e253ae455ca94f91ee37038c225d395b5668e26772edf26de226ccbb347c3c1b5536a358e023779fc1b06bb6c5717158d6262855445804b1206e07da3a596c7e' -dependency_hashes['cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='454522b8eef53c0d17a5eb24a8852f5d6d8360aca2a2c5cc8fca22533de548052ac4556c7cde432592b20f63cec0356be423a4a964ad046744e018821aee4ca5' -dependency_hashes['cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='f529bc89cee24cc8db6888df904f5c2bc6a6ee9b0cd52ad03493918936079875fc0968a3f5f1e93306a41e6418d3e60b2b1417c287fc29d0c12951caa0b94b98' -dependency_hashes['cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl']='2b0fba3366eaaf1a88701c5131fe6318e3c89c2969afed5fd2fffdcaea1810b91963dec37b549795267577a4f1697996846e8d027b63835e290c72b3568c8269' -dependency_hashes['cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl']='88d1f27641ecbc51d9c323a19c913818c478d4eb87d27d16426d20eb9727d5d4b23bf9551d842433820068e29082c9b9c2654f38e903b6fc761d70632731c643' -dependency_hashes['cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='7d21ff025e620b024191e0a813a678b3269b582e61944e5677eef4bd94be8456758515288d48b85b3736efb84b9d0d899d60bbf8c5d9e79f943c2b1f2f78f85d' -dependency_hashes['cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='c76d6e2f761582c4122cec8ecb302fca324b90fdb3ad1442dfd32ab8cee25c6e0519c6556911d5d068229d48578f8c1cdcad4fdfe8bf936ed6038d020633a3e7' -dependency_hashes['cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='7866aba126d54d88a0e55c70fc8587773fa1926db1f09c932b58489a63092b2e672f8bd3104d682bf41f250dfce85a824b2616b9f2cf796e020b1ddaabaacf4f' -dependency_hashes['cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl']='228a40447e3cdf4bebec7286d8c53139f4dea816be3b378dec81ba5e0bb1c20a938564b0b6d34780399f79fce3ba572a5fb5e93dd21dc536551323290ff2483c' -dependency_hashes['cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl']='c637580d319c9960185f44580932996c2554fb0e549d822f636a9703a8e9b8f6e105d765b65e1ef7411320698d05a60f4005b3d590e18c5784d5c8d07d86f612' -dependency_hashes['cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='95bd8ee4ac5d3f4cb09d5d223dfec484cfc90b82e2eabe40eb3c89217b0f315bee469dee6c5f89bb02e636eefade048e6e709f2b5126eeb634dcb0cb13332fa6' -dependency_hashes['cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl']='f5ea1c8a22ed5bfe03586d7fa872dc0bdeaa13ee310ecfd7355ca2a3f742ac6e3b3e2663399acb4220c95cdb92521dc181fd9c7d9da1ce45817a145500cd9243' -dependency_hashes['cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl']='0fab1b5323e009dd41de28f3f5c9f01dd4ceea627de8bb6244f72394c3fbae6dca8dc65909dce4847cbf8fd3654b55b55caa194672652a253bd0fa2a1b112f78' -dependency_hashes['cffi-1.15.1.tar.gz']='e99cafcb029076abc29e435b490fa0573ee2856f4051b7ca8a5b38cd125d56dd9dae8b189f59ceb3d728a675da8ee83239e09e19f8b0feeddea4b186ab5173a5' -dependency_hashes['chardet-5.1.0-py3-none-any.whl']='dea812a519d24ee8214cc8188e427e45d4624c115ba1a6ab70711882e033fc138d2c2b71b96a5e8223399a5d2d7c8104610f79a04fa264675c8c40b217aab690' -dependency_hashes['chardet-5.1.0.tar.gz']='f4e668de1d6f8fe0223d79a150123b99875cc5e2015e2b6c4052c1c545c044f1a3aba1c02eba3c295c0a1795e24302f5304500321dca8f1e8c0605d08ef8bb62' +dependency_hashes['blinker-1.8.1-py3-none-any.whl']='2bee24786f60124d6e07900213433a2d4b42eb48439f7f435da1e51f0fdb77d137083aa37d0d62d473bdfa24d63d9cf23712a3dd6416a491eaf0e326062ba185' +dependency_hashes['blinker-1.8.1.tar.gz']='b6adada7f314369863070e830364833aade954e4cedca390643223d632c110a314856fb1c050402cad7e64959500c4d27d149ce7b682ee6bde99a69dc66ea495' +dependency_hashes['certifi-2024.2.2-py3-none-any.whl']='7a3bd4849f95e1715fe2e99613df70a0fedd944a9bfde71a0fadb837fe62c3431c30da4f0b75c74de6f1a459f1fdf7cb62eaf404fdbe45e2d121e0b1021f1580' +dependency_hashes['certifi-2024.2.2.tar.gz']='2191710dc2cfdf781df498c3ecd5f38dfc5215e2c2dc402cdcd484376dbd7fe2e442793cc856e93f6033c1fc43cb77c71d2dc785dbfe0d8cd10fd3120ee3c2fd' +dependency_hashes['cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='47fc17ba58e9fc2e7829a4c028a0a067f0d2c9a23dec886674fb69098645bfa6e9a67a0a78439216e420b8f63be98818cd6dcd07fd270279385b9c3787710223' +dependency_hashes['cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='e76d186d948fa47d5747c116f165fd788e808f40a043ac6bac9a0cecb4d353c1138ca4e2050ddc73c21119b254935a8097a2006f37391ccf525612c305b77dfd' +dependency_hashes['cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl']='c303d9ff3a67f7b6765eafcf0e296456673916a3c4cf4a04c40153c783cf93b380cca78298b0de6b79ba1ad53bf79798887af0cb208ffd34d3bac5528e04fb51' +dependency_hashes['cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl']='38d62fd917816afa5795c1ff68810bda9e197e9b17f351075e03a11d0d84369093a39e0b690e1ae6d933578f90c0f8573f9640e43f9160a7431d854045ad79ef' +dependency_hashes['cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='4b6336b34388197360186916b81988e7421d78be4ade5d2a1b0ce19b7a19ce64d2831111ecd89a9e549b4ae4e01a46e146bd2675122c68f4ce92d4e5f865fcbb' +dependency_hashes['cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl']='e0410aa181003dce4ce74a2674450089fda1d954c3eea2ca6852bf32e45e9b1fad7173e67448d448cdc06d3c333e2572fd2ccd0b0d79bc819df452abd5ee9e08' +dependency_hashes['cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl']='f7e5df0d9f9ae2f8621d123c3f1a88f491d42d3491560ae7dcb372da06fc9de8b9f7634c256ad1cba77c04c96d61965ab6418a39c8ce17a52a916de28edbfebc' +dependency_hashes['cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='1faf3db5a6078c51b7b674feeed46f507a94fc0acfba6ad7a8e97bcfac5be653873388725fe9ca95481bc465449f692d9044ed76a86fb7eef1e114dd127f268a' +dependency_hashes['cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='20be55a756e84c738a854fa017354095d43990db3f2343397f992415f892ba5ed1fbccae829093bfb2f6d1bd6dbe3761a978a705f833e80385fb92d05f7814a0' +dependency_hashes['cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl']='c2a5fbad7ad536cb72af44d1e9c6c9f77ac69ad527f0a3c8473c587e9dfba462cc23e36135c82ba742190b291f8d78d3568cf0fdcf1c0afb43f8eb225e7dbe2a' +dependency_hashes['cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl']='3b1844eb7be44b411014a5728850037b65509e0e17c4583ca31b9b49194396c4053d10ed0c13ffb02bb2913bea422c4a7df9a60d5a51b68a3805ee77e3e36736' +dependency_hashes['cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='24fb9a6d2d4d236cfa1a34ce965b199d487a41c333c7814240e5d5cd59dedc59f3a859922079fe68494827f9570f6e0d2fdbda77d6a224bae9912e3016ff73c4' +dependency_hashes['cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl']='8d0ebb1c616c4c5a7c925101974ade3aef21f673c65ee5325276e0956e7469d93e5eb3a1678c81d5a024629274bdccf662c16cb6f8d1a6212aa82f999a3b9428' +dependency_hashes['cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl']='24ab3223045e3ac04e63647f7ae521d7a654408e8857f36a98565a12e2503c1a08af6a97dac974bee61cc80bea1a702cefe44c1da1ab127132e37ce2a5151801' +dependency_hashes['cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='13b4ee8013c3768f41f4f1578b40f36c6b5a4ea2402cb2a212229989d9f3129cc0f191c55c81cea54a8bfe4350fc925a767eddf9b223841435f78b596b4dab89' +dependency_hashes['cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='a421becd6cb04f593543c7ad322d431621f4daa0369bf61ebd4fff9329610078df1b5e7374af11e7923eaf72b02e358b35d37bc59d9ce7f800698243ac9ef05e' +dependency_hashes['cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl']='35e793f9593208ae347f0470bea29177136da8ec9e146110fa4de1e933a231ba8cf41baf7aa14a4a716e57da17cf1abf2b8bcceb6def065871a63c307476c53d' +dependency_hashes['cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl']='860229f8a400e26fe119a40995da0dec53c6b5ae92c12eb8e7439792e5489f54634a87a7f6b501f9c0b28e92923beddb982e210315cfa9ed14678be3ac75bbf8' +dependency_hashes['cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='72119121fd6e047f0e494dbd2155dff87cbbbb97e95ee91e5d5c38d7309495890e9f588de9fb1d7fd277527df38f4752ac946eaf54a43ebe41dff9747b88315f' +dependency_hashes['cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl']='445d4eb5a1ce0a97dba362d53856bbecf9a2b134c49fc04c3310756c429c094ee080d926f5dfb6302fb6cd057c2066a20636a192acb173bd430cedfabcbed105' +dependency_hashes['cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='59aa1acabeec0e87c8ba93da669d33ff1012197b8dd11c504287e67da0501420e5394c007b69a6bc327c35378ced73e62a10203d70ba917b585fec8197afe554' +dependency_hashes['cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='dad6c5b9a2199d3a14e1cafd6c36b92f3d4dbdbc8189db37025e44bfb2977908a8470e8f9a2896d37e5376aa4d9b3e29888562caeea3edd608c9c782868c17ae' +dependency_hashes['cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl']='81634c38dd4bb2f2be5c239017b89ec8c4dedba2ef2765536673f2b4f666b96fc593406d462d0a8df92b25cde5fe00e7e724f1485a9c4a4b7a968c4c1ce04644' +dependency_hashes['cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl']='bdfa1f8eea7f876ff4e8433a11ad622c6abbc5022a9602a9ed219e5b7e6fc7992b12afcf50e9fc1cfa2a3e21ccf34c64c92a796bb0ff9471ab7e0a28dea52a44' +dependency_hashes['cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='083782300fad3c0be0aec6a0eb8d589c25d18a67227c09346f64bdc69b9e41b672ea444d071be82bb7c3fcdeaafdd2959191e4606438cbabc4d566ee5254c0a1' +dependency_hashes['cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='2c849efac9a228c5d005bd575c99c1b83289e3a1602baf1fd853d19ff2f25ef4f5536b38837dc76ab416dc3105ee9c4bbbbb6b660ff4a0333a2f0ef2cc7fd0ba' +dependency_hashes['cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='8193c0d306f0212d0fbbe44510b2fed7a4abc74409d6f28a87b481ff475f2e00b006bde4fcd28b0fa5c8535e015a9e16337ace0259f72c6df4d8cb9979976b9b' +dependency_hashes['cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl']='e081ee7ae2b49b2704b1d525e6b4c5f53fcca831ddf690a6d47078071525abc5e5c32300b2b76d54e2042f8f299fac0a988474d6e96cab7f8d03b1b46558581a' +dependency_hashes['cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl']='36688299733808953d17daabac798b2b2d143c122ef5355b18068d80c9402b275ca9f65e1082762684269e9c5780ed74b42369db17778492ba1d716742d90153' +dependency_hashes['cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='4bbcdd72eb1856516c6235421f1562190e1333349686a079b2ec80ee6a02c370cadcb6b1e0d38fa6fb126368e90dd1b5f9712a92a1fa595a98f471ab2c8486da' +dependency_hashes['cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl']='5dc5ef04aa1b2ef2da537a932b8c11b49ee5e57c6ad214e6bddaef9a61b66a93952cc9f30b805da2c3c028fe58ea11cc25a56bb7fe2b116e7b9349dcc6075b5a' +dependency_hashes['cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl']='e6d8ff3fe823c4d99dc88877e626a9428d554d671d476826bae7117a123074eaae3d42d1f16e7b94bb601ef781c22791e742319f8a9a82599184c23045412da6' +dependency_hashes['cffi-1.16.0.tar.gz']='fd2588115092202aa9289c9d4e0a0b3e264b5e9ec1dc192950f31aeb412fd9f9d4e5c96a3f9c6762987b58ccc1e229f2012ddda89211797104df672d8ed51152' dependency_hashes['charset_normalizer-2.1.1-py3-none-any.whl']='fe2f3ae5d3c011b314a057456a7b13ba957593b22dbe7f532f9fbe077103e75b3f8b631fb1e2a4d5875a60af678b6779780eff7df0ea7c08144aa88fce34abc0' dependency_hashes['charset-normalizer-2.1.1.tar.gz']='f52abab683ebda4100d67ec6ee0349713baee453a742d60a1356f405c5ce2c3b4d850b0891527f08f92fa1217d59c46d6b181dc4ff1b962ce60d9c5ef8c913d1' -dependency_hashes['click-8.1.3-py3-none-any.whl']='ce7e25725b3edfd0f336f3ebc8ace3977539f0d063f3439c4a1af517263cc1058cd9c0f687819ba319811dd0f376148372444dbaf082797d1dfe2c1c1c856dfb' -dependency_hashes['click-8.1.3.tar.gz']='be5b0c8b72ef7c10854f31406668ca4d6f826381deff10bb6a87a406166c09af97e2165f1327094d96abade15efb872892af37f20fdbc855b659cb2c7bd2f2c5' -dependency_hashes['cryptography-40.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='529d42f80f85f84ddb9c4fc16adfde89c8e0861b37dc1aa85e49760034428d48ea2ece1b41bc6d6e28fbe7e6095357df512533391457aa910539baac02b0aeb3' -dependency_hashes['cryptography-40.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='a629ad9150a00b35e2188837614f9196439b29837420b383b88399905306911f5d11ac970c3ca79a88c53ae0c98aa34892cfceb7ffdac4b965717f3e6afc9abf' -dependency_hashes['cryptography-40.0.2-cp36-abi3-manylinux_2_28_aarch64.whl']='28acceb7b52c3d1a916e99d7fa7ac71f8f7c050bf5a7a24b521f021a442e9cf3ae0fb0471cb92d1ea050a5a323d0b8e9172de965bc2f8398bd68f05d64b31294' -dependency_hashes['cryptography-40.0.2-cp36-abi3-manylinux_2_28_x86_64.whl']='8366a2dda1421823bc835a128b3cc1b4f5ce769da2cbb8a952a82c4823a38fe9a2086e2c1ea1725fb3691928cf0be74ac713bfdd3bcc4d54ae7200801c1dd9e2' -dependency_hashes['cryptography-40.0.2-cp36-abi3-musllinux_1_1_aarch64.whl']='776b6f99749a42707f1ec709fb672d0b2a276cc3888c97e0da804e85d2bb918470acc5eeecd34c9fe46bcb2fbf6410ee7d12ca05c0500c39b5c22bcebb1284e6' -dependency_hashes['cryptography-40.0.2-cp36-abi3-musllinux_1_1_x86_64.whl']='4ecd052e2b6c3376cb751e6bc0f568cdf46619600673ae3967bc3d3a9d9e834f61772e336f29552b0b4ab7023d5b38f5f745188119bf1a29d1b68ca63a497c4e' -dependency_hashes['cryptography-40.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl']='865cf0bc254d4dd775968fbdb392b4d2d3516a2a345c72ebfd787b6d80cd982b942c7bb932110e81d05c58539b053441ecf76193b03e7600027e1873f2652292' -dependency_hashes['cryptography-40.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl']='2416924bf5d8ab0d890a2bf11766a5b262fff585b5391342c0ea1935d5ab343abb74a396beda3182298fa45b4971b172ed2793f190b771a676fdd470d3d94224' -dependency_hashes['cryptography-40.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl']='d70274a507e3533bd368954364016422dddc8db4e3cecd52697afbc9cffe9f41eed77dd9419690fd70b5fc8b573e952eacd8b49db074edb7449f30eeae9d251e' -dependency_hashes['cryptography-40.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl']='68d656c511deef6ae84e5a5004b7b3ce3c192ea889d61fadc082197ee2ac91454dd4c473587ecc1e2862c8a7948839b15263785bbf026e32d7f208c2bfbb8234' -dependency_hashes['cryptography-40.0.2.tar.gz']='391aba41fa75052d86182d39096c61eb37126a1e94499fe1934cc3307c8c7e819ead0e904c58c0b36fa4c4bc375b092d1b352217bc0d448f4aab587cff90528e' -dependency_hashes['distlib-0.3.6-py2.py3-none-any.whl']='7046ad8707013371b68a805fb437e7f29d883694d6870012f2db197f8bdf472aa262d5e549852c4dbccbd5af5cb0a402d60f8cad845e43df9429a2c437e28187' -dependency_hashes['distlib-0.3.6.tar.gz']='27f3a59f9175a92befb9a65a66cd0b8eb65185dab6fa13ef94e85ca69c2bc1b7281ce1522601034007cb98677ba9237a46224df4adc70ed966db7e131e073636' -dependency_hashes['filelock-3.12.0-py3-none-any.whl']='f1eddc9397b7c07f6a360b058c21841157a458e0e90830cd57d88d02c207cb6acaa0ec3f949b341f0b28f309ec88b7b5be4fde74dac16662c24fedb24fe29f0a' -dependency_hashes['filelock-3.12.0.tar.gz']='4bd5d9df76499e2a4f9dd9274fcc8bd507813446fa8e5852cef6c674d34d3db2313e4b79ac98eae07d6a9fe953de4ee6390baa4c9d5ab6a005c96324dd5904e8' -dependency_hashes['Flask-2.2.3-py3-none-any.whl']='39a67e2b05619d4196fbccfbd836be0ed6c4c977beb1696020563433766c089a278ae09957936c7d23a75ca022a90cc719ab7cc3a6fe5a7dac4f687d11568d85' -dependency_hashes['Flask-2.2.3.tar.gz']='de119d032b04eef80a99cee9658cac12f934e9a66d7dbb8304588d0c1320a8a19a8b0a78f69134a20ca26aa408db8686436c5c108ecc39e16b1eca1a3dea2d2c' -dependency_hashes['idna-3.4-py3-none-any.whl']='ffdd45326f4e91c02714f7a944cbcc2fdd09299f709cfa8aec0892053eef0134fb80d9ba3790afd319538a86feb619037cbf533e2f5939cb56b35bb17f56c858' -dependency_hashes['idna-3.4.tar.gz']='4060a9304c9bac04efdd0b97ec8f5aeb7e17417e767bf51c5dfc26605edad25ab67456cf6f6a3c5a9f32b8247e46f6343edfd8a6ffbcd6d1075c71e66d089d6a' -dependency_hashes['importlib_metadata-6.5.0-py3-none-any.whl']='90e6f30282f0cd47a7dd1e489cbfc47725c484ccc87392930bccdb0537139c8291714c5125c74d5819facd36476b95bf3e4f4ebe238ee6ad8816f93095d3d8de' -dependency_hashes['importlib_metadata-6.5.0.tar.gz']='c581ff46d601a239ba9e83114a18b1fc5c0245c215752b8313624fbef6b441eac7cebd4e021d09f12d26ba30715b99475eeeb66befc49bcd609f1b53b79f9bfd' -dependency_hashes['itsdangerous-2.1.2-py3-none-any.whl']='190df7f250b5e5985898a7f0e0e9d4c3d0b5c391268b9b5ad0f39667ec887b543651dff7623ba49e191ffadb42b0354b21be19ef61a1f68193924bf12034dd1d' -dependency_hashes['itsdangerous-2.1.2.tar.gz']='e4d870a33992b309ed778f403c0c1e098983a693d1165260748bf36385ebfadb583811e05ddd48001a33cf6a4e963b7dd8a8c68919c5b4b86f63621d8869e259' -dependency_hashes['Jinja2-3.1.2-py3-none-any.whl']='00558cca2e0ac813d404252f6e5aeacb50546822ecb5d0570228b8ddd29d94e059fbeb6b90393dee5abcddaca1370aca784dc9b095cbb74e980b3c024767fb24' -dependency_hashes['Jinja2-3.1.2.tar.gz']='5dfe122c1beef5305b34d25f22f96607bd3a6cba098b03091850ea36fefe62b645a7218d7584b35bea252393ac922c9bb3654a9e90f23bcfb273e811fcf2f2c1' -dependency_hashes['MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='3783ca01b1676f4b0f597ead79ab32b5c5fe2810e66a7fde0832b7ca5cc83187cee03c262b2ed04558582585bd0c5deb0c045618feec13edd3e549c14a148098' -dependency_hashes['MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='ceba16a2f438216f2eb8312caeb94f827f498f84daa08701607483ddf364ba0fa553b582b4b6a2c26c254bfab25004416d345e3e4f04c3877fcbccabe380e88b' -dependency_hashes['MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='a1964e0a905fece6efa054f6b7dd2c4b89b1b67c8bc80d72ffd4ce7228d389f8f28b4b21036505548d75902a19d764d74929403dea6f61fc7638ef2054b5636c' -dependency_hashes['MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl']='282f5396816317eb14f71a012ed33e57c7bb434a367e7a66d126ceeb4091e5f5dca68aa6dbb1d4c1005c80492bfaa3109071872c86b303c2f49f47408c7185bb' -dependency_hashes['MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl']='2fb2d5c657ed023d4cab36433fd8acda778a66feb3e2dd2e25b864a21e3e8bc6416ec3ef3875eb15b07507f77a813634751497a43533417bb77fc18f818028f2' -dependency_hashes['MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl']='fc0ece51b6fd5468ea83024d08f2c448e430e7541b9262d94db645768ee6a954e75a5fe00d74d9f82c844e0c293fa449017542fe742fd7d0f2f4f6d300e57cf0' -dependency_hashes['MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='295338d568db27c0766d6a1ca2e071b60ab0830374a9b68711174a52ae88859293d5e0cdff30684456b814c82614511e18e82b341b3f3b1f879a6c91dfee83d7' -dependency_hashes['MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='793bf57d19d1f89cd13cf477575a9a31396f75d0da9aaf18949c59e81ea288467be598dcf0577cb71d79bd4f81052f4ea15c320be38eb15d33288c400dfc17fc' -dependency_hashes['MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='cd09ad7f6320721543ea6b677c558a7f0ecbc56dbf43cdb30f9f071ec9378542af2b2d70c942d17e86a814f628ed4e665616adf3ef90c8754a4ec7c9b72b4976' -dependency_hashes['MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl']='f1e3865d2ba379322cab24b91c973aa7ebcb254a37764f76beff3eb9abb553a2fc8c67f7b9626e10d44c57176a073b6097f21ca9aae224a82a21646c90ee3d03' -dependency_hashes['MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl']='2e6a41138e8361fda264e0790ad6cacabbbe6693c7d08a6a7ee0b38064a5b1fee84cf5930eee1a95f658777c51d652b200a4db1acdfd8813fdd3ae82102465fe' -dependency_hashes['MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl']='478af9198dd18ef711016755bd77dcb178cd4ef8269acf166dd3be151269d3fefce3574457e5bcd91c330b6d12933daff8ad6577553f2179c76ced38c9d374e0' -dependency_hashes['MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='1b6ac1de291567f69405e9551a73338d309813446d4ccce80d2d311543898a756415ddbe3bc729a528bb827454bb1e188bb05e3d923f873aaca241b311451df6' -dependency_hashes['MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='c4cb843221914dac34eb20ab409b3d3066769f1bf79e385203de574c05b51dc0f8eec62956476b8d99e06ea44b45b2327b2c632a10373d66a46d4a6401c21eb9' -dependency_hashes['MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='2087ae635b7e5cdedb5b57f84f110a606a0f69cb0eefc2a8ad90fa1219500b55d8233459c27f225d27c154e662610f35e05493dd8a4bc9d112763300b2541919' -dependency_hashes['MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl']='ddd1799d5becb875e3be5a7b432de77a8862a5d3caa4e82b47cc1e0fa26440d9b5653ccf56b9777323c04f8dece854124d3c77ced2b62819e6019a6aa67a5932' -dependency_hashes['MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl']='7ecdc21e0ed4d2499a698fbe0336d15fc630bcbd28277fddd05238b219a6c501dbd96dd0353f9c1ca89e1c5883bef2972fc3c3c8d408d02d8f427aba863b0cc8' -dependency_hashes['MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl']='efc24555a84d65097e63f013efe7984a26cc81fabc8ff8386c45fb7ada054a75578a69ac1b5bbc0c755c050436e1086f756ab35511e0b406b05bbfddc2dcdcc5' -dependency_hashes['MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='ca5c9e4f6f62b930718c80a46af0fb657a24cbda610d92c73b29c1fba136e4468cdc50b63e0e99dcb657c3edcb7bbbd1c4423b23c9e56b545b2c070b6ca1cc5e' -dependency_hashes['MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='f8b73180cad126fe44d6340e7282e5991cf06967a5facfcdd9bc956143c2fbb5b85c1ac50a65f333def6932bcf83a34f3d46a1a6007b60c17071ed027df05d93' -dependency_hashes['MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='3b5e6ffa97ddd8c84c9e4fe8354e916774cfdf76ab5852f757f5ae6a984f99a7421fd9ca548e22d2d3afa21cc70903a4807030e5d5ba822f989830073f5257bd' -dependency_hashes['MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl']='181dfc2666e97266fcdee173299e205f1938f1f2b34c52bbed6207d8602fbe54a730719db781e6f8d72b644a6b85261f683c72c1050fd6070f8b43e6c4092582' -dependency_hashes['MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl']='30370db92aadf1e1ceabd12df7140cd018a2785016df62ef5a0f452c292026bf87e4e6a97bf39b43203537e1a8ad9cc617f01e6dc4572b7a964376784da104c7' -dependency_hashes['MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl']='f3a693aa8cc1bb5c836218f1e0ef4e90b75b44e9e7f256f38fd4160816a9ef44453618cc2db27ae5a5033fe6a03810ae260213633a75720020e7d58c5fe2261e' -dependency_hashes['MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='2f7f9edd7721ca700a1078bc89efd9859bafd285a80d100ea752a9815b2a9affad57b019daf15ff518f927b90296a91c24ff5dc95d92bf4fd939534b93ea22c0' -dependency_hashes['MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='99a4e3b43021e6f915181da8a440b90a5347d44f717c337b9ccb99f6d4d5b5736e0ad65b549fcd480a81c8ba7720aa5a46aa659e7ae5d64a664da326e2aeb2ce' -dependency_hashes['MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='40e172b0e6fe9a8dcdc8716db0f3fc543f8ec9ed2c7747653d9362034bd9ada8dda9b6b416572198fe3aa19339576fc19b38980f67dd4a486006da933d1266e9' -dependency_hashes['MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl']='aefd12859788594aef77f1a2051ca14a7b7fa12b7e8d0f97cb0bc891773e9e2149bc27f23e73c68ee40bfd92cfefa73e6505d26f1a59a6f07fd4f07d19ea343b' -dependency_hashes['MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl']='372a79b769710ca815afe0277f2cc8d1e7a1053baa05971a0733ff5a2d6964daad6cd856f262dfa8055200865ae9e64b0d1a919d56f810459549f86636b07982' -dependency_hashes['MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl']='74684e845fda87cf27b2abc1164c47aae5154d69c0a7089616defac56787272616701fdd7caed710a951ecb0e30e9b82f3b39fbbda24dcbef0715b533c02c190' -dependency_hashes['MarkupSafe-2.1.2.tar.gz']='84dbeddaf2df713b3cce94eb64876fea8f80c608e25130c18e4691be2b1dea56df8b772d26c0caca88231ef795125eb9678210c33bf20518c18e3047912ddb4b' -dependency_hashes['pip-23.1-py3-none-any.whl']='a15bae4a0c1548cfdf1b886157018b31c723aeefe68794cccf83b16e51d4b1874f885e33117172cb36b42613ec03d4aa82cc4318f042e2b7dcd4e39293e91a94' -dependency_hashes['pip-23.1.tar.gz']='6573096753db231e3189ad66d9fba08b99d1320593131ced7cee2d4442b137749fd0fc5c98fe338c4683081ea1c1bfd269a752ff16052c72457f8bb91265b5d2' -dependency_hashes['platformdirs-3.2.0-py3-none-any.whl']='85989efb26079ae10429a6a1d4cc23cbba8dd518b0fd8cefad3f1fc15a9d10b28442ebe7729e3acb9f79c3075d8968333473a95e64c17e5b0115038e26693019' -dependency_hashes['platformdirs-3.2.0.tar.gz']='2e4613f563b7014b526e1f81f561726a0060983b0e998ce46d070b2f4f4ec26ad46d6a3cd242fb14a420e6439207b9c9eeb31daac7ec65005abc3a74131e5cf8' -dependency_hashes['pycparser-2.21-py2.py3-none-any.whl']='aae67923f45abd1d781d03e0ce848627a07e9cf4c61a89bf32f1b5f638ceda08de39a038c46ed29d2df967d76be4f2572346bad087ac32b418e6fe654fd28e43' -dependency_hashes['pycparser-2.21.tar.gz']='e61fbdde484d1cf74d4b27bdde40cf2da4b7028ca8ecd37c83d77473dab707d457321aecaf97da3b114c1d58a4eb200290b76f9c958044b57e5fed949895b5f0' +dependency_hashes['click-8.1.7-py3-none-any.whl']='687ea8c461196b234b0f0db0638ba213304b96bdeb9c9c6334a6cbd78f4e99da9e062bca2f449c88fd7a1de7ea2643e80c8ea571103dd4b2c50424a6fbd5d5e0' +dependency_hashes['click-8.1.7.tar.gz']='c67146ad0112daf8ed4db62a6b0a0065109332eb8fa31962ce40d61e27e2736020a0cadfebdd1656e2f23c20291b069d3a409faffe999a0907e6dbdef77aa014' +dependency_hashes['cryptography-42.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='fd840cb0f6c49078d2484fd2ff75a2c62c6ae58b69a01be0885a7bd088067e5f39f9e0de582e0a824525f7bbfe4d6e5831fe176f40fb01101df3f9a41e3ab14e' +dependency_hashes['cryptography-42.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='615d99cedb543228cc45a49bde24883e920426cd32c964471149fcb994a74b8ca3edb00d1addd52d19c19d7689f9b978cd10f54ac6ca70368da9dc40c28625fe' +dependency_hashes['cryptography-42.0.5-cp37-abi3-manylinux_2_28_aarch64.whl']='8b98785ff25b2fe0745d867e7055b54bf2ace5a21f9b42eda99c5a5fbd5bb4a6e74bedd6a3cf39c179570b351503ee0e7e937a04e1451f22a4fa0d69dac1f2cf' +dependency_hashes['cryptography-42.0.5-cp37-abi3-manylinux_2_28_x86_64.whl']='8f084fff47efe264edd9101915ea31e1e16cba949b7a0d3be3e72632fd656e5989794c0ef02645192beb3c51be0ab0a3184c554355e241e5060bb1b255cb0983' +dependency_hashes['cryptography-42.0.5-cp37-abi3-musllinux_1_1_aarch64.whl']='687f042d3470af3c6f1e64584a691d9aecff8c589de2a9ae7dc8f7a5738ea76785976ecbc345b838d3023c0cb033476ac86d8d06ecde5ce855ab3a78b465c17a' +dependency_hashes['cryptography-42.0.5-cp37-abi3-musllinux_1_1_x86_64.whl']='2a57528ef4e99daf9956823e994cad12d687e78088b7c10b3e694a859ac70cd66a86e02003f0d1120e75be19a28f299bfc87f590a2157099eb7ad95de8728d2d' +dependency_hashes['cryptography-42.0.5-cp37-abi3-musllinux_1_2_aarch64.whl']='70a54c0660561f898d715cd289be93a52082fcd986d0acbfb2af73cca703661116df34a108cf85da66e3ea1b8fd98e1c8af4f173fd487f54f3a8b840d11d9ccb' +dependency_hashes['cryptography-42.0.5-cp37-abi3-musllinux_1_2_x86_64.whl']='9d180b8749ec2682a868a3f062ed8bec0a6ac4483d23200c50afab4613e167be1e8faddaaad5c841fcc3f06e8c9a5fffd6a33527861c0b1115a624d4961f9cbd' +dependency_hashes['cryptography-42.0.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='49b2ba4241bb10ac9a3bca74ccff586abf83d10b2ec641ac9b4d53b334dac60135d6b3ee1bdb300997a3dac78d61abf099ab264d55f152999311588b2a213efb' +dependency_hashes['cryptography-42.0.5-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='0e5dbf32cae786fdcd855c6c065e0ced23de25eb8a667c620d7f2dab9549cb72fa08cc2a2795454d14dfb273a5f0dab4341155dc413cec9049bf2fa5d76f398d' +dependency_hashes['cryptography-42.0.5-cp39-abi3-manylinux_2_28_aarch64.whl']='cd3639bc392ebd062870c90f55ce527d39b354d0e6421d7ef9ead9ce4bfb28eddf3bf8685f9681ed7f23ec0f983f000dfc34b5d6349e825682633306bf29623d' +dependency_hashes['cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl']='4b87fe7d1a1f81a3778da62c466f35d763d359b59e79dfc26e971e18ddf4d5d8febfa927d1a7a4a20bcbcf3db8b94ffa73b0aa8e2a8950a1c7d4899f9c95d8a6' +dependency_hashes['cryptography-42.0.5-cp39-abi3-musllinux_1_1_aarch64.whl']='f5149920cc429e841ec88cca9c68cece82172f2a74788b1ce0924b45308df5aa92920c09ec5c93335beb37ddedd09b18444664ee0879a9a72fc432554b8d5e26' +dependency_hashes['cryptography-42.0.5-cp39-abi3-musllinux_1_1_x86_64.whl']='2ee854f1ad3fecd81d2fe2418a7ac804d8e257929f973d8fdba88b8a93362590906eec44ca6e54f9c2173b1d645b2024792f2802320bcb21d7ea7423cdcdd833' +dependency_hashes['cryptography-42.0.5-cp39-abi3-musllinux_1_2_aarch64.whl']='e4ba05cd1f7fe2486dd2041ec2ef31b9642b1d17300025eda181413a1ad7af8d5a1daf4cd45a2a236191e591d74b51c2a63217a737eab680dd09efa8122be5bf' +dependency_hashes['cryptography-42.0.5-cp39-abi3-musllinux_1_2_x86_64.whl']='04805984237fbf618d6d87321432840701ce0bbc1fd7ff65664487faec8724398fccbd8c01ac5c5764e4ac1bc5206325320c6cda74f3ca3045e8739487ea779b' +dependency_hashes['cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl']='3b416b5c915890a8bbe75aaada1c032710dfadd352895effd7e0412ad2e2b91b3b0af087a6dd94af415394506e2598adc9f9deb8ab3820c3d0c21d5048670af1' +dependency_hashes['cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl']='a4b10e9a9665e83434e9035b56542234fbfa07cba85d351a910ad2e81cedd9cab27497d34bf58bb3995d22ef6118438635e881418f58fca5d326b3d3495e890c' +dependency_hashes['cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl']='c8b8fae59303afef81daf85381596e366b60e1d5d499b6001c078bea669b1373fba37aca20a3617c54461f6797a1c655707fdee23cffb7aae8c1d6208dcff894' +dependency_hashes['cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl']='2b5b7a9667fc85c691fc107ba8b32ff8931ee6ee4c34e15784b1882d21c7fb2650d63825f1bdf14626dafe671f67e7816c79a5a8c6b7f1366f20f24ee6f32bd8' +dependency_hashes['cryptography-42.0.5.tar.gz']='5524fd230b55580a2c647a0a78197a783e201fdfa8b3177b72c6d7b689afd76a689e4fe3593120d3adb7ee5cc4adf9211e8deedc8fab355e9ed70076db09f68b' +dependency_hashes['flask-3.0.3-py3-none-any.whl']='efc6990982567332f1d274054a5d2f1e1b78c21f25a4cfb1de6b3a2f96fceab33fb0d31f9eb28f504e3899742fddf5854ee357395e7b66fdd3810eb64b8dff93' +dependency_hashes['flask-3.0.3.tar.gz']='977c0e5fd2d496fae8e34a035f211118642dc6518a14dc5f6c175b72c6a76407aeb9ff0ed1f5db636370a9aa7e0d36baa783713ea7bdabd7f28c8c2b94643cd1' +dependency_hashes['idna-3.7-py3-none-any.whl']='488a437198bcf2d32098d99a71447a514212d28e6149d597a347d85b638d9c1b8a328cf190f2b7872a7869f157160754f560fdbca2f2a9ba035401f0eaa9a87d' +dependency_hashes['idna-3.7.tar.gz']='b50e5ae117b67c7076125d6943e3436200676f85d7dd1b5a5414e217e73904ef077f0b1108d9781ab4afe2a66f7c9e1ce8262ce51edeb2d29e4c504147b6c4cc' +dependency_hashes['itsdangerous-2.2.0-py3-none-any.whl']='3c9d38d4a9a53f6426139969a111cb13f0588e4445173542a5c88a2f85348afc6f709f3523a4169eee6010cec99eed6df3a82cac59ca96a731d39461f88e2b83' +dependency_hashes['itsdangerous-2.2.0.tar.gz']='ed046cc371ea9aa1f7cd3bd201f1b68910a2b008bd8434c425332cecec6539cf031df6e2223a1fdccd68c12ccf5486e80f178d5906911b19417f0ea244e367f8' +dependency_hashes['Jinja2-3.1.3-py3-none-any.whl']='e3e2e6bd511dec484dd0292f4c46c55c88a885eabf15413d53edea2dd4a4dbae1571735b9424f78c0cd7f1082476a8259f31fd3f63990f726175470f636df2b3' +dependency_hashes['Jinja2-3.1.3.tar.gz']='5c36d0cd094b40626511f30c561176c095c49ef4066c2752a9edc3e6feb2430dafa866c17deebddcd0168aa1f0fd3944916d592c5c999639b8152e7c1009c700' +dependency_hashes['MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='f32cc6753cfaedeae6392e1f7fc8523ccbbdd996fa10636164004dba3d0d3ed80b8cccb1de3f6660c3114e8f83c260b7f92238b0a2a0bc48580ae00f4fb1f964' +dependency_hashes['MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='46d4361fc36ed9f3c78b282eca731c3918c9cc3ed6a74b1dcdb74731075d63152bc5398d64691c08e79e9b7a21f7bb96bf20d7e4ee4feeb7c2dfddae0ea34d40' +dependency_hashes['MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='bd0f8577d7909a1186671cf1a2f9f87d0af6597eee61e44c071a4f8d9dc51bda6cb40a8a3e328840b24ac86fbe9cd0ef8f06ec78d08b4ce764194512e0fa0634' +dependency_hashes['MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl']='689c416c3ef1624f97d4213375ee20966cd800d9540d114323c4adafa4e3e5a2e63bae89c8f948d2e940d9bf29f485c8143e25da2a5eef130ef39a039bc5d9af' +dependency_hashes['MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl']='ca60491527e5b2da3ac3adc9ede4d68c64f7d70e1e6f7d061d6a7bf285aba3e5e2c8543dbb9f0203df4503c81b5d53559f1098abe5433f0fc8cabc8b737cc130' +dependency_hashes['MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl']='ec77e3fcb4bf013af838bd3d67ffaf42f614705798c415a89af121326e6107943264059df97a41806036a8e6d70b894c8cdaf49ef8d8060263b61408c5102c61' +dependency_hashes['MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='2d138f2261ccec4e009a71d5900d18eddb61875ef9851c63ed3e644ba3c0b5dbd3fd3ef77c39605c43a5b6bf28e5fe9614342e7bf4ed7cff03913187d5ad6017' +dependency_hashes['MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='a1dfb9d014e5ac5a6523a3d4751a0d8458d6a3ceeb87aba13d303eface5b6428d62d8c989c74397aecf597545405ac1d1378308057ba1274cca0a436054a8819' +dependency_hashes['MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='ccb5a63f69e5681b3eea5646dd6b163241e890d4ea502c29ca782265ef2322428213de5c1dfa37adcb328af24430c22ed49cc2ee2a96e8ead416bc7a569683f6' +dependency_hashes['MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl']='6698232b96e1dafa8c1905b393952f6ab132bbb72bc10b0dbc567abcfcd30205bfc59c6fd9ab66e4c4f28e82f7cc3e871537b086b035dfb46ea1160e2b26cfc2' +dependency_hashes['MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl']='efb08c3eaf132e8d10e3f8a01ff80bd0bc36ac7eec078cf99f9065a9bc4cb7e4b53c9ade1a2ad46b786c26a31662f38c4d70da2c53533c8c5759c8d439c3bc66' +dependency_hashes['MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl']='eeef56f202babb0174ff72a65239d806a1a6070873f94dbf939443df60c259bb403aae2afee7f2e9f199ee9b8bb0e91f5e95ca9029b33730d88cf53457c36674' +dependency_hashes['MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='0447b1b39d8eaacbe0bc023ef7a5f0fc304b4b562940cafe150670c7cd8be6c11c23fbd831b9a9f3645e3e085f1662e20b2f2c7114bde23aeaf4b55e9ca6f8d9' +dependency_hashes['MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='77bd99171babb05f0b4d8c45936dfc91f9c2c0ab4a7e9215b6788800a13befca9256cf56422a0125f51a8e53928dac66ddc3077e655dfb3a2fc185c3f7646db4' +dependency_hashes['MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='7667f36657612cf81f273608c2e5861e0cc412ec5af3ab2a080547a7b97d1670d5caf15aca23d0a2653f01157a9849e5435662f833cca868fe83c51cb17746ac' +dependency_hashes['MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl']='386f9624fe79c40e9e548323d00f2bac16c5d58914afba24a5ba94024fc15a4e531a3203f077fbb3517a6a2c4b3570caed701520933216ecd67c3721415e860e' +dependency_hashes['MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl']='270353f556509467e6183d1c440015f72e0712cb9e3420981aa7e48d09cfa8666966568bbc6530fcbecd73864714cf1bdc52948e2950c565d6b50eeb1d677f75' +dependency_hashes['MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl']='ec755a40cb7427da58dac02ada8f2cefec4a38902140ccfba0bb663f4f4cf54eacf411b9fbbeabb5ad690c4f1140ab38a1d58fd80961adddc04bede32d65dd8d' +dependency_hashes['MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='7e0d8d5e85790cefa7b56b5924523a8dda606a0cfd1e9efa2fc67ab13c2eaaa5b4e8e15a45dfbc9dd7759b1f87dc1d13fc35557bf0f9dd38e4c09e039b018aa0' +dependency_hashes['MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='e620c9ea18dde478e6d449803e511d7c0db079d3093063fa383bc498618ecd618edd3518f1408762d5262f4663a85d3f5aaefb9408da2c440182281678f6222a' +dependency_hashes['MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='81b67d2e236dfba6661aa9f06a0f11e64f2a598d3c3a80b1678eb207b856edb18372dca8d62fa419eb717339c1147fb53bbcfb4b06d8df281c0890020ffb2bfc' +dependency_hashes['MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl']='34392033b008945424d81bb0a2b201c853e3b743dc4b4ad2270903c2a031e36a59518767ceb724ae540c9b03c502c6956f8af048e4a6c1be55428a7cb0676539' +dependency_hashes['MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl']='94233c5f239525bba1c584da6a3bd54c7a9c3d99f6f40affb32484d93d89eed9b6c2eaba522b0388c1fed5405354abccc4a48a8522188ceb1055be1799bce42d' +dependency_hashes['MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl']='ffed1823a6bcff917670c25aa7d249179899ecc9651f2e303a626d1a8e10ea189cb1875dd73bb190914bc2714574e9fa73f62d881f07522e7a50a485a6d71be6' +dependency_hashes['MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='54c049098b67a7ab0876f37196d6e76f5702caedb282fb76224b472a27e48c9d3d68f841a9a45514090a55a28d3f94135ea60bcd440a5c27357ea5cc44391176' +dependency_hashes['MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='9a51bca810984054d198d4081262be66fb3d05f8356772bc27a01a580d82f0552542a8b18e41e7cd9e6aff2b2065dddf103f0ad87b851b2d36c7459c926e856e' +dependency_hashes['MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='54e954e982df1ec116d1ae58e432c36935b582aa6e13e13645916428b918abfb5475d31c8be6308fe04bdad139b0e08667896e26ca909b242b0f104c959b2661' +dependency_hashes['MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl']='3e409b8b9642620925066423c44eb38dbe1ef35c842c39a6e19c0dce620181395effc195ce8a3e5717c76d554a0dfcb0838965358b7190d98ac576ef475e25a5' +dependency_hashes['MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl']='1eb79d3a71d25372dac4b11827986f01d11618baddad7145efda13cc1acccc8e2c7967c4c51fbadbd57e7c93818ac32405721b2d94bd7e3cb519b0cf5ec47423' +dependency_hashes['MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl']='e09fafdcdcfdb7025b1fa803cba5ee04ff7ae8eb599b8d69deb6b37f958f92627b6b2e9e4de30fb338f65eb1a123e1de15afeaa75e0d8dfe0081482d303b11be' +dependency_hashes['MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='8a1f91b4f7ffc97332ba757cfbf4bd6d9190235854711b70250c0b0535d6025ed08b5fb5dfbd6288b0c50f04ecfe42ffd9c7d1829bab8bdce26ebf105e95059c' +dependency_hashes['MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl']='1a882d8ff38682ffc5cef0d0e29a01a1f012da22c4a4a12872c812459ceb62bef496aa5debfd68d53e9069ba0d5a33ba58f9d071e0a89cbf568df8eb0343ea8f' +dependency_hashes['MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl']='74c0871ec5ccd70bf4d84cca9f17d36ab3279253a1aadc2e6d8c349c4e381b63eccdc19152028ce26a9f03d58ea61b65780a41460b094b584585ae1708034562' +dependency_hashes['MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl']='913f2a486f2d553a998a7adb836acffa89e3adff031abdb8964638a0a45f8257e90f50678668d624425fe743796c6d272c9b5eb1fcabbdf823aae97b4f303fc0' +dependency_hashes['MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl']='1f1306cd2b0eb0931e12900e489180d455e62646079c9fc8c0d4a53fcb592466fa71674fb0da627d617d4e7c37c65b0243248a5ac8b6fd120b6e8e903821b558' +dependency_hashes['MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl']='7f4b54cf745603eb15883a76e8c978a6684f1b585e119af300e52434171d2c2411bbb0731d3d6454a0ae410de1134544163961e0fb1765bfc220afcabfb1fac4' +dependency_hashes['MarkupSafe-2.1.5.tar.gz']='3ba5af43d23c266377f5d32b11e1faa7955ea8c67eb1c32886c308527f93e75e387294d0eec7794c0c20aad0c705b27f3d1f86b04202f3b63068d12d4053cc71' +dependency_hashes['pycparser-2.22-py3-none-any.whl']='14a66293830ac4b7ffa5dcf964e6c36c25888e6f7b0fb1f50acbbc586806bfa9c691fa6159e64f060b2f00a834caa858ba62f7045291c452c163d6b42e29f62c' +dependency_hashes['pycparser-2.22.tar.gz']='c9a81c78d87162f71281a32a076b279f4f7f2e17253fe14c89c6db5f9b3554a6563ff700c385549a8b51ef8832f99f7bb4ac07f22754c7c475dd91feeb0cf87f' dependency_hashes['PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl']='853446c38ce5488e18eba166f67650bc4f50044f509987ad2ae4830d2ed85284f057c3a4304180ad265bc33fb9cd6570488a37e40bade5e202ba201ad368af84' dependency_hashes['PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl']='d3f24397a6a3a7a56652a56c8e8cfcb1ebc167b0d2dfc38c450d8fbc363b2b5c1226e58724a692b16a7e4f1022bb93e904664ff54640bba28720134058e2275f' dependency_hashes['PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl']='c3502047add3590c1a1e60908e21d62455e2b4ba2f2efaf0f5118bf915934de9604d00036b3215ed54890a51a088872909409b296141d6241159c119d751a947' @@ -162,23 +161,17 @@ dependency_hashes['pyserial-3.5.tar.gz']='c8df5e50d952d5a6dcf1d9253a6ba953e9763c dependency_hashes['PySocks-1.7.1-py27-none-any.whl']='3e0b1775c14fe091d10e30b03f7f0c770861152e493cf3a3143b0de01aadbc73f684f0d4305f1a694932d4bdcac8056c422437130640e19028cd9fba59ff0b3f' dependency_hashes['PySocks-1.7.1-py3-none-any.whl']='313b954102231d038d52ab58f41e3642579be29f827135b8dd92c06acb362effcb0a7fd5f35de9273372b92d9fe29f38381ae44f8b41aa90d2564d6dd07ecd12' dependency_hashes['PySocks-1.7.1.tar.gz']='cef4a5ce8c67fb485644696a23bf68a721db47f3211212de2d4431eaf9ebd26077dd5a06f6dfa7fde2dcb9d7c1ed551facd014e999929cb4d7b504972c464016' -dependency_hashes['requests-2.28.2-py3-none-any.whl']='220e0e122d5851aaccf633224dd7fbd3ba8c8d2720944d8019d6a276ed818d83e3426fe21807f22d673b5428f19fcf9a6b4e645f69bbecd967c568bb6aeb7c8d' -dependency_hashes['requests-2.28.2.tar.gz']='3c4ba19a2bb6ba38a4118cf246db3855401869d54ee7ebd9bee40b435420381fb737d4c69768f2bd97914a30d66233c7058cec51aa629af0dff3b04e6f997a3d' -dependency_hashes['setuptools-67.7.0-py3-none-any.whl']='22428cf43932d4a16f704adace5e6fa9ddff15c2715c9ba2c0f47c2e96d5fa95e5fbd21e2e55cef9c43a41d29f6cd2d09500b1cb81daedb64820e388ead70346' -dependency_hashes['setuptools-67.7.0.tar.gz']='39502337b5d7f710c55219ab970a5cab23e8987598af722ad231d2dea2e1dfaaddb09dc698a5746a719b36e5e3065c48ecee2ac428e4d41470bec6ad3c99daf6' -dependency_hashes['six-1.16.0-py2.py3-none-any.whl']='656b010ed36d7486c07891c0247c7258faf0d1a68c5fb0a35db9c5b670eb712d5e470b023ffd568d7617e0ae77340820397014790d14fda4d13593fa2bd1c76f' -dependency_hashes['six-1.16.0.tar.gz']='076fe31c8f03b0b52ff44346759c7dc8317da0972403b84dfe5898179f55acdba6c78827e0f8a53ff20afe8b76432c6fe0d655a75c24259d9acbaa4d9e8015c0' -dependency_hashes['stem-1.8.1.tar.gz']='bad2f4f96e37caa3ee2928bb027318c4941ca3f6c0072c5f6e87fe647d2b68400ad352d9c27fa2a35c00f4f327aa9cc00e2907b21a9cbd26fab46ec21e2a038a' -dependency_hashes['typing_extensions-4.5.0-py3-none-any.whl']='ec14fe7ff4998bd9ed4c57a491062d0d0d3797aa326c71898c879455f0a2dbcc639ac9b51f68c03a8635459de7612b31aa2b71f364ac6d2dd6b696cfd80df555' -dependency_hashes['typing_extensions-4.5.0.tar.gz']='a38a018be2c22b6cc1d9a14477206271b44fc110db2a958f3cb5b179856c9f992b2359ce077dd0d25c3711908e4009d44afcaa9de6bd422bc1599c9533f8200e' -dependency_hashes['urllib3-1.26.15-py2.py3-none-any.whl']='4f2cdf7174e25fb6ee6dfff0501c51e4f56bd9e6194cfcf31c1c2fec0a28032a7335867b729c06de550b9345118902fed935234606d8e6987928679202a9c1f4' -dependency_hashes['urllib3-1.26.15.tar.gz']='b6ddb29c15b2d729605a6acb7c602f18c75a937cdfe9649d35d790a59fbb1d96a8d68975ba0a4c073c9f1750e383c67b7566dbcd81b3e8611501e9f4153e9a2b' -dependency_hashes['virtualenv-20.22.0-py3-none-any.whl']='5117374b4151b53ccddf85eb913465109840080173feaa5d0dbf055b12fcb6035aff038abb8f4698a4bc29dcb452fb8c2a19221a293682c520be1b3fbb80d20a' -dependency_hashes['virtualenv-20.22.0.tar.gz']='83d15b03abebd856b1636d0f00443f77882de9fdeb9dff67b72dc839d55f4e7e0668914ef3ac79cdf1d8cf147e29ba97feb720a5ebfcf24dc6cd27ec2e04384d' -dependency_hashes['Werkzeug-2.2.3-py3-none-any.whl']='82abbbd482fbf92ec449dfc5aab673a9cf29f81227f39b101b3433a4106ddb72498827eda45cee751a2e47768d27c04f77bc87bd7bc82faecc94cc426a316c00' -dependency_hashes['Werkzeug-2.2.3.tar.gz']='33d0581533ee83e5daad85c36d270cdc9f66b804b6e3c24254f87d50fb504211af6be277a8638003336f23edc2bfc635f45efae7cbe54dae174693bd272fa137' -dependency_hashes['zipp-3.15.0-py3-none-any.whl']='ac96786e5d35882e0c5b724794329c9125c2b86ae7847f17acfc49f0d294312c6afc1c3f248655de3f0ccb4ca426d7957d02ba702f4a15e9fcd7e2c314e72c19' -dependency_hashes['zipp-3.15.0.tar.gz']='74a512428fa29e284c515a7e6c45030e4d840727e12e376bca480a90b7fd1e111462deafa372ca9aebd9f53c24bc37111570e7a4a6a873c0b7dee9a0277c100d' +dependency_hashes['requests-2.31.0-py3-none-any.whl']='b795abb26ba2f04f1afcfb196f21f638014b26c8186f8f488f1c2d91e8e0220962fbd259dbc9c3875222eb47fc95c73fc0606aaa6602b9ebc524809c9ba3501f' +dependency_hashes['requests-2.31.0.tar.gz']='ce50d64973752f4cf7f7c7c91401669854b55c66d7465bea3689772fae8a6b646cf6720d84a2984bbe6fd78fc8b9ce0aa377f291fb6d7c20c7c2a4be8193acdd' +dependency_hashes['setuptools-69.5.1-py3-none-any.whl']='d212edd21ab99f50c2daf6080c68a3cc0eeed566f10e91f857e7eeb86513f33e9cde25b975db1030110c3b1714cfbfd4d3c9e2937b4a5ff2bb8971e605ecee85' +dependency_hashes['setuptools-69.5.1.tar.gz']='81f4a5184976a0d4aa070261bb56458c54ec6a479786fa469e98cb336e9a1691b281ae771abe41bc5398fac15b2dd039c07cf014ee00572f46908ce6830fcb6a' +dependency_hashes['stem-1.8.2.tar.gz']='f054bbc9a61e04fb7e3b7d1534803b938b855c29795471953661f8fd9c0a5196fe1f9ccfd01e5b3256ea42893a7d57fda34fa54932012e345f74bb3303ff98c5' +dependency_hashes['typing_extensions-4.11.0-py3-none-any.whl']='b169d8dcb01948fa08f4f85d2e224d285e47710b6f2e3924340ad01f26c7ef68588c571b8f6a0fbc6955dae46950420d046057bbba82c26d30de0554494206a4' +dependency_hashes['typing_extensions-4.11.0.tar.gz']='d795fadbe9c0a24c4d3190f375d72576f5b42a14dc3a999127c1356f2ae77d4bffdc04a23b7a05331cc8b703a81f504328aaf5d6c1247ea24cbeed25dccb0a37' +dependency_hashes['urllib3-2.2.1-py3-none-any.whl']='82525e89629af701c2ce44ed6766c3b4c1f7b57ce0a3418342849dd4c13802b901b0942e7199d6e268ae03a14b67bc023bdc66fd827f4f50a3c4895271245c9d' +dependency_hashes['urllib3-2.2.1.tar.gz']='dfadba099db678ee1567ee95aa11a72fcea0a76df094d04dd4bd7ed5df4ea2fda6917cc122a1e2bfa4f5303916f93a7e1c881fbbf3cbb9415a25bd7eca1b14b3' +dependency_hashes['werkzeug-3.0.2-py3-none-any.whl']='8904c195547630ef173356c8286deb5fa9140f193ea017680b9ea67a57db4d4c7479fe9023f02f78882a5212bf8e79240d994b13322d8a7cb6e4348b6b69b760' +dependency_hashes['werkzeug-3.0.2.tar.gz']='5f9a91684653da17ef419459db11a6a4bd83b6c1f2f6b0e9f0a296bc5c7c63d2b465044a131f579557f1fb240a560793b734f3d0248ecbb7b6af62b1713484c3' # ---------------------------------------------------------------------------------------- @@ -186,13 +179,7 @@ dependency_hashes['zipp-3.15.0.tar.gz']='74a512428fa29e284c515a7e6c45030e4d84072 # before packages that use them, and the list items must use the same capitalization # as the dependency filename). -pre_packages=("pip" "setuptools") -virtualenv_packages=("zipp" "backports.entry_points_selectable" "filelock" "importlib_metadata" "six" "distlib" "appdirs" "platformdirs" "typing_extensions" "virtualenv") tcb_packages=("pycparser" "cffi" "setuptools" "argon2_cffi_bindings" "argon2_cffi-" "PyNaCl" "cryptography" "pyserial") -requests_packages=("urllib3" "idna" "charset_normalizer" "certifi" "requests") -flask_packages=("Werkzeug" "MarkupSafe" "Jinja2" "itsdangerous" "click" "Flask") -tails_packages=("pyserial" "PySocks" "pycparser" "cffi" "cryptography" "PyNaCl" "argon2_cffi_bindings" "argon2_cffi-") -tails_packages+=("${requests_packages[@]}" "${flask_packages[@]}") # ---------------------------------------------------------------------------------------- # TFC Source file verification @@ -214,97 +201,94 @@ function compare_digest { function verify_tcb_requirements_files { # To minimize the time TCB installer configuration stays online, - # only the requirements files are authenticated between downloads. - compare_digest e7563ee53f93c18c9157655bc12101fd7aaa80d4a2d506a39a104003d3357a60ec67616001a453f587a4b19140af87f7d8cd4612a122b98031b4ccbeff47615f '' requirements.txt - compare_digest 401f3ad1d3059f1534d764e774a5e0b148ba7aedf0e87b117c70e4fd0e9a65f336e84227a18b2ec716bac77e32818612c25b12ced2736191d99fcfab29b1f21a '' requirements-venv.txt - compare_digest ad9b948abd2e188dd5100d71a89f62ed593e5b9869b3d59b23e7ffcf16e8b58656bcb6ce8abb13596449b675d38c3fa87185a6d1c1fdafaf04b7d8e2e8fa0117 '' requirements-pre.txt + # only the requirements.txt file is authenticated between downloads. + compare_digest ad8cd3eac919da8be4c732c44f31ab3a54c85c1f73fc9c3fc130be69ca7c566e69a9f207511d6ec32ef7957b1e70953996d7e250cfbc54f3cb35d991ff12e5b0 '' requirements.txt } function verify_files { # Verify the authenticity of the rest of the TFC files. - compare_digest d53659c4fdbd5d4597e7cb3ad67340558a325d1343121541f0d4d73d828ac8a3bbef8a38f0c59810194678fa5b19a359ee6900911a01c5169a87bc927fc05498 '' dd.py + compare_digest 4bb6ad0462768b4febe425cfd2873d7ca47075fa9b467d7d3f19f9063e9b0cf941228e5f2e72a884895913e338e5cc8b079d664377169d8e38272dfc8c2917b3 '' dd.py compare_digest 74915e048cf8b5207abf603136e7d5fcf5b8ad512cce78a2ebe3c88fc3150155893bf9824e6ed6a86414bbe4511a6bd4a42e8ec643c63353dc8eea4a44a021cd '' LICENSE - compare_digest 5a859e1d54879a9e9d8ab0f29e11073a3d231b556541b07a884d726e812568460379931d9f974d4ec245fc6b2aaf0dc135acc7a402ed97c48aa532ed3746f01b '' LICENSE-3RD-PARTY - compare_digest e70145aaead7ecb3d0191ba59668e88b70b938281a2763b581dc015a3ce3250e33de225473c2a6a96312cfce44cd2894e69bf15da45ff0cfa4e74e4185336d5c '' relay.py - compare_digest 4ef718223b5a5dde4147af784f0acb7142c7c06562917eb9d7f8c74d0caf4a1b11a264afdbaee5e3c7cf8fd0f06eea9654d754db86815dca61e6894212b3a523 '' requirements-dev.txt - compare_digest a88a24e04d6a5203962dacb0d4bb0e2e0a2f405c590701b2cb3cc90072b7c3b0528ed3f5788c6a8683543c1ba851ff22df02465ae273d85a5e05e22e5eded0d1 '' requirements-relay.txt - compare_digest 0b5f2680b92188ef63be520876a8f324b718a9503914b47a0d7ec1859b63a159cefb9082784a85527610d962e33056daf40e3ce39ca38a2aa4851ef2b4de1765 '' requirements-relay-tails.txt + compare_digest da5fad3d2dfcb2bb992df4af9ce5c7a792b489cf9f86f966610c2d5933536a8ff9f1be2ec2bf2cbc3eab46cd469ffba35a739eacd31dadb704a28f14cd75cefa '' LICENSE-3RD-PARTY + compare_digest 55b954740233846aaed4360b5ec39e5fd52c3050541b221013fd62fe66e65f21c3ef3527dc97f3db1013a26768a9f2cc1400bf84bf4b26bb18f79c00e1f500f5 '' relay.py + compare_digest 46e2d85d0a7148215385db873a3e9957f2a5f5e26e12bd1265503bdb074c2c807e720e885644b248864885cbc4129acfb4352208a22ecad4bf3c55416dc11684 '' requirements-dev.txt + compare_digest 2687a45f351f1ccdd7d0a4582b7c54756615f6b66c03703f1bff3ab25fdf4532ce30a9adb0339def64f6e359cad739d511c63fe44c1f18fcb9a49a47927dac85 '' requirements-relay.txt compare_digest 0e66cb8609a0f9abc9ca0f76298593a076cd5c8b85abaa0d8b3b765d40a2599a4ea2d33fb4792a97dc5ceee3b71e1682715f71555d5502c87ea20da922d05a7f '' tfc.png - compare_digest 4ff45e6505f4e117eae3a4d6f9a14541ac15dffe45e352bac98e6382e28636329ab561f6c677bb64ac016c9ca15c11c168b57c89e874a0bae58c841a159dca3a '' tfc.py - compare_digest acea20b6d138a8e9703ea5a2e7661d7ac2a37e704809861ab57ed37db0a8682f196ec783b3bee604f19055f46b9b0d981e5aa740224a8f473a17b794a818c0b9 '' tfc.yml - compare_digest bfc64f8bf698c74e120dbfad105767975b36b5ae077307381b567aeedfea4b4ff6ea8b96159b844ff29a4fb0f90559e76b1fd669256447c83fbd248a0ee823f3 '' uninstall.sh + compare_digest 217c3a4dabba7be2b0d0d5d948b3e02e4caef9c3d1e24e8b62f2fd874a2239bb59d3433b9f92fa8123803d7daeb6a026adaaa06396a5ca5b3e77673d919b1b2f '' tfc.py + compare_digest 356ef5005cd095c219608255b1ca61365d32ce246c0eea4bd5c565c5a4730e1e9dd0c56b85e5ba9923271db99cd5ae430480d70fbf7e23ab26b362aaaedb3103 '' tfc.yml + compare_digest 71999fc9fa70313af601e5b7a41cc21f756af9f7f79eaea5ba47a07a8f8c8ca2951bd6cf5fdba8a55604f15e83e26ffda12b71fd2db4dc1916433243471aa164 '' uninstall.sh compare_digest fe5b9289761661f1440f97d4f64b4f969842ef4ed3dcc6951ce7e5fbe71f986f5058e7fe4815e0e6b0bca9b644b95d147a2e77d367ebfec8df2733d22ed38bec launchers/ terminator-config-local-test - compare_digest b5a406ef43e83b873a10f2cbef0470c125638cbea251cadb3aadb57f5b9cb8fbb09912f05112b0b575919383e90c486daa96d6b49aeafcacebf7f67a0098b98b launchers/ TFC-Local-test.desktop - compare_digest b38a6a1a1f84adec336c0ea6779d1524ee40f182721810643d78eebea92492db9ae55a660d31306f11b0bf0c0da1ded037b5366d81b54b8f494aac9e340d7027 launchers/ tfc-qubes-receiver - compare_digest 36816ecfda0c9959d2e61504d980925ac848c512c275a068631485d36ac5590a2112c59da7361061d5055cc5a637302b28c901d956ccfb8e809a9ff1a13401b5 launchers/ tfc-qubes-relay - compare_digest ec74d5090d45ecbf5802715404efdc8870a6a06559678677987a6af69de65d79fd6d48c11e1dce36d431b4d2951df9214d8016be6c10faa149d7bd82226ec661 launchers/ tfc-qubes-transmitter - compare_digest 10323da3cac2af9e5b338fb1e88fd9ed982ffe2fc582b2903a1ffc08d251a6518d726057d71cd3f4950fe4ac5b6361e9faa26f98a774b47c719f93cbc7f36b1f launchers/ TFC-RP.desktop - compare_digest 6153f81bacf496b384e2fd547320460631ab3fd1c600998a0a88ea25c98187e1c8de6029e28880df849a85faf10bdec48e0952541527478163b8ef3097a41c91 launchers/ TFC-RP-Qubes.desktop - compare_digest 7ec05f8ef14f1a0c3460ff5d572e02667718680fccf70cf9560c7bf63c82626b83fa949e4096da060fdf5ae10dbc8167ba8d558a7564ff388a9aa327d1a3d4a0 launchers/ TFC-RP-Tails.desktop - compare_digest b5186b0375312143dc097cd2cba8513de1ba5d05d2f8725f25ed57b89f625a0a148f43aab96015f69977f00a6a3f3f78128fbd28c218c3d5d9706f4690e652f0 launchers/ TFC-RxP.desktop - compare_digest 6a1bee5561893d689dee35a06b37cc8b66fa2b4a840420250e178f19e3df2ac8248c74e83048af8a53ec2eafb8e0220eed57a9b68a438c3f994d99462cdbda68 launchers/ TFC-RxP-Qubes.desktop - compare_digest 2942bb2adb256206242c92c05dd0f270273f260cb3571b0d36fe393f89ac3dd9e132480b4a4a195bfc12c22be530cca866f9026cb717f0a6821c0569bdb0ced2 launchers/ TFC-TxP.desktop - compare_digest e502a2e20ac16e7deae76383492509ded4e426b1d1d78fba707a0735119829bbf9e7ed2bdb4975040b3ff932f16ce6e0583a1833f3a6979875ac14e739d177cc launchers/ TFC-TxP-Qubes.desktop - - compare_digest 75d9c1bbcafec1839dc93baf6afa135634f434d2426ee0f821f8a794acae9cc7ab2c6008ad642d65259c364c6960489210d00ecad53713b73048f0322f5a1f22 qubes/ service.sh - compare_digest 369632ea58b3f63a9bbc2202fb69adaa47f2a16c565f9b4a325e63f63cb0802c1e61018986100c47d5745180606be494be96ee30b2d4e56f57e4797589a1b258 qubes/ writer.py - - compare_digest dec1f3561e4345dcb7741b6ac26ec29e4bcd1b0ba421864c35c9c23ab989bc7b70cb3af46d820af65f405d390998ca0e762090d9165ded3cc1200365ccb8b902 src/ __init__.py - compare_digest dec1f3561e4345dcb7741b6ac26ec29e4bcd1b0ba421864c35c9c23ab989bc7b70cb3af46d820af65f405d390998ca0e762090d9165ded3cc1200365ccb8b902 src/common/ __init__.py - compare_digest 893a4e01bf27cb86e31b76548c3b102a000867881211217a68182367e63aa1989846a93f739f6416e230240ceccc9061f0217c3c33bbc8fad6a33810aa56f909 src/common/ crypto.py - compare_digest 9ef5c2e38d7fed503a1fc698d2cb3462771bc492ff570528b67ff4633e84dc3fa65f89e61b2b8c7b6d886f38372f4a817298830e47aa35da0b963af29839057a src/common/ database.py - compare_digest 7bdf6fd285ea5eb7d29fee3caac6bcca396420c9cd8f946c16f2259ca3fb4fd00e05a6880566d4f6f9d9801a340d9dca680502ba6327c0c50dc9a705f3d2d272 src/common/ db_contacts.py - compare_digest 8c2c8482bc0ba9a6dea6fc3aacf15ca53c49e277e13a6fb9e624b784bbb8bba8de6223702b6986be3383f38ab61eed1358f4250ac02dcdad433b8b11b3f27c09 src/common/ db_groups.py - compare_digest c84df4c3b39e7dcc9aaa1d39460f9602c5ee195386be4bf0132ce3cb85a5e36308296de940ff04ba75edbfeb1376ad916fecb16ff95011a1279a8d34c973d88d src/common/ db_keys.py - compare_digest f4f37a9975b781100f6af253ee29211449956f28f739528289dd351a185a4c9cffb1f0b0992fee6abb9417763e1c3fccd9cb2f98eafc9a6415f0b34dfe3f08e9 src/common/ db_logs.py - compare_digest 2345b2baf6e02e148698fb96b5f87ec25bd432633b5c3d121017cb3262be408110c3d39fcda579894cc8da3b857cd8cf1080188a23159ba035b81e0b41f3e0b3 src/common/ db_masterkey.py - compare_digest 5d6556ff204e2c8ae8020b80bfc7fe9beccf3abfce2f2a9311f10bba9bfb4d05c3c6e9ba7b4c6a4f51d601f516834ad9ae8021559f8b4fcf6fbaa94617a2da04 src/common/ db_onion.py - compare_digest 94ea669f13a633e7761ea3d1beee01eeac1041de1057d4b43ba63462d1d52497b17a8981080f90dc82729d3151ed3aa680f7ecff910f956c2c1451b353397b04 src/common/ db_settings.py - compare_digest c459d808a0e6d7ffeef58efba894fd5c4d3258cf31e696e0a9e5db5c8d4a61fb3764e9fcbaaf269c6e228949ddd3d115a7af0137d1bdc7d7fc496c696a00b0f7 src/common/ encoding.py - compare_digest a66eaecb01207399564c965daca09e8e0db9eb5f2f10183491e5e8954a88993d023403835f027a7ea7434dde5adc42e49ad1eeb961ac60842ff6c884153b2293 src/common/ exceptions.py - compare_digest b541d68a54ef1e2b59c935e18344d8f0f9d3f4353b15f5cc705ebeab9eb0f81f1e96ac01b1a20dd82149fba556c53a4f09e92dc153f39a23b71782cf0e6b9a4e src/common/ gateway.py - compare_digest 7d78931c42aae3f02daa89bd51c8832b38e9eb0b2833a8970704083cfba9dda039d4ff60ac169490542edd187c485f86ee8609baa79feef710db68b14da5dd2b src/common/ input.py - compare_digest 6b5e9afc5fc598900102cd6b90096799228f7e3e41884fc829dca5c78da902392e1fadeb2d0b37d7081d39afeb4ee9d22059bbb6624485268b736950834bd630 src/common/ misc.py - compare_digest 50985070c73cc5055504e3d228ecfa923a6b0ab0ea155f1ae308531f65a23d28d48141f19446e58c031c65b0c6122b42b3a907c297c8fb21e4ccfe3b0615ddbe src/common/ output.py - compare_digest 6cc10e84c9b4fdfd0f8beee6c18e565231f98ad4ddfc7a6e3f96228aa1dbee15e32feab7fdbdb66402b60efc7579b32732fe23d1313caba201b181a28d06a120 src/common/ path.py + compare_digest 19dc85a3e35f7a6261cf8ea09621ffd2dabe0e9a96f4ba504f0127825da0e3239073a0e56e2ab7eedd4053f1cb4b53b6ba98e964988a4d92efa59f0b10937871 launchers/ TFC-Local-test.desktop + compare_digest 80570937452b77e61cd716a04657a406faac7aab734e654358639714df4e51b0862c968ab05000c438d1fb7319c4faa9862cd763e90f5c0be22e27807231e023 launchers/ tfc-qubes-receiver + compare_digest ecedbdc6a3ddff31e81da2cc1ad12997411c7ed5f11a1701df443b293f0cb06c005d062f13f1e0ddac39939c5068f1e1833de2238a0efc243b75b3a0b6ca7eb7 launchers/ tfc-qubes-relay + compare_digest e3b1a1ecac9fccdc4a708351fd71fd0897621446df13fde0e2ebc34d4704d945dcfdd256af1cec92d6ebe6c5497bce3db98d052f8885db8e579345769e5fe758 launchers/ tfc-qubes-transmitter + compare_digest 2cb288015524281c001c2090c952a607a984568f8d62146a5e7bc4ba8cc8e4105fb411324cc8806a05ad99b501d9585bbded43b5ad8762db698ea6ef7681e1ef launchers/ TFC-RP.desktop + compare_digest 6bb0b26d0f9cd800fae0a1cdd13c48bb030fa9141591d5f8dde02b55693b47213e1989095f4187f286f515314b50ee25c90364a4dad7099b6bf15cf39cbeb183 launchers/ TFC-RP-Qubes.desktop + compare_digest f1cdc9d5b3610686a3be43b9fd050521e16780fa59b914036eb90ebbc027bc0bfcea3c38b84b3fe2f5cd63fdcebae18854606ad4cfe27a34c1e2aac95baa9c26 launchers/ TFC-RP-Tails.desktop + compare_digest 228e401ac0fe9a20125cc8a6370daf61c81da0ef24216eaca7364777a373559d170a6f27757814ff31b6856c02e37a5e004e03875d9688f76cc3f97bac5c581d launchers/ TFC-RxP.desktop + compare_digest fb9fcb15ba4853cd07b61566e071dfca68a61de717ca29765e472cbbbc08215fde967e83e5744f7c29af3a45a4a4c5c6f18eab0076dab08eec3516455eb0b8b6 launchers/ TFC-RxP-Qubes.desktop + compare_digest 1db227da47e7e818461b3ada5318d08e963ce55287d12d0239ad19f0746c43d8b1b3339b810e5048af48868e69dd8722976f01e981ee39240ff613cc2470ff31 launchers/ TFC-TxP.desktop + compare_digest 46d22f767b973f095ae1580d31731f0448bbe4a06d645cb8f6c02678e4779c32b7e778d21bae15186b9855ff4a731e1de9c2d77572e2a3e29bf2bd4bda63d954 launchers/ TFC-TxP-Qubes.desktop + + compare_digest 523ae2069b86a30952575f5ca2a2ec46ca7f8e4705602d3a709b9a88dccdd4bd236dcf1aa0988b632e621a18cc546e815eb73946c6db307fa4bfa51d7a51a804 qubes/ service.sh + compare_digest fe5ae2641998bc31ff723cdcecd85b68373df978c4b8a032058ff636e4445bfa63264fbe309d2be6f664176372d84bbc9b99d39acce447a6d25b51575ecd004c qubes/ writer.py + + compare_digest 90218be097758a94ed60189393756682fa84cac0c025bd9c3c1f26bf21357800398ac505eb9f4b0f565ff3cfe52c48a0463a939a60e1e197a674d88cda314583 src/ __init__.py + compare_digest 90218be097758a94ed60189393756682fa84cac0c025bd9c3c1f26bf21357800398ac505eb9f4b0f565ff3cfe52c48a0463a939a60e1e197a674d88cda314583 src/common/ __init__.py + compare_digest f3770e6eaf83f26d95e6dbc7e287bf6959a52753eaf743e4f1f600615d5d85446e49bc6b68083a0bc66ce62c7d12259ec2f7019da65f42c0735311e1be6aa0b0 src/common/ crypto.py + compare_digest b18f02061b26b4bbfe2e6b7d073dc4f72b652756bcd7067509a2216e89ef41e9e3004541412e3dea00663a46b870d0423fa8040f2c1f613d8f32c649937f0b57 src/common/ database.py + compare_digest e581b79859eb74096263732c84319260833bacc6d595b3592d61bf630271807c13896d2278724fd1d439c5d721d856c6b77f38d61e542bcd3c75828eb93d362f src/common/ db_contacts.py + compare_digest b32d333356b53487761c6c7214f60ff526aff0f42cdce7eb7fe26f3d528d60ca97ed728e3deaa3d322e2c1d2460fb9f5bc8e8b7d5147f360362645a820f1ded1 src/common/ db_groups.py + compare_digest 37bebfafaec2ca8d9e02ff2090092954f8fb07a4163d17c077c4c67958c97189babbc6cffb706440000c4ac1d78662bd52f088ab8dc6b29215077ef6a0af7a95 src/common/ db_keys.py + compare_digest 9adb670eeac30cafcd95e64c5250cae5d7d3543cdb80e00ef8a71f3fc6b43547eb4b282b66e2483cd9905db99fc12ce2bdd8a2255dc8457cf8d589b0370f7770 src/common/ db_logs.py + compare_digest 5b22c434083e07f17a0bc8d5a8fae47ab774e244b98575541ea39fb0472c9a43a9a6e4286fb244209965394f7dad0bf57c34f360d4f7a24924a361aea505efea src/common/ db_masterkey.py + compare_digest 59cd5925a5727d796c516a038955965564d30b5fac529b069623d14fa43eb2cd344ed6b3688f42e7019483c12b587c21fcfc4875db273e6f959fb99c8c502029 src/common/ db_onion.py + compare_digest a33144fe0650f30c50753178023169fdd77e9f23a94fc19e1bd3f555d216831f8752301524e63d90d2f89ee9ecb54fbdcdc52c47530466ee7a5182d4b1900f90 src/common/ db_settings.py + compare_digest 9b67271611202da7bc112a460f53e96d9cd4e713407087a2a1ef1bf927a675ff8f51e65ce77168d325e599e59f4963c13d6e964464352011f27497e7783b3c5f src/common/ encoding.py + compare_digest db23bde3df574af6de3eeebcefc73169c6932a7c97dcfda004c9a26108f575f3de443be4f069474fb9be89936ebd445c8efd6594da3986141195b65175566ff7 src/common/ exceptions.py + compare_digest 6b82499438a7c48e1e9e563fdc4e756fb0a0523289c06a554fa7eeecb62b2a63d2c2dee368266483142c5b7394a4c256609c21033a8c26e15a126f270dc126a1 src/common/ gateway.py + compare_digest 012e3e1be22084e6b43cf66a7c1d81779e4a2317f1558b126923929b0f10b36ebd356e99d386de72731d528884b864fb48a1d7a0c4f77bac94c148af18480df2 src/common/ input.py + compare_digest 24c7e4d83f5282f05d821808b0cf5412be95a81f30650cfd699c41e5cdacaeacb31f9a6df01a20e9a22cd9d75843e409c745e7a4940ff3ca5f0fa3749b35ca28 src/common/ misc.py + compare_digest 776b60201db1ccfa593015b9c4e5877adf0c184cc5f41b22e2d3dd54106b01a2f9e817493283c58c416d0d28081bc94f2fe7db9f336cfec2f65e40a85c4d326e src/common/ output.py + compare_digest f1805ae899c94c80aaaadc7fedb03e09525288542f96cc660ac4bb1da5be4c123bc068cd426c529b99c679e4a1e9a63ac0a8c2eca964af9bcd3a0bfdc8da398e src/common/ path.py compare_digest 0cf08cbd61b1be94142414c03f6931df7c06ff944f150855bb52b13abd8f1dd29506be041cd4b77eb83a2c4617702b4dbad3e9a5097256c36b1d444f20ccb4da src/common/ reed_solomon.py - compare_digest ced1583b680f03453084dbc241a57cc29b8421ae7126844a9279a0f0d01c23d234630657384482b7af5e8b7f1b7343c086c515c4e7cf0daae585dc38c507be03 src/common/ statics.py - compare_digest 66fe7fad5ad3e363fba36ed7c7177e97d17cb7fdecf0f303a9015cffafbd523c8d02393cfd297dc5e463bddf62e13daf21c19d9614a0814170f524616b81ff29 src/common/ word_list.py - - compare_digest dec1f3561e4345dcb7741b6ac26ec29e4bcd1b0ba421864c35c9c23ab989bc7b70cb3af46d820af65f405d390998ca0e762090d9165ded3cc1200365ccb8b902 src/receiver/ __init__.py - compare_digest 2f885f2fe58621971726502f27167a04a89d6027e5ae3e57e4b44b8edf4215f9a0b8e71d839ed9e4af1705e67a77c5a5871f8e4d1dc39990063b356f00b85db3 src/receiver/ commands.py - compare_digest 521ccc6415e0c2d22298a0a1a8bd726aed7cea1fb7e88cb496b718c7c10865d1377f70b9f7ed7edb893de4c0e5b3f040578179d03d6104258be5ad46793bb359 src/receiver/ commands_g.py - compare_digest ecf8a3c48968d458d207efa5fc24a51efd1dbd603e8c9015247770177d0aabaab0ee86f114c00124fc5c33af2e93c198d308715503f2d8dd00f47a214fe63cef src/receiver/ files.py - compare_digest c53276e1016177b64ef498e783ae43cf7f79261b4b8c5061f570b80a1473675f701d9cb5bf046656a0b6fc6832e9f3a62754a84061c55983cdfc157d3623e87b src/receiver/ key_exchanges.py - compare_digest cdf5ce3314e4c03fb4f02704df1a32b24b215bb97aad5f01b42c72e9c57e641b8e0deb698cb447cf9bf4ef07e9e2bfa993f23fedb5e6dfb6d664313a0b55093a src/receiver/ messages.py - compare_digest 8faa3f3048b01076d17e615717cbf462da80b940e045cf290754004fb5d004c4f1c5f23d5ef4953e38f34bed853e3776d7a23c2fa1c4c9cc96b531f9547fae7d src/receiver/ output_loop.py - compare_digest 18b08924727e734208443e2d5468104d4dc1226042ee76e5447dc8e644403f2397cbe1fa403f3bd698826aef726df39298d06f581f1b381ed29a2c8e1c1b6900 src/receiver/ packet.py - compare_digest 668f1131659cc806485b734eb5a221691c92a2c42a705aee93fff0307d377c07c18475e98291847c9655bec1c758e8f22a9ee049a3927c64b064f1fdf89552ac src/receiver/ receiver_loop.py - compare_digest aff8b5ef318128aabd1071bc3e1da03a44e25c9a4888116b604058bbb0af2ed61f0e8b912b1eaac0b95015a8c84c9dcec2a3e20831ada7da23208db8bb87e84a src/receiver/ windows.py - - compare_digest dec1f3561e4345dcb7741b6ac26ec29e4bcd1b0ba421864c35c9c23ab989bc7b70cb3af46d820af65f405d390998ca0e762090d9165ded3cc1200365ccb8b902 src/relay/ __init__.py - compare_digest 99f173d8beb8eeae16f5e693eb80d87042287cae529f18e2fc2f42939633dec8f7ad3bb29db2c0f2f3dd13b4a3221d8095c0aae6b1e5de70678b26ea496b247e src/relay/ client.py - compare_digest f6ea4d522f94e73e58673149d0dcd80278e197bd0e829fb7597da67be43655b67eb8047212aa2ef1beaf504942367be6f08594efdccb89041ebe1e74f11bda22 src/relay/ commands.py - compare_digest 4a3d35fd0872b5883d070fa3f18c703a392e87b0dc55e564ab4cd1dab16e5c429e69573ec4095cfc62af214f48d1cb80fdb2859daddf1525963b99822d4b20f0 src/relay/ diffs.py - compare_digest 13341d7965a6e6c86826003dc72ef68dd2f2403d4b54fd30f39a046a2669c76cfac9e3fb4f7c13e2887ef4dd5bfd7c7c5258434e98262ad7c8ec15de4f235514 src/relay/ onion.py - compare_digest 7858b264d751e68affd3f0a42a8afe8e30aaca32c2be1952e67ed8c4e7a158adfd49000209dd173fba83b2e1e22de217892fc3d906194dec1f5691456d89c30b src/relay/ server.py - compare_digest d3844c5ce4e756199af4dc17ba16415297cc5b6298ce23af348198945a617ff9b45dd7c0b7006e0bd5e5fc7cde285bb56b7e89d1815cb94e5b00417f8283e1d3 src/relay/ tcb.py - - compare_digest dec1f3561e4345dcb7741b6ac26ec29e4bcd1b0ba421864c35c9c23ab989bc7b70cb3af46d820af65f405d390998ca0e762090d9165ded3cc1200365ccb8b902 src/transmitter/ __init__.py - compare_digest beda28e4c8a7d384f7a2d69a6b44155d5a35036c015ea813607b3713fafe2628565e920da5db4b7d54c79d644a8126471398c58b9643d21b38fcf451560cf9b1 src/transmitter/ commands.py - compare_digest b12a6f375ed4e74e169dc195cb2c5a1fb200c70bd2330734353bef2eac21e798cc382b1baf81719fa0eba3c83728fba15df177bdf4e23e5eefe6cd54ce828f41 src/transmitter/ commands_g.py - compare_digest 48d84a4b91016dc3a6b8207542bd889920ec72a5cef8d2d95f6ea965e19e66d14aca303c5ebb5f713a1d01fb6b5a6e816da41431cfc643a272d4285d501ef70a src/transmitter/ contact.py - compare_digest f1fe6e6dc939f090b8015ac3523ffb430cd46e758cbde3a075a665f6fa20360268fabaf15cc535a5a5366b0a1bf6bcc4687f938ade76ac29f19fb960d7870997 src/transmitter/ files.py - compare_digest d42cf63dd6bdfc9c18bb185fe858958ecc7c073051825725549288fca9fc306d0bd156fe5dfe1ba24607ad4350bff2ba1632970ad7aaee14a82db146328c99b5 src/transmitter/ input_loop.py - compare_digest 4f1d60e207975d96bf95ea33a4bbb3b97dc4363e79fb9f8908049355fd36aadcc1ee1e833ca045ff2b667f92754024d3afb97aceeb370599c15850934315a0d5 src/transmitter/ key_exchanges.py - compare_digest 29754d677dc4c055bfbba3c55e063a6be286f180c73f699808a46b6516e27b6794131c8caf542af19df337f85e229865226c5d7b8072134228da1a284badb884 src/transmitter/ packet.py - compare_digest a4a695b98a7ab26e6fab6352adff7f4a96e23174e522275c3bd2a8ef0f9bac7b3aaa217816e5ac58d8ba49ba22a3dc8e0ebd9486df46647318b159e7def9f901 src/transmitter/ sender_loop.py - compare_digest 06b9530109ad665ca029aa5a6182c4ba45f82745505bb088b93a66431b7a529d96efcf648c42ac7d2f847ef171bba200727d3be425862296722d99099fc2505f src/transmitter/ traffic_masking.py - compare_digest 6230ecccbf05b3808e897ab8fc0ca46ca727fca2317ccb28a5a432072d77da87a28bc58de71bce09275685a5004d47ec366b35e89b1cbfe272f61b1a09ee3a6a src/transmitter/ user_input.py - compare_digest 3fda3b9551f1c2fabd6a8efe824bf273dfa870bf68f5d8ef9eb2c53bbd424767d01ab39eb1358bcaa48518649efdd3ac43f12ad519376efc35b76c070d3a11df src/transmitter/ window_mock.py - compare_digest 3ea2c5e612519c8b77d953234a9427abaf8b64e502453e78d759a61f47b4b170bec602a3590316b41335bb5344174e2446616b8688dd788f0052fa3b33dcb740 src/transmitter/ windows.py + compare_digest cbb72e8ce58a7bde532aed54260be4ecd421d973f942f56c98539ba6c957c4dad094bd3ce2793324f3fd25375491e5b313786f2ead9dc93a06e88588b043f061 src/common/ statics.py + compare_digest ba0e77bffa8243ea13565664133e433bf72925d5ddd5c6e599dd24e58c0728aa55f496db06d25fba0d3050aea4163d1b6bc81d1b8fb75e48bace43845e83df70 src/common/ word_list.py + + compare_digest 90218be097758a94ed60189393756682fa84cac0c025bd9c3c1f26bf21357800398ac505eb9f4b0f565ff3cfe52c48a0463a939a60e1e197a674d88cda314583 src/receiver/ __init__.py + compare_digest 6b3860213104873fbfd59917e4d52e31466696f3494ffbbd5edd4a8bccacfc72e3141b2c6779d52da7d393b501f03a40fb0d4e86270d65fd1129ad3d508ed98e src/receiver/ commands.py + compare_digest b33c47f47ce37b7f3905ff99f690300cbd4b96e6b2d4b785f06361b47d9993e6a6740435e09313cfacd63650705e85eeb29c49706da369c2424205b9cdf44a45 src/receiver/ commands_g.py + compare_digest 5838632327e7b3fdd5c5c17f3f2d75db7a62d75f7444b9d2bebda7b72ed3f48c82745d8aa78a74320f8f6c4e6d22b1228cab0a8c0dfb2fa1d642c8cc85ecfefd src/receiver/ files.py + compare_digest dfc94e6762f5c20af24aff902c039733d1c9cc89344d259de62e1acd768bfb3690401f1ebfd1c26e11346ee0b443d22d0f7029373100a9c4f08078b068b47ded src/receiver/ key_exchanges.py + compare_digest 92b4b00726e2722ca7e96178e5716e72a440ead63289a9acedb30784f7cdec410a8577ee71c5384fdb54c7a654ab09828f1713109ec2f167df9ae97fda9c2578 src/receiver/ messages.py + compare_digest aa76be19d367c89f94884ddfcec88c76215628d2a12b815a7d9990e85d921c42885a60bd3dffd88b64b68a7a414a12e1ff2e8c5b6994df51576a1b31dd9b1b91 src/receiver/ output_loop.py + compare_digest 0ec4241a996dce75009dc53783e06c500acdd55de45b11e191b1b1b0a41a896c9138299ef0ef5356370881249e7358d0a1a9e9d440883584603675cc3afa47ea src/receiver/ packet.py + compare_digest 5ca450c91633d53d4c23ec981ce7343cd67f7264f6530e67d3ef8e61d8e6731b18bb27df07876512d17147bb46e0d84f486e3fda2f1950c7b563000f3a5a88be src/receiver/ receiver_loop.py + compare_digest d8f4295a9ca479a79d9b07ecd509878dff29bb4b30d51a74bc405f205db4d2eac429a6b1b2091bd031dbb777ff2e2553c6ec0cbb2b33ebb896aa79c9bcae07f5 src/receiver/ windows.py + + compare_digest 90218be097758a94ed60189393756682fa84cac0c025bd9c3c1f26bf21357800398ac505eb9f4b0f565ff3cfe52c48a0463a939a60e1e197a674d88cda314583 src/relay/ __init__.py + compare_digest d2336f5e6a5aa5c41c39f95b4fe6e1413e5a87ac305cb31916c58df130cff81a6952045942b63f1546c82d6d3b05c38e3d0c6ddd69428d239a9030d150bda562 src/relay/ client.py + compare_digest a56aa18162a25b2fb665ec81b93745bd9aa8e2b5ef88f75a0984ef50ef2fb7d90cc2287c4e1ce54b2fcbca89f7a89e84024d58904c4d6c948fa356448466bc63 src/relay/ commands.py + compare_digest a27e65526e0eb40319dd65a2739d94e2aae6c0d67eefc3885f54c8ebdd390d8331f8682aff56aea9911e94a24edecf28435011eed7713dbdca58a9e7f927bf22 src/relay/ diffs.py + compare_digest a5ff25e6a99dddc87f2fa26bfb7271a108af1b418a0ebae9c90b455226e2c06016c12a01e78d05b40235e87111354f80090294c6bf5a48f74a5a94956c72bb55 src/relay/ onion.py + compare_digest 49e838d7d5758cd94ff547fbebfe3a5de08bf5b2e1e7c35313d29c20ee24d258484996a11b36402de4113704efcf8fdec05db23a4ab774d5cfb7a4670f7f697b src/relay/ server.py + compare_digest 0a702b1ef2be7f359b8f43e27ca917d39c36ecf47b98b57829b9d1729a9149e8543089ee332f67d0aece79fd16c12f563090d70ecc1203e355368fb80f5e508f src/relay/ tcb.py + + compare_digest 90218be097758a94ed60189393756682fa84cac0c025bd9c3c1f26bf21357800398ac505eb9f4b0f565ff3cfe52c48a0463a939a60e1e197a674d88cda314583 src/transmitter/ __init__.py + compare_digest bd7ecc8ac586597823f88ba93b3202fa29e01157ee901091f2d1c574d5e1a693982a26067cf21749de3f794076bca85a7267975b4864b4bb62461be53cb8fe5a src/transmitter/ commands.py + compare_digest 985a828b4ef321fc90f0486005de8a9b3b522b020af054abbec0670803eb8ee119795c8039ba7f1d7c3f2e7b68b96e6cf2454ef210687d0a0ad7fcf5bb3f4a89 src/transmitter/ commands_g.py + compare_digest e5fd8ab8978d38fe617606581783d0c9807dfcc8c95e0e31cd3a7d1ce6ad88d3f88ba49c070ec69743c11b8707a6cd1f4ea979f2dfe49621a095e910e14a82a8 src/transmitter/ contact.py + compare_digest e14e407035e0b8342320f205d1b934c5f521ae2e86aaeb8fc6265572b0aed06e64fc86b0b96253efe45f4499b3ecd80c865e3424c5d2cf46d3e31f051232b8a9 src/transmitter/ files.py + compare_digest ad73ffa1c20620a01cf846a73cf0f3d0dc786beaa3be00bb3996ca087ca1d8a960f962474989ccf096f98b94d73c65552e0905c8b697c9438ffbcb3fded235b9 src/transmitter/ input_loop.py + compare_digest 0a30f4e76bce2c9cff0511ea191e55060007f302b1b985083f6c56856893fa15a2d4e5bcf069ced0cee7e9e2c81d943838e124cfd3cd670fa732b1baff149726 src/transmitter/ key_exchanges.py + compare_digest de827c1be6adc2fc36c115eb1fee6670488cb9076b89d755d3b1edcc322321424e4b3c5e86d1e49ea1e26c75ea727765890f7aeffc88a7fa235f1359efa83d6b src/transmitter/ packet.py + compare_digest 52e6332a949dc15be10699e5e156aea6ba1e4ac4bc10c2e8777474c627569b7e3ca79f79b1ed2e4799704ba94ea7aa653a85b891c35273e51170239d851de485 src/transmitter/ sender_loop.py + compare_digest b4a0e38437caef8256fd46087b8bd85757b9c459684ba16b26fda80e3f7bb472dfe3cb0118c3831d08d5a96a40b97185144ad2e730cfb29492aab588a5db3e60 src/transmitter/ traffic_masking.py + compare_digest d34dbf120e6bd2ec68b1becb719b5cc45a134ac4293abacdcacc992709577fcae41083814cd6b1c9d80eede3faf836fb5c58fd672c8a2fa8c55ee77756436f72 src/transmitter/ user_input.py + compare_digest 3855e30bb873099b6273138f3b9532d3fbc217b91e9c8953620817c34f7ef7214abf83579e3aa1d47df1997d581516871f9889f3a3bdd8a23d4209b02df659c9 src/transmitter/ window_mock.py + compare_digest c06e0aae612984abb469b38f5382885e9cd2e122e42957cc3099e062f1d77c834c4aa01d6f470227ee91ae438dd90ec81e6ec41756fbe61445c8a571947f32c9 src/transmitter/ windows.py } @@ -409,13 +393,11 @@ function steps_before_network_kill { wait_for_tor sudo torsocks apt update - sudo torsocks apt install git gnome-terminal libssl-dev python3-pip python3-tk net-tools -y + sudo torsocks apt install git gnome-terminal libssl-dev python3-pip python3-tk python3-virtualenv net-tools -y sudo torsocks git clone --depth 1 https://github.com/maqp/tfc.git ${INSTALL_DIR} verify_tcb_requirements_files - sudo torsocks python3 -m pip install -r "${INSTALL_DIR}/requirements-pre.txt" --require-hashes --no-deps --no-cache-dir - sudo torsocks python3 -m pip download -r "${INSTALL_DIR}/requirements-venv.txt" --require-hashes --no-deps --no-cache-dir -d ${INSTALL_DIR}/ - sudo torsocks python3 -m pip download -r "${INSTALL_DIR}/requirements.txt" --require-hashes --no-deps --no-cache-dir -d ${INSTALL_DIR}/ + sudo torsocks python3 -m pip download -r "${INSTALL_DIR}/requirements.txt" --require-hashes --no-deps --no-cache-dir -d ${INSTALL_DIR}/ } @@ -526,23 +508,12 @@ function remove_common_files { $1 rm ${INSTALL_DIR}/requirements.txt $1 rm ${INSTALL_DIR}/requirements-dev.txt $1 rm ${INSTALL_DIR}/requirements-relay.txt - $1 rm ${INSTALL_DIR}/requirements-relay-tails.txt - $1 rm ${INSTALL_DIR}/requirements-pre.txt - $1 rm ${INSTALL_DIR}/requirements-venv.txt $1 rm -f /opt/install.sh $1 rm -f /opt/install.sh.asc $1 rm -f /opt/pubkey.asc } -function install_virtualenv { - # Some distros want virtualenv installed as sudo and other don't. - # Install as both users to improve the chances of compatibility. - sudo torsocks python3 -m pip install -r ${INSTALL_DIR}/requirements-venv.txt --require-hashes --no-deps - torsocks python3 -m pip install -r ${INSTALL_DIR}/requirements-venv.txt --require-hashes --no-deps -} - - function kill_network { # Kill network interfaces to protect the TCB from remote compromise. for interface in /sys/class/net/*; do @@ -637,8 +608,6 @@ function install_tcb { VENV_NAME="venv_tcb" - install_packages_as_root "${virtualenv_packages[@]}" - # Temporary fix for pypa/virtualenv issue #2350 export DEB_PYTHON_INSTALL_LAYOUT='deb' sudo -E python3 -m virtualenv "${INSTALL_DIR}/${VENV_NAME}" --system-site-packages --never-download --always-copy @@ -652,7 +621,6 @@ function install_tcb { sudo mv ${INSTALL_DIR}/launchers/TFC-RxP.desktop /usr/share/applications/ # Remove unnecessary files - remove_packages "${virtualenv_packages[@]}" remove_packages "${tcb_packages[@]}" remove_common_files "sudo" sudo rm -r "${INSTALL_DIR}/src/relay/" @@ -676,8 +644,6 @@ function install_relay { VENV_NAME="venv_relay" - install_virtualenv - # Temporary fix for pypa/virtualenv issue #2350 export DEB_PYTHON_INSTALL_LAYOUT='deb' sudo -E python3 -m virtualenv ${INSTALL_DIR}/${VENV_NAME} --system-site-packages --always-copy @@ -690,7 +656,6 @@ function install_relay { sudo mv ${INSTALL_DIR}/launchers/TFC-RP.desktop /usr/share/applications/ # Remove unnecessary files - remove_packages "${virtualenv_packages[@]}" remove_packages "${tcb_packages[@]}" remove_common_files "sudo" sudo rm -r "${INSTALL_DIR}/src/receiver/" @@ -728,12 +693,10 @@ function install_relay_tails { read_sudo_pwd t_sudo apt update - t_sudo apt install libssl-dev python3-pip python3-tk -y || true # Ignore error in case packets can not be persistently installed + t_sudo apt install python3-tk -y || true # Ignore error in case packets can not be persistently installed create_user_data_dir - VENV_NAME="venv_relay" - torsocks git clone --depth 1 https://github.com/maqp/tfc.git "${HOME}/tfc" t_sudo mv "${HOME}/tfc/" "${INSTALL_DIR}/" t_sudo chown -R root ${INSTALL_DIR}/ @@ -741,36 +704,11 @@ function install_relay_tails { verify_tcb_requirements_files verify_files - # Tails doesn't allow downloading over PIP to /opt/tfc, so we first download - # to $HOME, move the files to /opt/tfc, and then perform the hash verification - - # Install prerequisites before downloading other packages: This ensures pip accepts manylinux2014 wheels - torsocks python3 -m pip download -r "${INSTALL_DIR}/requirements-pre.txt" --require-hashes --no-deps --no-cache-dir -d "${HOME}/" - verify_packages "${pre_packages[@]}" - install_packages_as_root "${pre_packages[@]}" - - torsocks python3 -m pip download -r "${INSTALL_DIR}/requirements-venv.txt" --require-hashes --no-deps --no-cache-dir -d "${HOME}/" - torsocks python3 -m pip download -r "${INSTALL_DIR}/requirements-relay-tails.txt" --require-hashes --no-deps --no-cache-dir -d "${HOME}/" - - verify_packages "${virtualenv_packages[@]}" - verify_packages "${tails_packages[@]}" - - install_packages_as_root "${virtualenv_packages[@]}" - - # Install Relay Program dependencies to virtualenv - t_sudo python3 -m virtualenv ${INSTALL_DIR}/${VENV_NAME} --system-site-packages --always-copy - . ${INSTALL_DIR}/${VENV_NAME}/bin/activate - install_to_venv "${tails_packages[@]}" - deactivate - t_sudo mv ${INSTALL_DIR}/tfc.png /usr/share/pixmaps/ t_sudo mv ${INSTALL_DIR}/launchers/TFC-RP-Tails.desktop /usr/share/applications/ t_sudo mv ${INSTALL_DIR}/tfc.yml /etc/onion-grater.d/ # Remove unnecessary files - remove_packages "${pre_packages[@]}" - remove_packages "${virtualenv_packages[@]}" - remove_packages "${tails_packages[@]}" remove_common_files "t_sudo" t_sudo rm -r "${INSTALL_DIR}/src/receiver/" t_sudo rm -r "${INSTALL_DIR}/src/transmitter/" @@ -794,7 +732,6 @@ function install_qubes_src { VENV_NAME="venv_tcb" - install_packages_as_root "${virtualenv_packages[@]}" export DEB_PYTHON_INSTALL_LAYOUT='deb' sudo -E python3 -m virtualenv "${INSTALL_DIR}/${VENV_NAME}" --system-site-packages --never-download --always-copy @@ -807,7 +744,6 @@ function install_qubes_src { sudo mv ${INSTALL_DIR}/launchers/tfc-qubes-transmitter /usr/bin/tfc-transmitter # Remove unnecessary files - remove_packages "${virtualenv_packages[@]}" remove_packages "${tcb_packages[@]}" remove_common_files "sudo" sudo rm -r "${INSTALL_DIR}/src/relay/" @@ -834,7 +770,6 @@ function install_qubes_dst { sudo chmod a+x /opt/tfc/qubes/writer.py sudo chmod a+x /opt/tfc/qubes/service.sh - install_packages_as_root "${virtualenv_packages[@]}" export DEB_PYTHON_INSTALL_LAYOUT='deb' sudo -E python3 -m virtualenv "${INSTALL_DIR}/${VENV_NAME}" --system-site-packages --never-download --always-copy @@ -847,7 +782,6 @@ function install_qubes_dst { sudo mv ${INSTALL_DIR}/launchers/tfc-qubes-receiver /usr/bin/tfc-receiver # Remove unnecessary files - remove_packages "${virtualenv_packages[@]}" remove_packages "${tcb_packages[@]}" remove_common_files "sudo" sudo rm -r "${INSTALL_DIR}/src/relay/" @@ -873,7 +807,6 @@ function install_qubes_net { sudo chmod a+x /opt/tfc/qubes/writer.py sudo chmod a+x /opt/tfc/qubes/service.sh - install_packages_as_root "${virtualenv_packages[@]}" export DEB_PYTHON_INSTALL_LAYOUT='deb' sudo -E python3 -m virtualenv ${INSTALL_DIR}/${VENV_NAME} --system-site-packages --always-copy @@ -886,7 +819,6 @@ function install_qubes_net { sudo mv ${INSTALL_DIR}/launchers/tfc-qubes-relay /usr/bin/tfc-relay # Remove unnecessary files - remove_packages "${virtualenv_packages[@]}" remove_packages "${tcb_packages[@]}" remove_common_files "sudo" sudo rm -r "${INSTALL_DIR}/src/receiver/" @@ -913,8 +845,6 @@ function install_local_test { sudo torsocks apt install terminator -y - install_virtualenv - # Temporary fix for pypa/virtualenv issue #2350 export DEB_PYTHON_INSTALL_LAYOUT='deb' sudo -E python3 -m virtualenv ${INSTALL_DIR}/${VENV_NAME} --system-site-packages --always-copy @@ -930,7 +860,6 @@ function install_local_test { modify_terminator_font_size "sudo" "${INSTALL_DIR}/terminator-config-local-test" # Remove unnecessary files - remove_packages "${virtualenv_packages[@]}" remove_packages "${tcb_packages[@]}" remove_common_files "sudo" sudo rm -r "${INSTALL_DIR}/qubes/" @@ -957,12 +886,10 @@ function install_developer { VENV_NAME="venv_tfc" sudo torsocks apt update - sudo torsocks apt install git libssl-dev python3-pip python3-tk terminator -y + sudo torsocks apt install git libssl-dev python3-pip python3-virtualenv python3-tk terminator -y torsocks git clone https://github.com/maqp/tfc.git "${HOME}/tfc" - torsocks python3 -m pip install -r "${HOME}/tfc/requirements-venv.txt" --require-hashes --no-deps - # Temporary fix for pypa/virtualenv issue #2350 export DEB_PYTHON_INSTALL_LAYOUT='deb' python3 -m virtualenv "${HOME}/tfc/${VENV_NAME}" --system-site-packages --always-copy @@ -994,12 +921,12 @@ function arg_error { clear echo -e "\nUsage: bash install.sh [OPTION]\n" echo "Mandatory arguments" - echo " tcb Install Transmitter/Receiver Program (Debian 11 / PureOS 10.0 / *buntu 22.04 / Pop!_OS 22.04 / LMDE 5 / Mint 21.1 / Zorin OS 16.2)" - echo " relay Install Relay Program (Debian 11 / PureOS 10.0 / *buntu 22.04 / Pop!_OS 22.04 / LMDE 5 / Mint 21.1 / Zorin OS 16.2 / Tails 5.12)" - echo -e " local Install insecure local testing mode (Debian 11 / PureOS 10.0 / *buntu 22.04 / Pop!_OS 22.04 / LMDE 5 / Mint 21.1 / Zorin OS 16.2)\n" - echo " qsrc Install Transmitter Program (Qubes 4.1.2)" - echo " qdst Install Receiver Program (Qubes 4.1.2)" - echo -e " qnet Install Relay Program (Qubes 4.1.2)\n" + echo " tcb Install Transmitter/Receiver Program (Debian 12 / PureOS 10.3 / *buntu 24.04 / Pop!_OS 22.04 / LMDE 6 / Mint 21.3 / Zorin OS 17.1)" + echo " relay Install Relay Program (Debian 12 / PureOS 10.3 / *buntu 24.04 / Pop!_OS 22.04 / LMDE 6 / Mint 21.3 / Zorin OS 17.1 / Tails 6.2)" + echo -e " local Install insecure local testing mode (Debian 12 / PureOS 10.3 / *buntu 24.04 / Pop!_OS 22.04 / LMDE 6 / Mint 21.3 / Zorin OS 17.1)\n" + echo " qsrc Install Transmitter Program (Qubes 4.2.1)" + echo " qdst Install Receiver Program (Qubes 4.2.1)" + echo -e " qnet Install Relay Program (Qubes 4.2.1)\n" exit 1 } @@ -1019,7 +946,12 @@ function sudoer_check { # Check that the user who launched the installer is on the sudoers list. # Tails allows sudo without the user `amnesia` being on sudoers list. - if ! lsb_release -a 2>/dev/null | grep -q Tails; then + if grep -q "Tails" /etc/os-release; then + return + fi + + # QubesOS also allows sudo without the user `user` being on sudoers list. + if [ -d "/etc/qubes-rpc" ]; then return fi diff --git a/install.sh.asc b/install.sh.asc index 4ae4c80..a2e151f 100644 --- a/install.sh.asc +++ b/install.sh.asc @@ -1,16 +1,16 @@ -----BEGIN PGP SIGNATURE----- -iQIzBAABCgAdFiEEzfgfGFPPsy7K6GE8cDWXnAcq3qUFAmRB+a4ACgkQcDWXnAcq -3qVOeRAAhAC/YaCzsvFtq9A7q4kxjIMZIycic8W2tR2ObrR4YGRw1vl6b4RNjSJU -pi7mKEwchzGu6j/rD+N4CqSf5Rn+WTVxiSvRnwCZgqI4Ph+cLvKhHETMliRSgSz5 -sbnCoA5DazrOkSUiiZ/8/EHE8RbsQMQRNC4I2cnuqj1ILw3BpqCc6MYPKMKheHxm -plUCv35C0FDHICfRsJhDt7lgnlyVRNkQl2+zyTBUuv+Hl04hwlevvMF7eqap++dN -BJzFsbWY8zEM18sanK75vYmofK5z3nnp1takisN6lXEI6bdWDCi0U1ohAy+AfYaB -35AO+4OWVc5glvw2S2w7XsKkQD9pUwYHlMJd/3mV4lDQQc+8xtLYiKGD+jt/zjSH -DnKS2qqmAfkj4eZzjMPcq9NOyJxXTZS7mas0WEFVlHSoEkW+aBJjTLlfpWUtQlid -rwK/mKV9mbJ9TRlI0QDu3CeUQNWbZyOUdMBzAxvcOcnt4IaPBw08b5Xk79cfwLCd -1C1ea4/W0p3DrdQ4wo6s5kW5V9qoMM53NZYtzCBU/eMeqIL7lw2OWx0E8RgR8+7h -zKLxuZ+qxjR4TBV8577JFn4dwmYgLd7jr5XZEk9JmNnGRpAAJqSITZG/z/GcSMhJ -bnDj263ibcwnnjOS5Uj+g9zjF9m/oyCg5F8wcx/HC3y924snGgI= -=Ieok +iQIzBAABCgAdFiEEjVocT2g9wpSGovXiSQRIWRJuTF0FAmYu8hkACgkQSQRIWRJu +TF3YiQ/8CNcr8pCJZ0U2AHYqL2Cfct3ftCkrfwjk6xk2UAEJDvUo95xITW8FRNx8 +uDuThwVVqa2GuXxRezlF9x/umJl7QhiXgJPS0fakwLYloE1Yi837rCv2tYv4BRzV +zVmuL2JJlV0oy/5tsIqAmcrxH21PDZ3Xa4a0gQI9VpA0neRanhn6ZRwhdAz2bBoP +0SlcG+j0dAvYBHfDhpiMwvttCNbMl8VlXEhBOhydtUJuvCweDyCrnAGf1mN+SD/Q +ccPl8kaJB3lMhwtanCIo1BZj7+BM3g5EDT//zJDudhCp+nQ37ooDOQo/+OzX2gpE +5cradCXcZMG/Z2sxg94+XpJTFPxA9GQ9p1LxDrB82SBYyfhBVnnV4r+wOmuIdtIp +pFrKivOarBibWYLHId2GYaAx4FksDc42xu0Df1HcyHGA64RBIZlveGpT14bYpwTb +aT29ib6EF4WeKQUvTv0Bhoryf6Utz2ydrErHTYpR/2ll7tsl5o1PHpn1biWYh5N8 +KDLIMjfpSfriSFANJ+CbotzLLslrrY8QiphKWj0tDMg5GBcvXgrrizqfw9DJ4cdi +8ggEMl9SODaO6G3XRiKDFGUZtSaweWIe4uOuvUQ9X/WR6CTdWIxOni7Z8wTlhtCd +And+EaZ0UY/AelWBVCBj876qfBvt4Smq5s1X+kz8n2AWwzMzQus= +=y2LQ -----END PGP SIGNATURE----- diff --git a/launchers/TFC-Dev.desktop b/launchers/TFC-Dev.desktop index 3a8ae55..0cf5170 100755 --- a/launchers/TFC-Dev.desktop +++ b/launchers/TFC-Dev.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Version=1.23.04 +Version=1.24.04 Name=TFC-Dev-LR Comment=Developer configuration Exec=terminator -m -u -g $HOME/tfc/launchers/terminator-config-dev -p tfc -l tfc-lr diff --git a/launchers/TFC-Local-test.desktop b/launchers/TFC-Local-test.desktop index 7a3d4f9..92b87d9 100755 --- a/launchers/TFC-Local-test.desktop +++ b/launchers/TFC-Local-test.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Version=1.23.04 +Version=1.24.04 Name=TFC-Local-Test-LR Comment=Local testing configuration Exec=terminator -m -u -g /opt/tfc/terminator-config-local-test -p tfc -l tfc-lr diff --git a/launchers/TFC-RP-Qubes.desktop b/launchers/TFC-RP-Qubes.desktop index 28fd498..8894cad 100755 --- a/launchers/TFC-RP-Qubes.desktop +++ b/launchers/TFC-RP-Qubes.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Version=1.23.04 +Version=1.24.04 Name=TFC-Relay Exec=gnome-terminal --geometry=94x25 -x bash -c "source /opt/tfc/venv_relay/bin/activate && python3 /opt/tfc/relay.py -q && deactivate || bash" Icon=tfc.png diff --git a/launchers/TFC-RP-Tails.desktop b/launchers/TFC-RP-Tails.desktop index e1cbc9e..7b80579 100755 --- a/launchers/TFC-RP-Tails.desktop +++ b/launchers/TFC-RP-Tails.desktop @@ -1,7 +1,7 @@ [Desktop Entry] -Version=1.23.04 +Version=1.24.04 Name=TFC-Relay -Exec=gnome-terminal --geometry=105x25 -x bash -c "cd /opt/tfc && source venv_relay/bin/activate && python3.9 'relay.py' && deactivate || bash" +Exec=gnome-terminal --geometry=105x25 -x bash -c "/usr/bin/python3.11 '/opt/tfc/relay.py' && deactivate || bash" Icon=tfc.png Terminal=false Type=Application @@ -10,5 +10,5 @@ Actions=Launch-Test [Desktop Action Launch-Test] Name=Launch-Test -Exec=gnome-terminal --geometry=105x25 -x bash -c "cd /opt/tfc && source venv_relay/bin/activate && python3.9 'relay.py' -t && deactivate || bash" +Exec=gnome-terminal --geometry=105x25 -x bash -c "/usr/bin/python3.11 '/opt/tfc/relay.py' -t && deactivate || bash" OnlyShowIn=Unity; diff --git a/launchers/TFC-RP.desktop b/launchers/TFC-RP.desktop index 561f322..41e3ea4 100755 --- a/launchers/TFC-RP.desktop +++ b/launchers/TFC-RP.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Version=1.23.04 +Version=1.24.04 Name=TFC-Relay Exec=gnome-terminal --geometry=105x25 -x bash -c "cd /opt/tfc && source venv_relay/bin/activate && python3 'relay.py' && deactivate || bash" Icon=tfc.png diff --git a/launchers/TFC-RxP-Qubes.desktop b/launchers/TFC-RxP-Qubes.desktop index 1ef483e..cfde8c5 100755 --- a/launchers/TFC-RxP-Qubes.desktop +++ b/launchers/TFC-RxP-Qubes.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Version=1.23.04 +Version=1.24.04 Name=TFC-Receiver Exec=gnome-terminal --geometry=94x25 -x bash -c "source /opt/tfc/venv_tcb/bin/activate && python3 /opt/tfc/tfc.py -r -q && deactivate || bash" Icon=tfc.png diff --git a/launchers/TFC-RxP.desktop b/launchers/TFC-RxP.desktop index f7211d4..e286847 100755 --- a/launchers/TFC-RxP.desktop +++ b/launchers/TFC-RxP.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Version=1.23.04 +Version=1.24.04 Name=TFC-Receiver Exec=gnome-terminal --maximize -x bash -c "cd /opt/tfc && source venv_tcb/bin/activate && python3 'tfc.py' -r && deactivate || bash" Icon=tfc.png diff --git a/launchers/TFC-TxP-Qubes.desktop b/launchers/TFC-TxP-Qubes.desktop index 25a7605..b92be8d 100755 --- a/launchers/TFC-TxP-Qubes.desktop +++ b/launchers/TFC-TxP-Qubes.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Version=1.23.04 +Version=1.24.04 Name=TFC-Transmitter Exec=gnome-terminal --geometry=94x25 -x bash -c "source /opt/tfc/venv_tcb/bin/activate && python3 /opt/tfc/tfc.py -q && deactivate || bash" Icon=tfc.png diff --git a/launchers/TFC-TxP.desktop b/launchers/TFC-TxP.desktop index a65eb3b..ed60ba7 100755 --- a/launchers/TFC-TxP.desktop +++ b/launchers/TFC-TxP.desktop @@ -1,5 +1,5 @@ [Desktop Entry] -Version=1.23.04 +Version=1.24.04 Name=TFC-Transmitter Exec=gnome-terminal --maximize -x bash -c "cd /opt/tfc && source venv_tcb/bin/activate && python3 'tfc.py' && deactivate || bash" Icon=tfc.png diff --git a/launchers/tfc-qubes-receiver b/launchers/tfc-qubes-receiver index 64a64ec..62addd4 100755 --- a/launchers/tfc-qubes-receiver +++ b/launchers/tfc-qubes-receiver @@ -1,7 +1,7 @@ #!/usr/bin/env bash # TFC - Onion-routed, endpoint secure messaging system -# Copyright (C) 2013-2023 Markus Ottela +# Copyright (C) 2013-2024 Markus Ottela # # This file is part of TFC. # diff --git a/launchers/tfc-qubes-relay b/launchers/tfc-qubes-relay index 5ea6546..466b481 100755 --- a/launchers/tfc-qubes-relay +++ b/launchers/tfc-qubes-relay @@ -1,7 +1,7 @@ #!/usr/bin/env bash # TFC - Onion-routed, endpoint secure messaging system -# Copyright (C) 2013-2023 Markus Ottela +# Copyright (C) 2013-2024 Markus Ottela # # This file is part of TFC. # diff --git a/launchers/tfc-qubes-transmitter b/launchers/tfc-qubes-transmitter index 1907c54..3cf68be 100755 --- a/launchers/tfc-qubes-transmitter +++ b/launchers/tfc-qubes-transmitter @@ -1,7 +1,7 @@ #!/usr/bin/env bash # TFC - Onion-routed, endpoint secure messaging system -# Copyright (C) 2013-2023 Markus Ottela +# Copyright (C) 2013-2024 Markus Ottela # # This file is part of TFC. # diff --git a/pubkey.asc b/pubkey.asc index 04fe2ce..b785b78 100644 --- a/pubkey.asc +++ b/pubkey.asc @@ -1,29 +1,29 @@ -----BEGIN PGP PUBLIC KEY BLOCK----- -mQINBGMrDMMBEACdLQqLuyrMWl/YaFBpt8U8fXql/kUUhnWbJksQNLANlZwQRWMT -VgtRzmBqen7VJitzh3MIz7gCqjww1WrJE8Ex5CwpfGOcJw5P9k1xcy8aaXh3CKsl -U/BO2EKfOFScghvM9/fDw0CgTFLt+890Weu2qhutUCI5J0exsoLHq4TMjzOxanuK -u+WaTccBpnPYY6lN065IAbM1QP3uzQ7kG3PEabJoQ0mpkpJtUlp6Dg/nawJY7TRr -a5TNZ3hfFPSkKt7JQbcsMBidxZli4hk9cQ8xSq7KSpMlPXGrfMgCpqDvE5JbWPd/ -k6mmxBpDR6rAIhvzMkMi7QfpS3/UHUdw0dt3sIDuFT4R0XWtWxFUwBzwy3NkIu9K -89p9bTfw5x2/077JyXc/gfhYuzliGobqnrN7m3uvCt1y8BEHfjkLrGZKBJ4Brzn2 -NoK42dhAT0nUE7/G76E5SMs1GIZjOqk3vaB50wBtyAMp92Mb9M11deM4CUmA8hBI -4ilhri3S3RbDnehMUvDsd9MPCEH7E8+p6YW2kfuYwOI/KnTJgRN1yqvFZa6DZayO -7f2p4nPJU+u/jY55ayFVU8mGsmefJMCUhQAKk2R36grcEgtnabHaCoMSLR8b+VTX -fQ5xwzFJk+3pj9aOcpz5Dv9uuKoUaseIz8D94Hhh3Sy3/iTEq5bMED9dSQARAQAB +mQINBGYu6/UBEADLUkT9efvka3zLCYPRQKE2+vyes1whgYR1esvuBrEHgJ1jMqnq +U45b17MMFfJtzDveFF27LcoLZPrhS3Bbm6zrdacvRihRMynTNSS9b4kvxRtBWIu6 +B2LdnMWZ+eAJgev0lcbVZ3dxmz56/ClqC4Gwt+77RDp/+8umPi4aDDKRoZpfSZY0 +udJEgVdr4g7FgNUL8MeVS6qZEq+WbiAUxEaRqNHKL5+nHcziMJf88FH5jNgTrG3j +PK7qwM4Gki51knHuTQVjLzQT1T6FfcR9whMW0Yz5KZD1uD7uuV4Cz/+C5b/tLZ33 +HucCmDPrn4aBGLtDWsEdWdFtIYtOfZd9exZZ8r+nz6VL/W0tE0qYIiIHeuq/Gmvh +r1/2xo7TEftfuQxGmp7lEXrAHcP4+E9vPF62zrpVh5dozSJulyLSGCUhSgVo+grV +W62wqbwVb7Dy+Q5mbQzyCYaodGsRmDm9vBS0usD/yFCMByeVEZ7nLfNIxtEAATUW +EOmD8vtVQe9IYGqkM1T11lR8hw4PdqeLJlKVfBdLqaKzSsjMBQomYjPOMjfw1wcs +VyQJgWF/NjaeMAFW/ODJ3nhT+wtb4IGBSndiRjQEzgMN1mEhECRsVfiX3WmJwmYj +CT3lmLwDZWcPNXsc8oobTJiYt0O8pKeAtYc16IyJhhhrfIdGczzZWmR/2QARAQAB tDhNYXJrdXMgT3R0ZWxhIChURkMgU2lnbmluZyBLZXkpIDxvb3R0ZWxhQGNzLmhl -bHNpbmtpLmZpPokCVAQTAQoAPhYhBM34HxhTz7MuyuhhPHA1l5wHKt6lBQJjKwzD -AhsDBQkB4TOABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEHA1l5wHKt6l4+MP -/RtNoAxcInwTu8GOn7FIopFVtBatPwe+zna+K5ZKs3bKspWEPwb73ZVm59ADRvro -1b5Fed+wpJqN8XwR2KPIIvJNNMjwputuSz9aSnElr0YuaLT2x8OC8tQZGRaCIgR0 -/NyIrNf/lJYquOELGAZhuBUD/wF0olVaVXXWqIBtIMb3brnAdgYFOlPV5UZEZatl -4+wg1/LDvkIHeDLh8RoZvd+Ju7upj/XbMpxYAsH4RfWVepJnvF6ZXnfFXwd+1pyj -mCq5zR8dQqFJ/pIPYoxnVFb293ayS0ZlY6OH36N9EeAgH3ix4pNl+aAtu0dXeMZv -WP5e3MLK96C0C27i4FPtB+abknrYeXG2EfKb530mXajQkRnIFw0Aisf+/76Glsnm -FP1lDZ+eL43IHHYvzPYsa6xgTDb/1wW0yrA5KVXfKjOInIVi1V40SWIYr8BTW+ff -UPymoexIfEuJEJqeKFXlHwXBgU+9KRgOWrvXcUa3ugAeMDq14TBzcDnqOYrBn/mz -lPjzKn4mzsjlrXoi/cdWD2bk6ilT8tnCTj9szK7lQDxwD08ozBzacXDX/C2P8Cii -jpRaxNoOB0COMoVUmeAx5pgOMB85UCmg+S8TJr6LeJTUjFGdJzXkpkvrPVjic6Ay -IDNUoS69YDgQ9kQUCHQyizzzC+Iccen/XbXyz2x9ce+b -=eJ6r +bHNpbmtpLmZpPokCVAQTAQoAPhYhBI1aHE9oPcKUhqL14kkESFkSbkxdBQJmLuv1 +AhsDBQkDwmcABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEEkESFkSbkxdGy4P +/A+gtHMn/Qh5t1UL3uXkl91KYbB0QI4qvvF84sdYVMlobvIx2V1xmoyHwULRleZH +oTzD1XvkfP547NwMiUaYVaM5WnA41GGW+t05kZk46RlobTtBoDBkVfaorCVukZAt +CCfv9QGyd7fj1hjLkvRapKVKS+J2xay/gbswRyD11DYFUiXS+7MpxWXEw8RxSTSI +GQBpoxP5idPZk8mqjXCMXCt0LviD4T8G80F4hStxiwXlYV8/sp7L+rOzUuz0MMBJ +ezLwvqFe+ajYaenXrREoy1wSimQc0Du6g+Uz+RMkMeDdh74RhJ19oZed7/qQ2xfg +fdrI+B2KJrN05W3N2M59mqs3lhzk7DsYe/5i36QZ1OvV05Ef16BSRxx3bb6dUSoq +miEB9qTysuoGoTbEBF3eChP1pZWXiBiqAZbYBPuZEvHffUtHAAKjl0Zwsk/H8F1y +D44uMVQ40ydWPIOfCuQ6Kw5vbGEuh7mquqLHIQW1irqtP1Dqb3eyIMjxIkU3ZY5k +iN2B9djm6GIAZ6sRruweMYk/9BzSdmwy+2OIrBtUKC8Y/M8wsBXUovXXhfCNdDz4 +539gI9fgT+3aYEsMJsQZ6A6+CIV/4qrA9ILOiv8TVCn9rt0eKDSepp56UXJphicA +FACT1z4OOq5QXfozgP6P0KQP0VGBD3Rm/MQpAh0aXkwo +=0/CK -----END PGP PUBLIC KEY BLOCK----- diff --git a/qubes/service.sh b/qubes/service.sh index ebda0aa..8b3c68b 100644 --- a/qubes/service.sh +++ b/qubes/service.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # TFC - Onion-routed, endpoint secure messaging system -# Copyright (C) 2013-2023 Markus Ottela +# Copyright (C) 2013-2024 Markus Ottela # # This file is part of TFC. # diff --git a/qubes/writer.py b/qubes/writer.py index 60c107b..73cf53d 100644 --- a/qubes/writer.py +++ b/qubes/writer.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/relay.py b/relay.py index 9bfbae3..c8ff2fa 100755 --- a/relay.py +++ b/relay.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/requirements-dev.txt b/requirements-dev.txt index c6ae2a3..bf83eba 100755 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,40 +1,35 @@ # Sub-dependencies are listed below dependencies # Argon2 Password Hashing Function (Derives keys that protect persistent user data) -argon2-cffi>=21.3.0 +argon2-cffi>=23.1.0 argon2-cffi-bindings>=21.2.0 -pycparser>=2.21 -cffi>=1.15.1 +cffi>=1.16.0 +pycparser>=2.22 # cryptography (pyca) (Provides X448 key exchange) -cryptography>=40.0.2 -six>=1.16.0 +cryptography>=42.0.5 # Flask (Onion Service web server that serves TFC public keys and ciphertexts to contacts) -Flask>=2.2.3 -click>=8.1.3 -importlib-metadata>=6.5.0 -zipp>=3.15.0 -typing-extensions>=4.5.0 -itsdangerous>=2.1.2 -Jinja2>=3.1.2 -MarkupSafe>=2.1.2 -Werkzeug>=2.2.3 +Flask>=3.0.3 +blinker>=1.8.1 +click>=8.1.7 +itsdangerous>=2.2.0 +Jinja2>=3.1.3 +MarkupSafe>=2.1.5 +Werkzeug>=3.0.2 # mypy (Static type checking tool) -mypy>=1.2.0 +mypy>=1.10.0 mypy-extensions>=1.0.0 -typed-ast>=1.5.4 -types-requests>=2.28.11.17 -tomli>=2.0.1 +typing-extensions>=4.11.0 # PyLama (Code audit tool for Python) pylama>=8.4.1 mccabe>=0.7.0 -pycodestyle>=2.10.0 +pycodestyle>=2.11.1 pydocstyle>=6.3.0 snowballstemmer>=2.2.0 -pyflakes>=3.0.1 +pyflakes>=3.2.0 # PyNaCl (pyca) (Handles TCB-side XChaCha20-Poly1305 symmetric encryption and Derives TFC account from Onion Service private key) PyNaCl>=1.5.0 @@ -46,34 +41,26 @@ pyserial>=3.5 PySocks>=1.7.1 # pytest (Test framework) -pytest>=7.3.1 -attrs>=23.1.0 -exceptiongroup>=1.1.1 +pytest>=8.2.0 iniconfig>=2.0.0 -more-itertools>=9.1.0 -packaging>=23.1 -pyparsing>=3.0.9 -pluggy>=1.0.0 -py>=1.11.0 -wcwidth>=0.2.6 +packaging>=24.0 +pluggy>=1.5.0 # pytest-cov (Pytest plugin for measuring coverage) -pytest-cov>=4.0.0 -coverage>=7.2.3 +pytest-cov>=5.0.0 +coverage>=7.5.0 # xdist (Pytest distributed testing plugin) -pytest-xdist>=3.2.1 -execnet>=1.9.0 -apipkg>=3.0.1 -pytest-forked>=1.6.0 +pytest-xdist>=3.6.1 +execnet>=2.1.1 # Requests (Connects to the contact's Tor Onion Service) -requests>=2.28.2 -certifi>=2022.12.7 +requests>=2.31.0 +certifi>=2024.2.2 charset-normalizer==2.1.1 -idna>=3.4 -urllib3>=1.26.15 -setuptools>=67.7.0 +idna>=3.7 +urllib3>=2.2.1 +setuptools>=69.5.1 # Stem (Connects to Tor and manages Onion Services) -stem>=1.8.1 +stem>=1.8.2 diff --git a/requirements-pre.txt b/requirements-pre.txt deleted file mode 100644 index c96df83..0000000 --- a/requirements-pre.txt +++ /dev/null @@ -1,5 +0,0 @@ -# Sub-dependencies are listed below dependencies -pip==23.1 --hash=sha512:a15bae4a0c1548cfdf1b886157018b31c723aeefe68794cccf83b16e51d4b1874f885e33117172cb36b42613ec03d4aa82cc4318f042e2b7dcd4e39293e91a94 \ - --hash=sha512:6573096753db231e3189ad66d9fba08b99d1320593131ced7cee2d4442b137749fd0fc5c98fe338c4683081ea1c1bfd269a752ff16052c72457f8bb91265b5d2 -setuptools==67.7.0 --hash=sha512:22428cf43932d4a16f704adace5e6fa9ddff15c2715c9ba2c0f47c2e96d5fa95e5fbd21e2e55cef9c43a41d29f6cd2d09500b1cb81daedb64820e388ead70346 \ - --hash=sha512:39502337b5d7f710c55219ab970a5cab23e8987598af722ad231d2dea2e1dfaaddb09dc698a5746a719b36e5e3065c48ecee2ac428e4d41470bec6ad3c99daf6 diff --git a/requirements-relay-tails.txt b/requirements-relay-tails.txt deleted file mode 100755 index 84750a4..0000000 --- a/requirements-relay-tails.txt +++ /dev/null @@ -1,150 +0,0 @@ -# Sub-dependencies are listed below dependencies - -# pySerial (Connects the Source/Destination Computer to the Networked Computer) -pyserial==3.5 --hash=sha512:29bce14c59e60f54ce476d919c9b9477190ef6bb44a6102f71345840f5c0f1d0a323c4c3c302c5f380bfaae32cf04142ee528b6dd7184f17789632a31d5ecab6 \ - --hash=sha512:c8df5e50d952d5a6dcf1d9253a6ba953e9763c545a867da66c22c90dfa015aba0194f2a8f29a229d0a5f4dc8bfeeaaab8bcfda4066ed78a18b151bc05e6ae327 - -# PySocks (Routes Requests library through SOCKS5 proxy making Onion Service connections possible) -PySocks==1.7.1 --hash=sha512:3e0b1775c14fe091d10e30b03f7f0c770861152e493cf3a3143b0de01aadbc73f684f0d4305f1a694932d4bdcac8056c422437130640e19028cd9fba59ff0b3f \ - --hash=sha512:313b954102231d038d52ab58f41e3642579be29f827135b8dd92c06acb362effcb0a7fd5f35de9273372b92d9fe29f38381ae44f8b41aa90d2564d6dd07ecd12 \ - --hash=sha512:cef4a5ce8c67fb485644696a23bf68a721db47f3211212de2d4431eaf9ebd26077dd5a06f6dfa7fde2dcb9d7c1ed551facd014e999929cb4d7b504972c464016 - -# Requests (Connects to the contact's Tor Onion Service) -requests==2.28.2 --hash=sha512:220e0e122d5851aaccf633224dd7fbd3ba8c8d2720944d8019d6a276ed818d83e3426fe21807f22d673b5428f19fcf9a6b4e645f69bbecd967c568bb6aeb7c8d \ - --hash=sha512:3c4ba19a2bb6ba38a4118cf246db3855401869d54ee7ebd9bee40b435420381fb737d4c69768f2bd97914a30d66233c7058cec51aa629af0dff3b04e6f997a3d -certifi==2022.12.7 --hash=sha512:a7d259277af4948bf960682bc9fb45a44b9ae9a19763c8a7c313cef4aa9ec2d447d843e4a7c409e9312c8c8f863a24487a8ee4ffa6891e9b1c4e111bb4723861 \ - --hash=sha512:fd08b6bf138aa1b0a47909077642713d80f036e4b18de2c7f236a185521db3d6498a81a60b150124cc4bc21dd7e687badad4324a898117060c9e4ec93dfbdbe8 -charset-normalizer==2.1.1 --hash=sha512:fe2f3ae5d3c011b314a057456a7b13ba957593b22dbe7f532f9fbe077103e75b3f8b631fb1e2a4d5875a60af678b6779780eff7df0ea7c08144aa88fce34abc0 \ - --hash=sha512:f52abab683ebda4100d67ec6ee0349713baee453a742d60a1356f405c5ce2c3b4d850b0891527f08f92fa1217d59c46d6b181dc4ff1b962ce60d9c5ef8c913d1 -idna==3.4 --hash=sha512:ffdd45326f4e91c02714f7a944cbcc2fdd09299f709cfa8aec0892053eef0134fb80d9ba3790afd319538a86feb619037cbf533e2f5939cb56b35bb17f56c858 \ - --hash=sha512:4060a9304c9bac04efdd0b97ec8f5aeb7e17417e767bf51c5dfc26605edad25ab67456cf6f6a3c5a9f32b8247e46f6343edfd8a6ffbcd6d1075c71e66d089d6a -urllib3==1.26.15 --hash=sha512:4f2cdf7174e25fb6ee6dfff0501c51e4f56bd9e6194cfcf31c1c2fec0a28032a7335867b729c06de550b9345118902fed935234606d8e6987928679202a9c1f4 \ - --hash=sha512:b6ddb29c15b2d729605a6acb7c602f18c75a937cdfe9649d35d790a59fbb1d96a8d68975ba0a4c073c9f1750e383c67b7566dbcd81b3e8611501e9f4153e9a2b - -# Flask (Onion Service web server that serves TFC public keys and ciphertexts to contacts) -Flask==2.2.3 --hash=sha512:39a67e2b05619d4196fbccfbd836be0ed6c4c977beb1696020563433766c089a278ae09957936c7d23a75ca022a90cc719ab7cc3a6fe5a7dac4f687d11568d85 \ - --hash=sha512:de119d032b04eef80a99cee9658cac12f934e9a66d7dbb8304588d0c1320a8a19a8b0a78f69134a20ca26aa408db8686436c5c108ecc39e16b1eca1a3dea2d2c -click==8.1.3 --hash=sha512:ce7e25725b3edfd0f336f3ebc8ace3977539f0d063f3439c4a1af517263cc1058cd9c0f687819ba319811dd0f376148372444dbaf082797d1dfe2c1c1c856dfb \ - --hash=sha512:be5b0c8b72ef7c10854f31406668ca4d6f826381deff10bb6a87a406166c09af97e2165f1327094d96abade15efb872892af37f20fdbc855b659cb2c7bd2f2c5 -importlib-metadata==6.5.0 --hash=sha512:90e6f30282f0cd47a7dd1e489cbfc47725c484ccc87392930bccdb0537139c8291714c5125c74d5819facd36476b95bf3e4f4ebe238ee6ad8816f93095d3d8de \ - --hash=sha512:c581ff46d601a239ba9e83114a18b1fc5c0245c215752b8313624fbef6b441eac7cebd4e021d09f12d26ba30715b99475eeeb66befc49bcd609f1b53b79f9bfd -zipp==3.15.0 --hash=sha512:ac96786e5d35882e0c5b724794329c9125c2b86ae7847f17acfc49f0d294312c6afc1c3f248655de3f0ccb4ca426d7957d02ba702f4a15e9fcd7e2c314e72c19 \ - --hash=sha512:74a512428fa29e284c515a7e6c45030e4d840727e12e376bca480a90b7fd1e111462deafa372ca9aebd9f53c24bc37111570e7a4a6a873c0b7dee9a0277c100d -typing-extensions==4.5.0 --hash=sha512:ec14fe7ff4998bd9ed4c57a491062d0d0d3797aa326c71898c879455f0a2dbcc639ac9b51f68c03a8635459de7612b31aa2b71f364ac6d2dd6b696cfd80df555 \ - --hash=sha512:a38a018be2c22b6cc1d9a14477206271b44fc110db2a958f3cb5b179856c9f992b2359ce077dd0d25c3711908e4009d44afcaa9de6bd422bc1599c9533f8200e -itsdangerous==2.1.2 --hash=sha512:190df7f250b5e5985898a7f0e0e9d4c3d0b5c391268b9b5ad0f39667ec887b543651dff7623ba49e191ffadb42b0354b21be19ef61a1f68193924bf12034dd1d \ - --hash=sha512:e4d870a33992b309ed778f403c0c1e098983a693d1165260748bf36385ebfadb583811e05ddd48001a33cf6a4e963b7dd8a8c68919c5b4b86f63621d8869e259 -Jinja2==3.1.2 --hash=sha512:00558cca2e0ac813d404252f6e5aeacb50546822ecb5d0570228b8ddd29d94e059fbeb6b90393dee5abcddaca1370aca784dc9b095cbb74e980b3c024767fb24 \ - --hash=sha512:5dfe122c1beef5305b34d25f22f96607bd3a6cba098b03091850ea36fefe62b645a7218d7584b35bea252393ac922c9bb3654a9e90f23bcfb273e811fcf2f2c1 -MarkupSafe==2.1.2 --hash=sha512:3783ca01b1676f4b0f597ead79ab32b5c5fe2810e66a7fde0832b7ca5cc83187cee03c262b2ed04558582585bd0c5deb0c045618feec13edd3e549c14a148098 \ - --hash=sha512:ceba16a2f438216f2eb8312caeb94f827f498f84daa08701607483ddf364ba0fa553b582b4b6a2c26c254bfab25004416d345e3e4f04c3877fcbccabe380e88b \ - --hash=sha512:a1964e0a905fece6efa054f6b7dd2c4b89b1b67c8bc80d72ffd4ce7228d389f8f28b4b21036505548d75902a19d764d74929403dea6f61fc7638ef2054b5636c \ - --hash=sha512:282f5396816317eb14f71a012ed33e57c7bb434a367e7a66d126ceeb4091e5f5dca68aa6dbb1d4c1005c80492bfaa3109071872c86b303c2f49f47408c7185bb \ - --hash=sha512:2fb2d5c657ed023d4cab36433fd8acda778a66feb3e2dd2e25b864a21e3e8bc6416ec3ef3875eb15b07507f77a813634751497a43533417bb77fc18f818028f2 \ - --hash=sha512:fc0ece51b6fd5468ea83024d08f2c448e430e7541b9262d94db645768ee6a954e75a5fe00d74d9f82c844e0c293fa449017542fe742fd7d0f2f4f6d300e57cf0 \ - --hash=sha512:295338d568db27c0766d6a1ca2e071b60ab0830374a9b68711174a52ae88859293d5e0cdff30684456b814c82614511e18e82b341b3f3b1f879a6c91dfee83d7 \ - --hash=sha512:793bf57d19d1f89cd13cf477575a9a31396f75d0da9aaf18949c59e81ea288467be598dcf0577cb71d79bd4f81052f4ea15c320be38eb15d33288c400dfc17fc \ - --hash=sha512:cd09ad7f6320721543ea6b677c558a7f0ecbc56dbf43cdb30f9f071ec9378542af2b2d70c942d17e86a814f628ed4e665616adf3ef90c8754a4ec7c9b72b4976 \ - --hash=sha512:f1e3865d2ba379322cab24b91c973aa7ebcb254a37764f76beff3eb9abb553a2fc8c67f7b9626e10d44c57176a073b6097f21ca9aae224a82a21646c90ee3d03 \ - --hash=sha512:2e6a41138e8361fda264e0790ad6cacabbbe6693c7d08a6a7ee0b38064a5b1fee84cf5930eee1a95f658777c51d652b200a4db1acdfd8813fdd3ae82102465fe \ - --hash=sha512:478af9198dd18ef711016755bd77dcb178cd4ef8269acf166dd3be151269d3fefce3574457e5bcd91c330b6d12933daff8ad6577553f2179c76ced38c9d374e0 \ - --hash=sha512:1b6ac1de291567f69405e9551a73338d309813446d4ccce80d2d311543898a756415ddbe3bc729a528bb827454bb1e188bb05e3d923f873aaca241b311451df6 \ - --hash=sha512:c4cb843221914dac34eb20ab409b3d3066769f1bf79e385203de574c05b51dc0f8eec62956476b8d99e06ea44b45b2327b2c632a10373d66a46d4a6401c21eb9 \ - --hash=sha512:2087ae635b7e5cdedb5b57f84f110a606a0f69cb0eefc2a8ad90fa1219500b55d8233459c27f225d27c154e662610f35e05493dd8a4bc9d112763300b2541919 \ - --hash=sha512:ddd1799d5becb875e3be5a7b432de77a8862a5d3caa4e82b47cc1e0fa26440d9b5653ccf56b9777323c04f8dece854124d3c77ced2b62819e6019a6aa67a5932 \ - --hash=sha512:7ecdc21e0ed4d2499a698fbe0336d15fc630bcbd28277fddd05238b219a6c501dbd96dd0353f9c1ca89e1c5883bef2972fc3c3c8d408d02d8f427aba863b0cc8 \ - --hash=sha512:efc24555a84d65097e63f013efe7984a26cc81fabc8ff8386c45fb7ada054a75578a69ac1b5bbc0c755c050436e1086f756ab35511e0b406b05bbfddc2dcdcc5 \ - --hash=sha512:ca5c9e4f6f62b930718c80a46af0fb657a24cbda610d92c73b29c1fba136e4468cdc50b63e0e99dcb657c3edcb7bbbd1c4423b23c9e56b545b2c070b6ca1cc5e \ - --hash=sha512:f8b73180cad126fe44d6340e7282e5991cf06967a5facfcdd9bc956143c2fbb5b85c1ac50a65f333def6932bcf83a34f3d46a1a6007b60c17071ed027df05d93 \ - --hash=sha512:3b5e6ffa97ddd8c84c9e4fe8354e916774cfdf76ab5852f757f5ae6a984f99a7421fd9ca548e22d2d3afa21cc70903a4807030e5d5ba822f989830073f5257bd \ - --hash=sha512:181dfc2666e97266fcdee173299e205f1938f1f2b34c52bbed6207d8602fbe54a730719db781e6f8d72b644a6b85261f683c72c1050fd6070f8b43e6c4092582 \ - --hash=sha512:30370db92aadf1e1ceabd12df7140cd018a2785016df62ef5a0f452c292026bf87e4e6a97bf39b43203537e1a8ad9cc617f01e6dc4572b7a964376784da104c7 \ - --hash=sha512:f3a693aa8cc1bb5c836218f1e0ef4e90b75b44e9e7f256f38fd4160816a9ef44453618cc2db27ae5a5033fe6a03810ae260213633a75720020e7d58c5fe2261e \ - --hash=sha512:2f7f9edd7721ca700a1078bc89efd9859bafd285a80d100ea752a9815b2a9affad57b019daf15ff518f927b90296a91c24ff5dc95d92bf4fd939534b93ea22c0 \ - --hash=sha512:99a4e3b43021e6f915181da8a440b90a5347d44f717c337b9ccb99f6d4d5b5736e0ad65b549fcd480a81c8ba7720aa5a46aa659e7ae5d64a664da326e2aeb2ce \ - --hash=sha512:40e172b0e6fe9a8dcdc8716db0f3fc543f8ec9ed2c7747653d9362034bd9ada8dda9b6b416572198fe3aa19339576fc19b38980f67dd4a486006da933d1266e9 \ - --hash=sha512:aefd12859788594aef77f1a2051ca14a7b7fa12b7e8d0f97cb0bc891773e9e2149bc27f23e73c68ee40bfd92cfefa73e6505d26f1a59a6f07fd4f07d19ea343b \ - --hash=sha512:372a79b769710ca815afe0277f2cc8d1e7a1053baa05971a0733ff5a2d6964daad6cd856f262dfa8055200865ae9e64b0d1a919d56f810459549f86636b07982 \ - --hash=sha512:74684e845fda87cf27b2abc1164c47aae5154d69c0a7089616defac56787272616701fdd7caed710a951ecb0e30e9b82f3b39fbbda24dcbef0715b533c02c190 \ - --hash=sha512:84dbeddaf2df713b3cce94eb64876fea8f80c608e25130c18e4691be2b1dea56df8b772d26c0caca88231ef795125eb9678210c33bf20518c18e3047912ddb4b -Werkzeug==2.2.3 --hash=sha512:82abbbd482fbf92ec449dfc5aab673a9cf29f81227f39b101b3433a4106ddb72498827eda45cee751a2e47768d27c04f77bc87bd7bc82faecc94cc426a316c00 \ - --hash=sha512:33d0581533ee83e5daad85c36d270cdc9f66b804b6e3c24254f87d50fb504211af6be277a8638003336f23edc2bfc635f45efae7cbe54dae174693bd272fa137 - -# cryptography (pyca) (Handles URL token derivation) -cryptography==40.0.2 --hash=sha512:529d42f80f85f84ddb9c4fc16adfde89c8e0861b37dc1aa85e49760034428d48ea2ece1b41bc6d6e28fbe7e6095357df512533391457aa910539baac02b0aeb3 \ - --hash=sha512:a629ad9150a00b35e2188837614f9196439b29837420b383b88399905306911f5d11ac970c3ca79a88c53ae0c98aa34892cfceb7ffdac4b965717f3e6afc9abf \ - --hash=sha512:28acceb7b52c3d1a916e99d7fa7ac71f8f7c050bf5a7a24b521f021a442e9cf3ae0fb0471cb92d1ea050a5a323d0b8e9172de965bc2f8398bd68f05d64b31294 \ - --hash=sha512:8366a2dda1421823bc835a128b3cc1b4f5ce769da2cbb8a952a82c4823a38fe9a2086e2c1ea1725fb3691928cf0be74ac713bfdd3bcc4d54ae7200801c1dd9e2 \ - --hash=sha512:776b6f99749a42707f1ec709fb672d0b2a276cc3888c97e0da804e85d2bb918470acc5eeecd34c9fe46bcb2fbf6410ee7d12ca05c0500c39b5c22bcebb1284e6 \ - --hash=sha512:4ecd052e2b6c3376cb751e6bc0f568cdf46619600673ae3967bc3d3a9d9e834f61772e336f29552b0b4ab7023d5b38f5f745188119bf1a29d1b68ca63a497c4e \ - --hash=sha512:865cf0bc254d4dd775968fbdb392b4d2d3516a2a345c72ebfd787b6d80cd982b942c7bb932110e81d05c58539b053441ecf76193b03e7600027e1873f2652292 \ - --hash=sha512:2416924bf5d8ab0d890a2bf11766a5b262fff585b5391342c0ea1935d5ab343abb74a396beda3182298fa45b4971b172ed2793f190b771a676fdd470d3d94224 \ - --hash=sha512:d70274a507e3533bd368954364016422dddc8db4e3cecd52697afbc9cffe9f41eed77dd9419690fd70b5fc8b573e952eacd8b49db074edb7449f30eeae9d251e \ - --hash=sha512:68d656c511deef6ae84e5a5004b7b3ce3c192ea889d61fadc082197ee2ac91454dd4c473587ecc1e2862c8a7948839b15263785bbf026e32d7f208c2bfbb8234 \ - --hash=sha512:391aba41fa75052d86182d39096c61eb37126a1e94499fe1934cc3307c8c7e819ead0e904c58c0b36fa4c4bc375b092d1b352217bc0d448f4aab587cff90528e -cffi==1.15.1 --hash=sha512:160432f1765330dab76807ec42052cf41cf33922f7b77713aeac0f99af1da8107f1cee85fdc2d13db620a8d21c24423853dd55936204109e429331828e2c576c \ - --hash=sha512:2c125d6b2cbfca5b3174095a6fe653fa2c58762aca9a9c46024d50ae104acdf10ddac2014ccad58ba95dbe3c4c8c2589a26292f23a28c1ffafb9aff4d60878dd \ - --hash=sha512:73eb0ea04f5f3c1e9e12a07cdb01b2095f7eb329aaaf9686c40087d8e59944acf4d616b6f774139593de176945ceb510fa86fa546d165bd0a2e8c378c23ad552 \ - --hash=sha512:49ef4f829cd9b8e29964b2e0a96a05f8230a510a6ef78b3f5ad10a04e17f4a6356955325be23d2e770518d6439613ebd3e851874a5c3d0e9831018fdd60fde2c \ - --hash=sha512:35399df0a0ae1e10699d743e11104f0340a3d99621874cbb33594449653baf99b9ba4d633005165d7e70a2282bc46924e08ce4d7e60d17cd1fa30d0b37da9543 \ - --hash=sha512:2f75e683e617abbf709328ea6500d4d688078e378f5447fd923f7ec9d1722a9a38292061b762098177d0e12b221437c8970bb8a96b0423c3b55f5c2471f71634 \ - --hash=sha512:6cb0451be3df9a5d38b26ce6125d6f924811ccc49e6d7019835d7de9a8524cf8764f852fe688d085610d15b6feedec196d00edad862264b3a06d755f58586483 \ - --hash=sha512:9569fe3f3af46c7e19b1bca00684856825bb663adf2cf669980b7c003535d278e05b53ddf85004dae01ab7ec582e721a2c8c6087612da438d0445bfd4ac1a241 \ - --hash=sha512:04fb957a7e40d10461e290b631aeaa02eb9a304ae0397ea5948fdb9de3c8376e2030385fb5bc5696b618659022250bc9a69c4f1b8ef1e637431fbb5d23b26aec \ - --hash=sha512:d993a2f25c194c16c981583c86ee9de5374cec0602da6f681f655a18c92c51133babbca0c802d02f330009ccab5040bc0e4f7a4cb5cbb05eafa744e93f5c9c3d \ - --hash=sha512:c27677ab98eccac495e34e912c5626eed909b72bf8d21493a3c00bfaaec0af7847d91a97fcc5d2834305e6c3b64fb2e4d84c83f7b6dc27b6a165c9f42bb5ab08 \ - --hash=sha512:9911acb9878bbc8c59734839c8cbc164e8f121a493a0589898e1b16df32c41d46d0132ac3a8a36d52cd2f0d857695a8cc6878b5cf6607fb52fad139a43089d66 \ - --hash=sha512:a8cd7b5b695cb89556a7b5c0d4f7d02325d39cd59bade9e6828717623c98c4a4fd5561366549770fc8e412aba06dd5c0cdb5934a49050d182bc27d0a8b4d5601 \ - --hash=sha512:fde7e4cc649538a32c87bd40cc6f5596d79566c6508e2fa7c30241d68d7bbd51d22b50039910c5a5196f10f4c9d499eeb884367156f156dc8285fc3a1ac103a4 \ - --hash=sha512:0c9980b8f05e7105832ab5e481432f778a09631ce0fd1c09b9582a19f2b08ebd666b491ca97bb718a74feb80d3516998e3f112871ad2838fd4256e7a8eb39ebb \ - --hash=sha512:d372560553196445c3152b92f4afa011f61aa768825dd63b8ac8b9142481b1b86c97f6f683a92ae0a25e409503ff4ef159c74185dbbfe2a54b22426d9ca991f7 \ - --hash=sha512:9cf0bc15c1d820e45578943222655cc8db8416e01ee825c9b107963174b20f0a0b01fd8277c28d918bcf18eeb5f45de9c1a935210f9c0a2daa5b62f70d747a45 \ - --hash=sha512:bf4d6ed94fda20aa7760d2a7f0c1557ddd70dc90a2f0b2dd391bd274d37f09e298b83ff014e6f0820c6b47e70681db94a4197016bc33b89e01f9223f23403988 \ - --hash=sha512:862d68482073f468f60d8f093a9f9b5c78562297f2eb36c84bce283a4a00e897d1731aef67b12b17551e373a668288acd32dcd49031fed5a8c621aa8c41fb0b4 \ - --hash=sha512:36160d9d7c2f138b3cc1debe96365d57b0d204dac9cd7732ee6ab8890d9fc87700a50475336d79d60b26c1656295e26d27998cc3f9f6274613c84a64144c93b0 \ - --hash=sha512:55ea36458d5c3c4a6f9b647215676fe8801704c6facdb65c55f445b4069ed3fdaf155daa8e371ed9f27937f57799e189f7402b945ec70bb85eaaa2f643c70945 \ - --hash=sha512:bb85c0f097eb69d218498dd07f4a40d5bbe280b11062babe64b8d3b9a0df540c42d95e898ee409b14daefdf19c48bc499cec6bb69295d7b6a10dc151fdd6bb6c \ - --hash=sha512:e253ae455ca94f91ee37038c225d395b5668e26772edf26de226ccbb347c3c1b5536a358e023779fc1b06bb6c5717158d6262855445804b1206e07da3a596c7e \ - --hash=sha512:454522b8eef53c0d17a5eb24a8852f5d6d8360aca2a2c5cc8fca22533de548052ac4556c7cde432592b20f63cec0356be423a4a964ad046744e018821aee4ca5 \ - --hash=sha512:f529bc89cee24cc8db6888df904f5c2bc6a6ee9b0cd52ad03493918936079875fc0968a3f5f1e93306a41e6418d3e60b2b1417c287fc29d0c12951caa0b94b98 \ - --hash=sha512:2b0fba3366eaaf1a88701c5131fe6318e3c89c2969afed5fd2fffdcaea1810b91963dec37b549795267577a4f1697996846e8d027b63835e290c72b3568c8269 \ - --hash=sha512:88d1f27641ecbc51d9c323a19c913818c478d4eb87d27d16426d20eb9727d5d4b23bf9551d842433820068e29082c9b9c2654f38e903b6fc761d70632731c643 \ - --hash=sha512:7d21ff025e620b024191e0a813a678b3269b582e61944e5677eef4bd94be8456758515288d48b85b3736efb84b9d0d899d60bbf8c5d9e79f943c2b1f2f78f85d \ - --hash=sha512:c76d6e2f761582c4122cec8ecb302fca324b90fdb3ad1442dfd32ab8cee25c6e0519c6556911d5d068229d48578f8c1cdcad4fdfe8bf936ed6038d020633a3e7 \ - --hash=sha512:7866aba126d54d88a0e55c70fc8587773fa1926db1f09c932b58489a63092b2e672f8bd3104d682bf41f250dfce85a824b2616b9f2cf796e020b1ddaabaacf4f \ - --hash=sha512:228a40447e3cdf4bebec7286d8c53139f4dea816be3b378dec81ba5e0bb1c20a938564b0b6d34780399f79fce3ba572a5fb5e93dd21dc536551323290ff2483c \ - --hash=sha512:c637580d319c9960185f44580932996c2554fb0e549d822f636a9703a8e9b8f6e105d765b65e1ef7411320698d05a60f4005b3d590e18c5784d5c8d07d86f612 \ - --hash=sha512:95bd8ee4ac5d3f4cb09d5d223dfec484cfc90b82e2eabe40eb3c89217b0f315bee469dee6c5f89bb02e636eefade048e6e709f2b5126eeb634dcb0cb13332fa6 \ - --hash=sha512:f5ea1c8a22ed5bfe03586d7fa872dc0bdeaa13ee310ecfd7355ca2a3f742ac6e3b3e2663399acb4220c95cdb92521dc181fd9c7d9da1ce45817a145500cd9243 \ - --hash=sha512:0fab1b5323e009dd41de28f3f5c9f01dd4ceea627de8bb6244f72394c3fbae6dca8dc65909dce4847cbf8fd3654b55b55caa194672652a253bd0fa2a1b112f78 \ - --hash=sha512:e99cafcb029076abc29e435b490fa0573ee2856f4051b7ca8a5b38cd125d56dd9dae8b189f59ceb3d728a675da8ee83239e09e19f8b0feeddea4b186ab5173a5 -pycparser==2.21 --hash=sha512:aae67923f45abd1d781d03e0ce848627a07e9cf4c61a89bf32f1b5f638ceda08de39a038c46ed29d2df967d76be4f2572346bad087ac32b418e6fe654fd28e43 \ - --hash=sha512:e61fbdde484d1cf74d4b27bdde40cf2da4b7028ca8ecd37c83d77473dab707d457321aecaf97da3b114c1d58a4eb200290b76f9c958044b57e5fed949895b5f0 -six==1.16.0 --hash=sha512:656b010ed36d7486c07891c0247c7258faf0d1a68c5fb0a35db9c5b670eb712d5e470b023ffd568d7617e0ae77340820397014790d14fda4d13593fa2bd1c76f \ - --hash=sha512:076fe31c8f03b0b52ff44346759c7dc8317da0972403b84dfe5898179f55acdba6c78827e0f8a53ff20afe8b76432c6fe0d655a75c24259d9acbaa4d9e8015c0 - -# PyNaCl (pyca) (Derives TFC account from Onion Service private key) -PyNaCl==1.5.0 --hash=sha512:853446c38ce5488e18eba166f67650bc4f50044f509987ad2ae4830d2ed85284f057c3a4304180ad265bc33fb9cd6570488a37e40bade5e202ba201ad368af84 \ - --hash=sha512:d3f24397a6a3a7a56652a56c8e8cfcb1ebc167b0d2dfc38c450d8fbc363b2b5c1226e58724a692b16a7e4f1022bb93e904664ff54640bba28720134058e2275f \ - --hash=sha512:c3502047add3590c1a1e60908e21d62455e2b4ba2f2efaf0f5118bf915934de9604d00036b3215ed54890a51a088872909409b296141d6241159c119d751a947 \ - --hash=sha512:01d38ba9cdebf0cc658b187a753f63065cea29ca757296cc1d40da4c2609b8cf96a1df1af7bb75bec61af767cee4ac6a20aa858ba060b4c61807800e57e53fe4 \ - --hash=sha512:61e07a421705e5c1613cbc888ff594d7e3457090e9654280f2b6e54a84e5d6dcd56292fd3c47b86a59be6eecafa8f17ad5d710f45b7fcda9f57d9c7343328bc2 \ - --hash=sha512:9720cfe64e70667804c197a1762db2985bf5893ae774418f50da9a3d31135b8935fd497c5fe4f92909f6e0ac70e3c5dd57f6322ab780d29b12741c64c0d2c007 \ - --hash=sha512:cea3e4556432588630382abae6debf9203c7f55da286509da547a7921e4dbad98c915743625c68e5f7187fcaf6d4cdaf7ed2ed3ba60bd4c10ae6e3f88608dc65 - -# Argon2 Password Hashing Function (Not needed but allows importing from src.common.crypto) -argon2-cffi==21.3.0 --hash=sha512:3093f5ae0220dc4c85f741dcd413ba8b19e8b91be7d253c7f2548a1ec9ec99298b2ce7d809be16f497323ffc6733acd35eb201fadd6d91560e41901ed3c09da9 \ - --hash=sha512:6cb2a075f3bb7040ee7f552d082bfa2f3df0854649d9c84fdfdb42bb4bee2133b8a35a20be2b3c887931efda12fbbb00815d8d88170b7e20b3ca19c86f97057e -argon2-cffi-bindings==21.2.0 --hash=sha512:c3218d723db5c8f2dbc9c737a3ce24d52291a8056b855c6e988956821894b695f2afd50b189a581e9cb5a5d1c13b9b1144be9fb6296a62681b209412caf85b42 \ - --hash=sha512:7a77d7e0becc167b7b348b19d5fc65e25fea4dd93a8e26c203b39f88691515a756a78becfb665a4aa965112a9b561be6c4461fe38db422fe20198b3139d652ff \ - --hash=sha512:1bd48d7a11cb99cc0d8526b2dc156e025002092d1f7c60632a0470275ade2374d3be6138ecf924eae2c33fb5d29fef16729b710294cc0b8f35f50a7544d17cc5 \ - --hash=sha512:c1f3ede9138689922619a240242a9d11aaf5942058c896be8ddce517d3ebf386767804e93d9dc4055ad04c682560764e9020c87f96f0d949a36e758025d09fe1 \ - --hash=sha512:ddb220ba4de3b61cefb657776d64ea0351e89b1f6e2eb04664e024f3e0dc46f1cdb11159b79f8cb9d0530c3dbc4bcfb9d89234fff567d53b06e0564ffa46afea \ - --hash=sha512:96c611449056eccf03f2e2cb5f8b6353ddd9f852c607f2fc6cda5f13bf8f8d554f2679b6c221b2114ff0b3ae5cb9ba841a7fc1affde840f5dcda65eb9c319d83 \ - --hash=sha512:7097f92df079b66b1d59b699523e2a87f2864e1e3c59bc2a4c71cf5657e6f3b094c62e626009602d1c44f07b5e1f2fc79ab03e916475cde07b6b6c6494e7388d \ - --hash=sha512:d8556d123fb96046837c6eb9205cb9fdb817f5ec6aa482f9f6ded77a3e67f1b49a21e1273acc0fcbaed7f4bf46b34fd555ec085ffc9a2daea1345186444f7c7c \ - --hash=sha512:8940ebaa9466f7810e385d0721042ae9c117480cc659436cd903b5c37af02fd9c9dce8d5ed95fb45ef7305777445cdb8fb00c82671bd577e1eeaf81f2691ae8d \ - --hash=sha512:9c77fbaecb073de920ed570cb7c7956a04c904e7e9616badde275791048a487fcd7e85eb6bf79d3f6bba6fdbc398e32cc208bda8fe368a84897b8d35da8e6bbd \ - --hash=sha512:74f931f3262333e3451295075abbfe0c323beadad36ffe73b65143e906f1e8cab924601a56a3f184ca2516fedcb69dc7d8dc6ea1d0ba25bccb21476a89bc46d8 \ - --hash=sha512:740c76d800bf8bea95f800457ef03d4125b262d034e4a62e66615144a8abe35950b37fe5627553e5bc448ffe32f77ebeee5e2a04857409f53604fb30de7d8d72 \ - --hash=sha512:71d023ae96073ed78599e4f4e42f8efcc985cc329adeea00b14b54eaac1e6a545e6ad9b7f4cfdc60a4e9c396f95053c0ccb6f6f67d92f70265f91315fff4a390 diff --git a/requirements-relay.txt b/requirements-relay.txt index 96f5907..f7e150e 100755 --- a/requirements-relay.txt +++ b/requirements-relay.txt @@ -5,7 +5,7 @@ pyserial==3.5 --hash=sha512:29bce14c59e60f54ce476d919c9b9477190e --hash=sha512:c8df5e50d952d5a6dcf1d9253a6ba953e9763c545a867da66c22c90dfa015aba0194f2a8f29a229d0a5f4dc8bfeeaaab8bcfda4066ed78a18b151bc05e6ae327 # Stem (Connects to Tor and manages Onion Services) -stem==1.8.1 --hash=sha512:bad2f4f96e37caa3ee2928bb027318c4941ca3f6c0072c5f6e87fe647d2b68400ad352d9c27fa2a35c00f4f327aa9cc00e2907b21a9cbd26fab46ec21e2a038a +stem==1.8.2 --hash=sha512:f054bbc9a61e04fb7e3b7d1534803b938b855c29795471953661f8fd9c0a5196fe1f9ccfd01e5b3256ea42893a7d57fda34fa54932012e345f74bb3303ff98c5 # PySocks (Routes Requests library through SOCKS5 proxy making Onion Service connections possible) PySocks==1.7.1 --hash=sha512:3e0b1775c14fe091d10e30b03f7f0c770861152e493cf3a3143b0de01aadbc73f684f0d4305f1a694932d4bdcac8056c422437130640e19028cd9fba59ff0b3f \ @@ -13,118 +13,125 @@ PySocks==1.7.1 --hash=sha512:3e0b1775c14fe091d10e30b03f7f0c770861 --hash=sha512:cef4a5ce8c67fb485644696a23bf68a721db47f3211212de2d4431eaf9ebd26077dd5a06f6dfa7fde2dcb9d7c1ed551facd014e999929cb4d7b504972c464016 # Requests (Connects to the contact's Tor Onion Service) -requests==2.28.2 --hash=sha512:220e0e122d5851aaccf633224dd7fbd3ba8c8d2720944d8019d6a276ed818d83e3426fe21807f22d673b5428f19fcf9a6b4e645f69bbecd967c568bb6aeb7c8d \ - --hash=sha512:3c4ba19a2bb6ba38a4118cf246db3855401869d54ee7ebd9bee40b435420381fb737d4c69768f2bd97914a30d66233c7058cec51aa629af0dff3b04e6f997a3d -certifi==2022.12.7 --hash=sha512:a7d259277af4948bf960682bc9fb45a44b9ae9a19763c8a7c313cef4aa9ec2d447d843e4a7c409e9312c8c8f863a24487a8ee4ffa6891e9b1c4e111bb4723861 \ - --hash=sha512:fd08b6bf138aa1b0a47909077642713d80f036e4b18de2c7f236a185521db3d6498a81a60b150124cc4bc21dd7e687badad4324a898117060c9e4ec93dfbdbe8 +requests==2.31.0 --hash=sha512:b795abb26ba2f04f1afcfb196f21f638014b26c8186f8f488f1c2d91e8e0220962fbd259dbc9c3875222eb47fc95c73fc0606aaa6602b9ebc524809c9ba3501f \ + --hash=sha512:ce50d64973752f4cf7f7c7c91401669854b55c66d7465bea3689772fae8a6b646cf6720d84a2984bbe6fd78fc8b9ce0aa377f291fb6d7c20c7c2a4be8193acdd +certifi==2024.2.2 --hash=sha512:7a3bd4849f95e1715fe2e99613df70a0fedd944a9bfde71a0fadb837fe62c3431c30da4f0b75c74de6f1a459f1fdf7cb62eaf404fdbe45e2d121e0b1021f1580 \ + --hash=sha512:2191710dc2cfdf781df498c3ecd5f38dfc5215e2c2dc402cdcd484376dbd7fe2e442793cc856e93f6033c1fc43cb77c71d2dc785dbfe0d8cd10fd3120ee3c2fd charset-normalizer==2.1.1 --hash=sha512:fe2f3ae5d3c011b314a057456a7b13ba957593b22dbe7f532f9fbe077103e75b3f8b631fb1e2a4d5875a60af678b6779780eff7df0ea7c08144aa88fce34abc0 \ --hash=sha512:f52abab683ebda4100d67ec6ee0349713baee453a742d60a1356f405c5ce2c3b4d850b0891527f08f92fa1217d59c46d6b181dc4ff1b962ce60d9c5ef8c913d1 -idna==3.4 --hash=sha512:ffdd45326f4e91c02714f7a944cbcc2fdd09299f709cfa8aec0892053eef0134fb80d9ba3790afd319538a86feb619037cbf533e2f5939cb56b35bb17f56c858 \ - --hash=sha512:4060a9304c9bac04efdd0b97ec8f5aeb7e17417e767bf51c5dfc26605edad25ab67456cf6f6a3c5a9f32b8247e46f6343edfd8a6ffbcd6d1075c71e66d089d6a -urllib3==1.26.15 --hash=sha512:4f2cdf7174e25fb6ee6dfff0501c51e4f56bd9e6194cfcf31c1c2fec0a28032a7335867b729c06de550b9345118902fed935234606d8e6987928679202a9c1f4 \ - --hash=sha512:b6ddb29c15b2d729605a6acb7c602f18c75a937cdfe9649d35d790a59fbb1d96a8d68975ba0a4c073c9f1750e383c67b7566dbcd81b3e8611501e9f4153e9a2b +idna==3.7 --hash=sha512:488a437198bcf2d32098d99a71447a514212d28e6149d597a347d85b638d9c1b8a328cf190f2b7872a7869f157160754f560fdbca2f2a9ba035401f0eaa9a87d \ + --hash=sha512:b50e5ae117b67c7076125d6943e3436200676f85d7dd1b5a5414e217e73904ef077f0b1108d9781ab4afe2a66f7c9e1ce8262ce51edeb2d29e4c504147b6c4cc +urllib3==2.2.1 --hash=sha512:82525e89629af701c2ce44ed6766c3b4c1f7b57ce0a3418342849dd4c13802b901b0942e7199d6e268ae03a14b67bc023bdc66fd827f4f50a3c4895271245c9d \ + --hash=sha512:dfadba099db678ee1567ee95aa11a72fcea0a76df094d04dd4bd7ed5df4ea2fda6917cc122a1e2bfa4f5303916f93a7e1c881fbbf3cbb9415a25bd7eca1b14b3 # Flask (Onion Service web server that serves TFC public keys and ciphertexts to contacts) -Flask==2.2.3 --hash=sha512:39a67e2b05619d4196fbccfbd836be0ed6c4c977beb1696020563433766c089a278ae09957936c7d23a75ca022a90cc719ab7cc3a6fe5a7dac4f687d11568d85 \ - --hash=sha512:de119d032b04eef80a99cee9658cac12f934e9a66d7dbb8304588d0c1320a8a19a8b0a78f69134a20ca26aa408db8686436c5c108ecc39e16b1eca1a3dea2d2c -click==8.1.3 --hash=sha512:ce7e25725b3edfd0f336f3ebc8ace3977539f0d063f3439c4a1af517263cc1058cd9c0f687819ba319811dd0f376148372444dbaf082797d1dfe2c1c1c856dfb \ - --hash=sha512:be5b0c8b72ef7c10854f31406668ca4d6f826381deff10bb6a87a406166c09af97e2165f1327094d96abade15efb872892af37f20fdbc855b659cb2c7bd2f2c5 -importlib-metadata==6.5.0 --hash=sha512:90e6f30282f0cd47a7dd1e489cbfc47725c484ccc87392930bccdb0537139c8291714c5125c74d5819facd36476b95bf3e4f4ebe238ee6ad8816f93095d3d8de \ - --hash=sha512:c581ff46d601a239ba9e83114a18b1fc5c0245c215752b8313624fbef6b441eac7cebd4e021d09f12d26ba30715b99475eeeb66befc49bcd609f1b53b79f9bfd -zipp==3.15.0 --hash=sha512:ac96786e5d35882e0c5b724794329c9125c2b86ae7847f17acfc49f0d294312c6afc1c3f248655de3f0ccb4ca426d7957d02ba702f4a15e9fcd7e2c314e72c19 \ - --hash=sha512:74a512428fa29e284c515a7e6c45030e4d840727e12e376bca480a90b7fd1e111462deafa372ca9aebd9f53c24bc37111570e7a4a6a873c0b7dee9a0277c100d -typing-extensions==4.5.0 --hash=sha512:ec14fe7ff4998bd9ed4c57a491062d0d0d3797aa326c71898c879455f0a2dbcc639ac9b51f68c03a8635459de7612b31aa2b71f364ac6d2dd6b696cfd80df555 \ - --hash=sha512:a38a018be2c22b6cc1d9a14477206271b44fc110db2a958f3cb5b179856c9f992b2359ce077dd0d25c3711908e4009d44afcaa9de6bd422bc1599c9533f8200e -itsdangerous==2.1.2 --hash=sha512:190df7f250b5e5985898a7f0e0e9d4c3d0b5c391268b9b5ad0f39667ec887b543651dff7623ba49e191ffadb42b0354b21be19ef61a1f68193924bf12034dd1d \ - --hash=sha512:e4d870a33992b309ed778f403c0c1e098983a693d1165260748bf36385ebfadb583811e05ddd48001a33cf6a4e963b7dd8a8c68919c5b4b86f63621d8869e259 -Jinja2==3.1.2 --hash=sha512:00558cca2e0ac813d404252f6e5aeacb50546822ecb5d0570228b8ddd29d94e059fbeb6b90393dee5abcddaca1370aca784dc9b095cbb74e980b3c024767fb24 \ - --hash=sha512:5dfe122c1beef5305b34d25f22f96607bd3a6cba098b03091850ea36fefe62b645a7218d7584b35bea252393ac922c9bb3654a9e90f23bcfb273e811fcf2f2c1 -MarkupSafe==2.1.2 --hash=sha512:3783ca01b1676f4b0f597ead79ab32b5c5fe2810e66a7fde0832b7ca5cc83187cee03c262b2ed04558582585bd0c5deb0c045618feec13edd3e549c14a148098 \ - --hash=sha512:ceba16a2f438216f2eb8312caeb94f827f498f84daa08701607483ddf364ba0fa553b582b4b6a2c26c254bfab25004416d345e3e4f04c3877fcbccabe380e88b \ - --hash=sha512:a1964e0a905fece6efa054f6b7dd2c4b89b1b67c8bc80d72ffd4ce7228d389f8f28b4b21036505548d75902a19d764d74929403dea6f61fc7638ef2054b5636c \ - --hash=sha512:282f5396816317eb14f71a012ed33e57c7bb434a367e7a66d126ceeb4091e5f5dca68aa6dbb1d4c1005c80492bfaa3109071872c86b303c2f49f47408c7185bb \ - --hash=sha512:2fb2d5c657ed023d4cab36433fd8acda778a66feb3e2dd2e25b864a21e3e8bc6416ec3ef3875eb15b07507f77a813634751497a43533417bb77fc18f818028f2 \ - --hash=sha512:fc0ece51b6fd5468ea83024d08f2c448e430e7541b9262d94db645768ee6a954e75a5fe00d74d9f82c844e0c293fa449017542fe742fd7d0f2f4f6d300e57cf0 \ - --hash=sha512:295338d568db27c0766d6a1ca2e071b60ab0830374a9b68711174a52ae88859293d5e0cdff30684456b814c82614511e18e82b341b3f3b1f879a6c91dfee83d7 \ - --hash=sha512:793bf57d19d1f89cd13cf477575a9a31396f75d0da9aaf18949c59e81ea288467be598dcf0577cb71d79bd4f81052f4ea15c320be38eb15d33288c400dfc17fc \ - --hash=sha512:cd09ad7f6320721543ea6b677c558a7f0ecbc56dbf43cdb30f9f071ec9378542af2b2d70c942d17e86a814f628ed4e665616adf3ef90c8754a4ec7c9b72b4976 \ - --hash=sha512:f1e3865d2ba379322cab24b91c973aa7ebcb254a37764f76beff3eb9abb553a2fc8c67f7b9626e10d44c57176a073b6097f21ca9aae224a82a21646c90ee3d03 \ - --hash=sha512:2e6a41138e8361fda264e0790ad6cacabbbe6693c7d08a6a7ee0b38064a5b1fee84cf5930eee1a95f658777c51d652b200a4db1acdfd8813fdd3ae82102465fe \ - --hash=sha512:478af9198dd18ef711016755bd77dcb178cd4ef8269acf166dd3be151269d3fefce3574457e5bcd91c330b6d12933daff8ad6577553f2179c76ced38c9d374e0 \ - --hash=sha512:1b6ac1de291567f69405e9551a73338d309813446d4ccce80d2d311543898a756415ddbe3bc729a528bb827454bb1e188bb05e3d923f873aaca241b311451df6 \ - --hash=sha512:c4cb843221914dac34eb20ab409b3d3066769f1bf79e385203de574c05b51dc0f8eec62956476b8d99e06ea44b45b2327b2c632a10373d66a46d4a6401c21eb9 \ - --hash=sha512:2087ae635b7e5cdedb5b57f84f110a606a0f69cb0eefc2a8ad90fa1219500b55d8233459c27f225d27c154e662610f35e05493dd8a4bc9d112763300b2541919 \ - --hash=sha512:ddd1799d5becb875e3be5a7b432de77a8862a5d3caa4e82b47cc1e0fa26440d9b5653ccf56b9777323c04f8dece854124d3c77ced2b62819e6019a6aa67a5932 \ - --hash=sha512:7ecdc21e0ed4d2499a698fbe0336d15fc630bcbd28277fddd05238b219a6c501dbd96dd0353f9c1ca89e1c5883bef2972fc3c3c8d408d02d8f427aba863b0cc8 \ - --hash=sha512:efc24555a84d65097e63f013efe7984a26cc81fabc8ff8386c45fb7ada054a75578a69ac1b5bbc0c755c050436e1086f756ab35511e0b406b05bbfddc2dcdcc5 \ - --hash=sha512:ca5c9e4f6f62b930718c80a46af0fb657a24cbda610d92c73b29c1fba136e4468cdc50b63e0e99dcb657c3edcb7bbbd1c4423b23c9e56b545b2c070b6ca1cc5e \ - --hash=sha512:f8b73180cad126fe44d6340e7282e5991cf06967a5facfcdd9bc956143c2fbb5b85c1ac50a65f333def6932bcf83a34f3d46a1a6007b60c17071ed027df05d93 \ - --hash=sha512:3b5e6ffa97ddd8c84c9e4fe8354e916774cfdf76ab5852f757f5ae6a984f99a7421fd9ca548e22d2d3afa21cc70903a4807030e5d5ba822f989830073f5257bd \ - --hash=sha512:181dfc2666e97266fcdee173299e205f1938f1f2b34c52bbed6207d8602fbe54a730719db781e6f8d72b644a6b85261f683c72c1050fd6070f8b43e6c4092582 \ - --hash=sha512:30370db92aadf1e1ceabd12df7140cd018a2785016df62ef5a0f452c292026bf87e4e6a97bf39b43203537e1a8ad9cc617f01e6dc4572b7a964376784da104c7 \ - --hash=sha512:f3a693aa8cc1bb5c836218f1e0ef4e90b75b44e9e7f256f38fd4160816a9ef44453618cc2db27ae5a5033fe6a03810ae260213633a75720020e7d58c5fe2261e \ - --hash=sha512:2f7f9edd7721ca700a1078bc89efd9859bafd285a80d100ea752a9815b2a9affad57b019daf15ff518f927b90296a91c24ff5dc95d92bf4fd939534b93ea22c0 \ - --hash=sha512:99a4e3b43021e6f915181da8a440b90a5347d44f717c337b9ccb99f6d4d5b5736e0ad65b549fcd480a81c8ba7720aa5a46aa659e7ae5d64a664da326e2aeb2ce \ - --hash=sha512:40e172b0e6fe9a8dcdc8716db0f3fc543f8ec9ed2c7747653d9362034bd9ada8dda9b6b416572198fe3aa19339576fc19b38980f67dd4a486006da933d1266e9 \ - --hash=sha512:aefd12859788594aef77f1a2051ca14a7b7fa12b7e8d0f97cb0bc891773e9e2149bc27f23e73c68ee40bfd92cfefa73e6505d26f1a59a6f07fd4f07d19ea343b \ - --hash=sha512:372a79b769710ca815afe0277f2cc8d1e7a1053baa05971a0733ff5a2d6964daad6cd856f262dfa8055200865ae9e64b0d1a919d56f810459549f86636b07982 \ - --hash=sha512:74684e845fda87cf27b2abc1164c47aae5154d69c0a7089616defac56787272616701fdd7caed710a951ecb0e30e9b82f3b39fbbda24dcbef0715b533c02c190 \ - --hash=sha512:84dbeddaf2df713b3cce94eb64876fea8f80c608e25130c18e4691be2b1dea56df8b772d26c0caca88231ef795125eb9678210c33bf20518c18e3047912ddb4b -Werkzeug==2.2.3 --hash=sha512:82abbbd482fbf92ec449dfc5aab673a9cf29f81227f39b101b3433a4106ddb72498827eda45cee751a2e47768d27c04f77bc87bd7bc82faecc94cc426a316c00 \ - --hash=sha512:33d0581533ee83e5daad85c36d270cdc9f66b804b6e3c24254f87d50fb504211af6be277a8638003336f23edc2bfc635f45efae7cbe54dae174693bd272fa137 +Flask==3.0.3 --hash=sha512:efc6990982567332f1d274054a5d2f1e1b78c21f25a4cfb1de6b3a2f96fceab33fb0d31f9eb28f504e3899742fddf5854ee357395e7b66fdd3810eb64b8dff93 \ + --hash=sha512:977c0e5fd2d496fae8e34a035f211118642dc6518a14dc5f6c175b72c6a76407aeb9ff0ed1f5db636370a9aa7e0d36baa783713ea7bdabd7f28c8c2b94643cd1 +blinker==1.8.1 --hash=sha512:2bee24786f60124d6e07900213433a2d4b42eb48439f7f435da1e51f0fdb77d137083aa37d0d62d473bdfa24d63d9cf23712a3dd6416a491eaf0e326062ba185 \ + --hash=sha512:b6adada7f314369863070e830364833aade954e4cedca390643223d632c110a314856fb1c050402cad7e64959500c4d27d149ce7b682ee6bde99a69dc66ea495 +click==8.1.7 --hash=sha512:687ea8c461196b234b0f0db0638ba213304b96bdeb9c9c6334a6cbd78f4e99da9e062bca2f449c88fd7a1de7ea2643e80c8ea571103dd4b2c50424a6fbd5d5e0 \ + --hash=sha512:c67146ad0112daf8ed4db62a6b0a0065109332eb8fa31962ce40d61e27e2736020a0cadfebdd1656e2f23c20291b069d3a409faffe999a0907e6dbdef77aa014 +itsdangerous==2.2.0 --hash=sha512:3c9d38d4a9a53f6426139969a111cb13f0588e4445173542a5c88a2f85348afc6f709f3523a4169eee6010cec99eed6df3a82cac59ca96a731d39461f88e2b83 \ + --hash=sha512:ed046cc371ea9aa1f7cd3bd201f1b68910a2b008bd8434c425332cecec6539cf031df6e2223a1fdccd68c12ccf5486e80f178d5906911b19417f0ea244e367f8 +Jinja2==3.1.3 --hash=sha512:e3e2e6bd511dec484dd0292f4c46c55c88a885eabf15413d53edea2dd4a4dbae1571735b9424f78c0cd7f1082476a8259f31fd3f63990f726175470f636df2b3 \ + --hash=sha512:5c36d0cd094b40626511f30c561176c095c49ef4066c2752a9edc3e6feb2430dafa866c17deebddcd0168aa1f0fd3944916d592c5c999639b8152e7c1009c700 +MarkupSafe==2.1.5 --hash=sha512:f32cc6753cfaedeae6392e1f7fc8523ccbbdd996fa10636164004dba3d0d3ed80b8cccb1de3f6660c3114e8f83c260b7f92238b0a2a0bc48580ae00f4fb1f964 \ + --hash=sha512:46d4361fc36ed9f3c78b282eca731c3918c9cc3ed6a74b1dcdb74731075d63152bc5398d64691c08e79e9b7a21f7bb96bf20d7e4ee4feeb7c2dfddae0ea34d40 \ + --hash=sha512:bd0f8577d7909a1186671cf1a2f9f87d0af6597eee61e44c071a4f8d9dc51bda6cb40a8a3e328840b24ac86fbe9cd0ef8f06ec78d08b4ce764194512e0fa0634 \ + --hash=sha512:689c416c3ef1624f97d4213375ee20966cd800d9540d114323c4adafa4e3e5a2e63bae89c8f948d2e940d9bf29f485c8143e25da2a5eef130ef39a039bc5d9af \ + --hash=sha512:ca60491527e5b2da3ac3adc9ede4d68c64f7d70e1e6f7d061d6a7bf285aba3e5e2c8543dbb9f0203df4503c81b5d53559f1098abe5433f0fc8cabc8b737cc130 \ + --hash=sha512:ec77e3fcb4bf013af838bd3d67ffaf42f614705798c415a89af121326e6107943264059df97a41806036a8e6d70b894c8cdaf49ef8d8060263b61408c5102c61 \ + --hash=sha512:2d138f2261ccec4e009a71d5900d18eddb61875ef9851c63ed3e644ba3c0b5dbd3fd3ef77c39605c43a5b6bf28e5fe9614342e7bf4ed7cff03913187d5ad6017 \ + --hash=sha512:a1dfb9d014e5ac5a6523a3d4751a0d8458d6a3ceeb87aba13d303eface5b6428d62d8c989c74397aecf597545405ac1d1378308057ba1274cca0a436054a8819 \ + --hash=sha512:ccb5a63f69e5681b3eea5646dd6b163241e890d4ea502c29ca782265ef2322428213de5c1dfa37adcb328af24430c22ed49cc2ee2a96e8ead416bc7a569683f6 \ + --hash=sha512:6698232b96e1dafa8c1905b393952f6ab132bbb72bc10b0dbc567abcfcd30205bfc59c6fd9ab66e4c4f28e82f7cc3e871537b086b035dfb46ea1160e2b26cfc2 \ + --hash=sha512:efb08c3eaf132e8d10e3f8a01ff80bd0bc36ac7eec078cf99f9065a9bc4cb7e4b53c9ade1a2ad46b786c26a31662f38c4d70da2c53533c8c5759c8d439c3bc66 \ + --hash=sha512:eeef56f202babb0174ff72a65239d806a1a6070873f94dbf939443df60c259bb403aae2afee7f2e9f199ee9b8bb0e91f5e95ca9029b33730d88cf53457c36674 \ + --hash=sha512:0447b1b39d8eaacbe0bc023ef7a5f0fc304b4b562940cafe150670c7cd8be6c11c23fbd831b9a9f3645e3e085f1662e20b2f2c7114bde23aeaf4b55e9ca6f8d9 \ + --hash=sha512:77bd99171babb05f0b4d8c45936dfc91f9c2c0ab4a7e9215b6788800a13befca9256cf56422a0125f51a8e53928dac66ddc3077e655dfb3a2fc185c3f7646db4 \ + --hash=sha512:7667f36657612cf81f273608c2e5861e0cc412ec5af3ab2a080547a7b97d1670d5caf15aca23d0a2653f01157a9849e5435662f833cca868fe83c51cb17746ac \ + --hash=sha512:386f9624fe79c40e9e548323d00f2bac16c5d58914afba24a5ba94024fc15a4e531a3203f077fbb3517a6a2c4b3570caed701520933216ecd67c3721415e860e \ + --hash=sha512:270353f556509467e6183d1c440015f72e0712cb9e3420981aa7e48d09cfa8666966568bbc6530fcbecd73864714cf1bdc52948e2950c565d6b50eeb1d677f75 \ + --hash=sha512:ec755a40cb7427da58dac02ada8f2cefec4a38902140ccfba0bb663f4f4cf54eacf411b9fbbeabb5ad690c4f1140ab38a1d58fd80961adddc04bede32d65dd8d \ + --hash=sha512:7e0d8d5e85790cefa7b56b5924523a8dda606a0cfd1e9efa2fc67ab13c2eaaa5b4e8e15a45dfbc9dd7759b1f87dc1d13fc35557bf0f9dd38e4c09e039b018aa0 \ + --hash=sha512:e620c9ea18dde478e6d449803e511d7c0db079d3093063fa383bc498618ecd618edd3518f1408762d5262f4663a85d3f5aaefb9408da2c440182281678f6222a \ + --hash=sha512:81b67d2e236dfba6661aa9f06a0f11e64f2a598d3c3a80b1678eb207b856edb18372dca8d62fa419eb717339c1147fb53bbcfb4b06d8df281c0890020ffb2bfc \ + --hash=sha512:34392033b008945424d81bb0a2b201c853e3b743dc4b4ad2270903c2a031e36a59518767ceb724ae540c9b03c502c6956f8af048e4a6c1be55428a7cb0676539 \ + --hash=sha512:94233c5f239525bba1c584da6a3bd54c7a9c3d99f6f40affb32484d93d89eed9b6c2eaba522b0388c1fed5405354abccc4a48a8522188ceb1055be1799bce42d \ + --hash=sha512:ffed1823a6bcff917670c25aa7d249179899ecc9651f2e303a626d1a8e10ea189cb1875dd73bb190914bc2714574e9fa73f62d881f07522e7a50a485a6d71be6 \ + --hash=sha512:54c049098b67a7ab0876f37196d6e76f5702caedb282fb76224b472a27e48c9d3d68f841a9a45514090a55a28d3f94135ea60bcd440a5c27357ea5cc44391176 \ + --hash=sha512:9a51bca810984054d198d4081262be66fb3d05f8356772bc27a01a580d82f0552542a8b18e41e7cd9e6aff2b2065dddf103f0ad87b851b2d36c7459c926e856e \ + --hash=sha512:54e954e982df1ec116d1ae58e432c36935b582aa6e13e13645916428b918abfb5475d31c8be6308fe04bdad139b0e08667896e26ca909b242b0f104c959b2661 \ + --hash=sha512:3e409b8b9642620925066423c44eb38dbe1ef35c842c39a6e19c0dce620181395effc195ce8a3e5717c76d554a0dfcb0838965358b7190d98ac576ef475e25a5 \ + --hash=sha512:1eb79d3a71d25372dac4b11827986f01d11618baddad7145efda13cc1acccc8e2c7967c4c51fbadbd57e7c93818ac32405721b2d94bd7e3cb519b0cf5ec47423 \ + --hash=sha512:e09fafdcdcfdb7025b1fa803cba5ee04ff7ae8eb599b8d69deb6b37f958f92627b6b2e9e4de30fb338f65eb1a123e1de15afeaa75e0d8dfe0081482d303b11be \ + --hash=sha512:8a1f91b4f7ffc97332ba757cfbf4bd6d9190235854711b70250c0b0535d6025ed08b5fb5dfbd6288b0c50f04ecfe42ffd9c7d1829bab8bdce26ebf105e95059c \ + --hash=sha512:1a882d8ff38682ffc5cef0d0e29a01a1f012da22c4a4a12872c812459ceb62bef496aa5debfd68d53e9069ba0d5a33ba58f9d071e0a89cbf568df8eb0343ea8f \ + --hash=sha512:74c0871ec5ccd70bf4d84cca9f17d36ab3279253a1aadc2e6d8c349c4e381b63eccdc19152028ce26a9f03d58ea61b65780a41460b094b584585ae1708034562 \ + --hash=sha512:913f2a486f2d553a998a7adb836acffa89e3adff031abdb8964638a0a45f8257e90f50678668d624425fe743796c6d272c9b5eb1fcabbdf823aae97b4f303fc0 \ + --hash=sha512:1f1306cd2b0eb0931e12900e489180d455e62646079c9fc8c0d4a53fcb592466fa71674fb0da627d617d4e7c37c65b0243248a5ac8b6fd120b6e8e903821b558 \ + --hash=sha512:7f4b54cf745603eb15883a76e8c978a6684f1b585e119af300e52434171d2c2411bbb0731d3d6454a0ae410de1134544163961e0fb1765bfc220afcabfb1fac4 \ + --hash=sha512:3ba5af43d23c266377f5d32b11e1faa7955ea8c67eb1c32886c308527f93e75e387294d0eec7794c0c20aad0c705b27f3d1f86b04202f3b63068d12d4053cc71 +Werkzeug==3.0.2 --hash=sha512:8904c195547630ef173356c8286deb5fa9140f193ea017680b9ea67a57db4d4c7479fe9023f02f78882a5212bf8e79240d994b13322d8a7cb6e4348b6b69b760 \ + --hash=sha512:5f9a91684653da17ef419459db11a6a4bd83b6c1f2f6b0e9f0a296bc5c7c63d2b465044a131f579557f1fb240a560793b734f3d0248ecbb7b6af62b1713484c3 -# cryptography (pyca) (Handles URL token derivation) -cryptography==40.0.2 --hash=sha512:529d42f80f85f84ddb9c4fc16adfde89c8e0861b37dc1aa85e49760034428d48ea2ece1b41bc6d6e28fbe7e6095357df512533391457aa910539baac02b0aeb3 \ - --hash=sha512:a629ad9150a00b35e2188837614f9196439b29837420b383b88399905306911f5d11ac970c3ca79a88c53ae0c98aa34892cfceb7ffdac4b965717f3e6afc9abf \ - --hash=sha512:28acceb7b52c3d1a916e99d7fa7ac71f8f7c050bf5a7a24b521f021a442e9cf3ae0fb0471cb92d1ea050a5a323d0b8e9172de965bc2f8398bd68f05d64b31294 \ - --hash=sha512:8366a2dda1421823bc835a128b3cc1b4f5ce769da2cbb8a952a82c4823a38fe9a2086e2c1ea1725fb3691928cf0be74ac713bfdd3bcc4d54ae7200801c1dd9e2 \ - --hash=sha512:776b6f99749a42707f1ec709fb672d0b2a276cc3888c97e0da804e85d2bb918470acc5eeecd34c9fe46bcb2fbf6410ee7d12ca05c0500c39b5c22bcebb1284e6 \ - --hash=sha512:4ecd052e2b6c3376cb751e6bc0f568cdf46619600673ae3967bc3d3a9d9e834f61772e336f29552b0b4ab7023d5b38f5f745188119bf1a29d1b68ca63a497c4e \ - --hash=sha512:865cf0bc254d4dd775968fbdb392b4d2d3516a2a345c72ebfd787b6d80cd982b942c7bb932110e81d05c58539b053441ecf76193b03e7600027e1873f2652292 \ - --hash=sha512:2416924bf5d8ab0d890a2bf11766a5b262fff585b5391342c0ea1935d5ab343abb74a396beda3182298fa45b4971b172ed2793f190b771a676fdd470d3d94224 \ - --hash=sha512:d70274a507e3533bd368954364016422dddc8db4e3cecd52697afbc9cffe9f41eed77dd9419690fd70b5fc8b573e952eacd8b49db074edb7449f30eeae9d251e \ - --hash=sha512:68d656c511deef6ae84e5a5004b7b3ce3c192ea889d61fadc082197ee2ac91454dd4c473587ecc1e2862c8a7948839b15263785bbf026e32d7f208c2bfbb8234 \ - --hash=sha512:391aba41fa75052d86182d39096c61eb37126a1e94499fe1934cc3307c8c7e819ead0e904c58c0b36fa4c4bc375b092d1b352217bc0d448f4aab587cff90528e -cffi==1.15.1 --hash=sha512:160432f1765330dab76807ec42052cf41cf33922f7b77713aeac0f99af1da8107f1cee85fdc2d13db620a8d21c24423853dd55936204109e429331828e2c576c \ - --hash=sha512:2c125d6b2cbfca5b3174095a6fe653fa2c58762aca9a9c46024d50ae104acdf10ddac2014ccad58ba95dbe3c4c8c2589a26292f23a28c1ffafb9aff4d60878dd \ - --hash=sha512:73eb0ea04f5f3c1e9e12a07cdb01b2095f7eb329aaaf9686c40087d8e59944acf4d616b6f774139593de176945ceb510fa86fa546d165bd0a2e8c378c23ad552 \ - --hash=sha512:49ef4f829cd9b8e29964b2e0a96a05f8230a510a6ef78b3f5ad10a04e17f4a6356955325be23d2e770518d6439613ebd3e851874a5c3d0e9831018fdd60fde2c \ - --hash=sha512:35399df0a0ae1e10699d743e11104f0340a3d99621874cbb33594449653baf99b9ba4d633005165d7e70a2282bc46924e08ce4d7e60d17cd1fa30d0b37da9543 \ - --hash=sha512:2f75e683e617abbf709328ea6500d4d688078e378f5447fd923f7ec9d1722a9a38292061b762098177d0e12b221437c8970bb8a96b0423c3b55f5c2471f71634 \ - --hash=sha512:6cb0451be3df9a5d38b26ce6125d6f924811ccc49e6d7019835d7de9a8524cf8764f852fe688d085610d15b6feedec196d00edad862264b3a06d755f58586483 \ - --hash=sha512:9569fe3f3af46c7e19b1bca00684856825bb663adf2cf669980b7c003535d278e05b53ddf85004dae01ab7ec582e721a2c8c6087612da438d0445bfd4ac1a241 \ - --hash=sha512:04fb957a7e40d10461e290b631aeaa02eb9a304ae0397ea5948fdb9de3c8376e2030385fb5bc5696b618659022250bc9a69c4f1b8ef1e637431fbb5d23b26aec \ - --hash=sha512:d993a2f25c194c16c981583c86ee9de5374cec0602da6f681f655a18c92c51133babbca0c802d02f330009ccab5040bc0e4f7a4cb5cbb05eafa744e93f5c9c3d \ - --hash=sha512:c27677ab98eccac495e34e912c5626eed909b72bf8d21493a3c00bfaaec0af7847d91a97fcc5d2834305e6c3b64fb2e4d84c83f7b6dc27b6a165c9f42bb5ab08 \ - --hash=sha512:9911acb9878bbc8c59734839c8cbc164e8f121a493a0589898e1b16df32c41d46d0132ac3a8a36d52cd2f0d857695a8cc6878b5cf6607fb52fad139a43089d66 \ - --hash=sha512:a8cd7b5b695cb89556a7b5c0d4f7d02325d39cd59bade9e6828717623c98c4a4fd5561366549770fc8e412aba06dd5c0cdb5934a49050d182bc27d0a8b4d5601 \ - --hash=sha512:fde7e4cc649538a32c87bd40cc6f5596d79566c6508e2fa7c30241d68d7bbd51d22b50039910c5a5196f10f4c9d499eeb884367156f156dc8285fc3a1ac103a4 \ - --hash=sha512:0c9980b8f05e7105832ab5e481432f778a09631ce0fd1c09b9582a19f2b08ebd666b491ca97bb718a74feb80d3516998e3f112871ad2838fd4256e7a8eb39ebb \ - --hash=sha512:d372560553196445c3152b92f4afa011f61aa768825dd63b8ac8b9142481b1b86c97f6f683a92ae0a25e409503ff4ef159c74185dbbfe2a54b22426d9ca991f7 \ - --hash=sha512:9cf0bc15c1d820e45578943222655cc8db8416e01ee825c9b107963174b20f0a0b01fd8277c28d918bcf18eeb5f45de9c1a935210f9c0a2daa5b62f70d747a45 \ - --hash=sha512:bf4d6ed94fda20aa7760d2a7f0c1557ddd70dc90a2f0b2dd391bd274d37f09e298b83ff014e6f0820c6b47e70681db94a4197016bc33b89e01f9223f23403988 \ - --hash=sha512:862d68482073f468f60d8f093a9f9b5c78562297f2eb36c84bce283a4a00e897d1731aef67b12b17551e373a668288acd32dcd49031fed5a8c621aa8c41fb0b4 \ - --hash=sha512:36160d9d7c2f138b3cc1debe96365d57b0d204dac9cd7732ee6ab8890d9fc87700a50475336d79d60b26c1656295e26d27998cc3f9f6274613c84a64144c93b0 \ - --hash=sha512:55ea36458d5c3c4a6f9b647215676fe8801704c6facdb65c55f445b4069ed3fdaf155daa8e371ed9f27937f57799e189f7402b945ec70bb85eaaa2f643c70945 \ - --hash=sha512:bb85c0f097eb69d218498dd07f4a40d5bbe280b11062babe64b8d3b9a0df540c42d95e898ee409b14daefdf19c48bc499cec6bb69295d7b6a10dc151fdd6bb6c \ - --hash=sha512:e253ae455ca94f91ee37038c225d395b5668e26772edf26de226ccbb347c3c1b5536a358e023779fc1b06bb6c5717158d6262855445804b1206e07da3a596c7e \ - --hash=sha512:454522b8eef53c0d17a5eb24a8852f5d6d8360aca2a2c5cc8fca22533de548052ac4556c7cde432592b20f63cec0356be423a4a964ad046744e018821aee4ca5 \ - --hash=sha512:f529bc89cee24cc8db6888df904f5c2bc6a6ee9b0cd52ad03493918936079875fc0968a3f5f1e93306a41e6418d3e60b2b1417c287fc29d0c12951caa0b94b98 \ - --hash=sha512:2b0fba3366eaaf1a88701c5131fe6318e3c89c2969afed5fd2fffdcaea1810b91963dec37b549795267577a4f1697996846e8d027b63835e290c72b3568c8269 \ - --hash=sha512:88d1f27641ecbc51d9c323a19c913818c478d4eb87d27d16426d20eb9727d5d4b23bf9551d842433820068e29082c9b9c2654f38e903b6fc761d70632731c643 \ - --hash=sha512:7d21ff025e620b024191e0a813a678b3269b582e61944e5677eef4bd94be8456758515288d48b85b3736efb84b9d0d899d60bbf8c5d9e79f943c2b1f2f78f85d \ - --hash=sha512:c76d6e2f761582c4122cec8ecb302fca324b90fdb3ad1442dfd32ab8cee25c6e0519c6556911d5d068229d48578f8c1cdcad4fdfe8bf936ed6038d020633a3e7 \ - --hash=sha512:7866aba126d54d88a0e55c70fc8587773fa1926db1f09c932b58489a63092b2e672f8bd3104d682bf41f250dfce85a824b2616b9f2cf796e020b1ddaabaacf4f \ - --hash=sha512:228a40447e3cdf4bebec7286d8c53139f4dea816be3b378dec81ba5e0bb1c20a938564b0b6d34780399f79fce3ba572a5fb5e93dd21dc536551323290ff2483c \ - --hash=sha512:c637580d319c9960185f44580932996c2554fb0e549d822f636a9703a8e9b8f6e105d765b65e1ef7411320698d05a60f4005b3d590e18c5784d5c8d07d86f612 \ - --hash=sha512:95bd8ee4ac5d3f4cb09d5d223dfec484cfc90b82e2eabe40eb3c89217b0f315bee469dee6c5f89bb02e636eefade048e6e709f2b5126eeb634dcb0cb13332fa6 \ - --hash=sha512:f5ea1c8a22ed5bfe03586d7fa872dc0bdeaa13ee310ecfd7355ca2a3f742ac6e3b3e2663399acb4220c95cdb92521dc181fd9c7d9da1ce45817a145500cd9243 \ - --hash=sha512:0fab1b5323e009dd41de28f3f5c9f01dd4ceea627de8bb6244f72394c3fbae6dca8dc65909dce4847cbf8fd3654b55b55caa194672652a253bd0fa2a1b112f78 \ - --hash=sha512:e99cafcb029076abc29e435b490fa0573ee2856f4051b7ca8a5b38cd125d56dd9dae8b189f59ceb3d728a675da8ee83239e09e19f8b0feeddea4b186ab5173a5 -pycparser==2.21 --hash=sha512:aae67923f45abd1d781d03e0ce848627a07e9cf4c61a89bf32f1b5f638ceda08de39a038c46ed29d2df967d76be4f2572346bad087ac32b418e6fe654fd28e43 \ - --hash=sha512:e61fbdde484d1cf74d4b27bdde40cf2da4b7028ca8ecd37c83d77473dab707d457321aecaf97da3b114c1d58a4eb200290b76f9c958044b57e5fed949895b5f0 -six==1.16.0 --hash=sha512:656b010ed36d7486c07891c0247c7258faf0d1a68c5fb0a35db9c5b670eb712d5e470b023ffd568d7617e0ae77340820397014790d14fda4d13593fa2bd1c76f \ - --hash=sha512:076fe31c8f03b0b52ff44346759c7dc8317da0972403b84dfe5898179f55acdba6c78827e0f8a53ff20afe8b76432c6fe0d655a75c24259d9acbaa4d9e8015c0 +# cryptography (pyca) (Handles URL token derivation and and derives TFC account from Onion Service private key)) +cryptography==42.0.5 --hash=sha512:fd840cb0f6c49078d2484fd2ff75a2c62c6ae58b69a01be0885a7bd088067e5f39f9e0de582e0a824525f7bbfe4d6e5831fe176f40fb01101df3f9a41e3ab14e \ + --hash=sha512:615d99cedb543228cc45a49bde24883e920426cd32c964471149fcb994a74b8ca3edb00d1addd52d19c19d7689f9b978cd10f54ac6ca70368da9dc40c28625fe \ + --hash=sha512:8b98785ff25b2fe0745d867e7055b54bf2ace5a21f9b42eda99c5a5fbd5bb4a6e74bedd6a3cf39c179570b351503ee0e7e937a04e1451f22a4fa0d69dac1f2cf \ + --hash=sha512:8f084fff47efe264edd9101915ea31e1e16cba949b7a0d3be3e72632fd656e5989794c0ef02645192beb3c51be0ab0a3184c554355e241e5060bb1b255cb0983 \ + --hash=sha512:687f042d3470af3c6f1e64584a691d9aecff8c589de2a9ae7dc8f7a5738ea76785976ecbc345b838d3023c0cb033476ac86d8d06ecde5ce855ab3a78b465c17a \ + --hash=sha512:2a57528ef4e99daf9956823e994cad12d687e78088b7c10b3e694a859ac70cd66a86e02003f0d1120e75be19a28f299bfc87f590a2157099eb7ad95de8728d2d \ + --hash=sha512:70a54c0660561f898d715cd289be93a52082fcd986d0acbfb2af73cca703661116df34a108cf85da66e3ea1b8fd98e1c8af4f173fd487f54f3a8b840d11d9ccb \ + --hash=sha512:9d180b8749ec2682a868a3f062ed8bec0a6ac4483d23200c50afab4613e167be1e8faddaaad5c841fcc3f06e8c9a5fffd6a33527861c0b1115a624d4961f9cbd \ + --hash=sha512:49b2ba4241bb10ac9a3bca74ccff586abf83d10b2ec641ac9b4d53b334dac60135d6b3ee1bdb300997a3dac78d61abf099ab264d55f152999311588b2a213efb \ + --hash=sha512:0e5dbf32cae786fdcd855c6c065e0ced23de25eb8a667c620d7f2dab9549cb72fa08cc2a2795454d14dfb273a5f0dab4341155dc413cec9049bf2fa5d76f398d \ + --hash=sha512:cd3639bc392ebd062870c90f55ce527d39b354d0e6421d7ef9ead9ce4bfb28eddf3bf8685f9681ed7f23ec0f983f000dfc34b5d6349e825682633306bf29623d \ + --hash=sha512:4b87fe7d1a1f81a3778da62c466f35d763d359b59e79dfc26e971e18ddf4d5d8febfa927d1a7a4a20bcbcf3db8b94ffa73b0aa8e2a8950a1c7d4899f9c95d8a6 \ + --hash=sha512:f5149920cc429e841ec88cca9c68cece82172f2a74788b1ce0924b45308df5aa92920c09ec5c93335beb37ddedd09b18444664ee0879a9a72fc432554b8d5e26 \ + --hash=sha512:2ee854f1ad3fecd81d2fe2418a7ac804d8e257929f973d8fdba88b8a93362590906eec44ca6e54f9c2173b1d645b2024792f2802320bcb21d7ea7423cdcdd833 \ + --hash=sha512:e4ba05cd1f7fe2486dd2041ec2ef31b9642b1d17300025eda181413a1ad7af8d5a1daf4cd45a2a236191e591d74b51c2a63217a737eab680dd09efa8122be5bf \ + --hash=sha512:04805984237fbf618d6d87321432840701ce0bbc1fd7ff65664487faec8724398fccbd8c01ac5c5764e4ac1bc5206325320c6cda74f3ca3045e8739487ea779b \ + --hash=sha512:3b416b5c915890a8bbe75aaada1c032710dfadd352895effd7e0412ad2e2b91b3b0af087a6dd94af415394506e2598adc9f9deb8ab3820c3d0c21d5048670af1 \ + --hash=sha512:a4b10e9a9665e83434e9035b56542234fbfa07cba85d351a910ad2e81cedd9cab27497d34bf58bb3995d22ef6118438635e881418f58fca5d326b3d3495e890c \ + --hash=sha512:c8b8fae59303afef81daf85381596e366b60e1d5d499b6001c078bea669b1373fba37aca20a3617c54461f6797a1c655707fdee23cffb7aae8c1d6208dcff894 \ + --hash=sha512:2b5b7a9667fc85c691fc107ba8b32ff8931ee6ee4c34e15784b1882d21c7fb2650d63825f1bdf14626dafe671f67e7816c79a5a8c6b7f1366f20f24ee6f32bd8 \ + --hash=sha512:5524fd230b55580a2c647a0a78197a783e201fdfa8b3177b72c6d7b689afd76a689e4fe3593120d3adb7ee5cc4adf9211e8deedc8fab355e9ed70076db09f68b +cffi==1.16.0 --hash=sha512:47fc17ba58e9fc2e7829a4c028a0a067f0d2c9a23dec886674fb69098645bfa6e9a67a0a78439216e420b8f63be98818cd6dcd07fd270279385b9c3787710223 \ + --hash=sha512:e76d186d948fa47d5747c116f165fd788e808f40a043ac6bac9a0cecb4d353c1138ca4e2050ddc73c21119b254935a8097a2006f37391ccf525612c305b77dfd \ + --hash=sha512:c303d9ff3a67f7b6765eafcf0e296456673916a3c4cf4a04c40153c783cf93b380cca78298b0de6b79ba1ad53bf79798887af0cb208ffd34d3bac5528e04fb51 \ + --hash=sha512:38d62fd917816afa5795c1ff68810bda9e197e9b17f351075e03a11d0d84369093a39e0b690e1ae6d933578f90c0f8573f9640e43f9160a7431d854045ad79ef \ + --hash=sha512:4b6336b34388197360186916b81988e7421d78be4ade5d2a1b0ce19b7a19ce64d2831111ecd89a9e549b4ae4e01a46e146bd2675122c68f4ce92d4e5f865fcbb \ + --hash=sha512:e0410aa181003dce4ce74a2674450089fda1d954c3eea2ca6852bf32e45e9b1fad7173e67448d448cdc06d3c333e2572fd2ccd0b0d79bc819df452abd5ee9e08 \ + --hash=sha512:f7e5df0d9f9ae2f8621d123c3f1a88f491d42d3491560ae7dcb372da06fc9de8b9f7634c256ad1cba77c04c96d61965ab6418a39c8ce17a52a916de28edbfebc \ + --hash=sha512:1faf3db5a6078c51b7b674feeed46f507a94fc0acfba6ad7a8e97bcfac5be653873388725fe9ca95481bc465449f692d9044ed76a86fb7eef1e114dd127f268a \ + --hash=sha512:20be55a756e84c738a854fa017354095d43990db3f2343397f992415f892ba5ed1fbccae829093bfb2f6d1bd6dbe3761a978a705f833e80385fb92d05f7814a0 \ + --hash=sha512:c2a5fbad7ad536cb72af44d1e9c6c9f77ac69ad527f0a3c8473c587e9dfba462cc23e36135c82ba742190b291f8d78d3568cf0fdcf1c0afb43f8eb225e7dbe2a \ + --hash=sha512:3b1844eb7be44b411014a5728850037b65509e0e17c4583ca31b9b49194396c4053d10ed0c13ffb02bb2913bea422c4a7df9a60d5a51b68a3805ee77e3e36736 \ + --hash=sha512:24fb9a6d2d4d236cfa1a34ce965b199d487a41c333c7814240e5d5cd59dedc59f3a859922079fe68494827f9570f6e0d2fdbda77d6a224bae9912e3016ff73c4 \ + --hash=sha512:8d0ebb1c616c4c5a7c925101974ade3aef21f673c65ee5325276e0956e7469d93e5eb3a1678c81d5a024629274bdccf662c16cb6f8d1a6212aa82f999a3b9428 \ + --hash=sha512:24ab3223045e3ac04e63647f7ae521d7a654408e8857f36a98565a12e2503c1a08af6a97dac974bee61cc80bea1a702cefe44c1da1ab127132e37ce2a5151801 \ + --hash=sha512:13b4ee8013c3768f41f4f1578b40f36c6b5a4ea2402cb2a212229989d9f3129cc0f191c55c81cea54a8bfe4350fc925a767eddf9b223841435f78b596b4dab89 \ + --hash=sha512:a421becd6cb04f593543c7ad322d431621f4daa0369bf61ebd4fff9329610078df1b5e7374af11e7923eaf72b02e358b35d37bc59d9ce7f800698243ac9ef05e \ + --hash=sha512:35e793f9593208ae347f0470bea29177136da8ec9e146110fa4de1e933a231ba8cf41baf7aa14a4a716e57da17cf1abf2b8bcceb6def065871a63c307476c53d \ + --hash=sha512:860229f8a400e26fe119a40995da0dec53c6b5ae92c12eb8e7439792e5489f54634a87a7f6b501f9c0b28e92923beddb982e210315cfa9ed14678be3ac75bbf8 \ + --hash=sha512:72119121fd6e047f0e494dbd2155dff87cbbbb97e95ee91e5d5c38d7309495890e9f588de9fb1d7fd277527df38f4752ac946eaf54a43ebe41dff9747b88315f \ + --hash=sha512:445d4eb5a1ce0a97dba362d53856bbecf9a2b134c49fc04c3310756c429c094ee080d926f5dfb6302fb6cd057c2066a20636a192acb173bd430cedfabcbed105 \ + --hash=sha512:59aa1acabeec0e87c8ba93da669d33ff1012197b8dd11c504287e67da0501420e5394c007b69a6bc327c35378ced73e62a10203d70ba917b585fec8197afe554 \ + --hash=sha512:dad6c5b9a2199d3a14e1cafd6c36b92f3d4dbdbc8189db37025e44bfb2977908a8470e8f9a2896d37e5376aa4d9b3e29888562caeea3edd608c9c782868c17ae \ + --hash=sha512:81634c38dd4bb2f2be5c239017b89ec8c4dedba2ef2765536673f2b4f666b96fc593406d462d0a8df92b25cde5fe00e7e724f1485a9c4a4b7a968c4c1ce04644 \ + --hash=sha512:bdfa1f8eea7f876ff4e8433a11ad622c6abbc5022a9602a9ed219e5b7e6fc7992b12afcf50e9fc1cfa2a3e21ccf34c64c92a796bb0ff9471ab7e0a28dea52a44 \ + --hash=sha512:083782300fad3c0be0aec6a0eb8d589c25d18a67227c09346f64bdc69b9e41b672ea444d071be82bb7c3fcdeaafdd2959191e4606438cbabc4d566ee5254c0a1 \ + --hash=sha512:2c849efac9a228c5d005bd575c99c1b83289e3a1602baf1fd853d19ff2f25ef4f5536b38837dc76ab416dc3105ee9c4bbbbb6b660ff4a0333a2f0ef2cc7fd0ba \ + --hash=sha512:8193c0d306f0212d0fbbe44510b2fed7a4abc74409d6f28a87b481ff475f2e00b006bde4fcd28b0fa5c8535e015a9e16337ace0259f72c6df4d8cb9979976b9b \ + --hash=sha512:e081ee7ae2b49b2704b1d525e6b4c5f53fcca831ddf690a6d47078071525abc5e5c32300b2b76d54e2042f8f299fac0a988474d6e96cab7f8d03b1b46558581a \ + --hash=sha512:36688299733808953d17daabac798b2b2d143c122ef5355b18068d80c9402b275ca9f65e1082762684269e9c5780ed74b42369db17778492ba1d716742d90153 \ + --hash=sha512:4bbcdd72eb1856516c6235421f1562190e1333349686a079b2ec80ee6a02c370cadcb6b1e0d38fa6fb126368e90dd1b5f9712a92a1fa595a98f471ab2c8486da \ + --hash=sha512:5dc5ef04aa1b2ef2da537a932b8c11b49ee5e57c6ad214e6bddaef9a61b66a93952cc9f30b805da2c3c028fe58ea11cc25a56bb7fe2b116e7b9349dcc6075b5a \ + --hash=sha512:e6d8ff3fe823c4d99dc88877e626a9428d554d671d476826bae7117a123074eaae3d42d1f16e7b94bb601ef781c22791e742319f8a9a82599184c23045412da6 \ + --hash=sha512:fd2588115092202aa9289c9d4e0a0b3e264b5e9ec1dc192950f31aeb412fd9f9d4e5c96a3f9c6762987b58ccc1e229f2012ddda89211797104df672d8ed51152 +pycparser==2.22 --hash=sha512:14a66293830ac4b7ffa5dcf964e6c36c25888e6f7b0fb1f50acbbc586806bfa9c691fa6159e64f060b2f00a834caa858ba62f7045291c452c163d6b42e29f62c \ + --hash=sha512:c9a81c78d87162f71281a32a076b279f4f7f2e17253fe14c89c6db5f9b3554a6563ff700c385549a8b51ef8832f99f7bb4ac07f22754c7c475dd91feeb0cf87f # PyNaCl (pyca) (Derives TFC account from Onion Service private key) PyNaCl==1.5.0 --hash=sha512:853446c38ce5488e18eba166f67650bc4f50044f509987ad2ae4830d2ed85284f057c3a4304180ad265bc33fb9cd6570488a37e40bade5e202ba201ad368af84 \ @@ -134,12 +141,12 @@ PyNaCl==1.5.0 --hash=sha512:853446c38ce5488e18eba166f67650bc4f50 --hash=sha512:61e07a421705e5c1613cbc888ff594d7e3457090e9654280f2b6e54a84e5d6dcd56292fd3c47b86a59be6eecafa8f17ad5d710f45b7fcda9f57d9c7343328bc2 \ --hash=sha512:9720cfe64e70667804c197a1762db2985bf5893ae774418f50da9a3d31135b8935fd497c5fe4f92909f6e0ac70e3c5dd57f6322ab780d29b12741c64c0d2c007 \ --hash=sha512:cea3e4556432588630382abae6debf9203c7f55da286509da547a7921e4dbad98c915743625c68e5f7187fcaf6d4cdaf7ed2ed3ba60bd4c10ae6e3f88608dc65 -setuptools==67.7.0 --hash=sha512:22428cf43932d4a16f704adace5e6fa9ddff15c2715c9ba2c0f47c2e96d5fa95e5fbd21e2e55cef9c43a41d29f6cd2d09500b1cb81daedb64820e388ead70346 \ - --hash=sha512:39502337b5d7f710c55219ab970a5cab23e8987598af722ad231d2dea2e1dfaaddb09dc698a5746a719b36e5e3065c48ecee2ac428e4d41470bec6ad3c99daf6 +setuptools==69.5.1 --hash=sha512:d212edd21ab99f50c2daf6080c68a3cc0eeed566f10e91f857e7eeb86513f33e9cde25b975db1030110c3b1714cfbfd4d3c9e2937b4a5ff2bb8971e605ecee85 \ + --hash=sha512:81f4a5184976a0d4aa070261bb56458c54ec6a479786fa469e98cb336e9a1691b281ae771abe41bc5398fac15b2dd039c07cf014ee00572f46908ce6830fcb6a # Argon2 Password Hashing Function (Not needed but allows importing from src.common.crypto) -argon2-cffi==21.3.0 --hash=sha512:3093f5ae0220dc4c85f741dcd413ba8b19e8b91be7d253c7f2548a1ec9ec99298b2ce7d809be16f497323ffc6733acd35eb201fadd6d91560e41901ed3c09da9 \ - --hash=sha512:6cb2a075f3bb7040ee7f552d082bfa2f3df0854649d9c84fdfdb42bb4bee2133b8a35a20be2b3c887931efda12fbbb00815d8d88170b7e20b3ca19c86f97057e +argon2-cffi==23.1.0 --hash=sha512:f0d80298b5617e8ed7ae7442f582caeeb3a5450562af18df4d7b5bd7395cfa99597f5ba31128d3105ee498e6661a50fa34602df374103ea523a2d7e832d7b7d6 \ + --hash=sha512:7c7730451f5ef9bb40bb5e1bbfa6e69c9718968168f3fa9b54e1020a4f805f98fba6260039bda804241717db2338479d640c7652dc26ce1a6ade076660133383 argon2-cffi-bindings==21.2.0 --hash=sha512:c3218d723db5c8f2dbc9c737a3ce24d52291a8056b855c6e988956821894b695f2afd50b189a581e9cb5a5d1c13b9b1144be9fb6296a62681b209412caf85b42 \ --hash=sha512:7a77d7e0becc167b7b348b19d5fc65e25fea4dd93a8e26c203b39f88691515a756a78becfb665a4aa965112a9b561be6c4461fe38db422fe20198b3139d652ff \ --hash=sha512:1bd48d7a11cb99cc0d8526b2dc156e025002092d1f7c60632a0470275ade2374d3be6138ecf924eae2c33fb5d29fef16729b710294cc0b8f35f50a7544d17cc5 \ diff --git a/requirements-venv.txt b/requirements-venv.txt deleted file mode 100755 index b10f296..0000000 --- a/requirements-venv.txt +++ /dev/null @@ -1,23 +0,0 @@ -# Sub-dependencies are listed below dependencies - -# Virtual environment (Used to create an isolated Python environment for TFC dependencies) -virtualenv==20.22.0 --hash=sha512:5117374b4151b53ccddf85eb913465109840080173feaa5d0dbf055b12fcb6035aff038abb8f4698a4bc29dcb452fb8c2a19221a293682c520be1b3fbb80d20a \ - --hash=sha512:83d15b03abebd856b1636d0f00443f77882de9fdeb9dff67b72dc839d55f4e7e0668914ef3ac79cdf1d8cf147e29ba97feb720a5ebfcf24dc6cd27ec2e04384d -appdirs==1.4.4 --hash=sha512:8e6c1ea544013ea2567cda2d8b8c7b441bc50ac689aa7f95de67e3795aa083e9592c687d74fdbb37f5a75e0beab398fe47df5bced14ee9c204cfe5ecc364ef44 \ - --hash=sha512:8b0cdd9fd471d45b186aa47607691cf378dabd3edc7b7026a57bd6d6f57698e86f440818a5e23ba4288b35d6bb8cb6eb0106eae8aab09d8863ee15025d300883 -backports.entry-points-selectable==1.2.0 --hash=sha512:758fa1b7ef45b8ebbbfb39996678a3edc5081d2fc6732afc7de790065d5a8e0611b466b93972ae53852d96eb3e62647e9f6f1aea5cf88dcfbde0a7c77557de6d \ - --hash=sha512:de2ff8d5ec54369c8847d4975fd8666f64ca7689aed2c05b7bbe9f1bc1c3816b527786410bd36f6c337e6b57bc04e714e5f77a301828049fa290b65c474c2825 -distlib==0.3.6 --hash=sha512:7046ad8707013371b68a805fb437e7f29d883694d6870012f2db197f8bdf472aa262d5e549852c4dbccbd5af5cb0a402d60f8cad845e43df9429a2c437e28187 \ - --hash=sha512:27f3a59f9175a92befb9a65a66cd0b8eb65185dab6fa13ef94e85ca69c2bc1b7281ce1522601034007cb98677ba9237a46224df4adc70ed966db7e131e073636 -filelock==3.12.0 --hash=sha512:f1eddc9397b7c07f6a360b058c21841157a458e0e90830cd57d88d02c207cb6acaa0ec3f949b341f0b28f309ec88b7b5be4fde74dac16662c24fedb24fe29f0a \ - --hash=sha512:4bd5d9df76499e2a4f9dd9274fcc8bd507813446fa8e5852cef6c674d34d3db2313e4b79ac98eae07d6a9fe953de4ee6390baa4c9d5ab6a005c96324dd5904e8 -importlib-metadata==6.5.0 --hash=sha512:90e6f30282f0cd47a7dd1e489cbfc47725c484ccc87392930bccdb0537139c8291714c5125c74d5819facd36476b95bf3e4f4ebe238ee6ad8816f93095d3d8de \ - --hash=sha512:c581ff46d601a239ba9e83114a18b1fc5c0245c215752b8313624fbef6b441eac7cebd4e021d09f12d26ba30715b99475eeeb66befc49bcd609f1b53b79f9bfd -zipp==3.15.0 --hash=sha512:ac96786e5d35882e0c5b724794329c9125c2b86ae7847f17acfc49f0d294312c6afc1c3f248655de3f0ccb4ca426d7957d02ba702f4a15e9fcd7e2c314e72c19 \ - --hash=sha512:74a512428fa29e284c515a7e6c45030e4d840727e12e376bca480a90b7fd1e111462deafa372ca9aebd9f53c24bc37111570e7a4a6a873c0b7dee9a0277c100d -platformdirs==3.2.0 --hash=sha512:85989efb26079ae10429a6a1d4cc23cbba8dd518b0fd8cefad3f1fc15a9d10b28442ebe7729e3acb9f79c3075d8968333473a95e64c17e5b0115038e26693019 \ - --hash=sha512:2e4613f563b7014b526e1f81f561726a0060983b0e998ce46d070b2f4f4ec26ad46d6a3cd242fb14a420e6439207b9c9eeb31daac7ec65005abc3a74131e5cf8 -typing-extensions==4.5.0 --hash=sha512:ec14fe7ff4998bd9ed4c57a491062d0d0d3797aa326c71898c879455f0a2dbcc639ac9b51f68c03a8635459de7612b31aa2b71f364ac6d2dd6b696cfd80df555 \ - --hash=sha512:a38a018be2c22b6cc1d9a14477206271b44fc110db2a958f3cb5b179856c9f992b2359ce077dd0d25c3711908e4009d44afcaa9de6bd422bc1599c9533f8200e -six==1.16.0 --hash=sha512:656b010ed36d7486c07891c0247c7258faf0d1a68c5fb0a35db9c5b670eb712d5e470b023ffd568d7617e0ae77340820397014790d14fda4d13593fa2bd1c76f \ - --hash=sha512:076fe31c8f03b0b52ff44346759c7dc8317da0972403b84dfe5898179f55acdba6c78827e0f8a53ff20afe8b76432c6fe0d655a75c24259d9acbaa4d9e8015c0 diff --git a/requirements.txt b/requirements.txt index 53a8325..7274996 100755 --- a/requirements.txt +++ b/requirements.txt @@ -5,8 +5,8 @@ pyserial==3.5 --hash=sha512:29bce14c59e60f54ce476d919c9b9477190e --hash=sha512:c8df5e50d952d5a6dcf1d9253a6ba953e9763c545a867da66c22c90dfa015aba0194f2a8f29a229d0a5f4dc8bfeeaaab8bcfda4066ed78a18b151bc05e6ae327 # Argon2 Password Hashing Function (Derives keys that protect persistent user data) -argon2-cffi==21.3.0 --hash=sha512:3093f5ae0220dc4c85f741dcd413ba8b19e8b91be7d253c7f2548a1ec9ec99298b2ce7d809be16f497323ffc6733acd35eb201fadd6d91560e41901ed3c09da9 \ - --hash=sha512:6cb2a075f3bb7040ee7f552d082bfa2f3df0854649d9c84fdfdb42bb4bee2133b8a35a20be2b3c887931efda12fbbb00815d8d88170b7e20b3ca19c86f97057e +argon2-cffi==23.1.0 --hash=sha512:f0d80298b5617e8ed7ae7442f582caeeb3a5450562af18df4d7b5bd7395cfa99597f5ba31128d3105ee498e6661a50fa34602df374103ea523a2d7e832d7b7d6 \ + --hash=sha512:7c7730451f5ef9bb40bb5e1bbfa6e69c9718968168f3fa9b54e1020a4f805f98fba6260039bda804241717db2338479d640c7652dc26ce1a6ade076660133383 argon2-cffi-bindings==21.2.0 --hash=sha512:c3218d723db5c8f2dbc9c737a3ce24d52291a8056b855c6e988956821894b695f2afd50b189a581e9cb5a5d1c13b9b1144be9fb6296a62681b209412caf85b42 \ --hash=sha512:7a77d7e0becc167b7b348b19d5fc65e25fea4dd93a8e26c203b39f88691515a756a78becfb665a4aa965112a9b561be6c4461fe38db422fe20198b3139d652ff \ --hash=sha512:1bd48d7a11cb99cc0d8526b2dc156e025002092d1f7c60632a0470275ade2374d3be6138ecf924eae2c33fb5d29fef16729b710294cc0b8f35f50a7544d17cc5 \ @@ -20,59 +20,64 @@ argon2-cffi-bindings==21.2.0 --hash=sha512:c3218d723db5c8f2dbc9c737a3ce24d52291 --hash=sha512:74f931f3262333e3451295075abbfe0c323beadad36ffe73b65143e906f1e8cab924601a56a3f184ca2516fedcb69dc7d8dc6ea1d0ba25bccb21476a89bc46d8 \ --hash=sha512:740c76d800bf8bea95f800457ef03d4125b262d034e4a62e66615144a8abe35950b37fe5627553e5bc448ffe32f77ebeee5e2a04857409f53604fb30de7d8d72 \ --hash=sha512:71d023ae96073ed78599e4f4e42f8efcc985cc329adeea00b14b54eaac1e6a545e6ad9b7f4cfdc60a4e9c396f95053c0ccb6f6f67d92f70265f91315fff4a390 -pycparser==2.21 --hash=sha512:aae67923f45abd1d781d03e0ce848627a07e9cf4c61a89bf32f1b5f638ceda08de39a038c46ed29d2df967d76be4f2572346bad087ac32b418e6fe654fd28e43 \ - --hash=sha512:e61fbdde484d1cf74d4b27bdde40cf2da4b7028ca8ecd37c83d77473dab707d457321aecaf97da3b114c1d58a4eb200290b76f9c958044b57e5fed949895b5f0 -cffi==1.15.1 --hash=sha512:160432f1765330dab76807ec42052cf41cf33922f7b77713aeac0f99af1da8107f1cee85fdc2d13db620a8d21c24423853dd55936204109e429331828e2c576c \ - --hash=sha512:2c125d6b2cbfca5b3174095a6fe653fa2c58762aca9a9c46024d50ae104acdf10ddac2014ccad58ba95dbe3c4c8c2589a26292f23a28c1ffafb9aff4d60878dd \ - --hash=sha512:73eb0ea04f5f3c1e9e12a07cdb01b2095f7eb329aaaf9686c40087d8e59944acf4d616b6f774139593de176945ceb510fa86fa546d165bd0a2e8c378c23ad552 \ - --hash=sha512:49ef4f829cd9b8e29964b2e0a96a05f8230a510a6ef78b3f5ad10a04e17f4a6356955325be23d2e770518d6439613ebd3e851874a5c3d0e9831018fdd60fde2c \ - --hash=sha512:35399df0a0ae1e10699d743e11104f0340a3d99621874cbb33594449653baf99b9ba4d633005165d7e70a2282bc46924e08ce4d7e60d17cd1fa30d0b37da9543 \ - --hash=sha512:2f75e683e617abbf709328ea6500d4d688078e378f5447fd923f7ec9d1722a9a38292061b762098177d0e12b221437c8970bb8a96b0423c3b55f5c2471f71634 \ - --hash=sha512:6cb0451be3df9a5d38b26ce6125d6f924811ccc49e6d7019835d7de9a8524cf8764f852fe688d085610d15b6feedec196d00edad862264b3a06d755f58586483 \ - --hash=sha512:9569fe3f3af46c7e19b1bca00684856825bb663adf2cf669980b7c003535d278e05b53ddf85004dae01ab7ec582e721a2c8c6087612da438d0445bfd4ac1a241 \ - --hash=sha512:04fb957a7e40d10461e290b631aeaa02eb9a304ae0397ea5948fdb9de3c8376e2030385fb5bc5696b618659022250bc9a69c4f1b8ef1e637431fbb5d23b26aec \ - --hash=sha512:d993a2f25c194c16c981583c86ee9de5374cec0602da6f681f655a18c92c51133babbca0c802d02f330009ccab5040bc0e4f7a4cb5cbb05eafa744e93f5c9c3d \ - --hash=sha512:c27677ab98eccac495e34e912c5626eed909b72bf8d21493a3c00bfaaec0af7847d91a97fcc5d2834305e6c3b64fb2e4d84c83f7b6dc27b6a165c9f42bb5ab08 \ - --hash=sha512:9911acb9878bbc8c59734839c8cbc164e8f121a493a0589898e1b16df32c41d46d0132ac3a8a36d52cd2f0d857695a8cc6878b5cf6607fb52fad139a43089d66 \ - --hash=sha512:a8cd7b5b695cb89556a7b5c0d4f7d02325d39cd59bade9e6828717623c98c4a4fd5561366549770fc8e412aba06dd5c0cdb5934a49050d182bc27d0a8b4d5601 \ - --hash=sha512:fde7e4cc649538a32c87bd40cc6f5596d79566c6508e2fa7c30241d68d7bbd51d22b50039910c5a5196f10f4c9d499eeb884367156f156dc8285fc3a1ac103a4 \ - --hash=sha512:0c9980b8f05e7105832ab5e481432f778a09631ce0fd1c09b9582a19f2b08ebd666b491ca97bb718a74feb80d3516998e3f112871ad2838fd4256e7a8eb39ebb \ - --hash=sha512:d372560553196445c3152b92f4afa011f61aa768825dd63b8ac8b9142481b1b86c97f6f683a92ae0a25e409503ff4ef159c74185dbbfe2a54b22426d9ca991f7 \ - --hash=sha512:9cf0bc15c1d820e45578943222655cc8db8416e01ee825c9b107963174b20f0a0b01fd8277c28d918bcf18eeb5f45de9c1a935210f9c0a2daa5b62f70d747a45 \ - --hash=sha512:bf4d6ed94fda20aa7760d2a7f0c1557ddd70dc90a2f0b2dd391bd274d37f09e298b83ff014e6f0820c6b47e70681db94a4197016bc33b89e01f9223f23403988 \ - --hash=sha512:862d68482073f468f60d8f093a9f9b5c78562297f2eb36c84bce283a4a00e897d1731aef67b12b17551e373a668288acd32dcd49031fed5a8c621aa8c41fb0b4 \ - --hash=sha512:36160d9d7c2f138b3cc1debe96365d57b0d204dac9cd7732ee6ab8890d9fc87700a50475336d79d60b26c1656295e26d27998cc3f9f6274613c84a64144c93b0 \ - --hash=sha512:55ea36458d5c3c4a6f9b647215676fe8801704c6facdb65c55f445b4069ed3fdaf155daa8e371ed9f27937f57799e189f7402b945ec70bb85eaaa2f643c70945 \ - --hash=sha512:bb85c0f097eb69d218498dd07f4a40d5bbe280b11062babe64b8d3b9a0df540c42d95e898ee409b14daefdf19c48bc499cec6bb69295d7b6a10dc151fdd6bb6c \ - --hash=sha512:e253ae455ca94f91ee37038c225d395b5668e26772edf26de226ccbb347c3c1b5536a358e023779fc1b06bb6c5717158d6262855445804b1206e07da3a596c7e \ - --hash=sha512:454522b8eef53c0d17a5eb24a8852f5d6d8360aca2a2c5cc8fca22533de548052ac4556c7cde432592b20f63cec0356be423a4a964ad046744e018821aee4ca5 \ - --hash=sha512:f529bc89cee24cc8db6888df904f5c2bc6a6ee9b0cd52ad03493918936079875fc0968a3f5f1e93306a41e6418d3e60b2b1417c287fc29d0c12951caa0b94b98 \ - --hash=sha512:2b0fba3366eaaf1a88701c5131fe6318e3c89c2969afed5fd2fffdcaea1810b91963dec37b549795267577a4f1697996846e8d027b63835e290c72b3568c8269 \ - --hash=sha512:88d1f27641ecbc51d9c323a19c913818c478d4eb87d27d16426d20eb9727d5d4b23bf9551d842433820068e29082c9b9c2654f38e903b6fc761d70632731c643 \ - --hash=sha512:7d21ff025e620b024191e0a813a678b3269b582e61944e5677eef4bd94be8456758515288d48b85b3736efb84b9d0d899d60bbf8c5d9e79f943c2b1f2f78f85d \ - --hash=sha512:c76d6e2f761582c4122cec8ecb302fca324b90fdb3ad1442dfd32ab8cee25c6e0519c6556911d5d068229d48578f8c1cdcad4fdfe8bf936ed6038d020633a3e7 \ - --hash=sha512:7866aba126d54d88a0e55c70fc8587773fa1926db1f09c932b58489a63092b2e672f8bd3104d682bf41f250dfce85a824b2616b9f2cf796e020b1ddaabaacf4f \ - --hash=sha512:228a40447e3cdf4bebec7286d8c53139f4dea816be3b378dec81ba5e0bb1c20a938564b0b6d34780399f79fce3ba572a5fb5e93dd21dc536551323290ff2483c \ - --hash=sha512:c637580d319c9960185f44580932996c2554fb0e549d822f636a9703a8e9b8f6e105d765b65e1ef7411320698d05a60f4005b3d590e18c5784d5c8d07d86f612 \ - --hash=sha512:95bd8ee4ac5d3f4cb09d5d223dfec484cfc90b82e2eabe40eb3c89217b0f315bee469dee6c5f89bb02e636eefade048e6e709f2b5126eeb634dcb0cb13332fa6 \ - --hash=sha512:f5ea1c8a22ed5bfe03586d7fa872dc0bdeaa13ee310ecfd7355ca2a3f742ac6e3b3e2663399acb4220c95cdb92521dc181fd9c7d9da1ce45817a145500cd9243 \ - --hash=sha512:0fab1b5323e009dd41de28f3f5c9f01dd4ceea627de8bb6244f72394c3fbae6dca8dc65909dce4847cbf8fd3654b55b55caa194672652a253bd0fa2a1b112f78 \ - --hash=sha512:e99cafcb029076abc29e435b490fa0573ee2856f4051b7ca8a5b38cd125d56dd9dae8b189f59ceb3d728a675da8ee83239e09e19f8b0feeddea4b186ab5173a5 +cffi==1.16.0 --hash=sha512:47fc17ba58e9fc2e7829a4c028a0a067f0d2c9a23dec886674fb69098645bfa6e9a67a0a78439216e420b8f63be98818cd6dcd07fd270279385b9c3787710223 \ + --hash=sha512:e76d186d948fa47d5747c116f165fd788e808f40a043ac6bac9a0cecb4d353c1138ca4e2050ddc73c21119b254935a8097a2006f37391ccf525612c305b77dfd \ + --hash=sha512:c303d9ff3a67f7b6765eafcf0e296456673916a3c4cf4a04c40153c783cf93b380cca78298b0de6b79ba1ad53bf79798887af0cb208ffd34d3bac5528e04fb51 \ + --hash=sha512:38d62fd917816afa5795c1ff68810bda9e197e9b17f351075e03a11d0d84369093a39e0b690e1ae6d933578f90c0f8573f9640e43f9160a7431d854045ad79ef \ + --hash=sha512:4b6336b34388197360186916b81988e7421d78be4ade5d2a1b0ce19b7a19ce64d2831111ecd89a9e549b4ae4e01a46e146bd2675122c68f4ce92d4e5f865fcbb \ + --hash=sha512:e0410aa181003dce4ce74a2674450089fda1d954c3eea2ca6852bf32e45e9b1fad7173e67448d448cdc06d3c333e2572fd2ccd0b0d79bc819df452abd5ee9e08 \ + --hash=sha512:f7e5df0d9f9ae2f8621d123c3f1a88f491d42d3491560ae7dcb372da06fc9de8b9f7634c256ad1cba77c04c96d61965ab6418a39c8ce17a52a916de28edbfebc \ + --hash=sha512:1faf3db5a6078c51b7b674feeed46f507a94fc0acfba6ad7a8e97bcfac5be653873388725fe9ca95481bc465449f692d9044ed76a86fb7eef1e114dd127f268a \ + --hash=sha512:20be55a756e84c738a854fa017354095d43990db3f2343397f992415f892ba5ed1fbccae829093bfb2f6d1bd6dbe3761a978a705f833e80385fb92d05f7814a0 \ + --hash=sha512:c2a5fbad7ad536cb72af44d1e9c6c9f77ac69ad527f0a3c8473c587e9dfba462cc23e36135c82ba742190b291f8d78d3568cf0fdcf1c0afb43f8eb225e7dbe2a \ + --hash=sha512:3b1844eb7be44b411014a5728850037b65509e0e17c4583ca31b9b49194396c4053d10ed0c13ffb02bb2913bea422c4a7df9a60d5a51b68a3805ee77e3e36736 \ + --hash=sha512:24fb9a6d2d4d236cfa1a34ce965b199d487a41c333c7814240e5d5cd59dedc59f3a859922079fe68494827f9570f6e0d2fdbda77d6a224bae9912e3016ff73c4 \ + --hash=sha512:8d0ebb1c616c4c5a7c925101974ade3aef21f673c65ee5325276e0956e7469d93e5eb3a1678c81d5a024629274bdccf662c16cb6f8d1a6212aa82f999a3b9428 \ + --hash=sha512:24ab3223045e3ac04e63647f7ae521d7a654408e8857f36a98565a12e2503c1a08af6a97dac974bee61cc80bea1a702cefe44c1da1ab127132e37ce2a5151801 \ + --hash=sha512:13b4ee8013c3768f41f4f1578b40f36c6b5a4ea2402cb2a212229989d9f3129cc0f191c55c81cea54a8bfe4350fc925a767eddf9b223841435f78b596b4dab89 \ + --hash=sha512:a421becd6cb04f593543c7ad322d431621f4daa0369bf61ebd4fff9329610078df1b5e7374af11e7923eaf72b02e358b35d37bc59d9ce7f800698243ac9ef05e \ + --hash=sha512:35e793f9593208ae347f0470bea29177136da8ec9e146110fa4de1e933a231ba8cf41baf7aa14a4a716e57da17cf1abf2b8bcceb6def065871a63c307476c53d \ + --hash=sha512:860229f8a400e26fe119a40995da0dec53c6b5ae92c12eb8e7439792e5489f54634a87a7f6b501f9c0b28e92923beddb982e210315cfa9ed14678be3ac75bbf8 \ + --hash=sha512:72119121fd6e047f0e494dbd2155dff87cbbbb97e95ee91e5d5c38d7309495890e9f588de9fb1d7fd277527df38f4752ac946eaf54a43ebe41dff9747b88315f \ + --hash=sha512:445d4eb5a1ce0a97dba362d53856bbecf9a2b134c49fc04c3310756c429c094ee080d926f5dfb6302fb6cd057c2066a20636a192acb173bd430cedfabcbed105 \ + --hash=sha512:59aa1acabeec0e87c8ba93da669d33ff1012197b8dd11c504287e67da0501420e5394c007b69a6bc327c35378ced73e62a10203d70ba917b585fec8197afe554 \ + --hash=sha512:dad6c5b9a2199d3a14e1cafd6c36b92f3d4dbdbc8189db37025e44bfb2977908a8470e8f9a2896d37e5376aa4d9b3e29888562caeea3edd608c9c782868c17ae \ + --hash=sha512:81634c38dd4bb2f2be5c239017b89ec8c4dedba2ef2765536673f2b4f666b96fc593406d462d0a8df92b25cde5fe00e7e724f1485a9c4a4b7a968c4c1ce04644 \ + --hash=sha512:bdfa1f8eea7f876ff4e8433a11ad622c6abbc5022a9602a9ed219e5b7e6fc7992b12afcf50e9fc1cfa2a3e21ccf34c64c92a796bb0ff9471ab7e0a28dea52a44 \ + --hash=sha512:083782300fad3c0be0aec6a0eb8d589c25d18a67227c09346f64bdc69b9e41b672ea444d071be82bb7c3fcdeaafdd2959191e4606438cbabc4d566ee5254c0a1 \ + --hash=sha512:2c849efac9a228c5d005bd575c99c1b83289e3a1602baf1fd853d19ff2f25ef4f5536b38837dc76ab416dc3105ee9c4bbbbb6b660ff4a0333a2f0ef2cc7fd0ba \ + --hash=sha512:8193c0d306f0212d0fbbe44510b2fed7a4abc74409d6f28a87b481ff475f2e00b006bde4fcd28b0fa5c8535e015a9e16337ace0259f72c6df4d8cb9979976b9b \ + --hash=sha512:e081ee7ae2b49b2704b1d525e6b4c5f53fcca831ddf690a6d47078071525abc5e5c32300b2b76d54e2042f8f299fac0a988474d6e96cab7f8d03b1b46558581a \ + --hash=sha512:36688299733808953d17daabac798b2b2d143c122ef5355b18068d80c9402b275ca9f65e1082762684269e9c5780ed74b42369db17778492ba1d716742d90153 \ + --hash=sha512:4bbcdd72eb1856516c6235421f1562190e1333349686a079b2ec80ee6a02c370cadcb6b1e0d38fa6fb126368e90dd1b5f9712a92a1fa595a98f471ab2c8486da \ + --hash=sha512:5dc5ef04aa1b2ef2da537a932b8c11b49ee5e57c6ad214e6bddaef9a61b66a93952cc9f30b805da2c3c028fe58ea11cc25a56bb7fe2b116e7b9349dcc6075b5a \ + --hash=sha512:e6d8ff3fe823c4d99dc88877e626a9428d554d671d476826bae7117a123074eaae3d42d1f16e7b94bb601ef781c22791e742319f8a9a82599184c23045412da6 \ + --hash=sha512:fd2588115092202aa9289c9d4e0a0b3e264b5e9ec1dc192950f31aeb412fd9f9d4e5c96a3f9c6762987b58ccc1e229f2012ddda89211797104df672d8ed51152 +pycparser==2.22 --hash=sha512:14a66293830ac4b7ffa5dcf964e6c36c25888e6f7b0fb1f50acbbc586806bfa9c691fa6159e64f060b2f00a834caa858ba62f7045291c452c163d6b42e29f62c \ + --hash=sha512:c9a81c78d87162f71281a32a076b279f4f7f2e17253fe14c89c6db5f9b3554a6563ff700c385549a8b51ef8832f99f7bb4ac07f22754c7c475dd91feeb0cf87f # cryptography (pyca) (Handles TCB-side X448 key exchange) -cryptography==40.0.2 --hash=sha512:529d42f80f85f84ddb9c4fc16adfde89c8e0861b37dc1aa85e49760034428d48ea2ece1b41bc6d6e28fbe7e6095357df512533391457aa910539baac02b0aeb3 \ - --hash=sha512:a629ad9150a00b35e2188837614f9196439b29837420b383b88399905306911f5d11ac970c3ca79a88c53ae0c98aa34892cfceb7ffdac4b965717f3e6afc9abf \ - --hash=sha512:28acceb7b52c3d1a916e99d7fa7ac71f8f7c050bf5a7a24b521f021a442e9cf3ae0fb0471cb92d1ea050a5a323d0b8e9172de965bc2f8398bd68f05d64b31294 \ - --hash=sha512:8366a2dda1421823bc835a128b3cc1b4f5ce769da2cbb8a952a82c4823a38fe9a2086e2c1ea1725fb3691928cf0be74ac713bfdd3bcc4d54ae7200801c1dd9e2 \ - --hash=sha512:776b6f99749a42707f1ec709fb672d0b2a276cc3888c97e0da804e85d2bb918470acc5eeecd34c9fe46bcb2fbf6410ee7d12ca05c0500c39b5c22bcebb1284e6 \ - --hash=sha512:4ecd052e2b6c3376cb751e6bc0f568cdf46619600673ae3967bc3d3a9d9e834f61772e336f29552b0b4ab7023d5b38f5f745188119bf1a29d1b68ca63a497c4e \ - --hash=sha512:865cf0bc254d4dd775968fbdb392b4d2d3516a2a345c72ebfd787b6d80cd982b942c7bb932110e81d05c58539b053441ecf76193b03e7600027e1873f2652292 \ - --hash=sha512:2416924bf5d8ab0d890a2bf11766a5b262fff585b5391342c0ea1935d5ab343abb74a396beda3182298fa45b4971b172ed2793f190b771a676fdd470d3d94224 \ - --hash=sha512:d70274a507e3533bd368954364016422dddc8db4e3cecd52697afbc9cffe9f41eed77dd9419690fd70b5fc8b573e952eacd8b49db074edb7449f30eeae9d251e \ - --hash=sha512:68d656c511deef6ae84e5a5004b7b3ce3c192ea889d61fadc082197ee2ac91454dd4c473587ecc1e2862c8a7948839b15263785bbf026e32d7f208c2bfbb8234 \ - --hash=sha512:391aba41fa75052d86182d39096c61eb37126a1e94499fe1934cc3307c8c7e819ead0e904c58c0b36fa4c4bc375b092d1b352217bc0d448f4aab587cff90528e -six==1.16.0 --hash=sha512:656b010ed36d7486c07891c0247c7258faf0d1a68c5fb0a35db9c5b670eb712d5e470b023ffd568d7617e0ae77340820397014790d14fda4d13593fa2bd1c76f \ - --hash=sha512:076fe31c8f03b0b52ff44346759c7dc8317da0972403b84dfe5898179f55acdba6c78827e0f8a53ff20afe8b76432c6fe0d655a75c24259d9acbaa4d9e8015c0 +cryptography==42.0.5 --hash=sha512:fd840cb0f6c49078d2484fd2ff75a2c62c6ae58b69a01be0885a7bd088067e5f39f9e0de582e0a824525f7bbfe4d6e5831fe176f40fb01101df3f9a41e3ab14e \ + --hash=sha512:615d99cedb543228cc45a49bde24883e920426cd32c964471149fcb994a74b8ca3edb00d1addd52d19c19d7689f9b978cd10f54ac6ca70368da9dc40c28625fe \ + --hash=sha512:8b98785ff25b2fe0745d867e7055b54bf2ace5a21f9b42eda99c5a5fbd5bb4a6e74bedd6a3cf39c179570b351503ee0e7e937a04e1451f22a4fa0d69dac1f2cf \ + --hash=sha512:8f084fff47efe264edd9101915ea31e1e16cba949b7a0d3be3e72632fd656e5989794c0ef02645192beb3c51be0ab0a3184c554355e241e5060bb1b255cb0983 \ + --hash=sha512:687f042d3470af3c6f1e64584a691d9aecff8c589de2a9ae7dc8f7a5738ea76785976ecbc345b838d3023c0cb033476ac86d8d06ecde5ce855ab3a78b465c17a \ + --hash=sha512:2a57528ef4e99daf9956823e994cad12d687e78088b7c10b3e694a859ac70cd66a86e02003f0d1120e75be19a28f299bfc87f590a2157099eb7ad95de8728d2d \ + --hash=sha512:70a54c0660561f898d715cd289be93a52082fcd986d0acbfb2af73cca703661116df34a108cf85da66e3ea1b8fd98e1c8af4f173fd487f54f3a8b840d11d9ccb \ + --hash=sha512:9d180b8749ec2682a868a3f062ed8bec0a6ac4483d23200c50afab4613e167be1e8faddaaad5c841fcc3f06e8c9a5fffd6a33527861c0b1115a624d4961f9cbd \ + --hash=sha512:49b2ba4241bb10ac9a3bca74ccff586abf83d10b2ec641ac9b4d53b334dac60135d6b3ee1bdb300997a3dac78d61abf099ab264d55f152999311588b2a213efb \ + --hash=sha512:0e5dbf32cae786fdcd855c6c065e0ced23de25eb8a667c620d7f2dab9549cb72fa08cc2a2795454d14dfb273a5f0dab4341155dc413cec9049bf2fa5d76f398d \ + --hash=sha512:cd3639bc392ebd062870c90f55ce527d39b354d0e6421d7ef9ead9ce4bfb28eddf3bf8685f9681ed7f23ec0f983f000dfc34b5d6349e825682633306bf29623d \ + --hash=sha512:4b87fe7d1a1f81a3778da62c466f35d763d359b59e79dfc26e971e18ddf4d5d8febfa927d1a7a4a20bcbcf3db8b94ffa73b0aa8e2a8950a1c7d4899f9c95d8a6 \ + --hash=sha512:f5149920cc429e841ec88cca9c68cece82172f2a74788b1ce0924b45308df5aa92920c09ec5c93335beb37ddedd09b18444664ee0879a9a72fc432554b8d5e26 \ + --hash=sha512:2ee854f1ad3fecd81d2fe2418a7ac804d8e257929f973d8fdba88b8a93362590906eec44ca6e54f9c2173b1d645b2024792f2802320bcb21d7ea7423cdcdd833 \ + --hash=sha512:e4ba05cd1f7fe2486dd2041ec2ef31b9642b1d17300025eda181413a1ad7af8d5a1daf4cd45a2a236191e591d74b51c2a63217a737eab680dd09efa8122be5bf \ + --hash=sha512:04805984237fbf618d6d87321432840701ce0bbc1fd7ff65664487faec8724398fccbd8c01ac5c5764e4ac1bc5206325320c6cda74f3ca3045e8739487ea779b \ + --hash=sha512:3b416b5c915890a8bbe75aaada1c032710dfadd352895effd7e0412ad2e2b91b3b0af087a6dd94af415394506e2598adc9f9deb8ab3820c3d0c21d5048670af1 \ + --hash=sha512:a4b10e9a9665e83434e9035b56542234fbfa07cba85d351a910ad2e81cedd9cab27497d34bf58bb3995d22ef6118438635e881418f58fca5d326b3d3495e890c \ + --hash=sha512:c8b8fae59303afef81daf85381596e366b60e1d5d499b6001c078bea669b1373fba37aca20a3617c54461f6797a1c655707fdee23cffb7aae8c1d6208dcff894 \ + --hash=sha512:2b5b7a9667fc85c691fc107ba8b32ff8931ee6ee4c34e15784b1882d21c7fb2650d63825f1bdf14626dafe671f67e7816c79a5a8c6b7f1366f20f24ee6f32bd8 \ + --hash=sha512:5524fd230b55580a2c647a0a78197a783e201fdfa8b3177b72c6d7b689afd76a689e4fe3593120d3adb7ee5cc4adf9211e8deedc8fab355e9ed70076db09f68b # PyNaCl (pyca) (Handles TCB-side XChaCha20-Poly1305 symmetric encryption) PyNaCl==1.5.0 --hash=sha512:853446c38ce5488e18eba166f67650bc4f50044f509987ad2ae4830d2ed85284f057c3a4304180ad265bc33fb9cd6570488a37e40bade5e202ba201ad368af84 \ @@ -82,5 +87,5 @@ PyNaCl==1.5.0 --hash=sha512:853446c38ce5488e18eba166f67650bc4f50 --hash=sha512:61e07a421705e5c1613cbc888ff594d7e3457090e9654280f2b6e54a84e5d6dcd56292fd3c47b86a59be6eecafa8f17ad5d710f45b7fcda9f57d9c7343328bc2 \ --hash=sha512:9720cfe64e70667804c197a1762db2985bf5893ae774418f50da9a3d31135b8935fd497c5fe4f92909f6e0ac70e3c5dd57f6322ab780d29b12741c64c0d2c007 \ --hash=sha512:cea3e4556432588630382abae6debf9203c7f55da286509da547a7921e4dbad98c915743625c68e5f7187fcaf6d4cdaf7ed2ed3ba60bd4c10ae6e3f88608dc65 -setuptools==67.7.0 --hash=sha512:22428cf43932d4a16f704adace5e6fa9ddff15c2715c9ba2c0f47c2e96d5fa95e5fbd21e2e55cef9c43a41d29f6cd2d09500b1cb81daedb64820e388ead70346 \ - --hash=sha512:39502337b5d7f710c55219ab970a5cab23e8987598af722ad231d2dea2e1dfaaddb09dc698a5746a719b36e5e3065c48ecee2ac428e4d41470bec6ad3c99daf6 +setuptools==69.5.1 --hash=sha512:d212edd21ab99f50c2daf6080c68a3cc0eeed566f10e91f857e7eeb86513f33e9cde25b975db1030110c3b1714cfbfd4d3c9e2937b4a5ff2bb8971e605ecee85 \ + --hash=sha512:81f4a5184976a0d4aa070261bb56458c54ec6a479786fa469e98cb336e9a1691b281ae771abe41bc5398fac15b2dd039c07cf014ee00572f46908ce6830fcb6a diff --git a/src/__init__.py b/src/__init__.py index c46a8ee..0d012d5 100755 --- a/src/__init__.py +++ b/src/__init__.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/__init__.py b/src/common/__init__.py index c46a8ee..0d012d5 100755 --- a/src/common/__init__.py +++ b/src/common/__init__.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/crypto.py b/src/common/crypto.py index 279f495..11b5699 100755 --- a/src/common/crypto.py +++ b/src/common/crypto.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. @@ -36,24 +36,33 @@ import hashlib import os -import argon2 -import nacl.bindings -import nacl.exceptions -import nacl.secret -import nacl.utils - from typing import Tuple + +# Ignore packages not used in relay program. +try: + import argon2 +except ImportError: + pass + +try: + import nacl.bindings + import nacl.exceptions + import nacl.secret + import nacl.utils +except ImportError: + pass + from cryptography.hazmat.primitives import padding from cryptography.hazmat.primitives.asymmetric.x448 import X448PrivateKey, X448PublicKey from cryptography.hazmat.primitives.serialization import Encoding, PublicFormat from src.common.exceptions import CriticalError from src.common.misc import separate_header -from src.common.statics import (ARGON2_SALT_LENGTH, BITS_PER_BYTE, BLAKE2_DIGEST_LENGTH, BLAKE2_DIGEST_LENGTH_MAX, +from src.common.statics import (BITS_PER_BYTE, BLAKE2_DIGEST_LENGTH, BLAKE2_DIGEST_LENGTH_MAX, BLAKE2_DIGEST_LENGTH_MIN, FINGERPRINT, FINGERPRINT_LENGTH, MESSAGE_KEY, HEADER_KEY, PADDING_LENGTH, SYMMETRIC_KEY_LENGTH, TFC_PUBLIC_KEY_LENGTH, - X448_SHARED_SECRET_LENGTH, XCHACHA20_NONCE_LENGTH) + X448_SHARED_SECRET_LENGTH, ARGON2_SALT_LENGTH, XCHACHA20_NONCE_LENGTH) def blake2b(message: bytes, # Message to hash @@ -239,6 +248,7 @@ def argon2_kdf(password: str, # Password to derive the key from class X448(object): + """\ X448 is the Diffie-Hellman function for Curve448-Goldilocks, a state-of-the-art elliptical curve published by Mike Hamburg in 2014. @@ -686,422 +696,12 @@ def csprng(key_length: int = SYMMETRIC_KEY_LENGTH # Length of the key cryptographically secure pseudo-random number generator (CSPRNG), also known as the Linux-RNG, or LRNG. - For more details, see - https://www.2uo.de/myths-about-urandom/ - https://www.chronox.de/lrng/doc/lrng.pdf - https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/Studies/LinuxRNG/LinuxRNG_EN.pdf - https://github.com/torvalds/linux/blob/master/drivers/char/random.c - + The LRNG is currently receiving a lot of love from Jason Donenfeld, + and no documentation, not even the one maintained by the German + BSI, is keeping up with the overhaul. - TFC key generation overview - =========================== - - The following schematic of the LRNG and its relation to TFC is based - on [1; p.19]. (Note: the page number for the BSI report is always - the PDF page number, not the printed page number in the bottom - margin of each page. This makes searching of the citations faster.) - - X448 private keys Other TFC keys - ↑ ↑ - (OS random engine) BLAKE2b (by TFC) - ↑ ↑ - └────────┐ ┌────────┘ - GETRANDOM() - ↑ - | ┌────────┐ - | | | State transition - ┏━━━━━━━━━━━━━━━┓ | - ┃ ChaCha20 DRNG ┃<──┘ - ┗━━━━━━━━━━━━━━━┛ - ↑ - fold - ↑ - SHA-1 ────────┐ - ↑ | State transition - ┏━━━━━━━━━━━━━━┓ | - ┃ input_pool ┃<───┘ - ┗━━━━━━━━━━━━━━┛<─────────────────────┐ - ↑ ↑ ↑ | - ┌────────────────────┘ | ┏━━━━━━━━━━━━━━━┓ | - | ┌───────┘ ┃ Time variance ┃ ┏━━━━━━━━━━━┓ - | | ┃ calculation ┃ ┃ fast_pool ┃ - | | ┗━━━━━━━━━━━━━━━┛ ┗━━━━━━━━━━━┛ - | | ↑ ↑ ↑ - ┏━━━━━━━━━━━┓┏━━━━━━━━━━━━━━━┓┏━━━━━━━━━━━┓┏━━━━━━━━━━━┓┏━━━━━━━━━━━━━┓ - ┃add_device ┃┃add_hwgenerator┃┃ add_input ┃┃ add_disk ┃┃add_interrupt┃ - ┃_randomness┃┃ _randomness ┃┃_randomness┃┃_randomness┃┃ _randomness ┃ - ┗━━━━━━━━━━━┛┗━━━━━━━━━━━━━━━┛┗━━━━━━━━━━━┛┗━━━━━━━━━━━┛┗━━━━━━━━━━━━━┛ - - [1] https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/Studies/LinuxRNG/LinuxRNG_EN.pdf - - - Entropy sources - =============== - - The APIs for the raw entropy sources of the LRNG include - - o add_device_randomness: Device driver related data believed to - provide entropy. The device driver specific value is mixed - into the unseeded ChaCha20 DRNG and input_pool during boot - along with the high-resolution time stamp, XORed with the - Jiffies (Linux kernel timer). The value is requested only - once, and it is not considered to contain any entropy.[1; p.52] - - o add_hwgenerator_randomness: HWRNGs supported by the Linux - kernel, if available. The output of the HWRNG device is used - to seed the ChaCha20 DRNG if needed, and then to seed the - input_pool directly when the entropy estimator's value falls - below the set threshold. (CPU HWRNG is not processed by the - add_hwgenerator_randomness service function).[1; pp.52-54] - - o add_input_randomness: Key presses, mouse movements, mouse - button presses etc. Repeated event values (e.g. key presses or - same direction mouse movements) are ignored by the service - function.[1; p.44] - The event data consists of four LSBs of the event type, - four MSBs of the event code, the event code itself, and the - event value, all XORed together.[1; p.45] - The resulting event data is fed into the input_pool via - add_timer_randomness, which prepends to the event value the - 32 LSBs of a high-resolution timestamp, plus the 64-bit - Jiffies timestamp.[1; p.55] - Each HID event contains 15.6 bits of Shannon entropy, but - due to LRNG's conservative heuristic entropy estimation, on - average only 1.29 bits of entropy is awarded to the event. - [1; p.77] - - o add_disk_randomness: Hardware events of block devices, e.g. - HDDs (but not e.g. SSDs). When a disk event occurs, the block - device number as well as the timer state variable disk->random - is mixed into the input_pool via add_timer_randomness. - [1; pp.50-51] - Each disk event contains on average 17.7 bits of Shannon - entropy, but only 0.21 bits of entropy is awarded to the - event.[1; p.77] - - o add_interrupt_randomness: Interrupts (i.e. signals from SW/HW - to processor that an event needs immediate attention) occur - hundreds of thousands of times per second under average load. - The interrupt timestamps and event data are mixed into - 128-bit, per-CPU pool called fast_pool. When an interrupt - occurs - * The 32 LSBs of the high-resolution timestamp, the coarse - Jiffies, and the interrupt number are XORed with the first - 32-bit word of the fast_pool. - * The 32 LSBs of the Jiffies and the 32 MSBs of the - high-resolution timestamp are XORed with the second word - of the fast_pool. - * The 32 MSBs and LSBs of the 64-bit CPU instruction pointer - value are XORed with the third and fourth word of the - fast_pool. If no pointer is available, the XORed value is - instead the return address of the add_interrupt_randomness - function. - The raw entropy mixed into the fast_pool is then distributed - more evenly with a function called fast_mix. - The content of the fast_pool is mixed into the input_pool - once it has data about at least 64 interrupt events, and - (unless the ChaCha20 DRNG is being seeded) at least one second - has passed since the fast_pool was last mixed in. The counter - keeping track of the interrupt events is then zeroed. - [1; pp.45-49] - Each interrupt is assumed to contain 1/32 bits of entropy. - However, the measured Shannon entropy for each interrupt is - 19.2 bits, which means each 128-bit fast_pool is fed 1228.8 - bits of Shannon entropy.[1; p.77] - The entire content of the fast_pool is considered to - increase the internal entropy of the input_pool by 1 bit. If - the RDSEED (explained below) instruction is available, it is - used to obtain a 64-bit value that is also mixed into the - input_pool, and the internal entropy of the input_pool is - then considered to have increased by another bit.[1; p.48] - - Additional raw entropy sources include - - o RDSEED/RDRAND CPU instructions: - - Intel: A pair of inverters[2] feeds 512 bits of raw - entropy to AES256-CBC-MAC based conditioner (as - specified in NIST SP 800-38A), that can be - requested bytes with the RDSEED instruction. - The conditioner is used to create 256-bit seeds - for the AES256-CTR based DRBG available via the - RDRAND instruction. The DRBG is reseeded after - every 511th sample of 128 bits (~8kB).[3; p.12] - - - AMD: A set of 16 ring oscillator chains feeds 512 bits - of raw entropy to AES256-CBC-MAC based conditioner - again available via RDSEED instruction. The - conditioner is used to produce 128-bit seeds -- - a process that is repeated thrice to create a - 384-bit seed for the AES256-CTR based DRBG - available via the RDRAND instruction. The DRBG is - reseeded at least every 2048 queries of 32-bits - (8kB).[4; pp.2-3] - - While the RDSEED/RDRAND instructions are used extensively, - because the CPU HWRNG is not an auditable source, it is - assumed to provide only a very small amount of entropy. - [1; p.83] - - o Data written to /dev/(u)random from the user space[1; p.38] - such as the 4096-bit random-seed that was obtained from the - ChaCha20 DRNG and written on disk when the previous session - ended and the system was powered off.[1; p.63] - While the random-seed might not be mixed in early enough - during boot to benefit the kernel[5], it is mixed into the - input_pool before TFC starts. - - o User space IOCTL of RNDADDENTROPY.[1; p.39] - - [1] https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/Studies/LinuxRNG/LinuxRNG_EN.pdf - [2] https://spectrum.ieee.org/computing/hardware/behind-intels-new-randomnumber-generator - [3] https://software.intel.com/sites/default/files/managed/98/4a/DRNG_Software_Implementation_Guide_2.1.pdf - [4] https://www.amd.com/system/files/TechDocs/amd-random-number-generator.pdf - [5] https://security.stackexchange.com/q/183506 - - - The input_pool - ============== - - Overview - -------- - The input_pool is the 4096-bit primary entropy pool of the LRNG that - compresses truly random events from different noise sources.[1; p.19] - Together the noise sources and the input_pool form a constantly - seeded, non-deterministic random number generator (NDRNG), that - seeds the ChaCha20-based deterministic random number generator - (DRNG).[1; p.20] - - Initialization of the input_pool - -------------------------------- - The input_pool is initialized during boot time of the kernel by - mixing following data into the entropy pool: - 1. The current time with nanosecond precision (64-bit CPUs). - 2. Entropy obtained from CPU HWRNG via RDRAND instruction, if - available. - 3. System specific information such as OS name, release, - version, and a HW identifier.[1; pp.30-31] - - Initial seeding and seeding levels of the input_pool - ---------------------------------------------------- - After a hardware event has occurred, the entropy of the event value - is estimated, and both values are mixed into the input_pool using a - function based on a linear feedback shift register (LFSR), one byte - at a time.[1; p.23] - - The input_pool only keeps track if at one point it has had 128 bits - of entropy in it. When that limit is exceeded, the variable - `initialized` is set to one.[1; p.22] This level of entropy is - reached at early boot phase (by the time the user space boots). - [2; p.6] - Once the input_pool is initialized, the ChaCha20 DRNG is - reseeded from the input_pool[2] using 128..256 bits of entropy - [1; pp.27-28] from the input_pool and at that point the DRNG is - considered fully seeded.[3] - - State transition and output of the input_pool - --------------------------------------------- - When outputting entropy from the input_pool to the ChaCha20 DRNG, - the input_pool output function first compresses the entire content - of the input_pool with SHA-1 like hash function that has the - transformation function of SHA-1, but that replaces the constants of - SHA-1 with random values obtained from CPU HWRNG via RDRAND, if - available.[1; p.29] - The output function also "folds" the 160-bit digest by slicing - it into two 80-bit chunks and by then XORing them together to - produce the final output. At the same time, the output function - reduces the input_pool entropy estimator by 80 bits.[1; p.18] - The "SHA-1" digest is mixed back into the input_pool using the - LFSR-based state transition function to provide backtracking - resistance.[1; p.18] - If more than 80-bits of entropy is requested, the - hash-fold-yield-mix-back operation is repeated until the requested - number of bytes are generated. (Reseeding the ChaCha20 DRNG requires - four consecutive requests.)[1; p.18] - - Reseeding of the input_pool - --------------------------- - The input_pool is reseeded constantly as random events occur. The - events are mixed with the LFSR, one byte at a time. - When the input_pool is full, more entropy keeps getting mixed in - which is helpful in case the entropy estimator is optimistic: At - some point the entropy will have reached the maximum of 4096 bits. - When the input_pool entropy estimator considers the pool to have - 4096 bits of entropy, it will output 1024 bits to blocking_pool for - the use of /dev/random, and it will then reduce the input_pool's - entropy estimator by 1024 bits.[1; pp.59-60] - - [1] https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/Studies/LinuxRNG/LinuxRNG_EN.pdf - [2] https://github.com/torvalds/linux/blob/master/drivers/char/random.c#L734 - [3] https://github.com/torvalds/linux/blob/master/drivers/char/random.c#L952 - - The ChaCha20 DRNG - ================= - - Overview - -------- - The LRNG uses the ChaCha20 stream cipher as its primary DRNG. - - The internal 64-byte state of the DRNG consists of - - 16-byte constant b'Expand 32-byte k' set by the designer (djb)[1; p.32] - - 32-byte key (the only part that is reseeded with entropy) - - 4-byte counter (the counter is actually 64-bits[2]) - - 12-byte nonce - - In addition, the DRNG state contains a 4-byte timestamp called - init_time, that keeps track of when the DRNG was last seeded. - [1; pp.32-33] - - Initialization of the DRNG - -------------------------- - The ChaCha20 DRNG is initialized during the boot time of the kernel - by using the content of the input_pool (considered to have poor - entropy at this point[1; p.32]) for key, counter, and nonce parts - of the DRNG state. - Each of the three values is XORed with the output from CPU - HWRNG obtained via RDSEED or RDRAND instruction (if available -- - otherwise only the key is XORed, and that's done with a timestamp - obtained via the RDTSCP instruction).[1; pp.32-33] - The initialization is completed by setting the init_time to - a value that causes the ChaCha20 DRNG to reseed from the input_pool - the next time it's called.[1; p.33][3] - - Initial seeding and seeding levels of the DRNG - ---------------------------------------------- - If the RDSEED or RDRAND is available during initialization, and if - the CPU HWRNG is trusted by the kernel, the DRNG is seeded by the - CPU HWRNG, after which it is considered fully seeded and the seeding - steps below are skipped. The DRNG will still reseed from the - input_pool the next time it is called.[1; p.35] - - **Initially seeded state** - During initialization time of the kernel, the kernel injects four - sets of data from fast_pool into the DRNG (instead of the - input_pool). Each set contains event data and timestamps of 64 - interrupt events from add_interrupt_randomness.[1; p.35] - In addition, all content from the add_device_randomness source - is mixed into the DRNG key state using an LFSR with a period of 255. - [1; p.52] - Once the entropy sources have been mixed in, the DRNG is - considered to be initially seeded.[1; p.35] - - **Fully seeded state** - As of Linux kernel 4.17, if the CPU HWRNG is not trusted, the DRNG - is considered fully seeded (256-bit entropy) only after, during - initialization time of the kernel, the input_pool has reached - 128-bit entropy, and the DRNG is reseeded by XORing 128..256 bits - from the input_pool with the key part of the DRNG state.[1; p.138] - The time to reach this state might take up to 90 seconds - [1; p.70], but as the installation of TFC via Tor takes longer than - that, the DRNG is most likely fully seeded by the time TFC generates - keys and no blocking affects the user experience. - According to [1; p.39] and [2; p.11], the ChaCha20 DRNG blocks - until it is fully seeded. This means TFC's key generation also - blocks until the ChaCha20 DRNG is fully seeded. - - State transition and output of the DRNG - --------------------------------------- - When outputting from ChaCha20 DRNG to the caller, the ChaCha20 block - function is invoked repeatedly until the requested number of bytes - are generated. Each invoke yields a 64-byte output block that is - essentially part of the keystream that in the context of stream - cipher would be XORed with the plaintext to produce the ciphertext. - With each generated block the internal 32-bit counter value of - the ChaCha20 state is incremented by one to ensure unique blocks.[4] - The state of the DRNG is further stirred by XORing the second 32-bit - word of the nonce with the output from RDRAND instruction, if - available.[1; p.33] - Once the amount of requested random data has been generated, the - state update function is invoked, which takes a 256-bit block of - unused keystream and XORs it with the key part of the ChaCha20 state - to ensure backtracking resistance.[1; pp.33-34] - - The random bytes used in TFC are obtained with the GETRANDOM syscall - instead of the /dev/urandom device file. This has two major benefits: - 1. It bypasses the Linux kernel's virtual file system (VFS) - layer, which reduces complexity and possibility of bugs, and - 2. unlike /dev/urandom, GETRANDOM(0) blocks until it has been - fully seeded. - [1; pp.39-40] - - Reseeding of the DRNG - --------------------- - The ChaCha20 DRNG is reseeded automatically every 300 seconds - irrespective of the amount of data produced by the DRNG[1; p.32]. - The DRNG is reseeded by obtaining 128..256 bits of entropy - from the input_pool. In the order of preference, the entropy from - the input_pool is XORed with the output of - 1. 32-byte value obtained via RDSEED CPU instruction, or - 2. 32-byte value obtained via RDRAND CPU instruction, or - 3. eight 4-byte high-resolution time stamps - The result is then XORed with the key component of the DRNG state - [1; p.34]. - - [1] https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/Studies/LinuxRNG/LinuxRNG_EN.pdf - [2] https://lkml.org/lkml/2019/5/30/867 - [3] https://github.com/torvalds/linux/blob/master/drivers/char/random.c#L810 - https://github.com/torvalds/linux/blob/master/drivers/char/random.c#L977 - [4] https://github.com/torvalds/linux/blob/master/lib/crypto/chacha.c#L89 - https://github.com/torvalds/linux/blob/master/drivers/char/random.c#L983 - - - GETRANDOM and Python - ==================== - - Since Python 3.6.0, `os.urandom` has been a wrapper for the best - available CSPRNG. The 3.17 and earlier versions of the Linux kernel - do not support the GETRANDOM call, and Python 3.7's `os.urandom` - will in those cases fall back to non-blocking `/dev/urandom` that is - not secure on live distros as they have low entropy at the start of - the session. - To avoid possibly unsafe key generation, instead of `os.urandom` - TFC uses the `os.getrandom(size, flags=0)` explicitly. This forces - use of recent enough Python interpreter (3.6.0 or later) and limits - the Linux kernel version to 3.17 or newer. To make use of the LRNG, - the kernel version required by TFC is bumped to 4.8, and to make - sure the ChaCha20 DRNG is always seeded from input_pool before its - considered fully seeded, the final minimum requirement is 4.17). - The flag 0 means GETRANDOM will block if the DRNG is not fully - seeded.[1] - - Quoting PEP 524 [2]: - "The os.getrandom() is a thin wrapper on the getrandom() - syscall/C function and so inherit of its behaviour. For - example, on Linux, it can return less bytes than - requested if the syscall is interrupted by a signal." - - However, quoting LWN[3] on GETRANDOM: - "--reads of 256 bytes or less from /dev/urandom are guaranteed to - return the full request once that device has been initialized." - - Since the largest key generated in TFC is the 56-byte X448 private - key, GETRANDOM is guaranteed to always return enough bytes. As a - good practice however, TFC checks that the length of the obtained - entropy is correct. - - [1] https://manpages.debian.org/testing/manpages-dev/getrandom.2.en.html - [2] https://www.python.org/dev/peps/pep-0524/ - [3] https://lwn.net/Articles/606141/ - - - BLAKE2 compression - ================== - - The output of GETRANDOM is further compressed with BLAKE2b. The - preimage resistance of the hash function protects the internal - state of the entropy pool just in case some user decides to modify - the source to accept pre-4.8 Linux kernel that has no backtracking - resistance. Another reason for the hashing is its recommended by - djb[1]. - - Since BLAKE2b only produces 1..64 byte digests[2], its use limits - the size of the generated keys to 64 bytes. This is not a problem - for TFC because again, the largest key it generates is the 56-byte - X448 private key. However, because pyca/cryptography manages the - X448 private key generation, the largest key this function will - generate is a 32-byte symmetric key. - - [1] https://media.ccc.de/v/32c3-7210-pqchacks#video&t=1116 - [2] https://blake2.net/ + The best resource to study the RNG functionality is for now, the source code itself: + https://github.com/torvalds/linux/blob/master/drivers/char/random.c """ if key_length < BLAKE2_DIGEST_LENGTH_MIN or key_length > BLAKE2_DIGEST_LENGTH_MAX: raise CriticalError(f"Invalid key size ({key_length} bytes).") @@ -1117,24 +717,3 @@ def csprng(key_length: int = SYMMETRIC_KEY_LENGTH # Length of the key compressed = blake2b(entropy, digest_size=key_length) return compressed - - -def check_kernel_version() -> None: - """Check that the Linux kernel version is at least 4.17. - - This check ensures that TFC only runs on versions of Linux kernel - that use the new ChaCha20 DRNG (4.8 or newer) that among many - things, adds backtracking protection.[1] - - In addition, the requirement for 4.17 ensures that the ChaCha20 DRNG - is considered fully seeded only after it has also been seeded by the - input_pool, not just fast_pool (assuming that the CPU HWRNG isn't - trusted).[2; p.138] - - [1] https://lkml.org/lkml/2016/7/25/43 - [2] https://www.bsi.bund.de/SharedDocs/Downloads/EN/BSI/Publications/Studies/LinuxRNG/LinuxRNG_EN.pdf - """ - major_v, minor_v = [int(i) for i in os.uname()[2].split('.')[:2]] # type: int, int - - if major_v < 4 or (major_v == 4 and minor_v < 17): - raise CriticalError("Insecure kernel CSPRNG version detected.") diff --git a/src/common/database.py b/src/common/database.py index 7b603e6..250e2d7 100755 --- a/src/common/database.py +++ b/src/common/database.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/db_contacts.py b/src/common/db_contacts.py index 6b975a6..785f7bc 100755 --- a/src/common/db_contacts.py +++ b/src/common/db_contacts.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/db_groups.py b/src/common/db_groups.py index 2d3a926..45ea57e 100755 --- a/src/common/db_groups.py +++ b/src/common/db_groups.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/db_keys.py b/src/common/db_keys.py index 7c1e9b7..4a14983 100755 --- a/src/common/db_keys.py +++ b/src/common/db_keys.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/db_logs.py b/src/common/db_logs.py index c9e0a61..7747d20 100755 --- a/src/common/db_logs.py +++ b/src/common/db_logs.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/db_masterkey.py b/src/common/db_masterkey.py index 8e09e11..fc1cf24 100755 --- a/src/common/db_masterkey.py +++ b/src/common/db_masterkey.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/db_onion.py b/src/common/db_onion.py index 7ccedc9..ae2adf8 100755 --- a/src/common/db_onion.py +++ b/src/common/db_onion.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/db_settings.py b/src/common/db_settings.py index 0369965..1e59818 100755 --- a/src/common/db_settings.py +++ b/src/common/db_settings.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/encoding.py b/src/common/encoding.py index ae36521..0271336 100755 --- a/src/common/encoding.py +++ b/src/common/encoding.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/exceptions.py b/src/common/exceptions.py index 0f2c488..a3b9557 100755 --- a/src/common/exceptions.py +++ b/src/common/exceptions.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/gateway.py b/src/common/gateway.py index 3d8607b..6fc482e 100755 --- a/src/common/gateway.py +++ b/src/common/gateway.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/input.py b/src/common/input.py index eaee218..f15551b 100755 --- a/src/common/input.py +++ b/src/common/input.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/misc.py b/src/common/misc.py index 48356dc..db381e9 100755 --- a/src/common/misc.py +++ b/src/common/misc.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. @@ -266,9 +266,7 @@ def monitor_processes(process_list: List[Process], sys.exit(0) if command == WIPE: - with open('/etc/os-release') as f: - data = f.read() - if TAILS not in data: + if not platform_is_tails(): shred_databases(software_operation) power_off_system() @@ -277,7 +275,7 @@ def platform_is_tails() -> bool: """Return True if Relay Program is running on Tails.""" with open('/etc/os-release') as f: data = f.read() - return 'TAILS_PRODUCT_NAME="Tails"' in data + return TAILS in data def power_off_system() -> None: diff --git a/src/common/output.py b/src/common/output.py index d93c6fe..211bc34 100755 --- a/src/common/output.py +++ b/src/common/output.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/path.py b/src/common/path.py index 28dbe62..a6aedd5 100755 --- a/src/common/path.py +++ b/src/common/path.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/common/statics.py b/src/common/statics.py index 7b7aaa7..ab5f950 100755 --- a/src/common/statics.py +++ b/src/common/statics.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. @@ -21,7 +21,7 @@ """Program details""" TFC = 'TFC' -VERSION = '1.23.04' +VERSION = '1.24.04' TRANSMITTER = 'Transmitter' RECEIVER = 'Receiver' RELAY = 'Relay' @@ -41,7 +41,7 @@ TX = 'tx' RX = 'rx' NC = 'nc' -TAILS = 'TAILS_PRODUCT_NAME="Tails"' +TAILS = 'NAME="Tails"' """Window identifiers""" @@ -542,7 +542,7 @@ MAX_INT = 2 ** 64 - 1 B58_CHECKSUM_LENGTH = 4 TRUNC_ADDRESS_LENGTH = 5 -TOR_CONTROL_PORT = 9051 +TOR_CONTROL_PORT = 951 TOR_SOCKS_PORT = 9050 DB_WRITE_RETRY_LIMIT = 10 ACCOUNT_RATIO_LIMIT = 0.75 diff --git a/src/common/word_list.py b/src/common/word_list.py index 295933b..9de7b04 100755 --- a/src/common/word_list.py +++ b/src/common/word_list.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/receiver/__init__.py b/src/receiver/__init__.py index c46a8ee..0d012d5 100755 --- a/src/receiver/__init__.py +++ b/src/receiver/__init__.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/receiver/commands.py b/src/receiver/commands.py index 31253e1..d30ee8b 100755 --- a/src/receiver/commands.py +++ b/src/receiver/commands.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/receiver/commands_g.py b/src/receiver/commands_g.py index 5510f43..0c62ec0 100755 --- a/src/receiver/commands_g.py +++ b/src/receiver/commands_g.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/receiver/files.py b/src/receiver/files.py index 364b6fc..17d2f37 100755 --- a/src/receiver/files.py +++ b/src/receiver/files.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/receiver/key_exchanges.py b/src/receiver/key_exchanges.py index ca4270f..9b1974c 100755 --- a/src/receiver/key_exchanges.py +++ b/src/receiver/key_exchanges.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/receiver/messages.py b/src/receiver/messages.py index c406f0c..5f83e35 100755 --- a/src/receiver/messages.py +++ b/src/receiver/messages.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/receiver/output_loop.py b/src/receiver/output_loop.py index ce88454..df9de1e 100755 --- a/src/receiver/output_loop.py +++ b/src/receiver/output_loop.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/receiver/packet.py b/src/receiver/packet.py index b629ee3..7e78ed2 100755 --- a/src/receiver/packet.py +++ b/src/receiver/packet.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/receiver/receiver_loop.py b/src/receiver/receiver_loop.py index 2502afc..739db1a 100755 --- a/src/receiver/receiver_loop.py +++ b/src/receiver/receiver_loop.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/receiver/windows.py b/src/receiver/windows.py index 07362b7..53dc537 100755 --- a/src/receiver/windows.py +++ b/src/receiver/windows.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/relay/__init__.py b/src/relay/__init__.py index c46a8ee..0d012d5 100755 --- a/src/relay/__init__.py +++ b/src/relay/__init__.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/relay/client.py b/src/relay/client.py index 6cc9d3f..5c47deb 100755 --- a/src/relay/client.py +++ b/src/relay/client.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/relay/commands.py b/src/relay/commands.py index 0941ad7..f10aa52 100755 --- a/src/relay/commands.py +++ b/src/relay/commands.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/relay/diffs.py b/src/relay/diffs.py index 9d857f9..1989c56 100755 --- a/src/relay/diffs.py +++ b/src/relay/diffs.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/relay/onion.py b/src/relay/onion.py index a674408..4c64626 100755 --- a/src/relay/onion.py +++ b/src/relay/onion.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. @@ -31,7 +31,8 @@ from typing import Any, Dict, Optional, Union -import nacl.signing +from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey +from cryptography.hazmat.primitives import serialization import stem.control import stem.process @@ -201,7 +202,9 @@ def onion_service(queues: Dict[bytes, 'Queue[Any]'], test_run: bool) -> None: time.sleep(0.1) private_key, c_code = queues[ONION_KEY_QUEUE].get() - public_key_user = bytes(nacl.signing.SigningKey(seed=private_key).verify_key) + public_key_user = Ed25519PrivateKey.from_private_bytes(private_key).public_key().public_bytes( + encoding=serialization.Encoding.Raw, + format=serialization.PublicFormat.Raw) onion_addr_user = pub_key_to_onion_address(public_key_user) buffer_key = hashlib.blake2b(BUFFER_KEY, key=private_key, digest_size=SYMMETRIC_KEY_LENGTH).digest() diff --git a/src/relay/server.py b/src/relay/server.py index 65b78a2..53a7b52 100755 --- a/src/relay/server.py +++ b/src/relay/server.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/relay/tcb.py b/src/relay/tcb.py index b3f6c1d..8103f9a 100755 --- a/src/relay/tcb.py +++ b/src/relay/tcb.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/transmitter/__init__.py b/src/transmitter/__init__.py index c46a8ee..0d012d5 100755 --- a/src/transmitter/__init__.py +++ b/src/transmitter/__init__.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/transmitter/commands.py b/src/transmitter/commands.py index ec81ed5..070784b 100755 --- a/src/transmitter/commands.py +++ b/src/transmitter/commands.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/transmitter/commands_g.py b/src/transmitter/commands_g.py index 39715b7..541ca96 100755 --- a/src/transmitter/commands_g.py +++ b/src/transmitter/commands_g.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/transmitter/contact.py b/src/transmitter/contact.py index 5b78b57..4609781 100755 --- a/src/transmitter/contact.py +++ b/src/transmitter/contact.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/transmitter/files.py b/src/transmitter/files.py index 6dfb12f..2d8f7e0 100755 --- a/src/transmitter/files.py +++ b/src/transmitter/files.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/transmitter/input_loop.py b/src/transmitter/input_loop.py index 1106f10..dbe1ba4 100755 --- a/src/transmitter/input_loop.py +++ b/src/transmitter/input_loop.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/transmitter/key_exchanges.py b/src/transmitter/key_exchanges.py index 74d6ba1..ad3d104 100755 --- a/src/transmitter/key_exchanges.py +++ b/src/transmitter/key_exchanges.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/transmitter/packet.py b/src/transmitter/packet.py index 06014ed..3d155e1 100755 --- a/src/transmitter/packet.py +++ b/src/transmitter/packet.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/transmitter/sender_loop.py b/src/transmitter/sender_loop.py index 325c5a0..009d92a 100755 --- a/src/transmitter/sender_loop.py +++ b/src/transmitter/sender_loop.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/transmitter/traffic_masking.py b/src/transmitter/traffic_masking.py index bb966c0..2b78093 100755 --- a/src/transmitter/traffic_masking.py +++ b/src/transmitter/traffic_masking.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/transmitter/user_input.py b/src/transmitter/user_input.py index 9447fa9..5ec416c 100755 --- a/src/transmitter/user_input.py +++ b/src/transmitter/user_input.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/transmitter/window_mock.py b/src/transmitter/window_mock.py index ad13208..500d41c 100755 --- a/src/transmitter/window_mock.py +++ b/src/transmitter/window_mock.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/src/transmitter/windows.py b/src/transmitter/windows.py index dab219d..0d1a618 100755 --- a/src/transmitter/windows.py +++ b/src/transmitter/windows.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/__init__.py b/tests/__init__.py index c46a8ee..0d012d5 100755 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/__init__.py b/tests/common/__init__.py index c46a8ee..0d012d5 100755 --- a/tests/common/__init__.py +++ b/tests/common/__init__.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_crypto.py b/tests/common/test_crypto.py index 6b46176..0f391a7 100755 --- a/tests/common/test_crypto.py +++ b/tests/common/test_crypto.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. @@ -39,7 +39,7 @@ from cryptography.hazmat.primitives.asymmetric.x448 import X448PrivateKey from cryptography.hazmat.primitives.serialization import Encoding, NoEncryption, PrivateFormat -from src.common.crypto import (argon2_kdf, auth_and_decrypt, blake2b, byte_padding, check_kernel_version, csprng, +from src.common.crypto import (argon2_kdf, auth_and_decrypt, blake2b, byte_padding, csprng, encrypt_and_sign, rm_padding_bytes, X448) from src.common.statics import (ARGON2_MIN_MEMORY_COST, ARGON2_MIN_PARALLELISM, ARGON2_MIN_TIME_COST, ARGON2_SALT_LENGTH, BLAKE2_DIGEST_LENGTH, BLAKE2_DIGEST_LENGTH_MAX, @@ -756,24 +756,5 @@ def test_invalid_size_entropy_from_getrandom_raises_critical_error(self, mock_blake2b.assert_not_called() -class TestCheckKernelVersion(unittest.TestCase): - - invalid_versions = ['3.9.11', '3.19.8', '4.16.0'] - valid_versions = ['4.17.0', '4.18.1', '5.0.0'] - - @mock.patch('os.uname', side_effect=[['', '', f'{version}-0-generic'] for version in invalid_versions]) - def test_invalid_kernel_versions_raise_critical_error(self, mock_uname: MagicMock) -> None: - for _ in self.invalid_versions: - with self.assertRaises(SystemExit): - check_kernel_version() - mock_uname.assert_called() - - @mock.patch('os.uname', side_effect=[['', '', f'{version}-0-generic'] for version in valid_versions]) - def test_valid_kernel_versions_return_none(self, mock_uname: MagicMock) -> None: - for _ in self.valid_versions: - self.assertIsNone(check_kernel_version()) - mock_uname.assert_called() - - if __name__ == '__main__': unittest.main(exit=False) diff --git a/tests/common/test_database.py b/tests/common/test_database.py index c326de1..ebc15f4 100755 --- a/tests/common/test_database.py +++ b/tests/common/test_database.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_db_contacts.py b/tests/common/test_db_contacts.py index b0ff903..e025901 100755 --- a/tests/common/test_db_contacts.py +++ b/tests/common/test_db_contacts.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_db_groups.py b/tests/common/test_db_groups.py index 90d137d..f08e766 100755 --- a/tests/common/test_db_groups.py +++ b/tests/common/test_db_groups.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_db_keys.py b/tests/common/test_db_keys.py index e24f04a..e24aee7 100755 --- a/tests/common/test_db_keys.py +++ b/tests/common/test_db_keys.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_db_logs.py b/tests/common/test_db_logs.py index a0ef9db..be1149d 100755 --- a/tests/common/test_db_logs.py +++ b/tests/common/test_db_logs.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_db_masterkey.py b/tests/common/test_db_masterkey.py index 62fc0de..85641cf 100755 --- a/tests/common/test_db_masterkey.py +++ b/tests/common/test_db_masterkey.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. @@ -90,8 +90,7 @@ def test_load_master_key_with_invalid_data_raises_critical_error(self, _: Any) - @mock.patch('src.common.db_masterkey.MIN_KEY_DERIVATION_TIME', 0.01) @mock.patch('src.common.db_masterkey.MAX_KEY_DERIVATION_TIME', 0.1) - @mock.patch('os.popen', return_value=MagicMock( - read=MagicMock(return_value=MagicMock(splitlines=MagicMock(return_value=["MemAvailable 10240"]))))) + @mock.patch('src.common.db_masterkey.MasterKey.get_available_memory', return_value=10240) @mock.patch('os.path.isfile', side_effect=[KeyboardInterrupt, False, True, False]) @mock.patch('getpass.getpass', side_effect=input_list) @mock.patch('time.sleep', return_value=None) @@ -109,8 +108,7 @@ def test_master_key_generation_and_load(self, *_: Any) -> None: @mock.patch('src.common.db_masterkey.MIN_KEY_DERIVATION_TIME', 0.01) @mock.patch('src.common.db_masterkey.MAX_KEY_DERIVATION_TIME', 0.1) - @mock.patch('os.popen', return_value=MagicMock( - read=MagicMock(return_value=MagicMock(splitlines=MagicMock(return_value=["MemAvailable 10240"]))))) + @mock.patch('src.common.db_masterkey.MasterKey.get_available_memory', return_value=10240) @mock.patch('os.path.isfile', side_effect=[False, True, False]) @mock.patch('getpass.getpass', side_effect=4*['password']) @mock.patch('time.sleep', return_value=None) @@ -124,8 +122,7 @@ def test_database_data_caching_and_storage_on_command(self, *_: Any): @mock.patch('src.common.db_masterkey.MIN_KEY_DERIVATION_TIME', 0.01) @mock.patch('src.common.db_masterkey.MAX_KEY_DERIVATION_TIME', 0.1) - @mock.patch('os.popen', return_value=MagicMock( - read=MagicMock(return_value=MagicMock(splitlines=MagicMock(return_value=["MemAvailable 10240"]))))) + @mock.patch('src.common.db_masterkey.MasterKey.get_available_memory', return_value=10240) @mock.patch('getpass.getpass', side_effect=['generate']) @mock.patch('builtins.input', side_effect=['']) @mock.patch('os.system', return_value=None) @@ -142,8 +139,7 @@ def test_password_generation(self, *_: Any) -> None: + [(KL*b'a', 0.1)] # Test3: Complete binary search with search end + [(KL*b'a', 6.0)] + 7 * [(KL*b'a', 2.5)])) - @mock.patch('os.popen', return_value=MagicMock( - read=MagicMock(return_value=MagicMock(splitlines=MagicMock(return_value=["MemAvailable 10240"]))))) + @mock.patch('src.common.db_masterkey.MasterKey.get_available_memory', return_value=10240) @mock.patch('getpass.getpass', side_effect=['generate']) @mock.patch('builtins.input', side_effect=['']) @mock.patch('os.system', return_value=None) @@ -173,8 +169,7 @@ def test_determine_time_cost(self, *_: Any) -> None: + 100 * [(KL*b'b', 5.0)] + 2 * [(KL*b'a', 2.5)] + [(KL*b'a', 3.1)])) - @mock.patch('os.popen', return_value=MagicMock( - read=MagicMock(return_value=MagicMock(splitlines=MagicMock(return_value=["MemAvailable 10240"]))))) + @mock.patch('src.common.db_masterkey.MasterKey.get_available_memory', return_value=10240) @mock.patch('getpass.getpass', side_effect=['generate']) @mock.patch('builtins.input', side_effect=['']) @mock.patch('os.system', return_value=None) @@ -185,8 +180,7 @@ def test_determine_memory_cost(self, *_: Any) -> None: @mock.patch('src.common.db_masterkey.MIN_KEY_DERIVATION_TIME', 0.01) @mock.patch('src.common.db_masterkey.MAX_KEY_DERIVATION_TIME', 0.1) - @mock.patch('os.popen', return_value=MagicMock( - read=MagicMock(return_value=MagicMock(splitlines=MagicMock(return_value=["MemAvailable 10240"]))))) + @mock.patch('src.common.db_masterkey.MasterKey.get_available_memory', return_value=10240) @mock.patch('getpass.getpass', side_effect=['password', 'password', KeyboardInterrupt, 'password', 'invalid_pwd']) @mock.patch('time.sleep', return_value=None) def test_authenticate_action(self, *_: Any) -> None: diff --git a/tests/common/test_db_onion.py b/tests/common/test_db_onion.py index 7dc501c..1f78cf0 100755 --- a/tests/common/test_db_onion.py +++ b/tests/common/test_db_onion.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_db_settings.py b/tests/common/test_db_settings.py index 323be74..e5d091d 100755 --- a/tests/common/test_db_settings.py +++ b/tests/common/test_db_settings.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_encoding.py b/tests/common/test_encoding.py index b8b775a..8b879f5 100755 --- a/tests/common/test_encoding.py +++ b/tests/common/test_encoding.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_exceptions.py b/tests/common/test_exceptions.py index a76f7de..356fd8c 100755 --- a/tests/common/test_exceptions.py +++ b/tests/common/test_exceptions.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_gateway.py b/tests/common/test_gateway.py index 74d5d85..cf3ff54 100755 --- a/tests/common/test_gateway.py +++ b/tests/common/test_gateway.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_input.py b/tests/common/test_input.py index 8e52058..1d28901 100755 --- a/tests/common/test_input.py +++ b/tests/common/test_input.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_misc.py b/tests/common/test_misc.py index fce076a..f57842c 100755 --- a/tests/common/test_misc.py +++ b/tests/common/test_misc.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_output.py b/tests/common/test_output.py index e2e9fa4..da9ae2e 100755 --- a/tests/common/test_output.py +++ b/tests/common/test_output.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_path.py b/tests/common/test_path.py index 7855c40..289abb3 100755 --- a/tests/common/test_path.py +++ b/tests/common/test_path.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_statics.py b/tests/common/test_statics.py index dcc61bb..bf4be67 100755 --- a/tests/common/test_statics.py +++ b/tests/common/test_statics.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/common/test_word_list.py b/tests/common/test_word_list.py index fbf2d2d..562b1e6 100755 --- a/tests/common/test_word_list.py +++ b/tests/common/test_word_list.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/mock_classes.py b/tests/mock_classes.py index 6c54d08..5d343f5 100755 --- a/tests/mock_classes.py +++ b/tests/mock_classes.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/receiver/__init__.py b/tests/receiver/__init__.py index c46a8ee..0d012d5 100755 --- a/tests/receiver/__init__.py +++ b/tests/receiver/__init__.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/receiver/test_commands.py b/tests/receiver/test_commands.py index 952beba..d588d8f 100755 --- a/tests/receiver/test_commands.py +++ b/tests/receiver/test_commands.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. @@ -26,7 +26,6 @@ from datetime import datetime from multiprocessing import Queue from unittest import mock -from unittest.mock import MagicMock from src.common.database import MessageLog, TFCDatabase from src.common.db_logs import write_log_entry @@ -261,9 +260,8 @@ def tearDown(self) -> None: cleanup(self.unit_test_dir) @mock.patch('src.common.db_masterkey.MIN_KEY_DERIVATION_TIME', 0.1) - @mock.patch('src.common.db_masterkey.MIN_KEY_DERIVATION_TIME', 1.0) - @mock.patch('os.popen', return_value=MagicMock( - read=MagicMock(return_value=MagicMock(splitlines=MagicMock(return_value=["MemAvailable 10240"]))))) + @mock.patch('src.common.db_masterkey.MAX_KEY_DERIVATION_TIME', 1.0) + @mock.patch('src.common.db_masterkey.MasterKey.get_available_memory', return_value=10240) @mock.patch('multiprocessing.cpu_count', return_value=1) @mock.patch('getpass.getpass', side_effect=['test_password', 'a', 'a']) @mock.patch('time.sleep', return_value=None) @@ -303,9 +301,8 @@ def test_master_key_change(self, *_) -> None: self.settings.database.replace_database = orig_st_rd @mock.patch('src.common.db_masterkey.MIN_KEY_DERIVATION_TIME', 0.1) - @mock.patch('src.common.db_masterkey.MIN_KEY_DERIVATION_TIME', 1.0) - @mock.patch('os.popen', return_value=MagicMock( - read=MagicMock(return_value=MagicMock(splitlines=MagicMock(return_value=["MemAvailable 10240"]))))) + @mock.patch('src.common.db_masterkey.MAX_KEY_DERIVATION_TIME', 1.0) + @mock.patch('src.common.db_masterkey.MasterKey.get_available_memory', return_value=10240) @mock.patch('multiprocessing.cpu_count', return_value=1) @mock.patch('getpass.getpass', return_value='a') @mock.patch('time.sleep', return_value=None) diff --git a/tests/receiver/test_commands_g.py b/tests/receiver/test_commands_g.py index 8b09442..af5ff5b 100755 --- a/tests/receiver/test_commands_g.py +++ b/tests/receiver/test_commands_g.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/receiver/test_files.py b/tests/receiver/test_files.py index ddc023e..6885277 100755 --- a/tests/receiver/test_files.py +++ b/tests/receiver/test_files.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/receiver/test_key_exchanges.py b/tests/receiver/test_key_exchanges.py index 1c3622a..2f1dc43 100755 --- a/tests/receiver/test_key_exchanges.py +++ b/tests/receiver/test_key_exchanges.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/receiver/test_messages.py b/tests/receiver/test_messages.py index 127846a..2b0f8f3 100755 --- a/tests/receiver/test_messages.py +++ b/tests/receiver/test_messages.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/receiver/test_output_loop.py b/tests/receiver/test_output_loop.py index b6b0cad..3e22379 100644 --- a/tests/receiver/test_output_loop.py +++ b/tests/receiver/test_output_loop.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/receiver/test_packet.py b/tests/receiver/test_packet.py index 78e040e..df6cfcf 100755 --- a/tests/receiver/test_packet.py +++ b/tests/receiver/test_packet.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/receiver/test_receiver_loop.py b/tests/receiver/test_receiver_loop.py index e465354..ad0f4bd 100755 --- a/tests/receiver/test_receiver_loop.py +++ b/tests/receiver/test_receiver_loop.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/receiver/test_windows.py b/tests/receiver/test_windows.py index be15a2a..d6e4961 100755 --- a/tests/receiver/test_windows.py +++ b/tests/receiver/test_windows.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/relay/__init__.py b/tests/relay/__init__.py index c46a8ee..0d012d5 100755 --- a/tests/relay/__init__.py +++ b/tests/relay/__init__.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/relay/test_client.py b/tests/relay/test_client.py index 3fd9fc7..636ba4b 100755 --- a/tests/relay/test_client.py +++ b/tests/relay/test_client.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/relay/test_commands.py b/tests/relay/test_commands.py index 218cb30..7780cc3 100755 --- a/tests/relay/test_commands.py +++ b/tests/relay/test_commands.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/relay/test_diffs.py b/tests/relay/test_diffs.py index 3bb8ab0..32c8f7e 100755 --- a/tests/relay/test_diffs.py +++ b/tests/relay/test_diffs.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/relay/test_onion.py b/tests/relay/test_onion.py index 550e786..cb1e826 100755 --- a/tests/relay/test_onion.py +++ b/tests/relay/test_onion.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/relay/test_server.py b/tests/relay/test_server.py index 7bf29c4..62de495 100755 --- a/tests/relay/test_server.py +++ b/tests/relay/test_server.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/relay/test_tcb.py b/tests/relay/test_tcb.py index cf8c3a3..c45e4c1 100755 --- a/tests/relay/test_tcb.py +++ b/tests/relay/test_tcb.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/test_dd.py b/tests/test_dd.py index e08d354..d23e6c0 100755 --- a/tests/test_dd.py +++ b/tests/test_dd.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/transmitter/__init__.py b/tests/transmitter/__init__.py index c46a8ee..0d012d5 100755 --- a/tests/transmitter/__init__.py +++ b/tests/transmitter/__init__.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/transmitter/test_commands.py b/tests/transmitter/test_commands.py index 38992b7..52fb463 100755 --- a/tests/transmitter/test_commands.py +++ b/tests/transmitter/test_commands.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. @@ -284,8 +284,7 @@ def test_user_abort_raises_soft_error(self, *_: Any) -> None: @mock.patch('src.common.db_masterkey.MIN_KEY_DERIVATION_TIME', 0.1) @mock.patch('src.common.db_masterkey.MAX_KEY_DERIVATION_TIME', 1.0) - @mock.patch('os.popen', return_value=MagicMock( - read=MagicMock(return_value=MagicMock(splitlines=MagicMock(return_value=["MemAvailable 10240"]))))) + @mock.patch('src.common.db_masterkey.MasterKey.get_available_memory', return_value=10240) @mock.patch("multiprocessing.cpu_count", return_value=1) @mock.patch('time.sleep', return_value=None) @mock.patch('builtins.input', return_value='Yes') @@ -295,10 +294,9 @@ def test_keyboard_interrupt_raises_soft_error(self, *_: Any) -> None: self.assert_se("Authentication aborted.", log_command, UserInput('export'), *self.args) - @mock.patch('src.common.db_masterkey.MIN_KEY_DERIVATION_TIME', 0.1) - @mock.patch('src.common.db_masterkey.MAX_KEY_DERIVATION_TIME', 1.0) - @mock.patch('os.popen', return_value=MagicMock( - read=MagicMock(return_value=MagicMock(splitlines=MagicMock(return_value=["MemAvailable 10240"]))))) + @mock.patch('src.common.db_masterkey.MIN_KEY_DERIVATION_TIME', 0.01) + @mock.patch('src.common.db_masterkey.MAX_KEY_DERIVATION_TIME', 0.1) + @mock.patch('src.common.db_masterkey.MasterKey.get_available_memory', return_value=10240) @mock.patch("multiprocessing.cpu_count", return_value=1) @mock.patch("getpass.getpass", side_effect=3*['test_password'] + ['invalid_password'] + ['test_password']) @mock.patch('time.sleep', return_value=None) @@ -553,7 +551,7 @@ def test_invalid_target_sys_raises_soft_error(self, _: Any) -> None: change_master_key, UserInput("passwd t"), *self.args) @mock.patch('src.common.db_keys.KeyList', return_value=MagicMock()) - @mock.patch('os.popen', return_value=MagicMock(read=MagicMock(return_value='foo\nMemAvailable 200'))) + @mock.patch('src.common.db_masterkey.MasterKey.get_available_memory', return_value=200) @mock.patch('getpass.getpass', side_effect=['test_password', 'a', 'a']) @mock.patch('time.sleep', return_value=None) @mock.patch('src.common.db_masterkey.MIN_KEY_DERIVATION_TIME', 0.01) @@ -577,7 +575,7 @@ def mock_sender_loop() -> None: p.terminate() @mock.patch('src.common.db_keys.KeyList', return_value=MagicMock()) - @mock.patch('os.popen', return_value=MagicMock(read=MagicMock(return_value='foo\nMemAvailable 200'))) + @mock.patch('src.common.db_masterkey.MasterKey.get_available_memory', return_value=10240) @mock.patch('getpass.getpass', side_effect=['test_password', 'a', 'a']) @mock.patch('time.sleep', return_value=None) @mock.patch('src.common.db_masterkey.MIN_KEY_DERIVATION_TIME', 0.01) @@ -633,7 +631,7 @@ def mock_sender_loop() -> None: self.onion_service.database.replace_database = orig_os_rd @mock.patch('src.common.db_keys.KeyList', return_value=MagicMock()) - @mock.patch('os.popen', return_value=MagicMock(read=MagicMock(return_value='foo\nMemAvailable 200'))) + @mock.patch('src.common.db_masterkey.MasterKey.get_available_memory', return_value=200) @mock.patch('getpass.getpass', side_effect=['test_password', 'a', 'a']) @mock.patch('time.sleep', return_value=None) @mock.patch('src.common.db_masterkey.MIN_KEY_DERIVATION_TIME', 0.01) diff --git a/tests/transmitter/test_commands_g.py b/tests/transmitter/test_commands_g.py index f36a687..e32f6ff 100755 --- a/tests/transmitter/test_commands_g.py +++ b/tests/transmitter/test_commands_g.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/transmitter/test_contact.py b/tests/transmitter/test_contact.py index 20ddde2..dbe7a0a 100755 --- a/tests/transmitter/test_contact.py +++ b/tests/transmitter/test_contact.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/transmitter/test_files.py b/tests/transmitter/test_files.py index dc79bff..7d15b95 100755 --- a/tests/transmitter/test_files.py +++ b/tests/transmitter/test_files.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/transmitter/test_input_loop.py b/tests/transmitter/test_input_loop.py index 220f123..c0fee2d 100755 --- a/tests/transmitter/test_input_loop.py +++ b/tests/transmitter/test_input_loop.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/transmitter/test_key_exchanges.py b/tests/transmitter/test_key_exchanges.py index 309e3f2..df2db71 100755 --- a/tests/transmitter/test_key_exchanges.py +++ b/tests/transmitter/test_key_exchanges.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/transmitter/test_packet.py b/tests/transmitter/test_packet.py index 61cf3bc..d7ae241 100755 --- a/tests/transmitter/test_packet.py +++ b/tests/transmitter/test_packet.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/transmitter/test_sender_loop.py b/tests/transmitter/test_sender_loop.py index 2d30411..a8226e4 100755 --- a/tests/transmitter/test_sender_loop.py +++ b/tests/transmitter/test_sender_loop.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/transmitter/test_traffic_masking.py b/tests/transmitter/test_traffic_masking.py index 979bc00..058b557 100755 --- a/tests/transmitter/test_traffic_masking.py +++ b/tests/transmitter/test_traffic_masking.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/transmitter/test_user_input.py b/tests/transmitter/test_user_input.py index 0068c6f..1c30cbe 100755 --- a/tests/transmitter/test_user_input.py +++ b/tests/transmitter/test_user_input.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/transmitter/test_window_mock.py b/tests/transmitter/test_window_mock.py index b450fb4..8142e9e 100755 --- a/tests/transmitter/test_window_mock.py +++ b/tests/transmitter/test_window_mock.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/transmitter/test_windows.py b/tests/transmitter/test_windows.py index ba1a723..04fadc7 100755 --- a/tests/transmitter/test_windows.py +++ b/tests/transmitter/test_windows.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tests/utils.py b/tests/utils.py index b761d73..5b7ec34 100755 --- a/tests/utils.py +++ b/tests/utils.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. diff --git a/tfc.py b/tfc.py index 4030fc6..fb59b0b 100755 --- a/tfc.py +++ b/tfc.py @@ -3,7 +3,7 @@ """ TFC - Onion-routed, endpoint secure messaging system -Copyright (C) 2013-2023 Markus Ottela +Copyright (C) 2013-2024 Markus Ottela This file is part of TFC. @@ -25,7 +25,6 @@ from multiprocessing import Process, Queue from typing import Any, Dict -from src.common.crypto import check_kernel_version from src.common.database import MessageLog from src.common.db_contacts import ContactList from src.common.db_groups import GroupList @@ -97,8 +96,6 @@ def main() -> None: operation, local_test, data_diode_sockets, qubes, _ = process_arguments() - check_kernel_version() - print_title(operation) master_key = MasterKey( operation, local_test) diff --git a/tfc.yml b/tfc.yml index 34b6252..fe16766 100644 --- a/tfc.yml +++ b/tfc.yml @@ -1,6 +1,6 @@ --- - apparmor-profiles: - - '/opt/tfc/venv_relay/bin/python3.9' + - '/usr/bin/python3.11' users: - 'amnesia' commands: diff --git a/uninstall.sh b/uninstall.sh index 37e3aa5..7086fc8 100755 --- a/uninstall.sh +++ b/uninstall.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # TFC - Onion-routed, endpoint secure messaging system -# Copyright (C) 2013-2023 Markus Ottela +# Copyright (C) 2013-2024 Markus Ottela # # This file is part of TFC. #