From 34b4c969d492265d63351a2172cd46fe3add8a4d Mon Sep 17 00:00:00 2001 From: Iliyan Angelov Date: Wed, 19 Nov 2025 12:27:01 +0200 Subject: [PATCH] updates --- .../REQUESTED => =1.0.1} | 0 .../08e2f866e131_add_mfa_fields_to_users.py | 31 + ...31_add_mfa_fields_to_users.cpython-312.pyc | Bin 0 -> 1591 bytes ..._add_paypal_payment_method.cpython-312.pyc | Bin 0 -> 1501 bytes .../d9aff6c5f0d4_add_paypal_payment_method.py | 51 + Backend/requirements.txt | 5 +- .../__pycache__/settings.cpython-312.pyc | Bin 6977 -> 7272 bytes Backend/src/config/settings.py | 5 + .../__pycache__/payment.cpython-312.pyc | Bin 2828 -> 2850 bytes .../models/__pycache__/user.cpython-312.pyc | Bin 2239 -> 2399 bytes Backend/src/models/payment.py | 1 + Backend/src/models/user.py | 3 + .../__pycache__/auth_routes.cpython-312.pyc | Bin 8910 -> 18782 bytes .../booking_routes.cpython-312.pyc | Bin 37523 -> 41140 bytes .../payment_routes.cpython-312.pyc | Bin 26081 -> 32657 bytes .../__pycache__/room_routes.cpython-312.pyc | Bin 35892 -> 37575 bytes .../system_settings_routes.cpython-312.pyc | Bin 41337 -> 46640 bytes Backend/src/routes/auth_routes.py | 267 +- Backend/src/routes/booking_routes.py | 106 +- Backend/src/routes/payment_routes.py | 185 + Backend/src/routes/room_routes.py | 69 +- Backend/src/routes/system_settings_routes.py | 156 + .../schemas/__pycache__/auth.cpython-312.pyc | Bin 5651 -> 6596 bytes Backend/src/schemas/auth.py | 21 + .../__pycache__/auth_service.cpython-312.pyc | Bin 21139 -> 21623 bytes .../invoice_service.cpython-312.pyc | Bin 18819 -> 18997 bytes .../__pycache__/mfa_service.cpython-312.pyc | Bin 0 -> 11531 bytes .../paypal_service.cpython-312.pyc | Bin 0 -> 17160 bytes Backend/src/services/auth_service.py | 19 +- Backend/src/services/invoice_service.py | 8 +- Backend/src/services/mfa_service.py | 299 ++ Backend/src/services/paypal_service.py | 429 +++ .../email_templates.cpython-312.pyc | Bin 29773 -> 29773 bytes Backend/venv/bin/prichunkpng | 266 ++ Backend/venv/bin/pricolpng | 81 + Backend/venv/bin/priditherpng | 254 ++ Backend/venv/bin/priforgepng | 275 ++ Backend/venv/bin/prigreypng | 72 + Backend/venv/bin/pripalpng | 111 + Backend/venv/bin/pripamtopng | 355 ++ Backend/venv/bin/priplan9topng | 540 +++ Backend/venv/bin/pripnglsch | 33 + Backend/venv/bin/pripngtopam | 101 + Backend/venv/bin/prirowpng | 71 + Backend/venv/bin/priweavepng | 215 ++ Backend/venv/bin/qr | 7 + .../python3.12/site-packages/OpenSSL/SSL.py | 3239 +++++++++++++++++ .../site-packages/OpenSSL/__init__.py | 31 + .../OpenSSL/__pycache__/SSL.cpython-312.pyc | Bin 0 -> 137342 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 611 bytes .../OpenSSL/__pycache__/_util.cpython-312.pyc | Bin 0 -> 4982 bytes .../__pycache__/crypto.cpython-312.pyc | Bin 0 -> 104888 bytes .../OpenSSL/__pycache__/debug.cpython-312.pyc | Bin 0 -> 1728 bytes .../OpenSSL/__pycache__/rand.cpython-312.pyc | Bin 0 -> 1850 bytes .../__pycache__/version.cpython-312.pyc | Bin 0 -> 712 bytes .../python3.12/site-packages/OpenSSL/_util.py | 129 + .../site-packages/OpenSSL/crypto.py | 2450 +++++++++++++ .../python3.12/site-packages/OpenSSL/debug.py | 40 + .../python3.12/site-packages/OpenSSL/py.typed | 0 .../python3.12/site-packages/OpenSSL/rand.py | 50 + .../site-packages/OpenSSL/version.py | 28 + .../__pycache__/png.cpython-312.pyc | Bin 0 -> 87963 bytes .../cryptography-41.0.7.dist-info/RECORD | 173 - .../cryptography-41.0.7.dist-info/WHEEL | 5 - .../top_level.txt | 1 - .../INSTALLER | 0 .../METADATA | 98 +- .../cryptography-46.0.3.dist-info/RECORD | 180 + .../cryptography-46.0.3.dist-info/WHEEL | 5 + .../licenses}/LICENSE | 0 .../licenses}/LICENSE.APACHE | 0 .../licenses}/LICENSE.BSD | 0 .../site-packages/cryptography/__about__.py | 6 +- .../site-packages/cryptography/__init__.py | 2 +- .../__pycache__/__about__.cpython-312.pyc | Bin 467 -> 467 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 394 -> 377 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 2449 -> 2391 bytes .../__pycache__/fernet.cpython-312.pyc | Bin 10895 -> 11141 bytes .../__pycache__/utils.cpython-312.pyc | Bin 6658 -> 6567 bytes .../site-packages/cryptography/exceptions.py | 6 +- .../site-packages/cryptography/fernet.py | 35 +- .../__pycache__/__init__.cpython-312.pyc | Bin 258 -> 258 bytes .../hazmat/__pycache__/_oid.cpython-312.pyc | Bin 17566 -> 21048 bytes .../site-packages/cryptography/hazmat/_oid.py | 71 +- .../cryptography/hazmat/asn1/__init__.py | 10 + .../asn1/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 337 bytes .../asn1/__pycache__/asn1.cpython-312.pyc | Bin 0 -> 3632 bytes .../cryptography/hazmat/asn1/asn1.py | 116 + .../__pycache__/__init__.cpython-312.pyc | Bin 508 -> 508 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 374 -> 374 bytes .../openssl/__pycache__/aead.cpython-312.pyc | Bin 19679 -> 0 bytes .../__pycache__/backend.cpython-312.pyc | Bin 96681 -> 13516 bytes .../__pycache__/ciphers.cpython-312.pyc | Bin 14751 -> 0 bytes .../openssl/__pycache__/cmac.cpython-312.pyc | Bin 5309 -> 0 bytes .../__pycache__/decode_asn1.cpython-312.pyc | Bin 1201 -> 0 bytes .../openssl/__pycache__/ec.cpython-312.pyc | Bin 17724 -> 0 bytes .../openssl/__pycache__/rsa.cpython-312.pyc | Bin 28875 -> 0 bytes .../openssl/__pycache__/utils.cpython-312.pyc | Bin 3438 -> 0 bytes .../hazmat/backends/openssl/aead.py | 527 --- .../hazmat/backends/openssl/backend.py | 1784 +-------- .../hazmat/backends/openssl/ciphers.py | 281 -- .../hazmat/backends/openssl/cmac.py | 89 - .../hazmat/backends/openssl/decode_asn1.py | 32 - .../hazmat/backends/openssl/ec.py | 328 -- .../hazmat/backends/openssl/rsa.py | 599 --- .../hazmat/backends/openssl/utils.py | 63 - .../__pycache__/__init__.cpython-312.pyc | Bin 211 -> 211 bytes .../hazmat/bindings/_rust.abi3.so | Bin 13787648 -> 12955672 bytes .../hazmat/bindings/_rust/__init__.pyi | 43 +- .../hazmat/bindings/_rust/asn1.pyi | 11 +- .../bindings/_rust/declarative_asn1.pyi | 32 + .../hazmat/bindings/_rust/ocsp.pyi | 126 +- .../bindings/_rust/openssl/__init__.pyi | 40 +- .../hazmat/bindings/_rust/openssl/aead.pyi | 107 + .../hazmat/bindings/_rust/openssl/ciphers.pyi | 38 + .../hazmat/bindings/_rust/openssl/cmac.pyi | 18 + .../hazmat/bindings/_rust/openssl/dh.pyi | 47 +- .../hazmat/bindings/_rust/openssl/dsa.pyi | 39 +- .../hazmat/bindings/_rust/openssl/ec.pyi | 52 + .../hazmat/bindings/_rust/openssl/ed25519.pyi | 5 +- .../hazmat/bindings/_rust/openssl/ed448.pyi | 5 +- .../hazmat/bindings/_rust/openssl/hashes.pyi | 13 +- .../hazmat/bindings/_rust/openssl/hmac.pyi | 5 +- .../hazmat/bindings/_rust/openssl/kdf.pyi | 70 +- .../hazmat/bindings/_rust/openssl/keys.pyi | 34 + .../bindings/_rust/openssl/poly1305.pyi | 10 +- .../hazmat/bindings/_rust/openssl/rsa.pyi | 55 + .../hazmat/bindings/_rust/openssl/x25519.pyi | 5 +- .../hazmat/bindings/_rust/openssl/x448.pyi | 5 +- .../hazmat/bindings/_rust/pkcs12.pyi | 52 + .../hazmat/bindings/_rust/pkcs7.pyi | 41 +- .../hazmat/bindings/_rust/test_support.pyi | 23 + .../hazmat/bindings/_rust/x509.pyi | 291 +- .../__pycache__/__init__.cpython-312.pyc | Bin 219 -> 219 bytes .../__pycache__/_conditional.cpython-312.pyc | Bin 9321 -> 5795 bytes .../__pycache__/binding.cpython-312.pyc | Bin 8038 -> 5620 bytes .../hazmat/bindings/openssl/_conditional.py | 194 +- .../hazmat/bindings/openssl/binding.py | 88 +- .../cryptography/hazmat/decrepit/__init__.py | 5 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 262 bytes .../hazmat/decrepit/ciphers/__init__.py | 5 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 270 bytes .../__pycache__/algorithms.cpython-312.pyc | Bin 0 -> 4802 bytes .../hazmat/decrepit/ciphers/algorithms.py | 112 + .../__pycache__/__init__.cpython-312.pyc | Bin 213 -> 213 bytes .../__pycache__/_asymmetric.cpython-312.pyc | Bin 819 -> 819 bytes .../_cipheralgorithm.cpython-312.pyc | Bin 1922 -> 2499 bytes .../_serialization.cpython-312.pyc | Bin 7094 -> 7043 bytes .../__pycache__/cmac.cpython-312.pyc | Bin 3074 -> 441 bytes .../__pycache__/constant_time.cpython-312.pyc | Bin 679 -> 679 bytes .../__pycache__/hashes.cpython-312.pyc | Bin 8187 -> 8283 bytes .../__pycache__/hmac.cpython-312.pyc | Bin 600 -> 600 bytes .../__pycache__/keywrap.cpython-312.pyc | Bin 7498 -> 7477 bytes .../__pycache__/padding.cpython-312.pyc | Bin 9206 -> 3264 bytes .../__pycache__/poly1305.cpython-312.pyc | Bin 453 -> 453 bytes .../hazmat/primitives/_cipheralgorithm.py | 21 +- .../hazmat/primitives/_serialization.py | 16 +- .../__pycache__/__init__.cpython-312.pyc | Bin 224 -> 224 bytes .../asymmetric/__pycache__/dh.cpython-312.pyc | Bin 11427 -> 6086 bytes .../__pycache__/dsa.cpython-312.pyc | Bin 13382 -> 6932 bytes .../asymmetric/__pycache__/ec.cpython-312.pyc | Bin 19792 -> 17840 bytes .../__pycache__/ed25519.cpython-312.pyc | Bin 5190 -> 5620 bytes .../__pycache__/ed448.cpython-312.pyc | Bin 5146 -> 5663 bytes .../__pycache__/padding.cpython-312.pyc | Bin 4391 -> 4834 bytes .../__pycache__/rsa.cpython-312.pyc | Bin 16369 -> 10449 bytes .../__pycache__/types.cpython-312.pyc | Bin 3173 -> 3173 bytes .../__pycache__/utils.cpython-312.pyc | Bin 1338 -> 1338 bytes .../__pycache__/x25519.cpython-312.pyc | Bin 4979 -> 5417 bytes .../__pycache__/x448.cpython-312.pyc | Bin 4940 -> 5458 bytes .../hazmat/primitives/asymmetric/dh.py | 146 +- .../hazmat/primitives/asymmetric/dsa.py | 184 +- .../hazmat/primitives/asymmetric/ec.py | 245 +- .../hazmat/primitives/asymmetric/ed25519.py | 31 +- .../hazmat/primitives/asymmetric/ed448.py | 26 +- .../hazmat/primitives/asymmetric/padding.py | 23 +- .../hazmat/primitives/asymmetric/rsa.py | 286 +- .../hazmat/primitives/asymmetric/x25519.py | 31 +- .../hazmat/primitives/asymmetric/x448.py | 22 +- .../hazmat/primitives/ciphers/__init__.py | 8 +- .../__pycache__/__init__.cpython-312.pyc | Bin 652 -> 652 bytes .../ciphers/__pycache__/aead.cpython-312.pyc | Bin 15084 -> 842 bytes .../__pycache__/algorithms.cpython-312.pyc | Bin 8670 -> 4918 bytes .../ciphers/__pycache__/base.cpython-312.pyc | Bin 12983 -> 7099 bytes .../ciphers/__pycache__/modes.cpython-312.pyc | Bin 11936 -> 11811 bytes .../hazmat/primitives/ciphers/aead.py | 389 +- .../hazmat/primitives/ciphers/algorithms.py | 170 +- .../hazmat/primitives/ciphers/base.py | 169 +- .../hazmat/primitives/ciphers/modes.py | 62 +- .../cryptography/hazmat/primitives/cmac.py | 61 +- .../cryptography/hazmat/primitives/hashes.py | 33 +- .../kdf/__pycache__/__init__.cpython-312.pyc | Bin 1260 -> 1260 bytes .../kdf/__pycache__/argon2.cpython-312.pyc | Bin 0 -> 594 bytes .../kdf/__pycache__/concatkdf.cpython-312.pyc | Bin 5594 -> 5635 bytes .../kdf/__pycache__/hkdf.cpython-312.pyc | Bin 4821 -> 724 bytes .../kdf/__pycache__/kbkdf.cpython-312.pyc | Bin 11181 -> 11314 bytes .../kdf/__pycache__/pbkdf2.cpython-312.pyc | Bin 2787 -> 2739 bytes .../kdf/__pycache__/scrypt.cpython-312.pyc | Bin 3140 -> 680 bytes .../kdf/__pycache__/x963kdf.cpython-312.pyc | Bin 3126 -> 3125 bytes .../hazmat/primitives/kdf/argon2.py | 13 + .../hazmat/primitives/kdf/concatkdf.py | 17 +- .../hazmat/primitives/kdf/hkdf.py | 97 +- .../hazmat/primitives/kdf/kbkdf.py | 52 +- .../hazmat/primitives/kdf/pbkdf2.py | 6 +- .../hazmat/primitives/kdf/scrypt.py | 67 +- .../hazmat/primitives/kdf/x963kdf.py | 4 +- .../cryptography/hazmat/primitives/keywrap.py | 8 +- .../cryptography/hazmat/primitives/padding.py | 182 +- .../primitives/serialization/__init__.py | 32 +- .../__pycache__/__init__.cpython-312.pyc | Bin 1352 -> 1392 bytes .../__pycache__/base.cpython-312.pyc | Bin 2227 -> 857 bytes .../__pycache__/pkcs12.cpython-312.pyc | Bin 9435 -> 6641 bytes .../__pycache__/pkcs7.cpython-312.pyc | Bin 9769 -> 17290 bytes .../__pycache__/ssh.cpython-312.pyc | Bin 63910 -> 67207 bytes .../hazmat/primitives/serialization/base.py | 73 +- .../hazmat/primitives/serialization/pkcs12.py | 125 +- .../hazmat/primitives/serialization/pkcs7.py | 230 +- .../hazmat/primitives/serialization/ssh.py | 279 +- .../__pycache__/__init__.cpython-312.pyc | Bin 466 -> 466 bytes .../__pycache__/hotp.cpython-312.pyc | Bin 4818 -> 5166 bytes .../__pycache__/totp.cpython-312.pyc | Bin 2313 -> 2525 bytes .../hazmat/primitives/twofactor/hotp.py | 19 +- .../hazmat/primitives/twofactor/totp.py | 12 +- .../site-packages/cryptography/utils.py | 39 +- .../cryptography/x509/__init__.py | 157 +- .../x509/__pycache__/__init__.cpython-312.pyc | Bin 8129 -> 8455 bytes .../x509/__pycache__/base.cpython-312.pyc | Bin 46486 -> 33525 bytes .../certificate_transparency.cpython-312.pyc | Bin 4134 -> 1421 bytes .../__pycache__/extensions.cpython-312.pyc | Bin 96864 -> 112578 bytes .../__pycache__/general_name.cpython-312.pyc | Bin 13129 -> 13100 bytes .../x509/__pycache__/name.cpython-312.pyc | Bin 22837 -> 23233 bytes .../x509/__pycache__/ocsp.cpython-312.pyc | Bin 24317 -> 14992 bytes .../x509/__pycache__/oid.cpython-312.pyc | Bin 705 -> 774 bytes .../__pycache__/verification.cpython-312.pyc | Bin 0 -> 1020 bytes .../site-packages/cryptography/x509/base.py | 583 +-- .../x509/certificate_transparency.py | 64 +- .../cryptography/x509/extensions.py | 877 +++-- .../cryptography/x509/general_name.py | 4 +- .../site-packages/cryptography/x509/name.py | 110 +- .../site-packages/cryptography/x509/ocsp.py | 417 +-- .../site-packages/cryptography/x509/oid.py | 4 + .../cryptography/x509/verification.py | 34 + .../INSTALLER | 1 + .../LICENSE | 201 + .../METADATA | 16 + .../RECORD | 55 + .../REQUESTED | 0 .../WHEEL | 5 + .../top_level.txt | 1 + .../paypalcheckoutsdk/__init__.py | 3 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 280 bytes .../__pycache__/config.cpython-312.pyc | Bin 0 -> 925 bytes .../site-packages/paypalcheckoutsdk/config.py | 16 + .../paypalcheckoutsdk/core/__init__.py | 7 + .../core/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 526 bytes .../__pycache__/access_token.cpython-312.pyc | Bin 0 -> 1262 bytes .../access_token_request.cpython-312.pyc | Bin 0 -> 1016 bytes .../__pycache__/environment.cpython-312.pyc | Bin 0 -> 2446 bytes .../paypal_http_client.cpython-312.pyc | Bin 0 -> 3052 bytes .../refresh_token_request.cpython-312.pyc | Bin 0 -> 903 bytes .../core/__pycache__/util.cpython-312.pyc | Bin 0 -> 430 bytes .../paypalcheckoutsdk/core/access_token.py | 16 + .../core/access_token_request.py | 16 + .../paypalcheckoutsdk/core/environment.py | 38 + .../core/paypal_http_client.py | 45 + .../core/refresh_token_request.py | 13 + .../paypalcheckoutsdk/core/util.py | 4 + .../paypalcheckoutsdk/orders/__init__.py | 7 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 582 bytes .../orders_authorize_request.cpython-312.pyc | Bin 0 -> 2098 bytes .../orders_capture_request.cpython-312.pyc | Bin 0 -> 2040 bytes .../orders_create_request.cpython-312.pyc | Bin 0 -> 1617 bytes .../orders_get_request.cpython-312.pyc | Bin 0 -> 1106 bytes .../orders_patch_request.cpython-312.pyc | Bin 0 -> 2423 bytes .../orders_validate_request.cpython-312.pyc | Bin 0 -> 1640 bytes .../orders/orders_authorize_request.py | 38 + .../orders/orders_capture_request.py | 38 + .../orders/orders_create_request.py | 36 + .../orders/orders_get_request.py | 25 + .../orders/orders_patch_request.py | 29 + .../orders/orders_validate_request.py | 32 + .../paypalcheckoutsdk/payments/__init__.py | 8 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 689 bytes ...orizations_capture_request.cpython-312.pyc | Bin 0 -> 1863 bytes ...authorizations_get_request.cpython-312.pyc | Bin 0 -> 1186 bytes ...ations_reauthorize_request.cpython-312.pyc | Bin 0 -> 2565 bytes ...uthorizations_void_request.cpython-312.pyc | Bin 0 -> 1272 bytes .../captures_get_request.cpython-312.pyc | Bin 0 -> 1133 bytes .../captures_refund_request.cpython-312.pyc | Bin 0 -> 1939 bytes .../refunds_get_request.cpython-312.pyc | Bin 0 -> 1115 bytes .../authorizations_capture_request.py | 36 + .../payments/authorizations_get_request.py | 25 + .../authorizations_reauthorize_request.py | 35 + .../payments/authorizations_void_request.py | 25 + .../payments/captures_get_request.py | 25 + .../payments/captures_refund_request.py | 35 + .../payments/refunds_get_request.py | 25 + .../paypalhttp-1.0.1.dist-info/INSTALLER | 1 + .../paypalhttp-1.0.1.dist-info/LICENSE | 22 + .../paypalhttp-1.0.1.dist-info/METADATA | 31 + .../paypalhttp-1.0.1.dist-info/RECORD | 36 + .../paypalhttp-1.0.1.dist-info/WHEEL | 5 + .../paypalhttp-1.0.1.dist-info/top_level.txt | 3 + .../site-packages/paypalhttp/__init__.py | 6 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 517 bytes .../__pycache__/encoder.cpython-312.pyc | Bin 0 -> 2775 bytes .../__pycache__/environment.cpython-312.pyc | Bin 0 -> 533 bytes .../__pycache__/file.cpython-312.pyc | Bin 0 -> 1858 bytes .../__pycache__/http_client.cpython-312.pyc | Bin 0 -> 4778 bytes .../__pycache__/http_error.cpython-312.pyc | Bin 0 -> 823 bytes .../__pycache__/http_response.cpython-312.pyc | Bin 0 -> 3003 bytes .../site-packages/paypalhttp/encoder.py | 54 + .../site-packages/paypalhttp/environment.py | 4 + .../site-packages/paypalhttp/file.py | 35 + .../site-packages/paypalhttp/http_client.py | 81 + .../site-packages/paypalhttp/http_error.py | 10 + .../site-packages/paypalhttp/http_response.py | 66 + .../paypalhttp/serializers/__init__.py | 5 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 570 bytes .../form_encoded_serializer.cpython-312.pyc | Bin 0 -> 1370 bytes .../__pycache__/form_part.cpython-312.pyc | Bin 0 -> 1046 bytes .../json_serializer.cpython-312.pyc | Bin 0 -> 935 bytes .../multipart_serializer.cpython-312.pyc | Bin 0 -> 5512 bytes .../text_serializer.cpython-312.pyc | Bin 0 -> 841 bytes .../serializers/form_encoded_serializer.py | 18 + .../paypalhttp/serializers/form_part.py | 8 + .../paypalhttp/serializers/json_serializer.py | 13 + .../serializers/multipart_serializer.py | 85 + .../paypalhttp/serializers/text_serializer.py | 10 + .../paypalhttp/testutils/__init__.py | 1 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 274 bytes .../__pycache__/testharness.cpython-312.pyc | Bin 0 -> 1600 bytes .../paypalhttp/testutils/testharness.py | 26 + .../venv/lib/python3.12/site-packages/png.py | 2372 ++++++++++++ .../pyopenssl-25.3.0.dist-info/INSTALLER | 1 + .../pyopenssl-25.3.0.dist-info/METADATA | 525 +++ .../pyopenssl-25.3.0.dist-info/RECORD | 21 + .../pyopenssl-25.3.0.dist-info/WHEEL | 5 + .../licenses/LICENSE | 202 + .../pyopenssl-25.3.0.dist-info/top_level.txt | 1 + .../pyotp-2.9.0.dist-info/INSTALLER | 1 + .../pyotp-2.9.0.dist-info/LICENSE | 21 + .../pyotp-2.9.0.dist-info/METADATA | 215 ++ .../pyotp-2.9.0.dist-info/RECORD | 24 + .../pyotp-2.9.0.dist-info/REQUESTED | 0 .../site-packages/pyotp-2.9.0.dist-info/WHEEL | 5 + .../pyotp-2.9.0.dist-info/top_level.txt | 1 + .../site-packages/pyotp/__init__.py | 110 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 4294 bytes .../pyotp/__pycache__/compat.cpython-312.pyc | Bin 0 -> 350 bytes .../pyotp/__pycache__/hotp.cpython-312.pyc | Bin 0 -> 3750 bytes .../pyotp/__pycache__/otp.cpython-312.pyc | Bin 0 -> 3454 bytes .../pyotp/__pycache__/totp.cpython-312.pyc | Bin 0 -> 5970 bytes .../pyotp/__pycache__/utils.cpython-312.pyc | Bin 0 -> 3725 bytes .../python3.12/site-packages/pyotp/compat.py | 7 + .../site-packages/pyotp/contrib/__init__.py | 1 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 234 bytes .../contrib/__pycache__/steam.cpython-312.pyc | Bin 0 -> 2171 bytes .../site-packages/pyotp/contrib/steam.py | 49 + .../python3.12/site-packages/pyotp/hotp.py | 83 + .../lib/python3.12/site-packages/pyotp/otp.py | 68 + .../python3.12/site-packages/pyotp/py.typed | 0 .../python3.12/site-packages/pyotp/totp.py | 119 + .../python3.12/site-packages/pyotp/utils.py | 88 + .../pypng-0.20220715.0.dist-info/INSTALLER | 1 + .../pypng-0.20220715.0.dist-info/LICENCE | 21 + .../pypng-0.20220715.0.dist-info/METADATA | 479 +++ .../pypng-0.20220715.0.dist-info/RECORD | 20 + .../pypng-0.20220715.0.dist-info/WHEEL | 5 + .../top_level.txt | 1 + .../qrcode-7.4.2.dist-info/INSTALLER | 1 + .../qrcode-7.4.2.dist-info/LICENSE | 48 + .../qrcode-7.4.2.dist-info/METADATA | 640 ++++ .../qrcode-7.4.2.dist-info/RECORD | 72 + .../qrcode-7.4.2.dist-info/REQUESTED | 0 .../qrcode-7.4.2.dist-info/WHEEL | 5 + .../qrcode-7.4.2.dist-info/entry_points.txt | 2 + .../qrcode-7.4.2.dist-info/top_level.txt | 1 + .../python3.12/site-packages/qrcode/LUT.py | 223 ++ .../site-packages/qrcode/__init__.py | 30 + .../qrcode/__pycache__/LUT.cpython-312.pyc | Bin 0 -> 1729 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1082 bytes .../qrcode/__pycache__/base.cpython-312.pyc | Bin 0 -> 9420 bytes .../console_scripts.cpython-312.pyc | Bin 0 -> 7965 bytes .../__pycache__/constants.cpython-312.pyc | Bin 0 -> 311 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 0 -> 385 bytes .../qrcode/__pycache__/main.cpython-312.pyc | Bin 0 -> 23067 bytes .../__pycache__/release.cpython-312.pyc | Bin 0 -> 2002 bytes .../qrcode/__pycache__/util.cpython-312.pyc | Bin 0 -> 22825 bytes .../python3.12/site-packages/qrcode/base.py | 313 ++ .../site-packages/qrcode/compat/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 196 bytes .../compat/__pycache__/etree.cpython-312.pyc | Bin 0 -> 362 bytes .../compat/__pycache__/pil.cpython-312.pyc | Bin 0 -> 424 bytes .../site-packages/qrcode/compat/etree.py | 4 + .../site-packages/qrcode/compat/pil.py | 12 + .../site-packages/qrcode/console_scripts.py | 179 + .../site-packages/qrcode/constants.py | 5 + .../site-packages/qrcode/exceptions.py | 2 + .../site-packages/qrcode/image/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 195 bytes .../image/__pycache__/base.cpython-312.pyc | Bin 0 -> 7861 bytes .../image/__pycache__/pil.cpython-312.pyc | Bin 0 -> 2541 bytes .../image/__pycache__/pure.cpython-312.pyc | Bin 0 -> 3033 bytes .../__pycache__/styledpil.cpython-312.pyc | Bin 0 -> 6427 bytes .../image/__pycache__/svg.cpython-312.pyc | Bin 0 -> 8665 bytes .../site-packages/qrcode/image/base.py | 164 + .../site-packages/qrcode/image/pil.py | 54 + .../site-packages/qrcode/image/pure.py | 54 + .../site-packages/qrcode/image/styledpil.py | 112 + .../qrcode/image/styles/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 202 bytes .../__pycache__/colormasks.cpython-312.pyc | Bin 0 -> 10591 bytes .../qrcode/image/styles/colormasks.py | 220 ++ .../image/styles/moduledrawers/__init__.py | 10 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 556 bytes .../__pycache__/base.cpython-312.pyc | Bin 0 -> 1829 bytes .../__pycache__/pil.cpython-312.pyc | Bin 0 -> 16590 bytes .../__pycache__/svg.cpython-312.pyc | Bin 0 -> 8644 bytes .../qrcode/image/styles/moduledrawers/base.py | 36 + .../qrcode/image/styles/moduledrawers/pil.py | 266 ++ .../qrcode/image/styles/moduledrawers/svg.py | 141 + .../site-packages/qrcode/image/svg.py | 179 + .../python3.12/site-packages/qrcode/main.py | 547 +++ .../site-packages/qrcode/release.py | 41 + .../site-packages/qrcode/tests/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 195 bytes .../__pycache__/test_example.cpython-312.pyc | Bin 0 -> 980 bytes .../__pycache__/test_qrcode.cpython-312.pyc | Bin 0 -> 35661 bytes .../test_qrcode_svg.cpython-312.pyc | Bin 0 -> 4297 bytes .../__pycache__/test_release.cpython-312.pyc | Bin 0 -> 3025 bytes .../__pycache__/test_script.cpython-312.pyc | Bin 0 -> 8533 bytes .../__pycache__/test_util.cpython-312.pyc | Bin 0 -> 1050 bytes .../qrcode/tests/test_example.py | 13 + .../site-packages/qrcode/tests/test_qrcode.py | 487 +++ .../qrcode/tests/test_qrcode_svg.py | 60 + .../qrcode/tests/test_release.py | 40 + .../site-packages/qrcode/tests/test_script.py | 105 + .../site-packages/qrcode/tests/test_util.py | 12 + .../python3.12/site-packages/qrcode/util.py | 586 +++ Backend/venv/share/man/man1/qr.1 | 50 + Frontend/package-lock.json | 45 + Frontend/package.json | 1 + Frontend/src/App.tsx | 10 + Frontend/src/components/layout/Header.tsx | 3 +- .../src/components/layout/SidebarAdmin.tsx | 45 +- .../payments/PayPalPaymentWrapper.tsx | 161 + .../payments/StripePaymentWrapper.tsx | 1 - .../src/pages/admin/BusinessDashboardPage.tsx | 1 + Frontend/src/pages/admin/DashboardPage.tsx | 44 +- .../src/pages/admin/PaymentManagementPage.tsx | 6 + Frontend/src/pages/admin/SettingsPage.tsx | 233 +- .../src/pages/auth/ForgotPasswordPage.tsx | 146 +- Frontend/src/pages/auth/LoginPage.tsx | 600 +-- Frontend/src/pages/auth/RegisterPage.tsx | 142 +- Frontend/src/pages/auth/ResetPasswordPage.tsx | 172 +- .../src/pages/customer/BookingDetailPage.tsx | 2 + Frontend/src/pages/customer/BookingPage.tsx | 102 + Frontend/src/pages/customer/DashboardPage.tsx | 2 + .../src/pages/customer/DepositPaymentPage.tsx | 18 +- .../src/pages/customer/PayPalCancelPage.tsx | 43 + .../src/pages/customer/PayPalReturnPage.tsx | 116 + Frontend/src/pages/customer/ProfilePage.tsx | 1007 +++-- Frontend/src/services/api/authService.ts | 70 + Frontend/src/services/api/bookingService.ts | 21 +- Frontend/src/services/api/paymentService.ts | 87 +- .../src/services/api/systemSettingsService.ts | 43 + Frontend/src/store/useAuthStore.ts | 98 +- Frontend/src/utils/imageUtils.ts | 27 + Frontend/src/validators/bookingValidator.ts | 4 +- 469 files changed, 26870 insertions(+), 8329 deletions(-) rename Backend/{venv/lib/python3.12/site-packages/cryptography-41.0.7.dist-info/REQUESTED => =1.0.1} (100%) create mode 100644 Backend/alembic/versions/08e2f866e131_add_mfa_fields_to_users.py create mode 100644 Backend/alembic/versions/__pycache__/08e2f866e131_add_mfa_fields_to_users.cpython-312.pyc create mode 100644 Backend/alembic/versions/__pycache__/d9aff6c5f0d4_add_paypal_payment_method.cpython-312.pyc create mode 100644 Backend/alembic/versions/d9aff6c5f0d4_add_paypal_payment_method.py create mode 100644 Backend/src/services/__pycache__/mfa_service.cpython-312.pyc create mode 100644 Backend/src/services/__pycache__/paypal_service.cpython-312.pyc create mode 100644 Backend/src/services/mfa_service.py create mode 100644 Backend/src/services/paypal_service.py create mode 100755 Backend/venv/bin/prichunkpng create mode 100755 Backend/venv/bin/pricolpng create mode 100755 Backend/venv/bin/priditherpng create mode 100755 Backend/venv/bin/priforgepng create mode 100755 Backend/venv/bin/prigreypng create mode 100755 Backend/venv/bin/pripalpng create mode 100755 Backend/venv/bin/pripamtopng create mode 100755 Backend/venv/bin/priplan9topng create mode 100755 Backend/venv/bin/pripnglsch create mode 100755 Backend/venv/bin/pripngtopam create mode 100755 Backend/venv/bin/prirowpng create mode 100755 Backend/venv/bin/priweavepng create mode 100755 Backend/venv/bin/qr create mode 100644 Backend/venv/lib/python3.12/site-packages/OpenSSL/SSL.py create mode 100644 Backend/venv/lib/python3.12/site-packages/OpenSSL/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/OpenSSL/__pycache__/SSL.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/OpenSSL/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/OpenSSL/__pycache__/_util.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/OpenSSL/__pycache__/crypto.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/OpenSSL/__pycache__/debug.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/OpenSSL/__pycache__/rand.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/OpenSSL/__pycache__/version.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/OpenSSL/_util.py create mode 100644 Backend/venv/lib/python3.12/site-packages/OpenSSL/crypto.py create mode 100644 Backend/venv/lib/python3.12/site-packages/OpenSSL/debug.py create mode 100644 Backend/venv/lib/python3.12/site-packages/OpenSSL/py.typed create mode 100644 Backend/venv/lib/python3.12/site-packages/OpenSSL/rand.py create mode 100644 Backend/venv/lib/python3.12/site-packages/OpenSSL/version.py create mode 100644 Backend/venv/lib/python3.12/site-packages/__pycache__/png.cpython-312.pyc delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography-41.0.7.dist-info/RECORD delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography-41.0.7.dist-info/WHEEL delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography-41.0.7.dist-info/top_level.txt rename Backend/venv/lib/python3.12/site-packages/{cryptography-41.0.7.dist-info => cryptography-46.0.3.dist-info}/INSTALLER (100%) rename Backend/venv/lib/python3.12/site-packages/{cryptography-41.0.7.dist-info => cryptography-46.0.3.dist-info}/METADATA (66%) create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography-46.0.3.dist-info/RECORD create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography-46.0.3.dist-info/WHEEL rename Backend/venv/lib/python3.12/site-packages/{cryptography-41.0.7.dist-info => cryptography-46.0.3.dist-info/licenses}/LICENSE (100%) rename Backend/venv/lib/python3.12/site-packages/{cryptography-41.0.7.dist-info => cryptography-46.0.3.dist-info/licenses}/LICENSE.APACHE (100%) rename Backend/venv/lib/python3.12/site-packages/{cryptography-41.0.7.dist-info => cryptography-46.0.3.dist-info/licenses}/LICENSE.BSD (100%) create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__pycache__/asn1.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/asn1/asn1.py delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/aead.cpython-312.pyc delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/cmac.cpython-312.pyc delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/decode_asn1.cpython-312.pyc delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/aead.py delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/ciphers.py delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/cmac.py delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/decode_asn1.py delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/ec.py delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/rsa.py delete mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/utils.py create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/declarative_asn1.pyi create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/aead.pyi create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/ec.pyi create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/keys.pyi create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/pkcs12.pyi create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/_rust/test_support.pyi create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/__pycache__/algorithms.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/decrepit/ciphers/algorithms.py create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/__pycache__/argon2.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/argon2.py create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/x509/__pycache__/verification.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/cryptography/x509/verification.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypal_checkout_serversdk-1.0.3.dist-info/INSTALLER create mode 100644 Backend/venv/lib/python3.12/site-packages/paypal_checkout_serversdk-1.0.3.dist-info/LICENSE create mode 100644 Backend/venv/lib/python3.12/site-packages/paypal_checkout_serversdk-1.0.3.dist-info/METADATA create mode 100644 Backend/venv/lib/python3.12/site-packages/paypal_checkout_serversdk-1.0.3.dist-info/RECORD create mode 100644 Backend/venv/lib/python3.12/site-packages/paypal_checkout_serversdk-1.0.3.dist-info/REQUESTED create mode 100644 Backend/venv/lib/python3.12/site-packages/paypal_checkout_serversdk-1.0.3.dist-info/WHEEL create mode 100644 Backend/venv/lib/python3.12/site-packages/paypal_checkout_serversdk-1.0.3.dist-info/top_level.txt create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/__pycache__/config.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/config.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/core/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/core/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/core/__pycache__/access_token.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/core/__pycache__/access_token_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/core/__pycache__/environment.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/core/__pycache__/paypal_http_client.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/core/__pycache__/refresh_token_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/core/__pycache__/util.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/core/access_token.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/core/access_token_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/core/environment.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/core/paypal_http_client.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/core/refresh_token_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/core/util.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/orders/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/orders/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/orders/__pycache__/orders_authorize_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/orders/__pycache__/orders_capture_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/orders/__pycache__/orders_create_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/orders/__pycache__/orders_get_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/orders/__pycache__/orders_patch_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/orders/__pycache__/orders_validate_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/orders/orders_authorize_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/orders/orders_capture_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/orders/orders_create_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/orders/orders_get_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/orders/orders_patch_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/orders/orders_validate_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/__pycache__/authorizations_capture_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/__pycache__/authorizations_get_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/__pycache__/authorizations_reauthorize_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/__pycache__/authorizations_void_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/__pycache__/captures_get_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/__pycache__/captures_refund_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/__pycache__/refunds_get_request.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/authorizations_capture_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/authorizations_get_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/authorizations_reauthorize_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/authorizations_void_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/captures_get_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/captures_refund_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalcheckoutsdk/payments/refunds_get_request.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp-1.0.1.dist-info/INSTALLER create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp-1.0.1.dist-info/LICENSE create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp-1.0.1.dist-info/METADATA create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp-1.0.1.dist-info/RECORD create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp-1.0.1.dist-info/WHEEL create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp-1.0.1.dist-info/top_level.txt create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/__pycache__/encoder.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/__pycache__/environment.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/__pycache__/file.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/__pycache__/http_client.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/__pycache__/http_error.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/__pycache__/http_response.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/encoder.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/environment.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/file.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/http_client.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/http_error.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/http_response.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/serializers/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/serializers/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/serializers/__pycache__/form_encoded_serializer.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/serializers/__pycache__/form_part.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/serializers/__pycache__/json_serializer.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/serializers/__pycache__/multipart_serializer.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/serializers/__pycache__/text_serializer.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/serializers/form_encoded_serializer.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/serializers/form_part.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/serializers/json_serializer.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/serializers/multipart_serializer.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/serializers/text_serializer.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/testutils/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/testutils/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/testutils/__pycache__/testharness.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/paypalhttp/testutils/testharness.py create mode 100644 Backend/venv/lib/python3.12/site-packages/png.py create mode 100644 Backend/venv/lib/python3.12/site-packages/pyopenssl-25.3.0.dist-info/INSTALLER create mode 100644 Backend/venv/lib/python3.12/site-packages/pyopenssl-25.3.0.dist-info/METADATA create mode 100644 Backend/venv/lib/python3.12/site-packages/pyopenssl-25.3.0.dist-info/RECORD create mode 100644 Backend/venv/lib/python3.12/site-packages/pyopenssl-25.3.0.dist-info/WHEEL create mode 100644 Backend/venv/lib/python3.12/site-packages/pyopenssl-25.3.0.dist-info/licenses/LICENSE create mode 100644 Backend/venv/lib/python3.12/site-packages/pyopenssl-25.3.0.dist-info/top_level.txt create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp-2.9.0.dist-info/INSTALLER create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp-2.9.0.dist-info/LICENSE create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp-2.9.0.dist-info/METADATA create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp-2.9.0.dist-info/RECORD create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp-2.9.0.dist-info/REQUESTED create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp-2.9.0.dist-info/WHEEL create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp-2.9.0.dist-info/top_level.txt create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/__pycache__/compat.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/__pycache__/hotp.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/__pycache__/otp.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/__pycache__/totp.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/__pycache__/utils.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/compat.py create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/contrib/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/contrib/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/contrib/__pycache__/steam.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/contrib/steam.py create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/hotp.py create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/otp.py create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/py.typed create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/totp.py create mode 100644 Backend/venv/lib/python3.12/site-packages/pyotp/utils.py create mode 100644 Backend/venv/lib/python3.12/site-packages/pypng-0.20220715.0.dist-info/INSTALLER create mode 100644 Backend/venv/lib/python3.12/site-packages/pypng-0.20220715.0.dist-info/LICENCE create mode 100644 Backend/venv/lib/python3.12/site-packages/pypng-0.20220715.0.dist-info/METADATA create mode 100644 Backend/venv/lib/python3.12/site-packages/pypng-0.20220715.0.dist-info/RECORD create mode 100644 Backend/venv/lib/python3.12/site-packages/pypng-0.20220715.0.dist-info/WHEEL create mode 100644 Backend/venv/lib/python3.12/site-packages/pypng-0.20220715.0.dist-info/top_level.txt create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode-7.4.2.dist-info/INSTALLER create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode-7.4.2.dist-info/LICENSE create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode-7.4.2.dist-info/METADATA create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode-7.4.2.dist-info/RECORD create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode-7.4.2.dist-info/REQUESTED create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode-7.4.2.dist-info/WHEEL create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode-7.4.2.dist-info/entry_points.txt create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode-7.4.2.dist-info/top_level.txt create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/LUT.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/__pycache__/LUT.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/__pycache__/base.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/__pycache__/console_scripts.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/__pycache__/constants.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/__pycache__/exceptions.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/__pycache__/main.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/__pycache__/release.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/__pycache__/util.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/base.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/compat/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/compat/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/compat/__pycache__/etree.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/compat/__pycache__/pil.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/compat/etree.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/compat/pil.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/console_scripts.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/constants.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/exceptions.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/__pycache__/base.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/__pycache__/pil.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/__pycache__/pure.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/__pycache__/styledpil.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/__pycache__/svg.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/base.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/pil.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/pure.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/styledpil.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/styles/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/styles/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/styles/__pycache__/colormasks.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/styles/colormasks.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/base.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/pil.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/svg.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/base.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/pil.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/svg.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/image/svg.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/main.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/release.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/tests/__init__.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/__init__.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_example.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode_svg.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_release.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_script.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_util.cpython-312.pyc create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/tests/test_example.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/tests/test_qrcode.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/tests/test_qrcode_svg.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/tests/test_release.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/tests/test_script.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/tests/test_util.py create mode 100644 Backend/venv/lib/python3.12/site-packages/qrcode/util.py create mode 100644 Backend/venv/share/man/man1/qr.1 create mode 100644 Frontend/src/components/payments/PayPalPaymentWrapper.tsx create mode 100644 Frontend/src/pages/customer/PayPalCancelPage.tsx create mode 100644 Frontend/src/pages/customer/PayPalReturnPage.tsx create mode 100644 Frontend/src/utils/imageUtils.ts diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography-41.0.7.dist-info/REQUESTED b/Backend/=1.0.1 similarity index 100% rename from Backend/venv/lib/python3.12/site-packages/cryptography-41.0.7.dist-info/REQUESTED rename to Backend/=1.0.1 diff --git a/Backend/alembic/versions/08e2f866e131_add_mfa_fields_to_users.py b/Backend/alembic/versions/08e2f866e131_add_mfa_fields_to_users.py new file mode 100644 index 00000000..0874374e --- /dev/null +++ b/Backend/alembic/versions/08e2f866e131_add_mfa_fields_to_users.py @@ -0,0 +1,31 @@ +"""add_mfa_fields_to_users + +Revision ID: 08e2f866e131 +Revises: add_badges_to_page_content +Create Date: 2025-11-19 11:13:30.376194 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '08e2f866e131' +down_revision = 'add_badges_to_page_content' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # Add MFA fields to users table + op.add_column('users', sa.Column('mfa_enabled', sa.Boolean(), nullable=False, server_default='0')) + op.add_column('users', sa.Column('mfa_secret', sa.String(255), nullable=True)) + op.add_column('users', sa.Column('mfa_backup_codes', sa.Text(), nullable=True)) + + +def downgrade() -> None: + # Remove MFA fields from users table + op.drop_column('users', 'mfa_backup_codes') + op.drop_column('users', 'mfa_secret') + op.drop_column('users', 'mfa_enabled') + diff --git a/Backend/alembic/versions/__pycache__/08e2f866e131_add_mfa_fields_to_users.cpython-312.pyc b/Backend/alembic/versions/__pycache__/08e2f866e131_add_mfa_fields_to_users.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..be1ff3d87b5f6a15a6cb81a46bda55d2f1e05414 GIT binary patch literal 1591 zcmb_cO>7fK6y8~nch{RZ3iQV`X(b=1&;rS3?UG;%aR?D=5wS#)lhtZj?~EOj^{zX+ zrljIvq*kre3%9mXrS^)<1%X7XB5{qxB?lv+DL1%qqe^?>(!SZXYd0!tt9GP$KRa*c zoA>5>`yiXuB^aN6@m79tDyDml#%(k>kwkM>W*D+Qjdgo6xf}RvQXF8=;dbE4E+3iE9Lyc zNm{6%TwJ79(MncmSk8;RHHS24yszyvsO<)RMEyuV!>AL{{0fM2zOYa@F=ttGRw-{; zWvf^&F3cB~7Om1dy8cWgV<0XE?Fye9$Kf+CKi?gcAXXWWP$OyYDiZaGKqlkTuu{Vh zpb3i7L-&$0v__i9W9!=J`_SqQ43Z-FX1a$Hw>LmS{}o*sLys9S#7#6&dxPwVb~Dox zS;P3>(DgC&$>i*D`A6=5iM=fu6BVA0>BA=kr>O7LJW9@Tv|z|w^E;j=KJY1E*k#IW zLhDY)i?}X=L+UabJ^Kv+Hw?r?@_bq>)EsxK(*|Y{8X77SIdff5!wtMn%ja_FaOF&5 ztII*)QOD=Xdc>N3gX0Z)CAuN)i8NkZG&h45H5>jFbA^UmQP4Ku4I=8z!LBWcHkSd4 z`owfR+Nw2O6D}!QAT-B$X}_dp=G)s`?X(-rA(R~gyjNg`TOhj9Q>=WpdTsUkk#7p$ zmcA~1_raazyXS75yM2D=#I8g7v$T)vkN3sAf2VM_bgT6J`t8#@EB)CEeZ00WWcTf* zdk635e#rg!#?D56cI_cvXRia^pSnXZH13Yi!T9^`Ao4$F6G{DxSUidarlc!Oh5N86 zAq3T!=ru!5o_B(o zC|2x#b-s^{k+=E~AC1ogPAWjT4)ZI<1XpdF1g>p!b@2KFriCARj^}RD);60K_!=Ah z7fJ|Im&+Jk#pCOea6n|;LDO>3k= z1VL&KJ^A<-ihqhHy;w#(>BU>6_2NOCNj5Z~f;VxN`F*e5Z}yw-H}ghS6~M-i7bmS@ z34l-B=nXMc_HQ%gB|tz2NI;@3IHE2JT#wihJ<4R%jyZ8X&U`UlLUCP25k0}Cf)Yr2 z64jGT%1owOk+kwKfCw24*lIwV3kSP_;ozX=Aw{{1*DT-iT4T52SwIYLpme1xV$8x!`++{77FJz|+liBgH{UZc!J%xU@eZJO#|f~NXYn_=}G5n;&Z{xb$IK_GOz3|4!a)N?TTI@BM54X_&R z3xw)w{8t|m>gNF<$NDnMzj;f19j+{Z7JJf>GT{q6d_G%Rn!l?p&CZqPwQx^;ZDFx^ z=jJ`_#$suCq173Uup6K%nbaG2vls ztV7$z0oVP2SPjgzZc9hgT6u9vD=(KyJ2ApHjmj%HFe;XdsDvzNV>6&p7dn_q_yIPX z0p1a4l*fHuo%X$wsd*00thf&{MeNrDuaUX!1=t>&^Srv{u4Lw*S;sEQuv|{XGBazK zaMJjh{&pIFq}h0*MWtqAg+PSKAY1Y%n|^^o8ypOP)WG(Y%`02i+QnTd`E=v)#(Qbx ztu*rL);sCUK^!EK+sdZ0Cju3T-y&i{*-L?hy3f7_{}pGp{yAq3nL;?(iOQf$0dj|Abb_$LiF1J5RQKU$3KE|dooC!Xv@2U ar`qc7;86zZP+QrL4+-kQ1zAu!X@3F>-EAQN literal 0 HcmV?d00001 diff --git a/Backend/alembic/versions/d9aff6c5f0d4_add_paypal_payment_method.py b/Backend/alembic/versions/d9aff6c5f0d4_add_paypal_payment_method.py new file mode 100644 index 00000000..b3798634 --- /dev/null +++ b/Backend/alembic/versions/d9aff6c5f0d4_add_paypal_payment_method.py @@ -0,0 +1,51 @@ +"""add_paypal_payment_method + +Revision ID: d9aff6c5f0d4 +Revises: 08e2f866e131 +Create Date: 2025-11-19 12:07:50.703320 + +""" +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + + +# revision identifiers, used by Alembic. +revision = 'd9aff6c5f0d4' +down_revision = '08e2f866e131' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # Note: MySQL ENUM modifications can be tricky. + # If payments table already has data with existing enum values, + # we need to preserve them when adding 'paypal' + + # For MySQL, we need to alter the ENUM column to include the new value + # Check if we're using MySQL + bind = op.get_bind() + if bind.dialect.name == 'mysql': + # Alter the ENUM column to include 'paypal' + # This preserves existing values and adds 'paypal' + op.execute( + "ALTER TABLE payments MODIFY COLUMN payment_method ENUM('cash', 'credit_card', 'debit_card', 'bank_transfer', 'e_wallet', 'stripe', 'paypal') NOT NULL" + ) + else: + # For other databases (PostgreSQL, SQLite), enum changes are handled differently + # For SQLite, this might not be needed as it doesn't enforce enum constraints + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + # Remove 'paypal' from the ENUM (be careful if there are existing paypal payments) + bind = op.get_bind() + if bind.dialect.name == 'mysql': + # First, check if there are any paypal payments - if so, this will fail + # In production, you'd want to migrate existing paypal payments first + op.execute( + "ALTER TABLE payments MODIFY COLUMN payment_method ENUM('cash', 'credit_card', 'debit_card', 'bank_transfer', 'e_wallet', 'stripe') NOT NULL" + ) + # ### end Alembic commands ### + diff --git a/Backend/requirements.txt b/Backend/requirements.txt index f805fe39..48b60df4 100644 --- a/Backend/requirements.txt +++ b/Backend/requirements.txt @@ -3,7 +3,7 @@ uvicorn[standard]==0.24.0 python-dotenv==1.0.0 sqlalchemy==2.0.23 pymysql==1.1.0 -cryptography==41.0.7 +cryptography>=41.0.7 python-jose[cryptography]==3.3.0 bcrypt==4.1.2 python-multipart==0.0.6 @@ -17,6 +17,9 @@ aiosmtplib==3.0.1 jinja2==3.1.2 alembic==1.12.1 stripe>=13.2.0 +paypal-checkout-serversdk>=1.0.3 +pyotp==2.9.0 +qrcode[pil]==7.4.2 # Enterprise features (optional but recommended) # redis==5.0.1 # Uncomment if using Redis caching diff --git a/Backend/src/config/__pycache__/settings.cpython-312.pyc b/Backend/src/config/__pycache__/settings.cpython-312.pyc index ed6ad98ba675291f9a81bb6233738b303fa32e93..0e678cda557bfaa3512ac6733ea780184429ed35 100644 GIT binary patch delta 594 zcmX?T_QHbiG%qg~0}!N5kj;z{+sG%t$oOruJfkaXJrhGJTZ(*2-5So-Odu5u3{mE( z9I2cs^)^5@RJH+0)&eZs2$yY2X-1N@1k1L7WK*qDT2ndFm{QtWSXP4!27)MSuqZE3 zv>hyJ4iUD23wIzXwuKwfi6m-Q*`?XN`2d?aXML4GKw@P;Vva&`PG)LeiGrugEr9^X z$N)#5cxN9^SHF;WPnRkYR5it^$wjFpw?t6Y1-m*2xrW?gFHX!$Ny@LNl7VW<%}+_S zQhwZ7$4)0%}2!onXNvuF~};dP`Y5{b4AAY z0*lCm(m{jwWx>Sxdrj+^?men97KoDgC z7UczsHXw;w!bKaAM6KW^G$DyvS2k<5Y?fj-=iGc%z=)ACc`}F4BgUx7uZ2t*GbSqv zuVRY_T2vG@`J%A-WCdY`%^D(#jNB0*v2YL(IXOgB1*pDKRF|=6@^aA{Mw`tlVor?G zw>S!l@(WUnN-B$DKnfEovbROCY#I1 b=*QSm^MwJ-_?X1Zz$4Oa)yPq#3)Bh#v};S+ diff --git a/Backend/src/config/settings.py b/Backend/src/config/settings.py index e21d4689..733779c8 100644 --- a/Backend/src/config/settings.py +++ b/Backend/src/config/settings.py @@ -96,6 +96,11 @@ class Settings(BaseSettings): STRIPE_PUBLISHABLE_KEY: str = Field(default="", description="Stripe publishable key") STRIPE_WEBHOOK_SECRET: str = Field(default="", description="Stripe webhook secret") + # PayPal Payment Gateway + PAYPAL_CLIENT_ID: str = Field(default="", description="PayPal client ID") + PAYPAL_CLIENT_SECRET: str = Field(default="", description="PayPal client secret") + PAYPAL_MODE: str = Field(default="sandbox", description="PayPal mode: sandbox or live") + @property def database_url(self) -> str: """Construct database URL""" diff --git a/Backend/src/models/__pycache__/payment.cpython-312.pyc b/Backend/src/models/__pycache__/payment.cpython-312.pyc index b053a6dfd41d5d13794599cc9c90a34c7130c6fb..08a69330d48b691d9fe6f028a5677021699c7244 100644 GIT binary patch delta 452 zcmeAXTO`JNnwOW00SMA2$Yv^TwmG8II~Z@$SP%?R;| z*5qHDRhnS^V4Yw^s2YE9*yQG?l;)(`75Pt|%cUX2&L}p)d4|Y*$(fR07=WBFB9pIk J8M1)90{}uNR#gB1 delta 445 zcmZ1^)+5GynwOW00SFd+k;>%W$UBFTQDyQ4W?7yT)+qKAwkVEDc1@1S*BSkp{WLiz z8!|afu3!pfRG55@Ns*<|tw?(E52o~RaiIPp2@oL(BIH4Y0*Fuq5mF#R8bru|2ss!b z2xJt4h!%z$+=2}*H~7RG+;0d-H+n);%T4~vBsuv!bF>Yb`6?h2R6&Fqh)@R+XqG60 z#6X1jZ8%<{}XL7Ds+wX+cV2NotYa z+G8cyx8`ut&$zB{il4!PTf=mSwa+}|CNHem5t=F6^z*VIQ z)(_SRR)nhY7l%!5eoARhs$G%a{gNpHDU53bS2IDyq`+cA^(n$gg3@3?krd$+(KTXl>t(>A z;wcg-l53>kqOwp?=@c0xQ8}=vEQ+b}U@{jshuXp!17dK!huh_{Cw9o1apelWJGwIa!laRZxP_m$Ad- KD+7oID+2)9#6$uB diff --git a/Backend/src/models/payment.py b/Backend/src/models/payment.py index 4171c49f..d06f1b26 100644 --- a/Backend/src/models/payment.py +++ b/Backend/src/models/payment.py @@ -12,6 +12,7 @@ class PaymentMethod(str, enum.Enum): bank_transfer = "bank_transfer" e_wallet = "e_wallet" stripe = "stripe" + paypal = "paypal" class PaymentType(str, enum.Enum): diff --git a/Backend/src/models/user.py b/Backend/src/models/user.py index ef7babf3..a89c85f8 100644 --- a/Backend/src/models/user.py +++ b/Backend/src/models/user.py @@ -17,6 +17,9 @@ class User(Base): avatar = Column(String(255), nullable=True) currency = Column(String(3), nullable=False, default='VND') # ISO 4217 currency code is_active = Column(Boolean, nullable=False, default=True) + mfa_enabled = Column(Boolean, nullable=False, default=False) + mfa_secret = Column(String(255), nullable=True) # TOTP secret key (encrypted in production) + mfa_backup_codes = Column(Text, nullable=True) # JSON array of backup codes (hashed) created_at = Column(DateTime, default=datetime.utcnow, nullable=False) updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False) diff --git a/Backend/src/routes/__pycache__/auth_routes.cpython-312.pyc b/Backend/src/routes/__pycache__/auth_routes.cpython-312.pyc index 8a473243e41f9dfab83e0e95b25602bf7bb503a8..29636daef701dc793f1604072c1294c312fb39c8 100644 GIT binary patch literal 18782 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 f9#~*|A^<_%}v2W^@ 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 K@AUIw8UF{Pm&iu| diff --git a/Backend/src/routes/__pycache__/payment_routes.cpython-312.pyc b/Backend/src/routes/__pycache__/payment_routes.cpython-312.pyc index ee76f0cd0e3930b64d062450ef8d4a1ab5d2a8f6..081e677d18fde1c90699a63a6d90522b782ad9b5 100644 GIT binary patch delta 6872 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 Ngilo1Bp<^`{ttUVR73y( delta 3438 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 delta 4858 zcmbVPdr(x@8NZLccb_caF0TdT>0=?lf)9)s@qrqiMp07}N4jt?vbeB#_M!rJ13rTI zh|wGkX0%O{)J6x}sGDZ&ADuBX?bPbnhGC{Q8=Bae{t=yKLQN+Rn>Ib)xmE;C4Qb_23WKltfl4mCNXwJlWDJN@e&xGB zZa&!u`?a|Rm@^b5EgWINHN)t?+t>@`xXLicu}EG_S3fDI(H$mfF@C|2S6aa_GDp5C z(zJU=IL%&k72Yc3q(EE`TeL_^utoSkEyjaIJvLE#3LhnwmPWnm`RKop*YvTaSCUMl zmX_@oMzj=|=ayl+Ath&d)T*>Xw-IX>ZxXYFg)oP|FJz|kv3WKYm(+lt1hgL(M)o$drQ*1ts%A5b1+Fy<7bR{Y&Fz9PU{J%xk0MIr-;55 z^qH~xx|p1+dg9&n;R$1tz2c6IgdZ`tqCiKJ1jY1U-SAjy*RqRiBmF-&^_9<@1AOxvr7X3R_RXF zC|~i)nklVOwX5-Zy89T()JIZ(l^^B@1%U}ANM=USeV@ z9zvvKJ!6n;XLu>@4A;n%Ge@%X`WfYE-BCV+(nE={jiuD;b84a( zPG9#QHtdhKQMH%VjqGA}^P8Dn>`(b!tUJEf)hK&WOIvnp0A+i3dVPLxvtQ0efj~zv z!amn47J593J)S$q$OVlJIYrLZBm}ewfOIp{fR+-(6*(U3O3(qv?m2izPUd<fN0Hpw#Fl~fbntT$n;g565>=9G2yLm^qjCvxR zPr~zZ7rP^tO3VCg0#*QoK)@uLqck)a9(OWZaQ{%i$h%xX-z76;zBCR9snkHFd0@X3SALWEyv7 z+;SF-It$K~zf*a>^2)rcrm@26F=x$?`L@*&{x1I;mYWdp+Bqwpg%;b()>g9nYvOAb zGS?k!&3wakXBNowK!1Hc3-Us9?GpZaWpZs2eM)pn|hXi`fp`P@37_4?70{_Q1Tw7xZ-o6>n#Y ztQAz)3FSb0VNz)I2fPYe0IO*L)c1ZEz6e00cnVgUeZc@}!Va=}5N1N46cD6?UI0Z7 z01239&>{R;sVjk|Mr*tfrVitjvTDmIB3>ik;IsH6d@QCT9KCSqLpT4f8* zz7~FBrN>-AqwFK<`wrT;(0kGD)v7Q62HNmo-Rypv56#vON=RU}me4dU<+f@h(EZV! zG;2!2G<&o*gmRv@Yb?hWowRJU>JQLICZ=O=5K7G+!d>*yqvg#3t8fb-+L`pCfZH=- zLIJ6fad_{IixkA#|{fz6n;h&m%<-yIVp%5+jwWQXY-F?8PL)|%toKc)9?}zCD|`4 zGNS1`6q2BY6cY&ku6dSli5N}`yIVdnux;4fww3L}ZEc~{saiC+9f;CRZ=|#MpKWE; zG`Apx)d+AAU^~C=7oE@M~Bj%Da6*B^VLAJN>@S?ZD~=?S&|&xe~Pe#$i`X zez4!(3D01^uUD3uNCcW=kp>~5>#*TNfC$d*ox}bC*YuVPpAyCC@L=!oRMX`Rl#q9Y z#)0A{jcC{*0AvE#0HRN@nK0}GpuG?Psf$3w0RQbFn%@afCIZ}r88H|@iY%eC`1U|j z4fUbD0>GrHIS|)aMZe}$oOa)@@q_FbT|wR9sScPiSylP0-Sq7u4`EB7oE|4x>S zbK$-{CF1M{udD{QkrEd%c9W98J1NcLDE{C;8hPEidtht-L-|Itq>t!lAOw0LtOJSW z`z1*9LH`v<#{pgepgG?M>1%**04Nz7K%#wW(dtNZPY11yz7Eg};vWni8(Jrj|Ad*u zu>0T`$9>D-e;wY$-ozV^kE8)WX-I(91l+ zcXcZWE*kCFUIGcu9fFg9pcxQQh!{M6#AQh${>dK`{K@5)4zu{=(SrWOI+k7X$2jK% z55n#E8505s6Cz_zoG?<+#8@52<{d1WFw>!hiBCBeJlHW|r9&HIwNJ!R(azZ7C*rA? tz?c*6QQKee4Ck8QsCFyIaHa#UJ+7geF*fDH71h_m^)K(_4Nel&zX9!5P_zI5 diff --git a/Backend/src/routes/__pycache__/system_settings_routes.cpython-312.pyc b/Backend/src/routes/__pycache__/system_settings_routes.cpython-312.pyc index 694e174cbc6885d6f0fc589228bb52bdf4903770..e3efd573348909cfebff4b8a9e3772ade884f843 100644 GIT binary patch delta 3962 zcma)<3ve6N6^8fjN-N2dEcqc@$g;JLGc7cvloV)#HUgvwLokmPXlZR;g$~f(BPm9K zbOzb}bndz5Klkk8o?U-_ihk@LboL8cZ5Bm7gL{hoyB@zY+erV4JyH1-gG-n~RDmOO z18%3Yw3XBHV-Q9@8yfH}7v>u6LKR;mnE66MHOTUgj3^gPbyK`^n&PX3>|;z?+bC52 zXc*7e<)LcGU0)+KX6S1(^vjd_I-;-7&^JR}xJ9nP2W9!%hK%?Ys46-0DqU%D3C$UK z8#CfsFI1pwI)+kJ(UhRzm*bQ225XHV=bHs~Nvq^rGPG?=+Sc!+ZOhQQ#}#&WxPblC zh-R_Y5<$W6>y{~X?g*(tYyn(DU{{GDJmTDpwuj$w<}#e3cGNdM>Kocbr%FvyLHHB$ z_t7&9{&T(u_pK_yFRGm3rpqozc}iZvtH@8*A$A)(NsHr?G+rz!Ld=9a4@vylR<>B3C1Iot_ znJrqwL}j-S;;!uM9$J- z4g`fz$RD^NVMx1D`Ig)oI8c1pQahEdFC8Bge@YU0$T0?^1n*Lx-9jyBYUS>@x#URC zfu099M$N96xlJ;+&1ppmU$U-=+`O3txg`x3U%N53)_-=bKQrj;pw$~0 z38q8l)m*%~GgjRrRrkP(c1hzn=W<6@ToYTdURtp}>be%(b&{rj&QTMoT@|bCm1=vV zjy2#emoydg>cY6KE@o?zY)xlvT~F9a<`t5r6kplegcnNLzHSapdt9Ct>e*&Q>}Ok4 z-Nnplx}e+0oHokAE@p^-=?3O~A>XESeJ&&Su5 zsfy*3axrI8&a+#Ps13npPJYO~RUTL2Q`U1R3qMv?h}3wlyc*Bj&LB<3_>;0TNV_y% z+m#(MFJ;huZ4b(L{j_YGg3sY|CmE5RWCDn%$=)V^NlQ*_CFuZ)Ng3W*;bQr`LoA<< zBNgBC7(&GtQcfx_G`i!eW9c5W6Y&Mxl-reC(N=1Vxt7|B9$~g3d*Ot0-6%O3!q?rP z1nasC1Jfj#ofhFMAsg~<5yVx*oT&2#w)lqpd^((i{ZYfM-5d;Y*9%-ldV^PRBO+G; zstU0dWR+JXdkvS`Wt?{v-eE5>R9);%?L9JMv`(1QQ;@%vOQ(gb$x<>pPbHh$nb35K zp1-*1l*7`tR3?0)$AWIf|8*EN;shL&d}w5=AY#tBqWxRl{AVN}qhF|&`b9!}QJ+Z2 zlKo-U>HJoI*hf-qhyE~5EW>j&b z^@#3(E>gMjBpo$&#f)Cb=#3iJ%xL2})9$I;r|#MIus^D6j_FoPx|LB~M@;9Dbe^cL zXGXSYV=0Y(&#DO5AmumA!8H??E z6nnMtO4p;hS=}DR%lfjnO_gz@BW|+Bx!${KisXwV=VeKaThhCen(9kxYT~AfIM;VU zqsM^>vus$>HzYN-OKQsErjj_f@~)bWmG!Mhy(j5&EuLBJpE~0f>$%<^%#J;weW}(H z`QgA^Y1w`L2P|`C_J^yZWzD3E8L}4@YJJuMrB-Eq_OTJ``x>k4tMu^WAfHBDU|_rT?bCzN;q@C(2} zz#+iBfWrg{SxDS0%&Ns?d`2kV-DFZ{#NuB!1r*|)pc}#U-a_2DybIlrcP(Ehf0Q`i z48O6wPHp=xtA<@&`)GOt9e!c;K7<~`zV7Q~M@WkFV^>{plnjF8HlsMPgiySnV8V&- zU0s5|YSbEzlABL_046xVe!xTcKu-^vz;E_=*`*q7osYp>2LPUt-#SL{WgH?ICX}Ni zVrU?+d02cLX79)Qy=CYT{G`{-K1Cc=bojqshnzbJlK_bn6NJurD-~DgP4}m2IvMu% zUu{57 zj=oKXFW=jUzQ8x`6>|O!v7ZrqU;G@*_wnm{?RgfWnotk=w)i)V1ZoIG4x9FssK11e zuKwnk)+;06fskDve?g#b9$30?a9TzJvFaNfy$F;?zxW-CZ&P!{&=@0Xz! z`0j&KbT-0;hfc7kV98hTnM2O0Aeh?$@G>mI6HkQxCc^F)PZA_#qa(qP2>Uj<%|y7% zMYyR%xVR#$@{K+DAElc-Q#TI@E5$Z4OMa=~BQlCwU=Tv*sr4~xy+o~ljav3vIB@SN zgbyAzRk@Hmo?EcMkncB?x)0^#`y+;;3m0f&Ed&rnD{nLHFwJ0K!J)p+nTl{QlQe*NUXF4S9Yi zDbLl>I%^Db(ARSI%2X}ewMbj+iq~wlsw=Hi3Cs$m${f?5F8nKk{JFGNiDwx!&f>|V zSi>`e9C_4c!J4R>n5E?g)m<5+%D;O8dPfPfgu1dRQq4|I)fCsmn)dFc76x{VJ z$PKXB1Im*2|K7YHZ=pZbk*`my*AnQj_QiB1@gv6d{YkC%Xt$`u3xLN395(Kyy!0m4 zq906;w&+nsM^*MJO_vliCoL~6(%PV053~avz{@}Z?s7?)A5j=SosuVUF6^TjChsfsjX43iAAqaNlAQ(Am2^( z+p^*mS%iD=oCLH2duepr2Ii+*+e&P2B7t_%oy3JDX18K^50YzvWS|Y0`?|p|CRPn= zqlf#d-AxVreTa9{@b(AT+w|@B)oPzeyw3Fas#GOu0E>VaLCG5`f?d*Sdrar1+0zZ^ z&YI0}O9!FK2f_plwaHiG_B0z-uaDRI>KZier;{(N2**5goZn&RBNX8;W1mo^zfk#7 zqzd#NztghWlpKKWATR;gfkI#iI0}3P90QI6!$1;XcJc@!U`D30mI`)6|FC7$qMFr? z(w6qLs=5AhJ_*Niz!aIIWo~o=xw+~A+pNf3H;wZ}bf&$Y?W6LJ8g)wef0Ff&JASmr z&F(+1AdT#aQ@=rSk|y@#WSO;2;&}s*0b~j|76t7ZbRf#=%3z;SbyqPvO?_Rd>V7y* z(Nx!ZPz;P+u0;FbU(%n`m}osJ4CTP0X9bCJ*(gxOphLi2Q79)@e#z+RM=a- z>`xIIw%WRSP23aTvj(f>30OS^+zVWg=s<6_%ETDIXwlF1hK0+2OLVobLcV07(*7KF zmfHHYs2OO_2t2{RM|gs+^*dHu;j-5{ch=Q-+!+GgHYelVx#Pd(M)wYW4&L*CL0bp% zWU>2O1IZj@HgOh z;3{DLGmRno0|*hv str: + """Get base URL for image normalization""" + return os.getenv("SERVER_URL") or f"http://{request.headers.get('host', 'localhost:8000')}" + + +def normalize_image_url(image_url: str, base_url: str) -> str: + """Normalize image URL to absolute URL""" + if not image_url: + return image_url + if image_url.startswith('http://') or image_url.startswith('https://'): + return image_url + if image_url.startswith('/'): + return f"{base_url}{image_url}" + return f"{base_url}/{image_url}" + + @router.post("/register", status_code=status.HTTP_201_CREATED) async def register( request: RegisterRequest, @@ -79,9 +103,18 @@ async def login( db=db, email=request.email, password=request.password, - remember_me=request.rememberMe or False + remember_me=request.rememberMe or False, + mfa_token=request.mfaToken ) + # Check if MFA is required + if result.get("requires_mfa"): + return { + "status": "success", + "requires_mfa": True, + "user_id": result["user_id"] + } + # Set refresh token as HttpOnly cookie max_age = 7 * 24 * 60 * 60 if request.rememberMe else 1 * 24 * 60 * 60 response.set_cookie( @@ -104,7 +137,7 @@ async def login( } except ValueError as e: error_message = str(e) - status_code = status.HTTP_401_UNAUTHORIZED if "Invalid email or password" in error_message else status.HTTP_400_BAD_REQUEST + status_code = status.HTTP_401_UNAUTHORIZED if "Invalid email or password" in error_message or "Invalid MFA token" in error_message else status.HTTP_400_BAD_REQUEST return JSONResponse( status_code=status_code, content={ @@ -260,3 +293,229 @@ async def reset_password( detail=str(e) ) + +# MFA Routes +from ..services.mfa_service import mfa_service +from ..config.settings import settings + + +@router.get("/mfa/init") +async def init_mfa( + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db) +): + """Initialize MFA setup - generate secret and QR code""" + try: + if current_user.mfa_enabled: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="MFA is already enabled" + ) + + secret = mfa_service.generate_secret() + app_name = getattr(settings, 'APP_NAME', 'Hotel Booking') + qr_code = mfa_service.generate_qr_code(secret, current_user.email, app_name) + + return { + "status": "success", + "data": { + "secret": secret, + "qr_code": qr_code + } + } + except HTTPException: + raise + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error initializing MFA: {str(e)}" + ) + + +@router.post("/mfa/enable") +async def enable_mfa( + request: EnableMFARequest, + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db) +): + """Enable MFA after verifying token""" + try: + success, backup_codes = mfa_service.enable_mfa( + db=db, + user_id=current_user.id, + secret=request.secret, + verification_token=request.verification_token + ) + + return { + "status": "success", + "message": "MFA enabled successfully", + "data": { + "backup_codes": backup_codes + } + } + except ValueError as e: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=str(e) + ) + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error enabling MFA: {str(e)}" + ) + + +@router.post("/mfa/disable") +async def disable_mfa( + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db) +): + """Disable MFA""" + try: + mfa_service.disable_mfa(db=db, user_id=current_user.id) + return { + "status": "success", + "message": "MFA disabled successfully" + } + except ValueError as e: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=str(e) + ) + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error disabling MFA: {str(e)}" + ) + + +@router.get("/mfa/status", response_model=MFAStatusResponse) +async def get_mfa_status( + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db) +): + """Get MFA status for current user""" + try: + status_data = mfa_service.get_mfa_status(db=db, user_id=current_user.id) + return status_data + except ValueError as e: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=str(e) + ) + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error getting MFA status: {str(e)}" + ) + + +@router.post("/mfa/regenerate-backup-codes") +async def regenerate_backup_codes( + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db) +): + """Regenerate backup codes for MFA""" + try: + backup_codes = mfa_service.regenerate_backup_codes(db=db, user_id=current_user.id) + return { + "status": "success", + "message": "Backup codes regenerated successfully", + "data": { + "backup_codes": backup_codes + } + } + except ValueError as e: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=str(e) + ) + except Exception as e: + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error regenerating backup codes: {str(e)}" + ) + + +@router.post("/avatar/upload") +async def upload_avatar( + request: Request, + image: UploadFile = File(...), + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db) +): + """Upload user avatar""" + try: + # Validate file type + if not image.content_type or not image.content_type.startswith('image/'): + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="File must be an image" + ) + + # Validate file size (max 2MB) + content = await image.read() + if len(content) > 2 * 1024 * 1024: # 2MB + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail="Avatar file size must be less than 2MB" + ) + + # Create uploads directory + upload_dir = Path(__file__).parent.parent.parent / "uploads" / "avatars" + upload_dir.mkdir(parents=True, exist_ok=True) + + # Delete old avatar if exists + if current_user.avatar: + old_avatar_path = Path(__file__).parent.parent.parent / current_user.avatar.lstrip('/') + if old_avatar_path.exists() and old_avatar_path.is_file(): + try: + old_avatar_path.unlink() + except Exception: + pass # Ignore deletion errors + + # Generate filename + ext = Path(image.filename).suffix or '.png' + filename = f"avatar-{current_user.id}-{uuid.uuid4()}{ext}" + file_path = upload_dir / filename + + # Save file + async with aiofiles.open(file_path, 'wb') as f: + await f.write(content) + + # Update user avatar + image_url = f"/uploads/avatars/{filename}" + current_user.avatar = image_url + db.commit() + db.refresh(current_user) + + # Return the image URL + base_url = get_base_url(request) + full_url = normalize_image_url(image_url, base_url) + + return { + "status": "success", + "message": "Avatar uploaded successfully", + "data": { + "avatar_url": image_url, + "full_url": full_url, + "user": { + "id": current_user.id, + "name": current_user.full_name, + "email": current_user.email, + "phone": current_user.phone, + "avatar": image_url, + "role": current_user.role.name if current_user.role else "customer" + } + } + } + except HTTPException: + raise + except Exception as e: + db.rollback() + raise HTTPException( + status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, + detail=f"Error uploading avatar: {str(e)}" + ) + diff --git a/Backend/src/routes/booking_routes.py b/Backend/src/routes/booking_routes.py index 5bd28582..7f677b51 100644 --- a/Backend/src/routes/booking_routes.py +++ b/Backend/src/routes/booking_routes.py @@ -202,6 +202,16 @@ async def create_booking( ): """Create new booking""" try: + import logging + logger = logging.getLogger(__name__) + + # Validate that booking_data is a dict + if not isinstance(booking_data, dict): + logger.error(f"Invalid booking_data type: {type(booking_data)}, value: {booking_data}") + raise HTTPException(status_code=400, detail="Invalid request body. Expected JSON object.") + + logger.info(f"Received booking request from user {current_user.id}: {booking_data}") + room_id = booking_data.get("room_id") check_in_date = booking_data.get("check_in_date") check_out_date = booking_data.get("check_out_date") @@ -210,8 +220,21 @@ async def create_booking( notes = booking_data.get("notes") payment_method = booking_data.get("payment_method", "cash") - if not all([room_id, check_in_date, check_out_date, total_price]): - raise HTTPException(status_code=400, detail="Missing required booking fields") + # Detailed validation with specific error messages + missing_fields = [] + if not room_id: + missing_fields.append("room_id") + if not check_in_date: + missing_fields.append("check_in_date") + if not check_out_date: + missing_fields.append("check_out_date") + if total_price is None: + missing_fields.append("total_price") + + if missing_fields: + error_msg = f"Missing required booking fields: {', '.join(missing_fields)}" + logger.error(error_msg) + raise HTTPException(status_code=400, detail=error_msg) # Check if room exists room = db.query(Room).filter(Room.id == room_id).first() @@ -250,15 +273,15 @@ async def create_booking( booking_number = generate_booking_number() # Determine if deposit is required - # Cash requires deposit, Stripe doesn't require deposit (full payment or deposit handled via payment flow) + # Cash requires deposit, Stripe and PayPal don't require deposit (full payment or deposit handled via payment flow) requires_deposit = payment_method == "cash" deposit_percentage = 20 if requires_deposit else 0 deposit_amount = (float(total_price) * deposit_percentage) / 100 if requires_deposit else 0 - # For Stripe, booking can be confirmed immediately after payment + # For Stripe and PayPal, booking can be confirmed immediately after payment initial_status = BookingStatus.pending - if payment_method == "stripe": - # Will be confirmed after successful Stripe payment + if payment_method in ["stripe", "paypal"]: + # Will be confirmed after successful payment initial_status = BookingStatus.pending # Create booking @@ -279,19 +302,32 @@ async def create_booking( db.add(booking) db.flush() - # Create payment record if Stripe payment method is selected - if payment_method == "stripe": + # Create payment record if Stripe or PayPal payment method is selected + if payment_method in ["stripe", "paypal"]: from ..models.payment import Payment, PaymentMethod, PaymentStatus, PaymentType + if payment_method == "stripe": + payment_method_enum = PaymentMethod.stripe + elif payment_method == "paypal": + payment_method_enum = PaymentMethod.paypal + else: + # This shouldn't happen, but just in case + logger.warning(f"Unexpected payment_method: {payment_method}, defaulting to stripe") + payment_method_enum = PaymentMethod.stripe + + logger.info(f"Creating payment for booking {booking.id} with payment_method: {payment_method} -> enum: {payment_method_enum.value}") + payment = Payment( booking_id=booking.id, amount=total_price, - payment_method=PaymentMethod.stripe, + payment_method=payment_method_enum, payment_type=PaymentType.full, payment_status=PaymentStatus.pending, payment_date=None, ) db.add(payment) db.flush() + + logger.info(f"Payment created: ID={payment.id}, method={payment.payment_method.value if hasattr(payment.payment_method, 'value') else payment.payment_method}") # Create deposit payment if required (for cash method) # Note: For cash payments, deposit is paid on arrival, so we don't create a pending payment record @@ -301,7 +337,7 @@ async def create_booking( services = booking_data.get("services", []) if services: from ..models.service import Service - from ..models.service_usage import ServiceUsage + # ServiceUsage is already imported at the top of the file for service_item in services: service_id = service_item.get("service_id") @@ -354,8 +390,10 @@ async def create_booking( except Exception as e: # Log error but don't fail booking creation if invoice creation fails import logging + import traceback logger = logging.getLogger(__name__) logger.error(f"Failed to create invoice for booking {booking.id}: {str(e)}") + logger.error(f"Traceback: {traceback.format_exc()}") # Fetch with relations for proper serialization (eager load payments and service_usages) from sqlalchemy.orm import joinedload, selectinload @@ -369,12 +407,25 @@ async def create_booking( payment_status_from_payments = "unpaid" if booking.payments: latest_payment = sorted(booking.payments, key=lambda p: p.created_at, reverse=True)[0] - payment_method_from_payments = latest_payment.payment_method.value if isinstance(latest_payment.payment_method, PaymentMethod) else latest_payment.payment_method + # Safely extract payment method value + if isinstance(latest_payment.payment_method, PaymentMethod): + payment_method_from_payments = latest_payment.payment_method.value + elif hasattr(latest_payment.payment_method, 'value'): + payment_method_from_payments = latest_payment.payment_method.value + else: + payment_method_from_payments = str(latest_payment.payment_method) + + logger.info(f"Booking {booking.id} - Latest payment method: {payment_method_from_payments}, raw: {latest_payment.payment_method}") + if latest_payment.payment_status == PaymentStatus.completed: payment_status_from_payments = "paid" elif latest_payment.payment_status == PaymentStatus.refunded: payment_status_from_payments = "refunded" + # Use payment_method from payments if available, otherwise fall back to request payment_method + final_payment_method = payment_method_from_payments if payment_method_from_payments else payment_method + logger.info(f"Booking {booking.id} - Final payment_method: {final_payment_method} (from_payments: {payment_method_from_payments}, request: {payment_method})") + # Serialize booking properly booking_dict = { "id": booking.id, @@ -386,7 +437,7 @@ async def create_booking( "guest_count": booking.num_guests, "total_price": float(booking.total_price) if booking.total_price else 0.0, "status": booking.status.value if isinstance(booking.status, BookingStatus) else booking.status, - "payment_method": payment_method_from_payments or payment_method, + "payment_method": final_payment_method, "payment_status": payment_status_from_payments, "deposit_paid": booking.deposit_paid, "requires_deposit": booking.requires_deposit, @@ -408,7 +459,7 @@ async def create_booking( "id": p.id, "booking_id": p.booking_id, "amount": float(p.amount) if p.amount else 0.0, - "payment_method": p.payment_method.value if isinstance(p.payment_method, PaymentMethod) else p.payment_method, + "payment_method": p.payment_method.value if isinstance(p.payment_method, PaymentMethod) else (p.payment_method.value if hasattr(p.payment_method, 'value') else str(p.payment_method)), "payment_type": p.payment_type.value if isinstance(p.payment_type, PaymentType) else p.payment_type, "deposit_percentage": p.deposit_percentage, "payment_status": p.payment_status.value if isinstance(p.payment_status, PaymentStatus) else p.payment_status, @@ -495,6 +546,11 @@ async def create_booking( except HTTPException: raise except Exception as e: + import logging + import traceback + logger = logging.getLogger(__name__) + logger.error(f"Error creating booking (payment_method: {payment_method}): {str(e)}") + logger.error(f"Traceback: {traceback.format_exc()}") db.rollback() raise HTTPException(status_code=500, detail=str(e)) @@ -530,17 +586,33 @@ async def get_booking_by_id( # Determine payment_method and payment_status from payments # Get latest payment efficiently (already loaded via joinedload) - payment_method = None + import logging + logger = logging.getLogger(__name__) + + payment_method_from_payments = None payment_status = "unpaid" if booking.payments: # Find latest payment (payments are already loaded, so this is fast) latest_payment = max(booking.payments, key=lambda p: p.created_at if p.created_at else datetime.min) - payment_method = latest_payment.payment_method.value if isinstance(latest_payment.payment_method, PaymentMethod) else latest_payment.payment_method + # Safely extract payment method value + if isinstance(latest_payment.payment_method, PaymentMethod): + payment_method_from_payments = latest_payment.payment_method.value + elif hasattr(latest_payment.payment_method, 'value'): + payment_method_from_payments = latest_payment.payment_method.value + else: + payment_method_from_payments = str(latest_payment.payment_method) + + logger.info(f"Get booking {id} - Latest payment method: {payment_method_from_payments}, raw: {latest_payment.payment_method}") + if latest_payment.payment_status == PaymentStatus.completed: payment_status = "paid" elif latest_payment.payment_status == PaymentStatus.refunded: payment_status = "refunded" + # Use payment_method from payments, fallback to "cash" if no payments + final_payment_method = payment_method_from_payments if payment_method_from_payments else "cash" + logger.info(f"Get booking {id} - Final payment_method: {final_payment_method}") + booking_dict = { "id": booking.id, "booking_number": booking.booking_number, @@ -551,7 +623,7 @@ async def get_booking_by_id( "guest_count": booking.num_guests, # Frontend expects guest_count "total_price": float(booking.total_price) if booking.total_price else 0.0, "status": booking.status.value if isinstance(booking.status, BookingStatus) else booking.status, - "payment_method": payment_method or "cash", + "payment_method": final_payment_method, "payment_status": payment_status, "deposit_paid": booking.deposit_paid, "requires_deposit": booking.requires_deposit, @@ -605,7 +677,7 @@ async def get_booking_by_id( { "id": p.id, "amount": float(p.amount) if p.amount else 0.0, - "payment_method": p.payment_method.value if isinstance(p.payment_method, PaymentMethod) else p.payment_method, + "payment_method": p.payment_method.value if isinstance(p.payment_method, PaymentMethod) else (p.payment_method.value if hasattr(p.payment_method, 'value') else str(p.payment_method)), "payment_status": p.payment_status.value if isinstance(p.payment_status, PaymentStatus) else p.payment_status, } for p in booking.payments diff --git a/Backend/src/routes/payment_routes.py b/Backend/src/routes/payment_routes.py index a12ff975..9b18ee13 100644 --- a/Backend/src/routes/payment_routes.py +++ b/Backend/src/routes/payment_routes.py @@ -13,6 +13,7 @@ from ..models.booking import Booking, BookingStatus from ..utils.mailer import send_email from ..utils.email_templates import payment_confirmation_email_template from ..services.stripe_service import StripeService +from ..services.paypal_service import PayPalService router = APIRouter(prefix="/payments", tags=["payments"]) @@ -588,3 +589,187 @@ async def stripe_webhook( except Exception as e: db.rollback() raise HTTPException(status_code=500, detail=str(e)) + + +@router.post("/paypal/create-order") +async def create_paypal_order( + order_data: dict, + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db) +): + """Create a PayPal order""" + try: + # Check if PayPal is configured + from ..services.paypal_service import get_paypal_client_id, get_paypal_client_secret + client_id = get_paypal_client_id(db) + if not client_id: + client_id = settings.PAYPAL_CLIENT_ID + + client_secret = get_paypal_client_secret(db) + if not client_secret: + client_secret = settings.PAYPAL_CLIENT_SECRET + + if not client_id or not client_secret: + raise HTTPException( + status_code=500, + detail="PayPal is not configured. Please configure PayPal settings in Admin Panel or set PAYPAL_CLIENT_ID and PAYPAL_CLIENT_SECRET environment variables." + ) + + booking_id = order_data.get("booking_id") + amount = float(order_data.get("amount", 0)) + currency = order_data.get("currency", "USD") + + if not booking_id or amount <= 0: + raise HTTPException( + status_code=400, + detail="booking_id and amount are required" + ) + + # Validate amount + if amount > 100000: + raise HTTPException( + status_code=400, + detail=f"Amount ${amount:,.2f} exceeds PayPal's maximum of $100,000. Please contact support for large payments." + ) + + # Verify booking exists and user has access + booking = db.query(Booking).filter(Booking.id == booking_id).first() + if not booking: + raise HTTPException(status_code=404, detail="Booking not found") + + if current_user.role_id != 1 and booking.user_id != current_user.id: + raise HTTPException(status_code=403, detail="Forbidden") + + # Get return URLs from request or use defaults + client_url = settings.CLIENT_URL or os.getenv("CLIENT_URL", "http://localhost:5173") + return_url = order_data.get("return_url", f"{client_url}/payment/paypal/return") + cancel_url = order_data.get("cancel_url", f"{client_url}/payment/paypal/cancel") + + # Create PayPal order + order = PayPalService.create_order( + amount=amount, + currency=currency, + metadata={ + "booking_id": str(booking_id), + "booking_number": booking.booking_number, + "user_id": str(current_user.id), + "description": f"Hotel Booking Payment - {booking.booking_number}", + "return_url": return_url, + "cancel_url": cancel_url, + }, + db=db + ) + + if not order.get("approval_url"): + raise HTTPException( + status_code=500, + detail="Failed to create PayPal order. Approval URL is missing." + ) + + return { + "status": "success", + "message": "PayPal order created successfully", + "data": { + "order_id": order["id"], + "approval_url": order["approval_url"], + "status": order["status"], + } + } + except HTTPException: + raise + except ValueError as e: + import logging + logger = logging.getLogger(__name__) + logger.error(f"PayPal order creation error: {str(e)}") + raise HTTPException(status_code=400, detail=str(e)) + except Exception as e: + import logging + logger = logging.getLogger(__name__) + logger.error(f"Unexpected error creating PayPal order: {str(e)}", exc_info=True) + raise HTTPException(status_code=500, detail=str(e)) + + +@router.post("/paypal/capture") +async def capture_paypal_payment( + payment_data: dict, + current_user: User = Depends(get_current_user), + db: Session = Depends(get_db) +): + """Capture a PayPal payment""" + try: + order_id = payment_data.get("order_id") + booking_id = payment_data.get("booking_id") + + if not order_id: + raise HTTPException( + status_code=400, + detail="order_id is required" + ) + + # Confirm payment (this commits the transaction internally) + payment = PayPalService.confirm_payment( + order_id=order_id, + db=db, + booking_id=booking_id + ) + + # Ensure the transaction is committed + try: + db.commit() + except Exception: + pass + + # Get fresh booking from database + booking = db.query(Booking).filter(Booking.id == payment["booking_id"]).first() + if booking: + db.refresh(booking) + + # Send payment confirmation email (non-blocking) + if booking and booking.user: + try: + client_url = settings.CLIENT_URL or os.getenv("CLIENT_URL", "http://localhost:5173") + email_html = payment_confirmation_email_template( + booking_number=booking.booking_number, + guest_name=booking.user.full_name, + amount=payment["amount"], + payment_method="paypal", + transaction_id=payment["transaction_id"], + client_url=client_url + ) + await send_email( + to=booking.user.email, + subject=f"Payment Confirmed - {booking.booking_number}", + html=email_html + ) + except Exception as e: + import logging + logger = logging.getLogger(__name__) + logger.warning(f"Failed to send payment confirmation email: {e}") + + return { + "status": "success", + "message": "Payment confirmed successfully", + "data": { + "payment": payment, + "booking": { + "id": booking.id if booking else None, + "booking_number": booking.booking_number if booking else None, + "status": booking.status.value if booking else None, + } + } + } + except HTTPException: + db.rollback() + raise + except ValueError as e: + import logging + logger = logging.getLogger(__name__) + logger.error(f"PayPal payment confirmation error: {str(e)}") + db.rollback() + raise HTTPException(status_code=400, detail=str(e)) + except Exception as e: + import logging + logger = logging.getLogger(__name__) + logger.error(f"Unexpected error confirming PayPal payment: {str(e)}", exc_info=True) + db.rollback() + raise HTTPException(status_code=500, detail=str(e)) diff --git a/Backend/src/routes/room_routes.py b/Backend/src/routes/room_routes.py index 968e9696..7b07d220 100644 --- a/Backend/src/routes/room_routes.py +++ b/Backend/src/routes/room_routes.py @@ -122,17 +122,80 @@ async def search_available_rooms( request: Request, from_date: str = Query(..., alias="from"), to_date: str = Query(..., alias="to"), + roomId: Optional[int] = Query(None, alias="roomId"), type: Optional[str] = Query(None), capacity: Optional[int] = Query(None), page: int = Query(1, ge=1), limit: int = Query(12, ge=1, le=100), db: Session = Depends(get_db) ): - """Search for available rooms""" + """Search for available rooms or check specific room availability""" try: - check_in = datetime.fromisoformat(from_date.replace('Z', '+00:00')) - check_out = datetime.fromisoformat(to_date.replace('Z', '+00:00')) + # Parse dates - handle both date-only and datetime formats + try: + if 'T' in from_date or 'Z' in from_date or '+' in from_date: + check_in = datetime.fromisoformat(from_date.replace('Z', '+00:00')) + else: + check_in = datetime.strptime(from_date, '%Y-%m-%d') + except ValueError: + raise HTTPException(status_code=400, detail=f"Invalid from date format: {from_date}") + try: + if 'T' in to_date or 'Z' in to_date or '+' in to_date: + check_out = datetime.fromisoformat(to_date.replace('Z', '+00:00')) + else: + check_out = datetime.strptime(to_date, '%Y-%m-%d') + except ValueError: + raise HTTPException(status_code=400, detail=f"Invalid to date format: {to_date}") + + # If checking a specific room, handle it differently + if roomId: + # Check if room exists + room = db.query(Room).filter(Room.id == roomId).first() + if not room: + raise HTTPException(status_code=404, detail="Room not found") + + # Check if room is available + if room.status != RoomStatus.available: + return { + "status": "success", + "data": { + "available": False, + "message": "Room is not available", + "room_id": roomId + } + } + + # Check for overlapping bookings + overlapping = db.query(Booking).filter( + and_( + Booking.room_id == roomId, + Booking.status != BookingStatus.cancelled, + Booking.check_in_date < check_out, + Booking.check_out_date > check_in + ) + ).first() + + if overlapping: + return { + "status": "success", + "data": { + "available": False, + "message": "Room is already booked for the selected dates", + "room_id": roomId + } + } + + return { + "status": "success", + "data": { + "available": True, + "message": "Room is available", + "room_id": roomId + } + } + + # Original search functionality if check_in >= check_out: raise HTTPException( status_code=400, diff --git a/Backend/src/routes/system_settings_routes.py b/Backend/src/routes/system_settings_routes.py index ea83a785..ec599fd4 100644 --- a/Backend/src/routes/system_settings_routes.py +++ b/Backend/src/routes/system_settings_routes.py @@ -323,6 +323,162 @@ async def update_stripe_settings( raise HTTPException(status_code=500, detail=str(e)) +@router.get("/paypal") +async def get_paypal_settings( + current_user: User = Depends(authorize_roles("admin")), + db: Session = Depends(get_db) +): + """Get PayPal payment settings (Admin only)""" + try: + client_id_setting = db.query(SystemSettings).filter( + SystemSettings.key == "paypal_client_id" + ).first() + + client_secret_setting = db.query(SystemSettings).filter( + SystemSettings.key == "paypal_client_secret" + ).first() + + mode_setting = db.query(SystemSettings).filter( + SystemSettings.key == "paypal_mode" + ).first() + + # Mask secret for security (only show last 4 characters) + def mask_key(key_value: str) -> str: + if not key_value or len(key_value) < 4: + return "" + return "*" * (len(key_value) - 4) + key_value[-4:] + + result = { + "paypal_client_id": "", + "paypal_client_secret": "", + "paypal_mode": "sandbox", + "paypal_client_secret_masked": "", + "has_client_id": False, + "has_client_secret": False, + } + + if client_id_setting: + result["paypal_client_id"] = client_id_setting.value + result["has_client_id"] = bool(client_id_setting.value) + result["updated_at"] = client_id_setting.updated_at.isoformat() if client_id_setting.updated_at else None + result["updated_by"] = client_id_setting.updated_by.full_name if client_id_setting.updated_by else None + + if client_secret_setting: + result["paypal_client_secret"] = client_secret_setting.value + result["paypal_client_secret_masked"] = mask_key(client_secret_setting.value) + result["has_client_secret"] = bool(client_secret_setting.value) + + if mode_setting: + result["paypal_mode"] = mode_setting.value or "sandbox" + + return { + "status": "success", + "data": result + } + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + + +@router.put("/paypal") +async def update_paypal_settings( + paypal_data: dict, + current_user: User = Depends(authorize_roles("admin")), + db: Session = Depends(get_db) +): + """Update PayPal payment settings (Admin only)""" + try: + client_id = paypal_data.get("paypal_client_id", "").strip() + client_secret = paypal_data.get("paypal_client_secret", "").strip() + mode = paypal_data.get("paypal_mode", "sandbox").strip().lower() + + # Validate mode + if mode and mode not in ["sandbox", "live"]: + raise HTTPException( + status_code=400, + detail="Invalid PayPal mode. Must be 'sandbox' or 'live'" + ) + + # Update or create client ID setting + if client_id: + setting = db.query(SystemSettings).filter( + SystemSettings.key == "paypal_client_id" + ).first() + + if setting: + setting.value = client_id + setting.updated_by_id = current_user.id + else: + setting = SystemSettings( + key="paypal_client_id", + value=client_id, + description="PayPal client ID for processing payments", + updated_by_id=current_user.id + ) + db.add(setting) + + # Update or create client secret setting + if client_secret: + setting = db.query(SystemSettings).filter( + SystemSettings.key == "paypal_client_secret" + ).first() + + if setting: + setting.value = client_secret + setting.updated_by_id = current_user.id + else: + setting = SystemSettings( + key="paypal_client_secret", + value=client_secret, + description="PayPal client secret for processing payments", + updated_by_id=current_user.id + ) + db.add(setting) + + # Update or create mode setting + if mode: + setting = db.query(SystemSettings).filter( + SystemSettings.key == "paypal_mode" + ).first() + + if setting: + setting.value = mode + setting.updated_by_id = current_user.id + else: + setting = SystemSettings( + key="paypal_mode", + value=mode, + description="PayPal mode: sandbox or live", + updated_by_id=current_user.id + ) + db.add(setting) + + db.commit() + + # Return masked values + def mask_key(key_value: str) -> str: + if not key_value or len(key_value) < 4: + return "" + return "*" * (len(key_value) - 4) + key_value[-4:] + + return { + "status": "success", + "message": "PayPal settings updated successfully", + "data": { + "paypal_client_id": client_id if client_id else "", + "paypal_client_secret": client_secret if client_secret else "", + "paypal_mode": mode, + "paypal_client_secret_masked": mask_key(client_secret) if client_secret else "", + "has_client_id": bool(client_id), + "has_client_secret": bool(client_secret), + } + } + except HTTPException: + raise + except Exception as e: + db.rollback() + raise HTTPException(status_code=500, detail=str(e)) + + @router.get("/smtp") async def get_smtp_settings( current_user: User = Depends(authorize_roles("admin")), diff --git a/Backend/src/schemas/__pycache__/auth.cpython-312.pyc b/Backend/src/schemas/__pycache__/auth.cpython-312.pyc index e7889c5abb33f9271b457e81c28357fa4e1efa54..52afc7b83b581d612f6484d951104b4bf6e6d51b 100644 GIT binary patch delta 1286 zcmZuwOHUI~6rNkA6sE6f>u6h`7z~6dxG?xad<29duSR)AtFhM3trn$}nbxEmC0Y}W zi77c7ce+&TF>IU zWY--KRr*}Dw$)5(aSdyA1%5cga9`2nQOtl1CBpjQwG#Gi%YD^I&&H)^cPrNO)g8G9 zJ}VE|1dKR)lyOWo33}m(bcdR8HH!gBRJR0A~YzgVXpiZcZTTZRTmp940tJAPQ+V<_N(AybJ`D>l6~q zz{h~juKzn;_d&Oq**v%MYdMRXqVZchGkDzG zuYHEv6C@}w2*l_z*m5kRPUKRz@AJ9X=saI9a;sq8!Hk;!0XMUmY&uoQuH}*iGRywm zSEwHWZEd*`cEtxfcI1x6Rx30^Hb@q|XxI{V-pU>Stl1*0DeLx{x=dS^nv~FlV>M6K zO5R4R7xRrn>TNXg*&Kc}$t30&!Je6}5=TJiwKN3rGoDOWd!rli%B5F}oADhv+K{)3 z@{Yq`p#4#)MVD(nl(0}p6^hpXNjvezB)OQBQS&#cu~1VnSBUGad%Y!832$8^EqnCk zi6hA3vOEZ=&v!`MmbGfr;3y-m9{^1|IV7$fT@7(*8r~IN6~+@L62Dsf5pn)JtY}?I z5la{@>m6)r-7c9OsSMX8eAPYhS(`gkmu$>eR}d=M|8ZxfL~$qa1C4lq;?7s?zlj%v F`wNp4DB1u3 delta 590 zcmX|-&r2Io5XaxFYt)xbvfE8GKZxc~)U85l{XyIsidd{aVxm|Pq!tU!!DBZd*o#op zLvP9mE!aPy;34;3?4iYjf<5FS-jzxV>rrv$MY=Gb_jcaQyzl$|7{vbYQ79w@eYeMn z^%rfs;kb4sc6+b%&6v|(^Watk7vJfbK&9+$l)c&){h%55?LMnDK}}`-tv*KUX0sE( z&$3%{+VGdm;*Cs05>vsX{H=F;gH+)?L(@p$&khqeg2ljdPPO3oXj)G2mhlk(1v_Da z>b5eIoMiM;R9XlhMLlR&OO0WZwFBdo2195>4q*gOh&kLdm*6p8m~(Q9yBYmBZslRB zwq-3sYKam&QjM#Mdb0CVq%m$8|2%jE%lIZ{%M$l8@;Gc4prmB)+Y1BJlq-5H+-dc4 zTs6vY8LEkm@SZa6U&rHC_@6O@Zq$Jl8kfVb(FjcAw`exA%Eyd(ivRBnS7#c+R_{$q zVKz1ZuUTN<8n-ZBQdA5ASz|=DXX_!eT4?m~anUjHLwux5`K$a?wkWAemAZQkFXQRq yGSve`e4&<@`11b diff --git a/Backend/src/schemas/auth.py b/Backend/src/schemas/auth.py index 2009f0bd..6f0e28f3 100644 --- a/Backend/src/schemas/auth.py +++ b/Backend/src/schemas/auth.py @@ -31,6 +31,7 @@ class LoginRequest(BaseModel): email: EmailStr password: str rememberMe: Optional[bool] = False + mfaToken: Optional[str] = None class RefreshTokenRequest(BaseModel): @@ -85,3 +86,23 @@ class MessageResponse(BaseModel): status: str message: str + +class MFAInitResponse(BaseModel): + secret: str + qr_code: str # Base64 data URL + + +class EnableMFARequest(BaseModel): + secret: str + verification_token: str + + +class VerifyMFARequest(BaseModel): + token: str + is_backup_code: Optional[bool] = False + + +class MFAStatusResponse(BaseModel): + mfa_enabled: bool + backup_codes_count: int + diff --git a/Backend/src/services/__pycache__/auth_service.cpython-312.pyc b/Backend/src/services/__pycache__/auth_service.cpython-312.pyc index cdd0f9ed2a6b13dd10d10f2e985fbb55a5878a1d..c4839a65b49ae0a3930a8f9ef0b274cf86981dd4 100644 GIT binary patch delta 1989 zcmb_dS!@$W7~a|Su8*}H$5-q)PS$Y_oCZQ^(h>+Xp#qh|;RqFl2ZG6Lf*r>WYbQ>^ znv@n4B#H!#RDl3dT3Q(e%CWTSOI48C5(JT;hoBZzY9A`mry$freW*IK&YDzJ-@4X* z^Y8Z`-~Z2gZ1e&6JqN6}Efy1nuLFnt(a9B8tO5;=p(c6+)Sw()KVA!MVhOa1dT7A6 zOXQ&&uZ+m{nqk>~cAH)GduBNfdiU$LIp%PDF9*vp=Ttdb)Ty}~^kL3rq@I0XT`{6U zw268z?g`q*i>AM58H!eA(W)w1q%}JfaBFTXRn|+x0G9Ho#mN}N&%tWUc~y?Z92t%9 z1{lPA`DjU~KF@ayrFV5Hw;1RN=8Xfrk?wS|Urh9HWV2>3BVOOa_tR?}DxH6r;bab- zo!^a`{Z599+0dhvRVcC0M`L=z9|Rma>U5&d{edbj=Fw_ATcu8!O_e|reWTL32r{SW zE(+=(8@CKtvwA?KtF&O5odg9Na{cotDr=DSu>d;CI~ah|pR~GIRyIuP&<(!>=uv1@ z0E^?Ih_5tyjj~Rnp&6ZKYBghZXyX!}FQh%orVA!bWek&99z_H%Xh8cMwS0pX z6>B7_YV`nULO(hybTWuNPYiSVIW4NtQ<)L+h3BC_!6<;J-#~C!@M%)ycMNS+W0na8F|WKj)HO$y)z&s&U(# zQLI{1codq9GD#Q4#NQuY8yJ>qQEvih&sz6dGay5aFk7h%*ou!`*0R@f1ial@u%7uY zG8qtZjfK`F`=SY9C?!flCYm1KB_s#a(PSbL7s9JLgke#N_C|Xmgc|d%P7FulQ7DK5 zk!V~9}{k@RI5ZZ z)Wax2%s&PwQ@sp*T)hKSBX_W^wU8<%B0J+E%sXdmq!!F6C>_Fyc_uC<@+P(0QKFAF z1$VTTNY&UUbraZ3ppC!;frA9X1k`kEG}XN`($haQ*xi$aBDxoBLT`Az$X!zjzCwc? z%_v&a`?}e7pZ9&u`@VNn%y3j~=s{KROy)%93CnowGZa&5|J6)cmOk_g?|M&e&+WeF zUwE+dfur)iBXrLZ%2ns!rM~lhmq)KJ_|~!Uplln^c z68UwMf&?5Ilw%_mK-W5NE)E0Mbi8kdB5SUvuzuQASf|p3_3p0zStGOOsTw)6T{*XY z9pENO#f!>s8_b~mCb5fRe;V2bl5i+4E|ln delta 1499 zcmbtQ?@wD*7(VCT-u}8RkkUe1DBMyCbTD89@CR51TSl}+5N6C~q7cp<(lJ;rg(9{i zDv29zlld+SjxEtFOeVNkZ#0Wv{IU!}qjMS)L*hT+7q<|j*}izrEw|g^NAJyj-se8= z`=0lC&)=&UR&ZX%Znq-(RR8H6b?#5+NgO^84crV4z$#ZgS4j%weBzKz#7sYzED~N8 zj#)|3yl~W^<%+4!G$V1(8;%w}p@~%UP|c}noNU;w^HR-aL62V&%vF@g1+vLQ{m_|| z&1tkWCz^B2mt$o)#%wr9Iki?qM-?CAh(t%ZwZqv8S(|>Uc{EL+8e5C$W>P_Q@7wvI zs%^1zD*o1htW1xp_xM4#dstvMwEI|Se4lDVNrS=>ZX6RnWrFK_%Aij& z`{L#Lz@%y2u!ggLvoxg47WlE*jU{-nFDOcSS*#*=t`j<1>^KM)n#*xDq}zR>U$3H$ z(oIfp(nth$wMp~3agEO=QHTEt3y%1RGvU~_RJoD2JSQ+BGfjEFhjq8BHv`oYWSs)1P6t>EZGBFB!mp@LrhYl*ca6*Lf>B)5w<0#Z>OD;CDe;t; zzzHvFv0=e8tFf42OV$X;P< zPdHK|WNHM;GkbZeXBv&PFViZ}zDye*39CQX{LbM8_^P%NFT$_2Bls8fg}Q%m@d94RIW_3{0f8X3>p}G4*k)q#v6>T!e7zX@CRy7&kV=mL$KMKsQri~E;6{p z;1dR)QrH&aQzyq{MKkjaQ*S}6uM9ijOy5Q*ELfLD?jssjhqZ8PKnt63E&Mb{c3ATM ze)aS#QEa@%`d8HLejE0F&v=kQfWkv_`-urMH719ZA3i?(hG*D_tq+ifQ9CLq`7rga HO{@MFt@mO} diff --git a/Backend/src/services/__pycache__/invoice_service.cpython-312.pyc b/Backend/src/services/__pycache__/invoice_service.cpython-312.pyc index 31adb07604d08dbeb05d731bafd443136a214661..f61ce899d0ddd9c5397a7739ecac83ff84fe736b 100644 GIT binary patch delta 2534 zcmah}du&r>6u;lSZFhTb-;eb{*;)o0-Cz%pjR_kY$N)D682$iJ>fG(1buYfQ7?-<@ zhgl%u;daEtz>q~lL`V#2NHoFMpMZa8NOUwYG4U^A)B!O@h>73%M%M~a`^WD)=X~d! z{=W0LM}b^>o7iqyt%|^Y-KC!3lGXNwv!89IV!Du#8C#%{=Oa zU20?rm(mUMi5e4vrsxU~P1Oa47F}k~nO^NB)=9O}z$`X)?o6-DN9e{Y_WW~@9P@DK zPKHihW$4l+hHl-$(4%9#SGO`OWlV_XWAupT*BuN4aKYjOu$+f!OR2RipOf8`L%p@h z7}m|n)yTvcVbZf)TEwKaD8U`;AdjmoimQSSTeU$a$#!U160{Mas9;M$w=GwnF1`%k z*i^V@bBnB=S6e)AsKy{BJ3z6QJENoC^p^Q|yI8lU7rCWs=GY*4;S0OlbXL%69;>(Q zZn$U<06QC#-TA1(IY_i+%ze4;Wmv0wwdiZl2?7ReMDeZ$pZNmWUpziS_GFEvA+d1{^NWhKl^r=XJ(TY0 zj}6mAZ=BiM&?crbDUk``FkQwDx}L#E3;epE8t!@BWD?H!zk=y@PuU8*#SNhQ803^x zoE~I(VhQb%5M2c)1FcF<9`1Q#AU>E*!L2~RzX6@`<^132%NQo5G6P@=?lu|w`ZKBh zus0Yc9WWM*ME9d(6G9vT-$xS&n-Q?(^m&9XxDo7!sj7f!E2^7d=YkuIW?87qd&lBG z=lebo{WcK2ZK-}xVsI;e$Z#MOG?@jnm2RSf^BCzk7 zKtl+d5K;)I8RV4Au-21~Yq6d*J%rZ72sjh;2!p7Z_M+@XzyNv_VH_Mw`^e4g>r1Z_ z(uw@O99t>dkGIn6P`Rbso-q>TzJN$E*WU>U8esqc delta 2406 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 dict: - """Login user""" + async def login(self, db: Session, email: str, password: str, remember_me: bool = False, mfa_token: str = None) -> dict: + """Login user with optional MFA verification""" # Find user with role and password user = db.query(User).filter(User.email == email).first() if not user: @@ -158,6 +158,21 @@ class AuthService: if not self.verify_password(password, user.password): raise ValueError("Invalid email or password") + # Check if MFA is enabled + if user.mfa_enabled: + if not mfa_token: + # Return special response indicating MFA is required + return { + "requires_mfa": True, + "user_id": user.id + } + + # Verify MFA token + from ..services.mfa_service import mfa_service + is_backup_code = len(mfa_token) == 8 # Backup codes are 8 characters + if not mfa_service.verify_mfa(db, user.id, mfa_token, is_backup_code): + raise ValueError("Invalid MFA token") + # Generate tokens tokens = self.generate_tokens(user.id) diff --git a/Backend/src/services/invoice_service.py b/Backend/src/services/invoice_service.py index b2fc492c..e3137cc7 100644 --- a/Backend/src/services/invoice_service.py +++ b/Backend/src/services/invoice_service.py @@ -66,7 +66,8 @@ class InvoiceService: booking = db.query(Booking).options( selectinload(Booking.service_usages).selectinload("service"), - selectinload(Booking.room).selectinload("room_type") + selectinload(Booking.room).selectinload("room_type"), + selectinload(Booking.payments) ).filter(Booking.id == booking_id).first() if not booking: raise ValueError("Booking not found") @@ -82,6 +83,10 @@ class InvoiceService: # Initial subtotal is booking total (room + services) subtotal = float(booking.total_price) + # Calculate tax and total amounts + tax_amount = (subtotal - discount_amount) * (tax_rate / 100) + total_amount = subtotal + tax_amount - discount_amount + # Calculate amount paid from completed payments amount_paid = sum( float(p.amount) for p in booking.payments @@ -134,6 +139,7 @@ class InvoiceService: ) db.add(invoice) + db.flush() # Flush to get invoice.id before creating invoice items # Create invoice items from booking # Calculate room price (total_price includes services, so subtract services) diff --git a/Backend/src/services/mfa_service.py b/Backend/src/services/mfa_service.py new file mode 100644 index 00000000..6b252e89 --- /dev/null +++ b/Backend/src/services/mfa_service.py @@ -0,0 +1,299 @@ +""" +Multi-Factor Authentication (MFA) Service +Handles TOTP-based MFA functionality +""" +import pyotp +import qrcode +import secrets +import hashlib +import json +import base64 +import io +from typing import List, Optional, Dict, Tuple +from sqlalchemy.orm import Session +from ..models.user import User +import logging + +logger = logging.getLogger(__name__) + + +class MFAService: + """Service for managing Multi-Factor Authentication""" + + @staticmethod + def generate_secret() -> str: + """Generate a new TOTP secret""" + return pyotp.random_base32() + + @staticmethod + def generate_qr_code(secret: str, email: str, app_name: str = "Hotel Booking") -> str: + """ + Generate QR code data URL for TOTP setup + + Args: + secret: TOTP secret key + email: User's email address + app_name: Application name for the authenticator app + + Returns: + Base64 encoded QR code image data URL + """ + # Create provisioning URI for authenticator apps + totp_uri = pyotp.totp.TOTP(secret).provisioning_uri( + name=email, + issuer_name=app_name + ) + + # Generate QR code + qr = qrcode.QRCode( + version=1, + error_correction=qrcode.constants.ERROR_CORRECT_L, + box_size=10, + border=4, + ) + qr.add_data(totp_uri) + qr.make(fit=True) + + # Create image + img = qr.make_image(fill_color="black", back_color="white") + + # Convert to base64 data URL + buffer = io.BytesIO() + img.save(buffer, format='PNG') + img_data = base64.b64encode(buffer.getvalue()).decode() + + return f"data:image/png;base64,{img_data}" + + @staticmethod + def generate_backup_codes(count: int = 10) -> List[str]: + """ + Generate backup codes for MFA recovery + + Args: + count: Number of backup codes to generate (default: 10) + + Returns: + List of backup codes (8-character alphanumeric) + """ + codes = [] + for _ in range(count): + # Generate 8-character alphanumeric code + code = secrets.token_urlsafe(6).upper()[:8] + codes.append(code) + return codes + + @staticmethod + def hash_backup_code(code: str) -> str: + """ + Hash a backup code for storage (SHA-256) + + Args: + code: Plain backup code + + Returns: + Hashed backup code + """ + return hashlib.sha256(code.encode()).hexdigest() + + @staticmethod + def verify_backup_code(code: str, hashed_codes: List[str]) -> bool: + """ + Verify if a backup code matches any hashed code + + Args: + code: Plain backup code to verify + hashed_codes: List of hashed backup codes + + Returns: + True if code matches, False otherwise + """ + code_hash = MFAService.hash_backup_code(code) + return code_hash in hashed_codes + + @staticmethod + def verify_totp(token: str, secret: str) -> bool: + """ + Verify a TOTP token + + Args: + token: 6-digit TOTP token from authenticator app + secret: User's TOTP secret + + Returns: + True if token is valid, False otherwise + """ + try: + totp = pyotp.TOTP(secret) + # Allow tokens from current and previous/next time window for clock skew + return totp.verify(token, valid_window=1) + except Exception as e: + logger.error(f"Error verifying TOTP: {str(e)}") + return False + + @staticmethod + def enable_mfa( + db: Session, + user_id: int, + secret: str, + verification_token: str + ) -> Tuple[bool, List[str]]: + """ + Enable MFA for a user after verifying the token + + Args: + db: Database session + user_id: User ID + secret: TOTP secret + verification_token: Token from authenticator app to verify + + Returns: + Tuple of (success, backup_codes) + """ + user = db.query(User).filter(User.id == user_id).first() + if not user: + raise ValueError("User not found") + + # Verify the token before enabling + if not MFAService.verify_totp(verification_token, secret): + raise ValueError("Invalid verification token") + + # Generate backup codes + backup_codes = MFAService.generate_backup_codes() + hashed_codes = [MFAService.hash_backup_code(code) for code in backup_codes] + + # Update user + user.mfa_enabled = True + user.mfa_secret = secret + user.mfa_backup_codes = json.dumps(hashed_codes) + + db.commit() + + # Return plain backup codes (only shown once) + return True, backup_codes + + @staticmethod + def disable_mfa(db: Session, user_id: int) -> bool: + """ + Disable MFA for a user + + Args: + db: Database session + user_id: User ID + + Returns: + True if successful + """ + user = db.query(User).filter(User.id == user_id).first() + if not user: + raise ValueError("User not found") + + user.mfa_enabled = False + user.mfa_secret = None + user.mfa_backup_codes = None + + db.commit() + return True + + @staticmethod + def verify_mfa( + db: Session, + user_id: int, + token: str, + is_backup_code: bool = False + ) -> bool: + """ + Verify MFA token or backup code for a user + + Args: + db: Database session + user_id: User ID + token: TOTP token or backup code + is_backup_code: Whether the token is a backup code + + Returns: + True if verification successful, False otherwise + """ + user = db.query(User).filter(User.id == user_id).first() + if not user: + raise ValueError("User not found") + + if not user.mfa_enabled or not user.mfa_secret: + raise ValueError("MFA is not enabled for this user") + + if is_backup_code: + # Verify backup code + if not user.mfa_backup_codes: + return False + + hashed_codes = json.loads(user.mfa_backup_codes) + if not MFAService.verify_backup_code(token, hashed_codes): + return False + + # Remove used backup code + code_hash = MFAService.hash_backup_code(token) + hashed_codes.remove(code_hash) + user.mfa_backup_codes = json.dumps(hashed_codes) if hashed_codes else None + db.commit() + return True + else: + # Verify TOTP token + return MFAService.verify_totp(token, user.mfa_secret) + + @staticmethod + def regenerate_backup_codes(db: Session, user_id: int) -> List[str]: + """ + Regenerate backup codes for a user + + Args: + db: Database session + user_id: User ID + + Returns: + List of new backup codes (plain, shown once) + """ + user = db.query(User).filter(User.id == user_id).first() + if not user: + raise ValueError("User not found") + + if not user.mfa_enabled: + raise ValueError("MFA is not enabled for this user") + + # Generate new backup codes + backup_codes = MFAService.generate_backup_codes() + hashed_codes = [MFAService.hash_backup_code(code) for code in backup_codes] + + user.mfa_backup_codes = json.dumps(hashed_codes) + db.commit() + + # Return plain backup codes (only shown once) + return backup_codes + + @staticmethod + def get_mfa_status(db: Session, user_id: int) -> Dict: + """ + Get MFA status for a user + + Args: + db: Database session + user_id: User ID + + Returns: + Dictionary with MFA status information + """ + user = db.query(User).filter(User.id == user_id).first() + if not user: + raise ValueError("User not found") + + backup_codes_count = 0 + if user.mfa_backup_codes: + backup_codes_count = len(json.loads(user.mfa_backup_codes)) + + return { + "mfa_enabled": user.mfa_enabled, + "backup_codes_count": backup_codes_count + } + + +# Create singleton instance +mfa_service = MFAService() + diff --git a/Backend/src/services/paypal_service.py b/Backend/src/services/paypal_service.py new file mode 100644 index 00000000..ba3696bc --- /dev/null +++ b/Backend/src/services/paypal_service.py @@ -0,0 +1,429 @@ +""" +PayPal payment service for processing PayPal payments +""" +from paypalcheckoutsdk.core import PayPalHttpClient, SandboxEnvironment, LiveEnvironment +from paypalcheckoutsdk.orders import OrdersCreateRequest, OrdersGetRequest, OrdersCaptureRequest +from paypalcheckoutsdk.payments import CapturesRefundRequest +from typing import Optional, Dict, Any +from ..config.settings import settings +from ..models.payment import Payment, PaymentMethod, PaymentType, PaymentStatus +from ..models.booking import Booking, BookingStatus +from ..models.system_settings import SystemSettings +from sqlalchemy.orm import Session +from datetime import datetime +import json + + +def get_paypal_client_id(db: Session) -> Optional[str]: + """Get PayPal client ID from database or environment variable""" + try: + setting = db.query(SystemSettings).filter( + SystemSettings.key == "paypal_client_id" + ).first() + if setting and setting.value: + return setting.value + except Exception: + pass + # Fallback to environment variable + return settings.PAYPAL_CLIENT_ID if settings.PAYPAL_CLIENT_ID else None + + +def get_paypal_client_secret(db: Session) -> Optional[str]: + """Get PayPal client secret from database or environment variable""" + try: + setting = db.query(SystemSettings).filter( + SystemSettings.key == "paypal_client_secret" + ).first() + if setting and setting.value: + return setting.value + except Exception: + pass + # Fallback to environment variable + return settings.PAYPAL_CLIENT_SECRET if settings.PAYPAL_CLIENT_SECRET else None + + +def get_paypal_mode(db: Session) -> str: + """Get PayPal mode from database or environment variable""" + try: + setting = db.query(SystemSettings).filter( + SystemSettings.key == "paypal_mode" + ).first() + if setting and setting.value: + return setting.value + except Exception: + pass + # Fallback to environment variable + return settings.PAYPAL_MODE if settings.PAYPAL_MODE else "sandbox" + + +def get_paypal_client(db: Optional[Session] = None) -> PayPalHttpClient: + """ + Get PayPal HTTP client + + Args: + db: Optional database session to get credentials from database + + Returns: + PayPalHttpClient instance + """ + client_id = None + client_secret = None + mode = "sandbox" + + if db: + client_id = get_paypal_client_id(db) + client_secret = get_paypal_client_secret(db) + mode = get_paypal_mode(db) + + if not client_id: + client_id = settings.PAYPAL_CLIENT_ID + if not client_secret: + client_secret = settings.PAYPAL_CLIENT_SECRET + if not mode: + mode = settings.PAYPAL_MODE or "sandbox" + + if not client_id or not client_secret: + raise ValueError("PayPal credentials are not configured") + + # Create environment based on mode + if mode.lower() == "live": + environment = LiveEnvironment(client_id=client_id, client_secret=client_secret) + else: + environment = SandboxEnvironment(client_id=client_id, client_secret=client_secret) + + return PayPalHttpClient(environment) + + +class PayPalService: + """Service for handling PayPal payments""" + + @staticmethod + def create_order( + amount: float, + currency: str = "USD", + metadata: Optional[Dict[str, Any]] = None, + db: Optional[Session] = None + ) -> Dict[str, Any]: + """ + Create a PayPal order + + Args: + amount: Payment amount in currency units + currency: Currency code (default: USD) + metadata: Additional metadata to attach to the order + db: Optional database session to get credentials from database + + Returns: + Order object with approval URL and order ID + """ + client = get_paypal_client(db) + + # Validate amount + if amount <= 0: + raise ValueError("Amount must be greater than 0") + if amount > 100000: + raise ValueError(f"Amount ${amount:,.2f} exceeds PayPal's maximum of $100,000") + + # Create order request + request = OrdersCreateRequest() + request.prefer("return=representation") + + # Build order body + order_data = { + "intent": "CAPTURE", + "purchase_units": [ + { + "amount": { + "currency_code": currency.upper(), + "value": f"{amount:.2f}" + }, + "description": metadata.get("description", "Hotel Booking Payment") if metadata else "Hotel Booking Payment", + "custom_id": metadata.get("booking_id") if metadata else None, + } + ], + "application_context": { + "brand_name": "Hotel Booking", + "landing_page": "BILLING", + "user_action": "PAY_NOW", + "return_url": metadata.get("return_url") if metadata else None, + "cancel_url": metadata.get("cancel_url") if metadata else None, + } + } + + # Add metadata if provided + if metadata: + order_data["purchase_units"][0]["invoice_id"] = metadata.get("booking_number") + + request.request_body(order_data) + + try: + response = client.execute(request) + order = response.result + + # Extract approval URL + approval_url = None + for link in order.links: + if link.rel == "approve": + approval_url = link.href + break + + return { + "id": order.id, + "status": order.status, + "approval_url": approval_url, + "amount": amount, + "currency": currency.upper(), + } + except Exception as e: + error_msg = str(e) + # Try to extract more details from PayPal error + if hasattr(e, 'message'): + error_msg = e.message + elif hasattr(e, 'details') and e.details: + error_msg = json.dumps(e.details) + raise ValueError(f"PayPal error: {error_msg}") + + @staticmethod + def get_order( + order_id: str, + db: Optional[Session] = None + ) -> Dict[str, Any]: + """ + Retrieve an order by ID + + Args: + order_id: PayPal order ID + db: Optional database session to get credentials from database + + Returns: + Order object + """ + client = get_paypal_client(db) + + request = OrdersGetRequest(order_id) + + try: + response = client.execute(request) + order = response.result + + # Extract amount from purchase units + amount = 0.0 + currency = "USD" + if order.purchase_units and len(order.purchase_units) > 0: + amount_str = order.purchase_units[0].amount.value + currency = order.purchase_units[0].amount.currency_code + amount = float(amount_str) + + return { + "id": order.id, + "status": order.status, + "amount": amount, + "currency": currency, + "create_time": order.create_time, + "update_time": order.update_time, + } + except Exception as e: + error_msg = str(e) + if hasattr(e, 'message'): + error_msg = e.message + raise ValueError(f"PayPal error: {error_msg}") + + @staticmethod + def capture_order( + order_id: str, + db: Optional[Session] = None + ) -> Dict[str, Any]: + """ + Capture a PayPal order + + Args: + order_id: PayPal order ID + db: Optional database session to get credentials from database + + Returns: + Capture details + """ + client = get_paypal_client(db) + + request = OrdersCaptureRequest(order_id) + request.prefer("return=representation") + + try: + response = client.execute(request) + order = response.result + + # Extract capture details + capture_id = None + amount = 0.0 + currency = "USD" + status = order.status + + if order.purchase_units and len(order.purchase_units) > 0: + payments = order.purchase_units[0].payments + if payments and payments.captures and len(payments.captures) > 0: + capture = payments.captures[0] + capture_id = capture.id + amount_str = capture.amount.value + currency = capture.amount.currency_code + amount = float(amount_str) + status = capture.status + + return { + "order_id": order.id, + "capture_id": capture_id, + "status": status, + "amount": amount, + "currency": currency, + } + except Exception as e: + error_msg = str(e) + if hasattr(e, 'message'): + error_msg = e.message + raise ValueError(f"PayPal error: {error_msg}") + + @staticmethod + def confirm_payment( + order_id: str, + db: Session, + booking_id: Optional[int] = None + ) -> Dict[str, Any]: + """ + Confirm a payment and update database records + + Args: + order_id: PayPal order ID + db: Database session + booking_id: Optional booking ID for metadata lookup + + Returns: + Payment record dictionary + """ + try: + # First capture the order + capture_data = PayPalService.capture_order(order_id, db) + + # Get order details to extract booking_id from metadata if not provided + if not booking_id: + order_data = PayPalService.get_order(order_id, db) + # Try to get booking_id from custom_id in purchase_units + # Note: We'll need to store booking_id in the order metadata when creating + + # For now, we'll require booking_id to be passed + if not booking_id: + raise ValueError("Booking ID is required") + + booking = db.query(Booking).filter(Booking.id == booking_id).first() + if not booking: + raise ValueError("Booking not found") + + # Check capture status + capture_status = capture_data.get("status") + if capture_status not in ["COMPLETED", "PENDING"]: + raise ValueError(f"Payment capture not in a valid state. Status: {capture_status}") + + # Find existing payment or create new one + # First try to find by transaction_id (for already captured payments) + payment = db.query(Payment).filter( + Payment.booking_id == booking_id, + Payment.transaction_id == order_id, + Payment.payment_method == PaymentMethod.paypal + ).first() + + # If not found, try to find pending PayPal payment for this booking + if not payment: + payment = db.query(Payment).filter( + Payment.booking_id == booking_id, + Payment.payment_method == PaymentMethod.paypal, + Payment.payment_status == PaymentStatus.pending + ).order_by(Payment.created_at.desc()).first() + + amount = capture_data["amount"] + capture_id = capture_data.get("capture_id") + + if payment: + # Update existing payment + if capture_status == "COMPLETED": + payment.payment_status = PaymentStatus.completed + payment.payment_date = datetime.utcnow() + # If pending, keep as pending + payment.amount = amount + if capture_id: + payment.transaction_id = f"{order_id}|{capture_id}" + else: + # Create new payment record + payment_type = PaymentType.full + if booking.requires_deposit and not booking.deposit_paid: + payment_type = PaymentType.deposit + + payment_status_enum = PaymentStatus.completed if capture_status == "COMPLETED" else PaymentStatus.pending + payment_date = datetime.utcnow() if capture_status == "COMPLETED" else None + + transaction_id = f"{order_id}|{capture_id}" if capture_id else order_id + + payment = Payment( + booking_id=booking_id, + amount=amount, + payment_method=PaymentMethod.paypal, + payment_type=payment_type, + payment_status=payment_status_enum, + transaction_id=transaction_id, + payment_date=payment_date, + notes=f"PayPal payment - Order: {order_id}, Capture: {capture_id} (Status: {capture_status})", + ) + db.add(payment) + + # Commit payment first + db.commit() + db.refresh(payment) + + # Update booking status only if payment is completed + if payment.payment_status == PaymentStatus.completed: + db.refresh(booking) + + if payment.payment_type == PaymentType.deposit: + booking.deposit_paid = True + if booking.status == BookingStatus.pending: + booking.status = BookingStatus.confirmed + elif payment.payment_type == PaymentType.full: + total_paid = sum( + float(p.amount) for p in booking.payments + if p.payment_status == PaymentStatus.completed + ) + + if total_paid >= float(booking.total_price) or float(payment.amount) >= float(booking.total_price): + booking.status = BookingStatus.confirmed + + db.commit() + db.refresh(booking) + + # Safely get enum values + def get_enum_value(enum_obj): + if enum_obj is None: + return None + if isinstance(enum_obj, (PaymentMethod, PaymentType, PaymentStatus)): + return enum_obj.value + return enum_obj + + return { + "id": payment.id, + "booking_id": payment.booking_id, + "amount": float(payment.amount) if payment.amount else 0.0, + "payment_method": get_enum_value(payment.payment_method), + "payment_type": get_enum_value(payment.payment_type), + "payment_status": get_enum_value(payment.payment_status), + "transaction_id": payment.transaction_id, + "payment_date": payment.payment_date.isoformat() if payment.payment_date else None, + } + + except ValueError as e: + db.rollback() + raise + except Exception as e: + import traceback + error_details = traceback.format_exc() + error_msg = str(e) if str(e) else f"{type(e).__name__}: {repr(e)}" + print(f"Error in confirm_payment: {error_msg}") + print(f"Traceback: {error_details}") + db.rollback() + raise ValueError(f"Error confirming payment: {error_msg}") + diff --git a/Backend/src/utils/__pycache__/email_templates.cpython-312.pyc b/Backend/src/utils/__pycache__/email_templates.cpython-312.pyc index 6414cf352d73f5d8c6e78764c6088e0869032ef3..b9f275d247db6992e819e15e75f876f2413db39d 100644 GIT binary patch delta 21 bcmX^6g7NGNMy}Jmyj%=GAoy$}mvadKR~`n> delta 21 bcmX^6g7NGNMy}Jmyj%=GaQo>-F6R;eTh#}c diff --git a/Backend/venv/bin/prichunkpng b/Backend/venv/bin/prichunkpng new file mode 100755 index 00000000..16fdc3c7 --- /dev/null +++ b/Backend/venv/bin/prichunkpng @@ -0,0 +1,266 @@ +#!/home/gnx/Desktop/Hotel-Booking/Backend/venv/bin/python3 +# prichunkpng +# Chunk editing tool. + +""" +Make a new PNG by adding, delete, or replacing particular chunks. +""" + +import argparse +import collections + +# https://docs.python.org/2.7/library/io.html +import io +import re +import string +import struct +import sys +import zlib + +# Local module. +import png + + +Chunk = collections.namedtuple("Chunk", "type content") + + +class ArgumentError(Exception): + """A user problem with the command arguments.""" + + +def process(out, args): + """Process the PNG file args.input to the output, chunk by chunk. + Chunks can be inserted, removed, replaced, or sometimes edited. + Chunks are specified by their 4 byte Chunk Type; + see https://www.w3.org/TR/2003/REC-PNG-20031110/#5Chunk-layout . + The chunks in args.delete will be removed from the stream. + The chunks in args.chunk will be inserted into the stream + with their contents taken from the named files. + + Other options on the args object will create particular + ancillary chunks. + + .gamma -> gAMA chunk + .sigbit -> sBIT chunk + + Chunk types need not be official PNG chunks at all. + Non-standard chunks can be created. + """ + + # Convert options to chunks in the args.chunk list + if args.gamma: + v = int(round(1e5 * args.gamma)) + bs = io.BytesIO(struct.pack(">I", v)) + args.chunk.insert(0, Chunk(b"gAMA", bs)) + if args.sigbit: + v = struct.pack("%dB" % len(args.sigbit), *args.sigbit) + bs = io.BytesIO(v) + args.chunk.insert(0, Chunk(b"sBIT", bs)) + if args.iccprofile: + # http://www.w3.org/TR/PNG/#11iCCP + v = b"a color profile\x00\x00" + zlib.compress(args.iccprofile.read()) + bs = io.BytesIO(v) + args.chunk.insert(0, Chunk(b"iCCP", bs)) + if args.transparent: + # https://www.w3.org/TR/2003/REC-PNG-20031110/#11tRNS + v = struct.pack(">%dH" % len(args.transparent), *args.transparent) + bs = io.BytesIO(v) + args.chunk.insert(0, Chunk(b"tRNS", bs)) + if args.background: + # https://www.w3.org/TR/2003/REC-PNG-20031110/#11bKGD + v = struct.pack(">%dH" % len(args.background), *args.background) + bs = io.BytesIO(v) + args.chunk.insert(0, Chunk(b"bKGD", bs)) + if args.physical: + # https://www.w3.org/TR/PNG/#11pHYs + numbers = re.findall(r"(\d+\.?\d*)", args.physical) + if len(numbers) not in {1, 2}: + raise ArgumentError("One or two numbers are required for --physical") + xppu = float(numbers[0]) + if len(numbers) == 1: + yppu = xppu + else: + yppu = float(numbers[1]) + + unit_spec = 0 + if args.physical.endswith("dpi"): + # Convert from DPI to Pixels Per Metre + # 1 inch is 0.0254 metres + l = 0.0254 + xppu /= l + yppu /= l + unit_spec = 1 + elif args.physical.endswith("ppm"): + unit_spec = 1 + + v = struct.pack("!LLB", round(xppu), round(yppu), unit_spec) + bs = io.BytesIO(v) + args.chunk.insert(0, Chunk(b"pHYs", bs)) + + # Create: + # - a set of chunks to delete + # - a dict of chunks to replace + # - a list of chunk to add + + delete = set(args.delete) + # The set of chunks to replace are those where the specification says + # that there should be at most one of them. + replacing = set([b"gAMA", b"pHYs", b"sBIT", b"PLTE", b"tRNS", b"sPLT", b"IHDR"]) + replace = dict() + add = [] + + for chunk in args.chunk: + if chunk.type in replacing: + replace[chunk.type] = chunk + else: + add.append(chunk) + + input = png.Reader(file=args.input) + + return png.write_chunks(out, edit_chunks(input.chunks(), delete, replace, add)) + + +def edit_chunks(chunks, delete, replace, add): + """ + Iterate over chunks, yielding edited chunks. + Subtle: the new chunks have to have their contents .read(). + """ + for type, v in chunks: + if type in delete: + continue + if type in replace: + yield type, replace[type].content.read() + del replace[type] + continue + + if b"IDAT" <= type <= b"IDAT" and replace: + # If there are any chunks on the replace list by + # the time we reach IDAT, add then all now. + # put them all on the add list. + for chunk in replace.values(): + yield chunk.type, chunk.content.read() + replace = dict() + + if b"IDAT" <= type <= b"IDAT" and add: + # We reached IDAT; add all remaining chunks now. + for chunk in add: + yield chunk.type, chunk.content.read() + add = [] + + yield type, v + + +def chunk_name(s): + """ + Type check a chunk name option value. + """ + + # See https://www.w3.org/TR/2003/REC-PNG-20031110/#table51 + valid = len(s) == 4 and set(s) <= set(string.ascii_letters) + if not valid: + raise ValueError("Chunk name must be 4 ASCII letters") + return s.encode("ascii") + + +def comma_list(s): + """ + Convert s, a command separated list of whole numbers, + into a sequence of int. + """ + + return tuple(int(v) for v in s.split(",")) + + +def hex_color(s): + """ + Type check and convert a hex color. + """ + + if s.startswith("#"): + s = s[1:] + valid = len(s) in [1, 2, 3, 4, 6, 12] and set(s) <= set(string.hexdigits) + if not valid: + raise ValueError("colour must be 1,2,3,4,6, or 12 hex-digits") + + # For the 4-bit RGB, expand to 8-bit, by repeating digits. + if len(s) == 3: + s = "".join(c + c for c in s) + + if len(s) in [1, 2, 4]: + # Single grey value. + return (int(s, 16),) + + if len(s) in [6, 12]: + w = len(s) // 3 + return tuple(int(s[i : i + w], 16) for i in range(0, len(s), w)) + + +def main(argv=None): + if argv is None: + argv = sys.argv + + argv = argv[1:] + + parser = argparse.ArgumentParser() + parser.add_argument("--gamma", type=float, help="Gamma value for gAMA chunk") + parser.add_argument( + "--physical", + type=str, + metavar="x[,y][dpi|ppm]", + help="specify intended pixel size or aspect ratio", + ) + parser.add_argument( + "--sigbit", + type=comma_list, + metavar="D[,D[,D[,D]]]", + help="Number of significant bits in each channel", + ) + parser.add_argument( + "--iccprofile", + metavar="file.iccp", + type=argparse.FileType("rb"), + help="add an ICC Profile from a file", + ) + parser.add_argument( + "--transparent", + type=hex_color, + metavar="#RRGGBB", + help="Specify the colour that is transparent (tRNS chunk)", + ) + parser.add_argument( + "--background", + type=hex_color, + metavar="#RRGGBB", + help="background colour for bKGD chunk", + ) + parser.add_argument( + "--delete", + action="append", + default=[], + type=chunk_name, + help="delete the chunk", + ) + parser.add_argument( + "--chunk", + action="append", + nargs=2, + default=[], + type=str, + help="insert chunk, taking contents from file", + ) + parser.add_argument( + "input", nargs="?", default="-", type=png.cli_open, metavar="PNG" + ) + + args = parser.parse_args(argv) + + # Reprocess the chunk arguments, converting each pair into a Chunk. + args.chunk = [ + Chunk(chunk_name(type), open(path, "rb")) for type, path in args.chunk + ] + + return process(png.binary_stdout(), args) + + +if __name__ == "__main__": + main() diff --git a/Backend/venv/bin/pricolpng b/Backend/venv/bin/pricolpng new file mode 100755 index 00000000..f79cbc29 --- /dev/null +++ b/Backend/venv/bin/pricolpng @@ -0,0 +1,81 @@ +#!/home/gnx/Desktop/Hotel-Booking/Backend/venv/bin/python3 + +# http://www.python.org/doc/2.4.4/lib/module-itertools.html +import itertools +import sys + +import png + +Description = """Join PNG images in a column top-to-bottom.""" + + +class FormatError(Exception): + """ + Some problem with the image format. + """ + + +def join_col(out, l): + """ + Join the list of images. + All input images must be same width and + have the same number of channels. + They are joined top-to-bottom. + `out` is the (open file) destination for the output image. + `l` should be a list of open files (the input image files). + """ + + image = 0 + stream = 0 + + # When the first image is read, this will be the reference width, + # which must be the same for all images. + width = None + # Total height (accumulated as images are read). + height = 0 + # Accumulated rows. + rows = [] + + for f in l: + stream += 1 + while True: + im = png.Reader(file=f) + try: + im.preamble() + except EOFError: + break + image += 1 + + if not width: + width = im.width + elif width != im.width: + raise FormatError('Image %d in stream %d has width %d; does not match %d.' % + (image, stream, im.width, width)) + + height += im.height + # Various bugs here because different numbers of channels and depths go wrong. + w, h, p, info = im.asDirect() + rows.extend(p) + + # Alarmingly re-use the last info object. + tinfo = dict(info) + del tinfo['size'] + w = png.Writer(width, height, **tinfo) + + w.write(out, rows) + + +def main(argv): + import argparse + + parser = argparse.ArgumentParser(description=Description) + parser.add_argument( + "input", nargs="*", default="-", type=png.cli_open, metavar="PNG" + ) + + args = parser.parse_args() + + return join_col(png.binary_stdout(), args.input) + +if __name__ == '__main__': + main(sys.argv) diff --git a/Backend/venv/bin/priditherpng b/Backend/venv/bin/priditherpng new file mode 100755 index 00000000..e3e5cb57 --- /dev/null +++ b/Backend/venv/bin/priditherpng @@ -0,0 +1,254 @@ +#!/home/gnx/Desktop/Hotel-Booking/Backend/venv/bin/python3 + +# pipdither +# Error Diffusing image dithering. +# Now with serpentine scanning. + +# See http://www.efg2.com/Lab/Library/ImageProcessing/DHALF.TXT + +# http://www.python.org/doc/2.4.4/lib/module-bisect.html +from bisect import bisect_left + + +import png + + +def dither( + out, + input, + bitdepth=1, + linear=False, + defaultgamma=1.0, + targetgamma=None, + cutoff=0.5, # see :cutoff:default +): + """Dither the input PNG `inp` into an image with a smaller bit depth + and write the result image onto `out`. `bitdepth` specifies the bit + depth of the new image. + + Normally the source image gamma is honoured (the image is + converted into a linear light space before being dithered), but + if the `linear` argument is true then the image is treated as + being linear already: no gamma conversion is done (this is + quicker, and if you don't care much about accuracy, it won't + matter much). + + Images with no gamma indication (no ``gAMA`` chunk) are normally + treated as linear (gamma = 1.0), but often it can be better + to assume a different gamma value: For example continuous tone + photographs intended for presentation on the web often carry + an implicit assumption of being encoded with a gamma of about + 0.45 (because that's what you get if you just "blat the pixels" + onto a PC framebuffer), so ``defaultgamma=0.45`` might be a + good idea. `defaultgamma` does not override a gamma value + specified in the file itself: It is only used when the file + does not specify a gamma. + + If you (pointlessly) specify both `linear` and `defaultgamma`, + `linear` wins. + + The gamma of the output image is, by default, the same as the input + image. The `targetgamma` argument can be used to specify a + different gamma for the output image. This effectively recodes the + image to a different gamma, dithering as we go. The gamma specified + is the exponent used to encode the output file (and appears in the + output PNG's ``gAMA`` chunk); it is usually less than 1. + + """ + + # Encoding is what happened when the PNG was made (and also what + # happens when we output the PNG). Decoding is what we do to the + # source PNG in order to process it. + + # The dithering algorithm is not completely general; it + # can only do bit depth reduction, not arbitrary palette changes. + import operator + + maxval = 2 ** bitdepth - 1 + r = png.Reader(file=input) + + _, _, pixels, info = r.asDirect() + planes = info["planes"] + # :todo: make an Exception + assert planes == 1 + width = info["size"][0] + sourcemaxval = 2 ** info["bitdepth"] - 1 + + if linear: + gamma = 1 + else: + gamma = info.get("gamma") or defaultgamma + + # Calculate an effective gamma for input and output; + # then build tables using those. + + # `gamma` (whether it was obtained from the input file or an + # assumed value) is the encoding gamma. + # We need the decoding gamma, which is the reciprocal. + decode = 1.0 / gamma + + # `targetdecode` is the assumed gamma that is going to be used + # to decoding the target PNG. + # Note that even though we will _encode_ the target PNG we + # still need the decoding gamma, because + # the table we use maps from PNG pixel value to linear light level. + if targetgamma is None: + targetdecode = decode + else: + targetdecode = 1.0 / targetgamma + + incode = build_decode_table(sourcemaxval, decode) + + # For encoding, we still build a decode table, because we + # use it inverted (searching with bisect). + outcode = build_decode_table(maxval, targetdecode) + + # The table used for choosing output codes. These values represent + # the cutoff points between two adjacent output codes. + # The cutoff parameter can be varied between 0 and 1 to + # preferentially choose lighter (when cutoff > 0.5) or + # darker (when cutoff < 0.5) values. + # :cutoff:default: The default for this used to be 0.75, but + # testing by drj on 2021-07-30 showed that this produces + # banding when dithering left-to-right gradients; + # test with: + # priforgepng grl | priditherpng | kitty icat + choosecode = list(zip(outcode[1:], outcode)) + p = cutoff + choosecode = [x[0] * p + x[1] * (1.0 - p) for x in choosecode] + + rows = repeat_header(pixels) + dithered_rows = run_dither(incode, choosecode, outcode, width, rows) + dithered_rows = remove_header(dithered_rows) + + info["bitdepth"] = bitdepth + info["gamma"] = 1.0 / targetdecode + w = png.Writer(**info) + w.write(out, dithered_rows) + + +def build_decode_table(maxval, gamma): + """Build a lookup table for decoding; + table converts from pixel values to linear space. + """ + + assert maxval == int(maxval) + assert maxval > 0 + + f = 1.0 / maxval + table = [f * v for v in range(maxval + 1)] + if gamma != 1.0: + table = [v ** gamma for v in table] + return table + + +def run_dither(incode, choosecode, outcode, width, rows): + """ + Run an serpentine dither. + Using the incode and choosecode tables. + """ + + # Errors diffused downwards (into next row) + ed = [0.0] * width + flipped = False + for row in rows: + # Convert to linear... + row = [incode[v] for v in row] + # Add errors... + row = [e + v for e, v in zip(ed, row)] + + if flipped: + row = row[::-1] + targetrow = [0] * width + + for i, v in enumerate(row): + # `it` will be the index of the chosen target colour; + it = bisect_left(choosecode, v) + targetrow[i] = it + t = outcode[it] + # err is the error that needs distributing. + err = v - t + + # Sierra "Filter Lite" distributes * 2 + # as per this diagram. 1 1 + ef = err * 0.5 + # :todo: consider making rows one wider at each end and + # removing "if"s + if i + 1 < width: + row[i + 1] += ef + ef *= 0.5 + ed[i] = ef + if i: + ed[i - 1] += ef + + if flipped: + ed = ed[::-1] + targetrow = targetrow[::-1] + yield targetrow + flipped = not flipped + + +WARMUP_ROWS = 32 + + +def repeat_header(rows): + """Repeat the first row, to "warm up" the error register.""" + for row in rows: + yield row + for _ in range(WARMUP_ROWS): + yield row + break + yield from rows + + +def remove_header(rows): + """Remove the same number of rows that repeat_header added.""" + + for _ in range(WARMUP_ROWS): + next(rows) + yield from rows + + +def main(argv=None): + import sys + + # https://docs.python.org/3.5/library/argparse.html + import argparse + + parser = argparse.ArgumentParser() + + if argv is None: + argv = sys.argv + + progname, *args = argv + + parser.add_argument("--bitdepth", type=int, default=1, help="bitdepth of output") + parser.add_argument( + "--cutoff", + type=float, + default=0.5, + help="cutoff to select adjacent output values", + ) + parser.add_argument( + "--defaultgamma", + type=float, + default=1.0, + help="gamma value to use when no gamma in input", + ) + parser.add_argument("--linear", action="store_true", help="force linear input") + parser.add_argument( + "--targetgamma", + type=float, + help="gamma to use in output (target), defaults to input gamma", + ) + parser.add_argument( + "input", nargs="?", default="-", type=png.cli_open, metavar="PNG" + ) + + ns = parser.parse_args(args) + + return dither(png.binary_stdout(), **vars(ns)) + + +if __name__ == "__main__": + main() diff --git a/Backend/venv/bin/priforgepng b/Backend/venv/bin/priforgepng new file mode 100755 index 00000000..519558ec --- /dev/null +++ b/Backend/venv/bin/priforgepng @@ -0,0 +1,275 @@ +#!/home/gnx/Desktop/Hotel-Booking/Backend/venv/bin/python3 +# priforgepng + +"""Forge PNG image from raw computation.""" + +from array import array +from fractions import Fraction + +import argparse +import re +import sys + +import png + + +def gen_glr(x): + """Gradient Left to Right""" + return x + + +def gen_grl(x): + """Gradient Right to Left""" + return 1 - x + + +def gen_gtb(x, y): + """Gradient Top to Bottom""" + return y + + +def gen_gbt(x, y): + """Gradient Bottom to Top""" + return 1.0 - y + + +def gen_rtl(x, y): + """Radial gradient, centred at Top-Left""" + return max(1 - (float(x) ** 2 + float(y) ** 2) ** 0.5, 0.0) + + +def gen_rctr(x, y): + """Radial gradient, centred at Centre""" + return gen_rtl(float(x) - 0.5, float(y) - 0.5) + + +def gen_rtr(x, y): + """Radial gradient, centred at Top-Right""" + return gen_rtl(1.0 - float(x), y) + + +def gen_rbl(x, y): + """Radial gradient, centred at Bottom-Left""" + return gen_rtl(x, 1.0 - float(y)) + + +def gen_rbr(x, y): + """Radial gradient, centred at Bottom-Right""" + return gen_rtl(1.0 - float(x), 1.0 - float(y)) + + +def stripe(x, n): + return int(x * n) & 1 + + +def gen_vs2(x): + """2 Vertical Stripes""" + return stripe(x, 2) + + +def gen_vs4(x): + """4 Vertical Stripes""" + return stripe(x, 4) + + +def gen_vs10(x): + """10 Vertical Stripes""" + return stripe(x, 10) + + +def gen_hs2(x, y): + """2 Horizontal Stripes""" + return stripe(float(y), 2) + + +def gen_hs4(x, y): + """4 Horizontal Stripes""" + return stripe(float(y), 4) + + +def gen_hs10(x, y): + """10 Horizontal Stripes""" + return stripe(float(y), 10) + + +def gen_slr(x, y): + """10 diagonal stripes, rising from Left to Right""" + return stripe(x + y, 10) + + +def gen_srl(x, y): + """10 diagonal stripes, rising from Right to Left""" + return stripe(1 + x - y, 10) + + +def checker(x, y, n): + return stripe(x, n) ^ stripe(y, n) + + +def gen_ck8(x, y): + """8 by 8 checkerboard""" + return checker(x, y, 8) + + +def gen_ck15(x, y): + """15 by 15 checkerboard""" + return checker(x, y, 15) + + +def gen_zero(x): + """All zero (black)""" + return 0 + + +def gen_one(x): + """All one (white)""" + return 1 + + +def yield_fun_rows(size, bitdepth, pattern): + """ + Create a single channel (monochrome) test pattern. + Yield each row in turn. + """ + + width, height = size + + maxval = 2 ** bitdepth - 1 + if maxval > 255: + typecode = "H" + else: + typecode = "B" + pfun = pattern_function(pattern) + + # The coordinates are an integer + 0.5, + # effectively sampling each pixel at its centre. + # This is morally better, and produces all 256 sample values + # in a 256-pixel wide gradient. + + # We make a list of x coordinates here and re-use it, + # because Fraction instances are slow to allocate. + xs = [Fraction(x, 2 * width) for x in range(1, 2 * width, 2)] + + # The general case is a function in x and y, + # but if the function only takes an x argument, + # it's handled in a special case that is a lot faster. + if n_args(pfun) == 2: + for y in range(height): + a = array(typecode) + fy = Fraction(Fraction(y + 0.5), height) + for fx in xs: + a.append(int(round(maxval * pfun(fx, fy)))) + yield a + return + + # For functions in x only, it's a _lot_ faster + # to generate a single row and repeatedly yield it + a = array(typecode) + for fx in xs: + a.append(int(round(maxval * pfun(x=fx)))) + for y in range(height): + yield a + return + + +def generate(args): + """ + Create a PNG test image and write the file to stdout. + + `args` should be an argparse Namespace instance or similar. + """ + + size = args.size + bitdepth = args.depth + + out = png.binary_stdout() + + for pattern in args.pattern: + rows = yield_fun_rows(size, bitdepth, pattern) + writer = png.Writer( + size[0], size[1], bitdepth=bitdepth, greyscale=True, alpha=False + ) + writer.write(out, rows) + + +def n_args(fun): + """Number of arguments in fun's argument list.""" + return fun.__code__.co_argcount + + +def pattern_function(pattern): + """From `pattern`, a string, + return the function for that pattern. + """ + + lpat = pattern.lower() + for name, fun in globals().items(): + parts = name.split("_") + if parts[0] != "gen": + continue + if parts[1] == lpat: + return fun + + +def patterns(): + """ + List the patterns. + """ + + for name, fun in globals().items(): + parts = name.split("_") + if parts[0] == "gen": + yield parts[1], fun.__doc__ + + +def dimensions(s): + """ + Typecheck the --size option, which should be + one or two comma separated numbers. + Example: "64,40". + """ + + tupl = re.findall(r"\d+", s) + if len(tupl) not in (1, 2): + raise ValueError("%r should be width or width,height" % s) + if len(tupl) == 1: + tupl *= 2 + assert len(tupl) == 2 + return list(map(int, tupl)) + + +def main(argv=None): + if argv is None: + argv = sys.argv + parser = argparse.ArgumentParser(description="Forge greyscale PNG patterns") + + parser.add_argument( + "-l", "--list", action="store_true", help="print list of patterns and exit" + ) + parser.add_argument( + "-d", "--depth", default=8, type=int, metavar="N", help="N bits per pixel" + ) + parser.add_argument( + "-s", + "--size", + default=[256, 256], + type=dimensions, + metavar="w[,h]", + help="width and height of the image in pixels", + ) + parser.add_argument("pattern", nargs="*", help="name of pattern") + + args = parser.parse_args(argv[1:]) + + if args.list: + for name, doc in sorted(patterns()): + print(name, doc, sep="\t") + return + + if not args.pattern: + parser.error("--list or pattern is required") + return generate(args) + + +if __name__ == "__main__": + main() diff --git a/Backend/venv/bin/prigreypng b/Backend/venv/bin/prigreypng new file mode 100755 index 00000000..0cb6cfc4 --- /dev/null +++ b/Backend/venv/bin/prigreypng @@ -0,0 +1,72 @@ +#!/home/gnx/Desktop/Hotel-Booking/Backend/venv/bin/python3 + +# prigreypng + +# Convert image to grey (L, or LA), but only if that involves no colour change. + +import argparse +import array + + +import png + + +def as_grey(out, inp): + """ + Convert image to greyscale, but only when no colour change. + This works by using the input G channel (green) as + the output L channel (luminance) and + checking that every pixel is grey as we go. + A non-grey pixel will raise an error. + """ + + r = png.Reader(file=inp) + _, _, rows, info = r.asDirect() + if info["greyscale"]: + w = png.Writer(**info) + return w.write(out, rows) + + planes = info["planes"] + targetplanes = planes - 2 + alpha = info["alpha"] + width, height = info["size"] + typecode = "BH"[info["bitdepth"] > 8] + + # Values per target row + vpr = width * targetplanes + + def iterasgrey(): + for i, row in enumerate(rows): + row = array.array(typecode, row) + targetrow = array.array(typecode, [0] * vpr) + # Copy G (and possibly A) channel. + green = row[0::planes] + if alpha: + targetrow[0::2] = green + targetrow[1::2] = row[3::4] + else: + targetrow = green + # Check R and B channel match. + if green != row[0::planes] or green != row[2::planes]: + raise ValueError("Row %i contains non-grey pixel." % i) + yield targetrow + + info["greyscale"] = True + del info["planes"] + w = png.Writer(**info) + return w.write(out, iterasgrey()) + + +def main(argv=None): + parser = argparse.ArgumentParser() + parser.add_argument( + "input", nargs="?", default="-", type=png.cli_open, metavar="PNG" + ) + args = parser.parse_args() + return as_grey(png.binary_stdout(), args.input) + + +if __name__ == "__main__": + import sys + + sys.exit(main()) diff --git a/Backend/venv/bin/pripalpng b/Backend/venv/bin/pripalpng new file mode 100755 index 00000000..362eb584 --- /dev/null +++ b/Backend/venv/bin/pripalpng @@ -0,0 +1,111 @@ +#!/home/gnx/Desktop/Hotel-Booking/Backend/venv/bin/python3 +# pripalpng + + +"""Convert to Palette PNG (without changing colours)""" + +import argparse +import collections + +# https://docs.python.org/2.7/library/io.html +import io +import string +import zlib + +# Local module. +import png + + +def make_inverse_palette(rows, channels): + """ + The inverse palette maps from tuple to palette index. + """ + + palette = {} + + for row in rows: + for pixel in png.group(row, channels): + if pixel in palette: + continue + palette[pixel] = len(palette) + return palette + + +def palette_convert(out, inp, palette_file): + """ + Convert PNG image in `inp` to use a palette, colour type 3, + and write converted image to `out`. + + `palette_file` is a file descriptor for the palette to use. + + If `palette_file` is None, then `inp` is used as the palette. + """ + + if palette_file is None: + inp, palette_file = palette_file, inp + + reader = png.Reader(file=palette_file) + w, h, rows, info = asRGBorA8(reader) + channels = info["planes"] + if not inp: + rows = list(rows) + + palette_map = make_inverse_palette(rows, channels) + + if inp: + reader = png.Reader(file=inp) + w, h, rows, info = asRGBorA8(reader) + channels = info["planes"] + + # Default for colours not in palette is to use last entry. + last = len(palette_map) - 1 + + def map_pixel(p): + return palette_map.get(p, last) + + def convert_rows(): + for row in rows: + yield [map_pixel(p) for p in png.group(row, channels)] + + # Make a palette by sorting the pixels according to their index. + palette = sorted(palette_map.keys(), key=palette_map.get) + pal_info = dict(size=info["size"], palette=palette) + + w = png.Writer(**pal_info) + w.write(out, convert_rows()) + + +def asRGBorA8(reader): + """ + Return (width, height, rows, info) converting to RGB, + or RGBA if original has an alpha channel. + """ + _, _, _, info = reader.read() + if info["alpha"]: + return reader.asRGBA8() + else: + return reader.asRGB8() + + +def main(argv=None): + import sys + import re + + if argv is None: + argv = sys.argv + + argv = argv[1:] + + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--palette", type=png.cli_open) + parser.add_argument( + "input", nargs="?", default="-", type=png.cli_open, metavar="PNG" + ) + + args = parser.parse_args(argv) + + palette_convert(png.binary_stdout(), args.input, args.palette) + + +if __name__ == "__main__": + main() diff --git a/Backend/venv/bin/pripamtopng b/Backend/venv/bin/pripamtopng new file mode 100755 index 00000000..a068adab --- /dev/null +++ b/Backend/venv/bin/pripamtopng @@ -0,0 +1,355 @@ +#!/home/gnx/Desktop/Hotel-Booking/Backend/venv/bin/python3 + +# pripamtopng +# +# Python Raster Image PAM to PNG + +import array +import struct +import sys + +import png + +Description = """Convert NetPBM PAM/PNM format files to PNG.""" + + +def read_pam_header(infile): + """ + Read (the rest of a) PAM header. + `infile` should be positioned immediately after the initial 'P7' line + (at the beginning of the second line). + Returns are as for `read_pnm_header`. + """ + + # Unlike PBM, PGM, and PPM, we can read the header a line at a time. + header = dict() + while True: + line = infile.readline().strip() + if line == b"ENDHDR": + break + if not line: + raise EOFError("PAM ended prematurely") + if line[0] == b"#": + continue + line = line.split(None, 1) + key = line[0] + if key not in header: + header[key] = line[1] + else: + header[key] += b" " + line[1] + + required = [b"WIDTH", b"HEIGHT", b"DEPTH", b"MAXVAL"] + required_str = b", ".join(required).decode("ascii") + result = [] + for token in required: + if token not in header: + raise png.Error("PAM file must specify " + required_str) + try: + x = int(header[token]) + except ValueError: + raise png.Error(required_str + " must all be valid integers") + if x <= 0: + raise png.Error(required_str + " must all be positive integers") + result.append(x) + + return (b"P7",) + tuple(result) + + +def read_pnm_header(infile): + """ + Read a PNM header, returning (format,width,height,depth,maxval). + Also reads a PAM header (by using a helper function). + `width` and `height` are in pixels. + `depth` is the number of channels in the image; + for PBM and PGM it is synthesized as 1, for PPM as 3; + for PAM images it is read from the header. + `maxval` is synthesized (as 1) for PBM images. + """ + + # Generally, see http://netpbm.sourceforge.net/doc/ppm.html + # and http://netpbm.sourceforge.net/doc/pam.html + + # Technically 'P7' must be followed by a newline, + # so by using rstrip() we are being liberal in what we accept. + # I think this is acceptable. + magic = infile.read(3).rstrip() + if magic == b"P7": + # PAM header parsing is completely different. + return read_pam_header(infile) + + # Expected number of tokens in header (3 for P4, 4 for P6) + expected = 4 + pbm = (b"P1", b"P4") + if magic in pbm: + expected = 3 + header = [magic] + + # We must read the rest of the header byte by byte because + # the final whitespace character may not be a newline. + # Of course all PNM files in the wild use a newline at this point, + # but we are strong and so we avoid + # the temptation to use readline. + bs = bytearray() + backs = bytearray() + + def next(): + if backs: + c = bytes(backs[0:1]) + del backs[0] + else: + c = infile.read(1) + if not c: + raise png.Error("premature EOF reading PNM header") + bs.extend(c) + return c + + def backup(): + """Push last byte of token onto front of backs.""" + backs.insert(0, bs[-1]) + del bs[-1] + + def ignore(): + del bs[:] + + def tokens(): + ls = lexInit + while True: + token, ls = ls() + if token: + yield token + + def lexInit(): + c = next() + # Skip comments + if b"#" <= c <= b"#": + while c not in b"\n\r": + c = next() + ignore() + return None, lexInit + # Skip whitespace (that precedes a token) + if c.isspace(): + ignore() + return None, lexInit + if not c.isdigit(): + raise png.Error("unexpected byte %r found in header" % c) + return None, lexNumber + + def lexNumber(): + # According to the specification it is legal to have comments + # that appear in the middle of a token. + # I've never seen it; and, + # it's a bit awkward to code good lexers in Python (no goto). + # So we break on such cases. + c = next() + while c.isdigit(): + c = next() + backup() + token = bs[:] + ignore() + return token, lexInit + + for token in tokens(): + # All "tokens" are decimal integers, so convert them here. + header.append(int(token)) + if len(header) == expected: + break + + final = next() + if not final.isspace(): + raise png.Error("expected header to end with whitespace, not %r" % final) + + if magic in pbm: + # synthesize a MAXVAL + header.append(1) + depth = (1, 3)[magic == b"P6"] + return header[0], header[1], header[2], depth, header[3] + + +def convert_pnm_plain(w, infile, outfile): + """ + Convert a plain PNM file containing raw pixel data into + a PNG file with the parameters set in the writer object. + Works for plain PGM formats. + """ + + # See convert_pnm_binary for the corresponding function for + # binary PNM formats. + + rows = scan_rows_from_file_plain(infile, w.width, w.height, w.planes) + w.write(outfile, rows) + + +def scan_rows_from_file_plain(infile, width, height, planes): + """ + Generate a sequence of rows from the input file `infile`. + The input file should be in a "Netpbm-like" plain format. + The input file should be positioned at the beginning of the + first value (that is, immediately after the header). + The number of pixels to read is taken from + the image dimensions (`width`, `height`, `planes`). + + Each row is yielded as a single sequence of values. + """ + + # Values per row + vpr = width * planes + + values = [] + rows_output = 0 + + # The core problem is that input lines (text lines) may not + # correspond with pixel rows. We use two nested loops. + # The outer loop reads the input one text line at a time; + # this will contain a whole number of values, which are + # added to the `values` list. + # The inner loop strips the first `vpr` values from the + # list, until there aren't enough. + # Note we can't tell how many iterations the inner loop will + # run for, it could be 0 (if not enough values were read to + # make a whole pixel row) or many (if the entire image were + # on one input line), or somewhere in between. + # In PNM there is in general no requirement to have + # correspondence between text lines and pixel rows. + + for inp in infile: + values.extend(map(int, inp.split())) + while len(values) >= vpr: + yield values[:vpr] + del values[:vpr] + rows_output += 1 + if rows_output >= height: + # Diagnostic here if there are spare values? + return + # Diagnostic here for early EOF? + + +def convert_pnm_binary(w, infile, outfile): + """ + Convert a PNM file containing raw pixel data into + a PNG file with the parameters set in the writer object. + Works for (binary) PGM, PPM, and PAM formats. + """ + + rows = scan_rows_from_file(infile, w.width, w.height, w.planes, w.bitdepth) + w.write(outfile, rows) + + +def scan_rows_from_file(infile, width, height, planes, bitdepth): + """ + Generate a sequence of rows from the input file `infile`. + The input file should be in a "Netpbm-like" binary format. + The input file should be positioned at the beginning of the first pixel. + The number of pixels to read is taken from + the image dimensions (`width`, `height`, `planes`); + the number of bytes per value is implied by `bitdepth`. + Each row is yielded as a single sequence of values. + """ + + # Values per row + vpr = width * planes + # Bytes per row + bpr = vpr + if bitdepth > 8: + assert bitdepth == 16 + bpr *= 2 + fmt = ">%dH" % vpr + + def line(): + return array.array("H", struct.unpack(fmt, infile.read(bpr))) + + else: + + def line(): + return array.array("B", infile.read(bpr)) + + for y in range(height): + yield line() + + +def parse_args(args): + """ + Create a parser and parse the command line arguments. + """ + from argparse import ArgumentParser + + parser = ArgumentParser(description=Description) + version = "%(prog)s " + png.__version__ + parser.add_argument("--version", action="version", version=version) + parser.add_argument( + "-c", + "--compression", + type=int, + metavar="level", + help="zlib compression level (0-9)", + ) + parser.add_argument( + "input", + nargs="?", + default="-", + type=png.cli_open, + metavar="PAM/PNM", + help="input PAM/PNM file to convert", + ) + args = parser.parse_args(args) + return args + + +def main(argv=None): + if argv is None: + argv = sys.argv + + args = parse_args(argv[1:]) + + # Prepare input and output files + infile = args.input + + # Call after parsing, so that --version and --help work. + outfile = png.binary_stdout() + + # Encode PNM to PNG + format, width, height, depth, maxval = read_pnm_header(infile) + + ok_formats = (b"P2", b"P5", b"P6", b"P7") + if format not in ok_formats: + raise NotImplementedError("file format %s not supported" % format) + + # The NetPBM depth (number of channels) completely + # determines the PNG format. + # Observe: + # - L, LA, RGB, RGBA are the 4 modes supported by PNG; + # - they correspond to 1, 2, 3, 4 channels respectively. + # We use the number of channels in the source image to + # determine which one we have. + # We ignore the NetPBM image type and the PAM TUPLTYPE. + greyscale = depth <= 2 + pamalpha = depth in (2, 4) + supported = [2 ** x - 1 for x in range(1, 17)] + try: + mi = supported.index(maxval) + except ValueError: + raise NotImplementedError( + "input maxval (%s) not in supported list %s" % (maxval, str(supported)) + ) + bitdepth = mi + 1 + writer = png.Writer( + width, + height, + greyscale=greyscale, + bitdepth=bitdepth, + alpha=pamalpha, + compression=args.compression, + ) + + plain = format in (b"P1", b"P2", b"P3") + if plain: + convert_pnm_plain(writer, infile, outfile) + else: + convert_pnm_binary(writer, infile, outfile) + + +if __name__ == "__main__": + try: + sys.exit(main()) + except png.Error as e: + print(e, file=sys.stderr) + sys.exit(99) diff --git a/Backend/venv/bin/priplan9topng b/Backend/venv/bin/priplan9topng new file mode 100755 index 00000000..3bc2577e --- /dev/null +++ b/Backend/venv/bin/priplan9topng @@ -0,0 +1,540 @@ +#!/home/gnx/Desktop/Hotel-Booking/Backend/venv/bin/python3 + +# Imported from //depot/prj/plan9topam/master/code/plan9topam.py#4 on +# 2009-06-15. + +"""Command line tool to convert from Plan 9 image format to PNG format. + +Plan 9 image format description: +https://plan9.io/magic/man2html/6/image + +Where possible this tool will use unbuffered read() calls, +so that when finished the file offset is exactly at the end of +the image data. +This is useful for Plan9 subfont files which place font metric +data immediately after the image. +""" + +# Test materials + +# asset/left.bit is a Plan 9 image file, a leftwards facing Glenda. +# Other materials have to be scrounged from the internet. +# https://plan9.io/sources/plan9/sys/games/lib/sokoban/images/cargo.bit + +import array +import collections +import io + +# http://www.python.org/doc/2.3.5/lib/module-itertools.html +import itertools +import os + +# http://www.python.org/doc/2.3.5/lib/module-re.html +import re +import struct + +# http://www.python.org/doc/2.3.5/lib/module-sys.html +import sys + +# https://docs.python.org/3/library/tarfile.html +import tarfile + + +# https://pypi.org/project/pypng/ +import png + +# internal +import prix + + +class Error(Exception): + """Some sort of Plan 9 image error.""" + + +def block(s, n): + return zip(*[iter(s)] * n) + + +def plan9_as_image(inp): + """Represent a Plan 9 image file as a png.Image instance, so + that it can be written as a PNG file. + Works with compressed input files and may work with uncompressed files. + """ + + # Use inp.raw if available. + # This avoids buffering and means that when the image is processed, + # the resulting input stream is cued up exactly at the end + # of the image. + inp = getattr(inp, "raw", inp) + + info, blocks = plan9_open_image(inp) + + rows, infodict = plan9_image_rows(blocks, info) + + return png.Image(rows, infodict) + + +def plan9_open_image(inp): + """Open a Plan9 image file (`inp` should be an already open + file object), and return (`info`, `blocks`) pair. + `info` should be a Plan9 5-tuple; + `blocks` is the input, and it should yield (`row`, `data`) + pairs (see :meth:`pixmeta`). + """ + + r = inp.read(11) + if r == b"compressed\n": + info, blocks = decompress(inp) + else: + # Since Python 3, there is a good chance that this path + # doesn't work. + info, blocks = glue(inp, r) + + return info, blocks + + +def glue(f, r): + """Return (info, stream) pair, given `r` the initial portion of + the metadata that has already been read from the stream `f`. + """ + + r = r + f.read(60 - len(r)) + return (meta(r), f) + + +def meta(r): + """Convert 60 byte bytestring `r`, the metadata from an image file. + Returns a 5-tuple (*chan*,*minx*,*miny*,*limx*,*limy*). + 5-tuples may settle into lists in transit. + + As per https://plan9.io/magic/man2html/6/image the metadata + comprises 5 words separated by blanks. + As it happens each word starts at an index that is a multiple of 12, + but this routine does not care about that. + """ + + r = r.split() + # :todo: raise FormatError + if 5 != len(r): + raise Error("Expected 5 space-separated words in metadata") + r = [r[0]] + [int(x) for x in r[1:]] + return r + + +def bitdepthof(chan): + """Return the bitdepth for a Plan9 pixel format string.""" + + maxd = 0 + for c in re.findall(rb"[a-z]\d*", chan): + if c[0] != "x": + maxd = max(maxd, int(c[1:])) + return maxd + + +def maxvalof(chan): + """Return the netpbm MAXVAL for a Plan9 pixel format string.""" + + bitdepth = bitdepthof(chan) + return (2 ** bitdepth) - 1 + + +def plan9_image_rows(blocks, metadata): + """ + Convert (uncompressed) Plan 9 image file to pair of (*rows*, *info*). + This is intended to be used by PyPNG format. + *info* is the image info (metadata) returned in a dictionary, + *rows* is an iterator that yields each row in + boxed row flat pixel format. + + `blocks`, should be an iterator of (`row`, `data`) pairs. + """ + + chan, minx, miny, limx, limy = metadata + rows = limy - miny + width = limx - minx + nchans = len(re.findall(b"[a-wyz]", chan)) + alpha = b"a" in chan + # Iverson's convention for the win! + ncolour = nchans - alpha + greyscale = ncolour == 1 + bitdepth = bitdepthof(chan) + maxval = maxvalof(chan) + + # PNG style info dict. + meta = dict( + size=(width, rows), + bitdepth=bitdepth, + greyscale=greyscale, + alpha=alpha, + planes=nchans, + ) + + arraycode = "BH"[bitdepth > 8] + + return ( + map( + lambda x: array.array(arraycode, itertools.chain(*x)), + block(unpack(blocks, rows, width, chan, maxval), width), + ), + meta, + ) + + +def unpack(f, rows, width, chan, maxval): + """Unpack `f` into pixels. + `chan` describes the pixel format using + the Plan9 syntax ("k8", "r8g8b8", and so on). + Assumes the pixel format has a total channel bit depth + that is either a multiple or a divisor of 8 + (the Plan9 image specification requires this). + `f` should be an iterator that returns blocks of input such that + each block contains a whole number of pixels. + The return value is an iterator that yields each pixel as an n-tuple. + """ + + def mask(w): + """An integer, to be used as a mask, with bottom `w` bits set to 1.""" + + return (1 << w) - 1 + + def deblock(f, depth, width): + """A "packer" used to convert multiple bytes into single pixels. + `depth` is the pixel depth in bits (>= 8), `width` is the row width in + pixels. + """ + + w = depth // 8 + i = 0 + for block in f: + for i in range(len(block) // w): + p = block[w * i : w * (i + 1)] + i += w + # Convert little-endian p to integer x + x = 0 + s = 1 # scale + for j in p: + x += s * j + s <<= 8 + yield x + + def bitfunge(f, depth, width): + """A "packer" used to convert single bytes into multiple pixels. + Depth is the pixel depth (< 8), width is the row width in pixels. + """ + + assert 8 / depth == 8 // depth + + for block in f: + col = 0 + for x in block: + for j in range(8 // depth): + yield x >> (8 - depth) + col += 1 + if col == width: + # A row-end forces a new byte even if + # we haven't consumed all of the current byte. + # Effectively rows are bit-padded to make + # a whole number of bytes. + col = 0 + break + x <<= depth + + # number of bits in each channel + bits = [int(d) for d in re.findall(rb"\d+", chan)] + # colr of each channel + # (r, g, b, k for actual colours, and + # a, m, x for alpha, map-index, and unused) + colr = re.findall(b"[a-z]", chan) + + depth = sum(bits) + + # Select a "packer" that either: + # - gathers multiple bytes into a single pixel (for depth >= 8); or, + # - splits bytes into several pixels (for depth < 8). + if depth >= 8: + assert depth % 8 == 0 + packer = deblock + else: + assert 8 % depth == 0 + packer = bitfunge + + for x in packer(f, depth, width): + # x is the pixel as an unsigned integer + o = [] + # This is a bit yucky. + # Extract each channel from the _most_ significant part of x. + for b, col in zip(bits, colr): + v = (x >> (depth - b)) & mask(b) + x <<= b + if col != "x": + # scale to maxval + v = v * float(maxval) / mask(b) + v = int(v + 0.5) + o.append(v) + yield o + + +def decompress(f): + """Decompress a Plan 9 image file. + The input `f` should be a binary file object that + is already cued past the initial 'compressed\n' string. + The return result is (`info`, `blocks`); + `info` is a 5-tuple of the Plan 9 image metadata; + `blocks` is an iterator that yields a (row, data) pair + for each block of data. + """ + + r = meta(f.read(60)) + return r, decomprest(f, r[4]) + + +def decomprest(f, rows): + """Iterator that decompresses the rest of a file once the metadata + have been consumed.""" + + row = 0 + while row < rows: + row, o = deblock(f) + yield o + + +def deblock(f): + """Decompress a single block from a compressed Plan 9 image file. + Each block starts with 2 decimal strings of 12 bytes each. + Yields a sequence of (row, data) pairs where + `row` is the total number of rows processed + (according to the file format) and + `data` is the decompressed data for this block. + """ + + row = int(f.read(12)) + size = int(f.read(12)) + if not (0 <= size <= 6000): + raise Error("block has invalid size; not a Plan 9 image file?") + + # Since each block is at most 6000 bytes we may as well read it all in + # one go. + d = f.read(size) + i = 0 + o = [] + + while i < size: + x = d[i] + i += 1 + if x & 0x80: + x = (x & 0x7F) + 1 + lit = d[i : i + x] + i += x + o.extend(lit) + continue + # x's high-order bit is 0 + length = (x >> 2) + 3 + # Offset is made from bottom 2 bits of x and 8 bits of next byte. + # MSByte LSByte + # +---------------------+-------------------------+ + # | - - - - - - | x1 x0 | d7 d6 d5 d4 d3 d2 d1 d0 | + # +-----------------------------------------------+ + # Had to discover by inspection which way round the bits go, + # because https://plan9.io/magic/man2html/6/image doesn't say. + # that x's 2 bits are most significant. + offset = (x & 3) << 8 + offset |= d[i] + i += 1 + # Note: complement operator neatly maps (0 to 1023) to (-1 to + # -1024). Adding len(o) gives a (non-negative) offset into o from + # which to start indexing. + offset = ~offset + len(o) + if offset < 0: + raise Error( + "byte offset indexes off the begininning of " + "the output buffer; not a Plan 9 image file?" + ) + for j in range(length): + o.append(o[offset + j]) + return row, bytes(o) + + +FontChar = collections.namedtuple("FontChar", "x top bottom left width") + + +def font_copy(inp, image, out, control): + """ + Convert a Plan 9 font (`inp`, `image`) to a series of PNG images, + and write them out as a tar file to the file object `out`. + Write a text control file out to the file object `control`. + + Each valid glyph in the font becomes a single PNG image; + the output is a tar file of all the images. + + A Plan 9 font consists of a Plan 9 image immediately + followed by font data. + The image for the font should be the `image` argument, + the file containing the rest of the font data should be the + file object `inp` which should be cued up to the start of + the font data that immediately follows the image. + + https://plan9.io/magic/man2html/6/font + """ + + # The format is a little unusual, and isn't completely + # clearly documented. + # Each 6-byte structure (see FontChar above) defines + # a rectangular region of the image that is used for each + # glyph. + # The source image region that is used may be strictly + # smaller than the rectangle for the target glyph. + # This seems like a micro-optimisation. + # For each glyph, + # rows above `top` and below `bottom` will not be copied + # from the source (they can be assumed to be blank). + # No space is saved in the source image, since the rows must + # be present. + # `x` is always non-decreasing, so the glyphs appear strictly + # left-to-image in the source image. + # The x of the next glyph is used to + # infer the width of the source rectangle. + # `top` and `bottom` give the y-coordinate of the top- and + # bottom- sides of the rectangle in both source and targets. + # `left` is the x-coordinate of the left-side of the + # rectangle in the target glyph. (equivalently, the amount + # of padding that should be added on the left). + # `width` is the advance-width of the glyph; by convention + # it is 0 for an undefined glyph. + + name = getattr(inp, "name", "*subfont*name*not*supplied*") + + header = inp.read(36) + n, height, ascent = [int(x) for x in header.split()] + print("baseline", name, ascent, file=control, sep=",") + + chs = [] + for i in range(n + 1): + bs = inp.read(6) + ch = FontChar(*struct.unpack(" 0xFF: + fmt = fmt + "H" + else: + fmt = fmt + "B" + for row in rows: + file.write(struct.pack(fmt, *row)) + + file.flush() + + +def main(argv=None): + import argparse + + parser = argparse.ArgumentParser(description="Convert PNG to PAM") + parser.add_argument("--plain", action="store_true") + parser.add_argument( + "input", nargs="?", default="-", type=png.cli_open, metavar="PNG" + ) + + args = parser.parse_args() + + # Encode PNG to PNM (or PAM) + image = png.Reader(file=args.input) + _, _, rows, info = image.asDirect() + write_pnm(png.binary_stdout(), args.plain, rows, info) + + +if __name__ == "__main__": + import sys + + sys.exit(main()) diff --git a/Backend/venv/bin/prirowpng b/Backend/venv/bin/prirowpng new file mode 100755 index 00000000..8c243775 --- /dev/null +++ b/Backend/venv/bin/prirowpng @@ -0,0 +1,71 @@ +#!/home/gnx/Desktop/Hotel-Booking/Backend/venv/bin/python3 + +# http://www.python.org/doc/2.4.4/lib/module-itertools.html +import itertools +import sys + +import png + +Description = """Join PNG images in a row left-to-right.""" + + +class FormatError(Exception): + """ + Some problem with the image format. + """ + + +def join_row(out, l): + """ + Concatenate the list of images. + All input images must be same height and + have the same number of channels. + They are concatenated left-to-right. + `out` is the (open file) destination for the output image. + `l` should be a list of open files (the input image files). + """ + + l = [png.Reader(file=f) for f in l] + + # Ewgh, side effects. + for r in l: + r.preamble() + + # The reference height; from the first image. + height = l[0].height + # The total target width + width = 0 + for i,r in enumerate(l): + if r.height != height: + raise FormatError('Image %d, height %d, does not match %d.' % + (i, r.height, height)) + width += r.width + + # Various bugs here because different numbers of channels and depths go wrong. + pixel, info = zip(*[r.asDirect()[2:4] for r in l]) + tinfo = dict(info[0]) + del tinfo['size'] + w = png.Writer(width, height, **tinfo) + + def iter_all_rows(): + for row in zip(*pixel): + # `row` is a sequence that has one row from each input image. + # list() is required here to hasten the lazy row building; + # not sure if that's a bug in PyPNG or not. + yield list(itertools.chain(*row)) + w.write(out, iter_all_rows()) + +def main(argv): + import argparse + + parser = argparse.ArgumentParser(description=Description) + parser.add_argument( + "input", nargs="*", default="-", type=png.cli_open, metavar="PNG" + ) + + args = parser.parse_args() + + return join_row(png.binary_stdout(), args.input) + +if __name__ == '__main__': + main(sys.argv) diff --git a/Backend/venv/bin/priweavepng b/Backend/venv/bin/priweavepng new file mode 100755 index 00000000..f9614655 --- /dev/null +++ b/Backend/venv/bin/priweavepng @@ -0,0 +1,215 @@ +#!/home/gnx/Desktop/Hotel-Booking/Backend/venv/bin/python3 + +# priweavepng +# Weave selected channels from input PNG files into +# a multi-channel output PNG. + +import collections +import re + +from array import array + +import png + +""" +priweavepng file1.png [file2.png ...] + +The `priweavepng` tool combines channels from the input images and +weaves a selection of those channels into an output image. + +Conceptually an intermediate image is formed consisting of +all channels of all input images in the order given on the command line +and in the order of each channel in its image. +Then from 1 to 4 channels are selected and +an image is output with those channels. +The limit on the number of selected channels is +imposed by the PNG image format. + +The `-c n` option selects channel `n`. +Further channels can be selected either by repeating the `-c` option, +or using a comma separated list. +For example `-c 3,2,1` will select channels 3, 2, and 1 in that order; +if the input is an RGB PNG, this will swop the Red and Blue channels. +The order is significant, the order in which the options are given is +the order of the output channels. +It is permissible, and sometimes useful +(for example, grey to colour expansion, see below), +to repeat the same channel. + +If no `-c` option is used the default is +to select all of the input channels, up to the first 4. + +`priweavepng` does not care about the meaning of the channels +and treats them as a matrix of values. + +The numer of output channels determines the colour mode of the PNG file: +L (1-channel, Grey), LA (2-channel, Grey+Alpha), +RGB (3-channel, Red+Green+Blue), RGBA (4-channel, Red+Green+Blue+Alpha). + +The `priweavepng` tool can be used for a variety of +channel building, swopping, and extraction effects: + +Combine 3 grayscale images into RGB colour: + priweavepng grey1.png grey2.png grey3.png + +Swop Red and Blue channels in colour image: + priweavepng -c 3 -c 2 -c 1 rgb.png + +Extract Green channel as a greyscale image: + priweavepng -c 2 rgb.png + +Convert a greyscale image to a colour image (all grey): + priweavepng -c 1 -c 1 -c 1 grey.png + +Add alpha mask from a separate (greyscale) image: + priweavepng rgb.png grey.png + +Extract alpha mask into a separate (greyscale) image: + priweavepng -c 4 rgba.png + +Steal alpha mask from second file and add to first. +Note that the intermediate image in this example has 7 channels: + priweavepng -c 1 -c 2 -c 3 -c 7 rgb.png rgba.png + +Take Green channel from 3 successive colour images to make a new RGB image: + priweavepng -c 2 -c 5 -c 8 rgb1.png rgb2.png rgb3.png + +""" + +Image = collections.namedtuple("Image", "rows info") + +# For each channel in the intermediate raster, +# model: +# - image: the input image (0-based); +# - i: the channel index within that image (0-based); +# - bitdepth: the bitdepth of this channel. +Channel = collections.namedtuple("Channel", "image i bitdepth") + + +class Error(Exception): + pass + + +def weave(out, args): + """Stack the input PNG files and extract channels + into a single output PNG. + """ + + paths = args.input + + if len(paths) < 1: + raise Error("Required input is missing.") + + # List of Image instances + images = [] + # Channel map. Maps from channel number (starting from 1) + # to an (image_index, channel_index) pair. + channel_map = dict() + channel = 1 + + for image_index, path in enumerate(paths): + inp = png.cli_open(path) + rows, info = png.Reader(file=inp).asDirect()[2:] + rows = list(rows) + image = Image(rows, info) + images.append(image) + # A later version of PyPNG may intelligently support + # PNG files with heterogenous bitdepths. + # For now, assumes bitdepth of all channels in image + # is the same. + channel_bitdepth = (image.info["bitdepth"],) * image.info["planes"] + for i in range(image.info["planes"]): + channel_map[channel + i] = Channel(image_index, i, channel_bitdepth[i]) + channel += image.info["planes"] + + assert channel - 1 == sum(image.info["planes"] for image in images) + + # If no channels, select up to first 4 as default. + if not args.channel: + args.channel = range(1, channel)[:4] + + out_channels = len(args.channel) + if not (0 < out_channels <= 4): + raise Error("Too many channels selected (must be 1 to 4)") + alpha = out_channels in (2, 4) + greyscale = out_channels in (1, 2) + + bitdepth = tuple(image.info["bitdepth"] for image in images) + arraytype = "BH"[max(bitdepth) > 8] + + size = [image.info["size"] for image in images] + # Currently, fail unless all images same size. + if len(set(size)) > 1: + raise NotImplementedError("Cannot cope when sizes differ - sorry!") + size = size[0] + + # Values per row, of output image + vpr = out_channels * size[0] + + def weave_row_iter(): + """ + Yield each woven row in turn. + """ + # The zip call creates an iterator that yields + # a tuple with each element containing the next row + # for each of the input images. + for row_tuple in zip(*(image.rows for image in images)): + # output row + row = array(arraytype, [0] * vpr) + # for each output channel select correct input channel + for out_channel_i, selection in enumerate(args.channel): + channel = channel_map[selection] + # incoming row (make it an array) + irow = array(arraytype, row_tuple[channel.image]) + n = images[channel.image].info["planes"] + row[out_channel_i::out_channels] = irow[channel.i :: n] + yield row + + w = png.Writer( + size[0], + size[1], + greyscale=greyscale, + alpha=alpha, + bitdepth=bitdepth, + interlace=args.interlace, + ) + w.write(out, weave_row_iter()) + + +def comma_list(s): + """ + Type and return a list of integers. + """ + + return [int(c) for c in re.findall(r"\d+", s)] + + +def main(argv=None): + import argparse + import itertools + import sys + + if argv is None: + argv = sys.argv + argv = argv[1:] + + parser = argparse.ArgumentParser() + parser.add_argument( + "-c", + "--channel", + action="append", + type=comma_list, + help="list of channels to extract", + ) + parser.add_argument("--interlace", action="store_true", help="write interlaced PNG") + parser.add_argument("input", nargs="+") + args = parser.parse_args(argv) + + if args.channel: + args.channel = list(itertools.chain(*args.channel)) + + return weave(png.binary_stdout(), args) + + +if __name__ == "__main__": + main() diff --git a/Backend/venv/bin/qr b/Backend/venv/bin/qr new file mode 100755 index 00000000..d72fc3be --- /dev/null +++ b/Backend/venv/bin/qr @@ -0,0 +1,7 @@ +#!/home/gnx/Desktop/Hotel-Booking/Backend/venv/bin/python3 +import sys +from qrcode.console_scripts import main +if __name__ == '__main__': + if sys.argv[0].endswith('.exe'): + sys.argv[0] = sys.argv[0][:-4] + sys.exit(main()) diff --git a/Backend/venv/lib/python3.12/site-packages/OpenSSL/SSL.py b/Backend/venv/lib/python3.12/site-packages/OpenSSL/SSL.py new file mode 100644 index 00000000..51c60d55 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/OpenSSL/SSL.py @@ -0,0 +1,3239 @@ +from __future__ import annotations + +import os +import socket +import typing +import warnings +from collections.abc import Sequence +from errno import errorcode +from functools import partial, wraps +from itertools import chain, count +from sys import platform +from typing import Any, Callable, Optional, TypeVar +from weakref import WeakValueDictionary + +from cryptography import x509 +from cryptography.hazmat.primitives.asymmetric import ec + +from OpenSSL._util import ( + StrOrBytesPath as _StrOrBytesPath, +) +from OpenSSL._util import ( + exception_from_error_queue as _exception_from_error_queue, +) +from OpenSSL._util import ( + ffi as _ffi, +) +from OpenSSL._util import ( + lib as _lib, +) +from OpenSSL._util import ( + make_assert as _make_assert, +) +from OpenSSL._util import ( + no_zero_allocator as _no_zero_allocator, +) +from OpenSSL._util import ( + path_bytes as _path_bytes, +) +from OpenSSL._util import ( + text_to_bytes_and_warn as _text_to_bytes_and_warn, +) +from OpenSSL.crypto import ( + FILETYPE_PEM, + X509, + PKey, + X509Name, + X509Store, + _EllipticCurve, + _PassphraseHelper, + _PrivateKey, +) + +__all__ = [ + "DTLS_CLIENT_METHOD", + "DTLS_METHOD", + "DTLS_SERVER_METHOD", + "MODE_RELEASE_BUFFERS", + "NO_OVERLAPPING_PROTOCOLS", + "OPENSSL_BUILT_ON", + "OPENSSL_CFLAGS", + "OPENSSL_DIR", + "OPENSSL_PLATFORM", + "OPENSSL_VERSION", + "OPENSSL_VERSION_NUMBER", + "OP_ALL", + "OP_CIPHER_SERVER_PREFERENCE", + "OP_COOKIE_EXCHANGE", + "OP_DONT_INSERT_EMPTY_FRAGMENTS", + "OP_EPHEMERAL_RSA", + "OP_MICROSOFT_BIG_SSLV3_BUFFER", + "OP_MICROSOFT_SESS_ID_BUG", + "OP_MSIE_SSLV2_RSA_PADDING", + "OP_NETSCAPE_CA_DN_BUG", + "OP_NETSCAPE_CHALLENGE_BUG", + "OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG", + "OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG", + "OP_NO_COMPRESSION", + "OP_NO_QUERY_MTU", + "OP_NO_TICKET", + "OP_PKCS1_CHECK_1", + "OP_PKCS1_CHECK_2", + "OP_SINGLE_DH_USE", + "OP_SINGLE_ECDH_USE", + "OP_SSLEAY_080_CLIENT_DH_BUG", + "OP_SSLREF2_REUSE_CERT_TYPE_BUG", + "OP_TLS_BLOCK_PADDING_BUG", + "OP_TLS_D5_BUG", + "OP_TLS_ROLLBACK_BUG", + "RECEIVED_SHUTDOWN", + "SENT_SHUTDOWN", + "SESS_CACHE_BOTH", + "SESS_CACHE_CLIENT", + "SESS_CACHE_NO_AUTO_CLEAR", + "SESS_CACHE_NO_INTERNAL", + "SESS_CACHE_NO_INTERNAL_LOOKUP", + "SESS_CACHE_NO_INTERNAL_STORE", + "SESS_CACHE_OFF", + "SESS_CACHE_SERVER", + "SSL3_VERSION", + "SSLEAY_BUILT_ON", + "SSLEAY_CFLAGS", + "SSLEAY_DIR", + "SSLEAY_PLATFORM", + "SSLEAY_VERSION", + "SSL_CB_ACCEPT_EXIT", + "SSL_CB_ACCEPT_LOOP", + "SSL_CB_ALERT", + "SSL_CB_CONNECT_EXIT", + "SSL_CB_CONNECT_LOOP", + "SSL_CB_EXIT", + "SSL_CB_HANDSHAKE_DONE", + "SSL_CB_HANDSHAKE_START", + "SSL_CB_LOOP", + "SSL_CB_READ", + "SSL_CB_READ_ALERT", + "SSL_CB_WRITE", + "SSL_CB_WRITE_ALERT", + "SSL_ST_ACCEPT", + "SSL_ST_CONNECT", + "SSL_ST_MASK", + "TLS1_1_VERSION", + "TLS1_2_VERSION", + "TLS1_3_VERSION", + "TLS1_VERSION", + "TLS_CLIENT_METHOD", + "TLS_METHOD", + "TLS_SERVER_METHOD", + "VERIFY_CLIENT_ONCE", + "VERIFY_FAIL_IF_NO_PEER_CERT", + "VERIFY_NONE", + "VERIFY_PEER", + "Connection", + "Context", + "Error", + "OP_NO_SSLv2", + "OP_NO_SSLv3", + "OP_NO_TLSv1", + "OP_NO_TLSv1_1", + "OP_NO_TLSv1_2", + "OP_NO_TLSv1_3", + "SSLeay_version", + "SSLv23_METHOD", + "Session", + "SysCallError", + "TLSv1_1_METHOD", + "TLSv1_2_METHOD", + "TLSv1_METHOD", + "WantReadError", + "WantWriteError", + "WantX509LookupError", + "X509VerificationCodes", + "ZeroReturnError", +] + + +OPENSSL_VERSION_NUMBER: int = _lib.OPENSSL_VERSION_NUMBER +OPENSSL_VERSION: int = _lib.OPENSSL_VERSION +OPENSSL_CFLAGS: int = _lib.OPENSSL_CFLAGS +OPENSSL_PLATFORM: int = _lib.OPENSSL_PLATFORM +OPENSSL_DIR: int = _lib.OPENSSL_DIR +OPENSSL_BUILT_ON: int = _lib.OPENSSL_BUILT_ON + +SSLEAY_VERSION = OPENSSL_VERSION +SSLEAY_CFLAGS = OPENSSL_CFLAGS +SSLEAY_PLATFORM = OPENSSL_PLATFORM +SSLEAY_DIR = OPENSSL_DIR +SSLEAY_BUILT_ON = OPENSSL_BUILT_ON + +SENT_SHUTDOWN = _lib.SSL_SENT_SHUTDOWN +RECEIVED_SHUTDOWN = _lib.SSL_RECEIVED_SHUTDOWN + +SSLv23_METHOD = 3 +TLSv1_METHOD = 4 +TLSv1_1_METHOD = 5 +TLSv1_2_METHOD = 6 +TLS_METHOD = 7 +TLS_SERVER_METHOD = 8 +TLS_CLIENT_METHOD = 9 +DTLS_METHOD = 10 +DTLS_SERVER_METHOD = 11 +DTLS_CLIENT_METHOD = 12 + +SSL3_VERSION: int = _lib.SSL3_VERSION +TLS1_VERSION: int = _lib.TLS1_VERSION +TLS1_1_VERSION: int = _lib.TLS1_1_VERSION +TLS1_2_VERSION: int = _lib.TLS1_2_VERSION +TLS1_3_VERSION: int = _lib.TLS1_3_VERSION + +OP_NO_SSLv2: int = _lib.SSL_OP_NO_SSLv2 +OP_NO_SSLv3: int = _lib.SSL_OP_NO_SSLv3 +OP_NO_TLSv1: int = _lib.SSL_OP_NO_TLSv1 +OP_NO_TLSv1_1: int = _lib.SSL_OP_NO_TLSv1_1 +OP_NO_TLSv1_2: int = _lib.SSL_OP_NO_TLSv1_2 +OP_NO_TLSv1_3: int = _lib.SSL_OP_NO_TLSv1_3 + +MODE_RELEASE_BUFFERS: int = _lib.SSL_MODE_RELEASE_BUFFERS + +OP_SINGLE_DH_USE: int = _lib.SSL_OP_SINGLE_DH_USE +OP_SINGLE_ECDH_USE: int = _lib.SSL_OP_SINGLE_ECDH_USE +OP_EPHEMERAL_RSA: int = _lib.SSL_OP_EPHEMERAL_RSA +OP_MICROSOFT_SESS_ID_BUG: int = _lib.SSL_OP_MICROSOFT_SESS_ID_BUG +OP_NETSCAPE_CHALLENGE_BUG: int = _lib.SSL_OP_NETSCAPE_CHALLENGE_BUG +OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: int = ( + _lib.SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG +) +OP_SSLREF2_REUSE_CERT_TYPE_BUG: int = _lib.SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG +OP_MICROSOFT_BIG_SSLV3_BUFFER: int = _lib.SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER +OP_MSIE_SSLV2_RSA_PADDING: int = _lib.SSL_OP_MSIE_SSLV2_RSA_PADDING +OP_SSLEAY_080_CLIENT_DH_BUG: int = _lib.SSL_OP_SSLEAY_080_CLIENT_DH_BUG +OP_TLS_D5_BUG: int = _lib.SSL_OP_TLS_D5_BUG +OP_TLS_BLOCK_PADDING_BUG: int = _lib.SSL_OP_TLS_BLOCK_PADDING_BUG +OP_DONT_INSERT_EMPTY_FRAGMENTS: int = _lib.SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS +OP_CIPHER_SERVER_PREFERENCE: int = _lib.SSL_OP_CIPHER_SERVER_PREFERENCE +OP_TLS_ROLLBACK_BUG: int = _lib.SSL_OP_TLS_ROLLBACK_BUG +OP_PKCS1_CHECK_1 = _lib.SSL_OP_PKCS1_CHECK_1 +OP_PKCS1_CHECK_2: int = _lib.SSL_OP_PKCS1_CHECK_2 +OP_NETSCAPE_CA_DN_BUG: int = _lib.SSL_OP_NETSCAPE_CA_DN_BUG +OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: int = ( + _lib.SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG +) +OP_NO_COMPRESSION: int = _lib.SSL_OP_NO_COMPRESSION + +OP_NO_QUERY_MTU: int = _lib.SSL_OP_NO_QUERY_MTU +OP_COOKIE_EXCHANGE: int = _lib.SSL_OP_COOKIE_EXCHANGE +OP_NO_TICKET: int = _lib.SSL_OP_NO_TICKET + +try: + OP_NO_RENEGOTIATION: int = _lib.SSL_OP_NO_RENEGOTIATION + __all__.append("OP_NO_RENEGOTIATION") +except AttributeError: + pass + +try: + OP_IGNORE_UNEXPECTED_EOF: int = _lib.SSL_OP_IGNORE_UNEXPECTED_EOF + __all__.append("OP_IGNORE_UNEXPECTED_EOF") +except AttributeError: + pass + +try: + OP_LEGACY_SERVER_CONNECT: int = _lib.SSL_OP_LEGACY_SERVER_CONNECT + __all__.append("OP_LEGACY_SERVER_CONNECT") +except AttributeError: + pass + +OP_ALL: int = _lib.SSL_OP_ALL + +VERIFY_PEER: int = _lib.SSL_VERIFY_PEER +VERIFY_FAIL_IF_NO_PEER_CERT: int = _lib.SSL_VERIFY_FAIL_IF_NO_PEER_CERT +VERIFY_CLIENT_ONCE: int = _lib.SSL_VERIFY_CLIENT_ONCE +VERIFY_NONE: int = _lib.SSL_VERIFY_NONE + +SESS_CACHE_OFF: int = _lib.SSL_SESS_CACHE_OFF +SESS_CACHE_CLIENT: int = _lib.SSL_SESS_CACHE_CLIENT +SESS_CACHE_SERVER: int = _lib.SSL_SESS_CACHE_SERVER +SESS_CACHE_BOTH: int = _lib.SSL_SESS_CACHE_BOTH +SESS_CACHE_NO_AUTO_CLEAR: int = _lib.SSL_SESS_CACHE_NO_AUTO_CLEAR +SESS_CACHE_NO_INTERNAL_LOOKUP: int = _lib.SSL_SESS_CACHE_NO_INTERNAL_LOOKUP +SESS_CACHE_NO_INTERNAL_STORE: int = _lib.SSL_SESS_CACHE_NO_INTERNAL_STORE +SESS_CACHE_NO_INTERNAL: int = _lib.SSL_SESS_CACHE_NO_INTERNAL + +SSL_ST_CONNECT: int = _lib.SSL_ST_CONNECT +SSL_ST_ACCEPT: int = _lib.SSL_ST_ACCEPT +SSL_ST_MASK: int = _lib.SSL_ST_MASK + +SSL_CB_LOOP: int = _lib.SSL_CB_LOOP +SSL_CB_EXIT: int = _lib.SSL_CB_EXIT +SSL_CB_READ: int = _lib.SSL_CB_READ +SSL_CB_WRITE: int = _lib.SSL_CB_WRITE +SSL_CB_ALERT: int = _lib.SSL_CB_ALERT +SSL_CB_READ_ALERT: int = _lib.SSL_CB_READ_ALERT +SSL_CB_WRITE_ALERT: int = _lib.SSL_CB_WRITE_ALERT +SSL_CB_ACCEPT_LOOP: int = _lib.SSL_CB_ACCEPT_LOOP +SSL_CB_ACCEPT_EXIT: int = _lib.SSL_CB_ACCEPT_EXIT +SSL_CB_CONNECT_LOOP: int = _lib.SSL_CB_CONNECT_LOOP +SSL_CB_CONNECT_EXIT: int = _lib.SSL_CB_CONNECT_EXIT +SSL_CB_HANDSHAKE_START: int = _lib.SSL_CB_HANDSHAKE_START +SSL_CB_HANDSHAKE_DONE: int = _lib.SSL_CB_HANDSHAKE_DONE + +_Buffer = typing.Union[bytes, bytearray, memoryview] +_T = TypeVar("_T") + + +class _NoOverlappingProtocols: + pass + + +NO_OVERLAPPING_PROTOCOLS = _NoOverlappingProtocols() + +# Callback types. +_ALPNSelectCallback = Callable[ + [ + "Connection", + typing.List[bytes], + ], + typing.Union[bytes, _NoOverlappingProtocols], +] +_CookieGenerateCallback = Callable[["Connection"], bytes] +_CookieVerifyCallback = Callable[["Connection", bytes], bool] +_OCSPClientCallback = Callable[["Connection", bytes, Optional[_T]], bool] +_OCSPServerCallback = Callable[["Connection", Optional[_T]], bytes] +_PassphraseCallback = Callable[[int, bool, Optional[_T]], bytes] +_VerifyCallback = Callable[["Connection", X509, int, int, int], bool] + + +class X509VerificationCodes: + """ + Success and error codes for X509 verification, as returned by the + underlying ``X509_STORE_CTX_get_error()`` function and passed by pyOpenSSL + to verification callback functions. + + See `OpenSSL Verification Errors + `_ + for details. + """ + + OK = _lib.X509_V_OK + ERR_UNABLE_TO_GET_ISSUER_CERT = _lib.X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT + ERR_UNABLE_TO_GET_CRL = _lib.X509_V_ERR_UNABLE_TO_GET_CRL + ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE = ( + _lib.X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE + ) + ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE = ( + _lib.X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE + ) + ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY = ( + _lib.X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY + ) + ERR_CERT_SIGNATURE_FAILURE = _lib.X509_V_ERR_CERT_SIGNATURE_FAILURE + ERR_CRL_SIGNATURE_FAILURE = _lib.X509_V_ERR_CRL_SIGNATURE_FAILURE + ERR_CERT_NOT_YET_VALID = _lib.X509_V_ERR_CERT_NOT_YET_VALID + ERR_CERT_HAS_EXPIRED = _lib.X509_V_ERR_CERT_HAS_EXPIRED + ERR_CRL_NOT_YET_VALID = _lib.X509_V_ERR_CRL_NOT_YET_VALID + ERR_CRL_HAS_EXPIRED = _lib.X509_V_ERR_CRL_HAS_EXPIRED + ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD = ( + _lib.X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD + ) + ERR_ERROR_IN_CERT_NOT_AFTER_FIELD = ( + _lib.X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD + ) + ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD = ( + _lib.X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD + ) + ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD = ( + _lib.X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD + ) + ERR_OUT_OF_MEM = _lib.X509_V_ERR_OUT_OF_MEM + ERR_DEPTH_ZERO_SELF_SIGNED_CERT = ( + _lib.X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT + ) + ERR_SELF_SIGNED_CERT_IN_CHAIN = _lib.X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN + ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY = ( + _lib.X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY + ) + ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE = ( + _lib.X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE + ) + ERR_CERT_CHAIN_TOO_LONG = _lib.X509_V_ERR_CERT_CHAIN_TOO_LONG + ERR_CERT_REVOKED = _lib.X509_V_ERR_CERT_REVOKED + ERR_INVALID_CA = _lib.X509_V_ERR_INVALID_CA + ERR_PATH_LENGTH_EXCEEDED = _lib.X509_V_ERR_PATH_LENGTH_EXCEEDED + ERR_INVALID_PURPOSE = _lib.X509_V_ERR_INVALID_PURPOSE + ERR_CERT_UNTRUSTED = _lib.X509_V_ERR_CERT_UNTRUSTED + ERR_CERT_REJECTED = _lib.X509_V_ERR_CERT_REJECTED + ERR_SUBJECT_ISSUER_MISMATCH = _lib.X509_V_ERR_SUBJECT_ISSUER_MISMATCH + ERR_AKID_SKID_MISMATCH = _lib.X509_V_ERR_AKID_SKID_MISMATCH + ERR_AKID_ISSUER_SERIAL_MISMATCH = ( + _lib.X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH + ) + ERR_KEYUSAGE_NO_CERTSIGN = _lib.X509_V_ERR_KEYUSAGE_NO_CERTSIGN + ERR_UNABLE_TO_GET_CRL_ISSUER = _lib.X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER + ERR_UNHANDLED_CRITICAL_EXTENSION = ( + _lib.X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION + ) + ERR_KEYUSAGE_NO_CRL_SIGN = _lib.X509_V_ERR_KEYUSAGE_NO_CRL_SIGN + ERR_UNHANDLED_CRITICAL_CRL_EXTENSION = ( + _lib.X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION + ) + ERR_INVALID_NON_CA = _lib.X509_V_ERR_INVALID_NON_CA + ERR_PROXY_PATH_LENGTH_EXCEEDED = _lib.X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED + ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE = ( + _lib.X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE + ) + ERR_PROXY_CERTIFICATES_NOT_ALLOWED = ( + _lib.X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED + ) + ERR_INVALID_EXTENSION = _lib.X509_V_ERR_INVALID_EXTENSION + ERR_INVALID_POLICY_EXTENSION = _lib.X509_V_ERR_INVALID_POLICY_EXTENSION + ERR_NO_EXPLICIT_POLICY = _lib.X509_V_ERR_NO_EXPLICIT_POLICY + ERR_DIFFERENT_CRL_SCOPE = _lib.X509_V_ERR_DIFFERENT_CRL_SCOPE + ERR_UNSUPPORTED_EXTENSION_FEATURE = ( + _lib.X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE + ) + ERR_UNNESTED_RESOURCE = _lib.X509_V_ERR_UNNESTED_RESOURCE + ERR_PERMITTED_VIOLATION = _lib.X509_V_ERR_PERMITTED_VIOLATION + ERR_EXCLUDED_VIOLATION = _lib.X509_V_ERR_EXCLUDED_VIOLATION + ERR_SUBTREE_MINMAX = _lib.X509_V_ERR_SUBTREE_MINMAX + ERR_UNSUPPORTED_CONSTRAINT_TYPE = ( + _lib.X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE + ) + ERR_UNSUPPORTED_CONSTRAINT_SYNTAX = ( + _lib.X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX + ) + ERR_UNSUPPORTED_NAME_SYNTAX = _lib.X509_V_ERR_UNSUPPORTED_NAME_SYNTAX + ERR_CRL_PATH_VALIDATION_ERROR = _lib.X509_V_ERR_CRL_PATH_VALIDATION_ERROR + ERR_HOSTNAME_MISMATCH = _lib.X509_V_ERR_HOSTNAME_MISMATCH + ERR_EMAIL_MISMATCH = _lib.X509_V_ERR_EMAIL_MISMATCH + ERR_IP_ADDRESS_MISMATCH = _lib.X509_V_ERR_IP_ADDRESS_MISMATCH + ERR_APPLICATION_VERIFICATION = _lib.X509_V_ERR_APPLICATION_VERIFICATION + + +# Taken from https://golang.org/src/crypto/x509/root_linux.go +_CERTIFICATE_FILE_LOCATIONS = [ + "/etc/ssl/certs/ca-certificates.crt", # Debian/Ubuntu/Gentoo etc. + "/etc/pki/tls/certs/ca-bundle.crt", # Fedora/RHEL 6 + "/etc/ssl/ca-bundle.pem", # OpenSUSE + "/etc/pki/tls/cacert.pem", # OpenELEC + "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", # CentOS/RHEL 7 +] + +_CERTIFICATE_PATH_LOCATIONS = [ + "/etc/ssl/certs", # SLES10/SLES11 +] + +# These values are compared to output from cffi's ffi.string so they must be +# byte strings. +_CRYPTOGRAPHY_MANYLINUX_CA_DIR = b"/opt/pyca/cryptography/openssl/certs" +_CRYPTOGRAPHY_MANYLINUX_CA_FILE = b"/opt/pyca/cryptography/openssl/cert.pem" + + +class Error(Exception): + """ + An error occurred in an `OpenSSL.SSL` API. + """ + + +_raise_current_error = partial(_exception_from_error_queue, Error) +_openssl_assert = _make_assert(Error) + + +class WantReadError(Error): + pass + + +class WantWriteError(Error): + pass + + +class WantX509LookupError(Error): + pass + + +class ZeroReturnError(Error): + pass + + +class SysCallError(Error): + pass + + +class _CallbackExceptionHelper: + """ + A base class for wrapper classes that allow for intelligent exception + handling in OpenSSL callbacks. + + :ivar list _problems: Any exceptions that occurred while executing in a + context where they could not be raised in the normal way. Typically + this is because OpenSSL has called into some Python code and requires a + return value. The exceptions are saved to be raised later when it is + possible to do so. + """ + + def __init__(self) -> None: + self._problems: list[Exception] = [] + + def raise_if_problem(self) -> None: + """ + Raise an exception from the OpenSSL error queue or that was previously + captured whe running a callback. + """ + if self._problems: + try: + _raise_current_error() + except Error: + pass + raise self._problems.pop(0) + + +class _VerifyHelper(_CallbackExceptionHelper): + """ + Wrap a callback such that it can be used as a certificate verification + callback. + """ + + def __init__(self, callback: _VerifyCallback) -> None: + _CallbackExceptionHelper.__init__(self) + + @wraps(callback) + def wrapper(ok, store_ctx): # type: ignore[no-untyped-def] + x509 = _lib.X509_STORE_CTX_get_current_cert(store_ctx) + _lib.X509_up_ref(x509) + cert = X509._from_raw_x509_ptr(x509) + error_number = _lib.X509_STORE_CTX_get_error(store_ctx) + error_depth = _lib.X509_STORE_CTX_get_error_depth(store_ctx) + + index = _lib.SSL_get_ex_data_X509_STORE_CTX_idx() + ssl = _lib.X509_STORE_CTX_get_ex_data(store_ctx, index) + connection = Connection._reverse_mapping[ssl] + + try: + result = callback( + connection, cert, error_number, error_depth, ok + ) + except Exception as e: + self._problems.append(e) + return 0 + else: + if result: + _lib.X509_STORE_CTX_set_error(store_ctx, _lib.X509_V_OK) + return 1 + else: + return 0 + + self.callback = _ffi.callback( + "int (*)(int, X509_STORE_CTX *)", wrapper + ) + + +class _ALPNSelectHelper(_CallbackExceptionHelper): + """ + Wrap a callback such that it can be used as an ALPN selection callback. + """ + + def __init__(self, callback: _ALPNSelectCallback) -> None: + _CallbackExceptionHelper.__init__(self) + + @wraps(callback) + def wrapper(ssl, out, outlen, in_, inlen, arg): # type: ignore[no-untyped-def] + try: + conn = Connection._reverse_mapping[ssl] + + # The string passed to us is made up of multiple + # length-prefixed bytestrings. We need to split that into a + # list. + instr = _ffi.buffer(in_, inlen)[:] + protolist = [] + while instr: + encoded_len = instr[0] + proto = instr[1 : encoded_len + 1] + protolist.append(proto) + instr = instr[encoded_len + 1 :] + + # Call the callback + outbytes = callback(conn, protolist) + any_accepted = True + if outbytes is NO_OVERLAPPING_PROTOCOLS: + outbytes = b"" + any_accepted = False + elif not isinstance(outbytes, bytes): + raise TypeError( + "ALPN callback must return a bytestring or the " + "special NO_OVERLAPPING_PROTOCOLS sentinel value." + ) + + # Save our callback arguments on the connection object to make + # sure that they don't get freed before OpenSSL can use them. + # Then, return them in the appropriate output parameters. + conn._alpn_select_callback_args = [ + _ffi.new("unsigned char *", len(outbytes)), + _ffi.new("unsigned char[]", outbytes), + ] + outlen[0] = conn._alpn_select_callback_args[0][0] + out[0] = conn._alpn_select_callback_args[1] + if not any_accepted: + return _lib.SSL_TLSEXT_ERR_NOACK + return _lib.SSL_TLSEXT_ERR_OK + except Exception as e: + self._problems.append(e) + return _lib.SSL_TLSEXT_ERR_ALERT_FATAL + + self.callback = _ffi.callback( + ( + "int (*)(SSL *, unsigned char **, unsigned char *, " + "const unsigned char *, unsigned int, void *)" + ), + wrapper, + ) + + +class _OCSPServerCallbackHelper(_CallbackExceptionHelper): + """ + Wrap a callback such that it can be used as an OCSP callback for the server + side. + + Annoyingly, OpenSSL defines one OCSP callback but uses it in two different + ways. For servers, that callback is expected to retrieve some OCSP data and + hand it to OpenSSL, and may return only SSL_TLSEXT_ERR_OK, + SSL_TLSEXT_ERR_FATAL, and SSL_TLSEXT_ERR_NOACK. For clients, that callback + is expected to check the OCSP data, and returns a negative value on error, + 0 if the response is not acceptable, or positive if it is. These are + mutually exclusive return code behaviours, and they mean that we need two + helpers so that we always return an appropriate error code if the user's + code throws an exception. + + Given that we have to have two helpers anyway, these helpers are a bit more + helpery than most: specifically, they hide a few more of the OpenSSL + functions so that the user has an easier time writing these callbacks. + + This helper implements the server side. + """ + + def __init__(self, callback: _OCSPServerCallback[Any]) -> None: + _CallbackExceptionHelper.__init__(self) + + @wraps(callback) + def wrapper(ssl, cdata): # type: ignore[no-untyped-def] + try: + conn = Connection._reverse_mapping[ssl] + + # Extract the data if any was provided. + if cdata != _ffi.NULL: + data = _ffi.from_handle(cdata) + else: + data = None + + # Call the callback. + ocsp_data = callback(conn, data) + + if not isinstance(ocsp_data, bytes): + raise TypeError("OCSP callback must return a bytestring.") + + # If the OCSP data was provided, we will pass it to OpenSSL. + # However, we have an early exit here: if no OCSP data was + # provided we will just exit out and tell OpenSSL that there + # is nothing to do. + if not ocsp_data: + return 3 # SSL_TLSEXT_ERR_NOACK + + # OpenSSL takes ownership of this data and expects it to have + # been allocated by OPENSSL_malloc. + ocsp_data_length = len(ocsp_data) + data_ptr = _lib.OPENSSL_malloc(ocsp_data_length) + _ffi.buffer(data_ptr, ocsp_data_length)[:] = ocsp_data + + _lib.SSL_set_tlsext_status_ocsp_resp( + ssl, data_ptr, ocsp_data_length + ) + + return 0 + except Exception as e: + self._problems.append(e) + return 2 # SSL_TLSEXT_ERR_ALERT_FATAL + + self.callback = _ffi.callback("int (*)(SSL *, void *)", wrapper) + + +class _OCSPClientCallbackHelper(_CallbackExceptionHelper): + """ + Wrap a callback such that it can be used as an OCSP callback for the client + side. + + Annoyingly, OpenSSL defines one OCSP callback but uses it in two different + ways. For servers, that callback is expected to retrieve some OCSP data and + hand it to OpenSSL, and may return only SSL_TLSEXT_ERR_OK, + SSL_TLSEXT_ERR_FATAL, and SSL_TLSEXT_ERR_NOACK. For clients, that callback + is expected to check the OCSP data, and returns a negative value on error, + 0 if the response is not acceptable, or positive if it is. These are + mutually exclusive return code behaviours, and they mean that we need two + helpers so that we always return an appropriate error code if the user's + code throws an exception. + + Given that we have to have two helpers anyway, these helpers are a bit more + helpery than most: specifically, they hide a few more of the OpenSSL + functions so that the user has an easier time writing these callbacks. + + This helper implements the client side. + """ + + def __init__(self, callback: _OCSPClientCallback[Any]) -> None: + _CallbackExceptionHelper.__init__(self) + + @wraps(callback) + def wrapper(ssl, cdata): # type: ignore[no-untyped-def] + try: + conn = Connection._reverse_mapping[ssl] + + # Extract the data if any was provided. + if cdata != _ffi.NULL: + data = _ffi.from_handle(cdata) + else: + data = None + + # Get the OCSP data. + ocsp_ptr = _ffi.new("unsigned char **") + ocsp_len = _lib.SSL_get_tlsext_status_ocsp_resp(ssl, ocsp_ptr) + if ocsp_len < 0: + # No OCSP data. + ocsp_data = b"" + else: + # Copy the OCSP data, then pass it to the callback. + ocsp_data = _ffi.buffer(ocsp_ptr[0], ocsp_len)[:] + + valid = callback(conn, ocsp_data, data) + + # Return 1 on success or 0 on error. + return int(bool(valid)) + + except Exception as e: + self._problems.append(e) + # Return negative value if an exception is hit. + return -1 + + self.callback = _ffi.callback("int (*)(SSL *, void *)", wrapper) + + +class _CookieGenerateCallbackHelper(_CallbackExceptionHelper): + def __init__(self, callback: _CookieGenerateCallback) -> None: + _CallbackExceptionHelper.__init__(self) + + @wraps(callback) + def wrapper(ssl, out, outlen): # type: ignore[no-untyped-def] + try: + conn = Connection._reverse_mapping[ssl] + cookie = callback(conn) + out[0 : len(cookie)] = cookie + outlen[0] = len(cookie) + return 1 + except Exception as e: + self._problems.append(e) + # "a zero return value can be used to abort the handshake" + return 0 + + self.callback = _ffi.callback( + "int (*)(SSL *, unsigned char *, unsigned int *)", + wrapper, + ) + + +class _CookieVerifyCallbackHelper(_CallbackExceptionHelper): + def __init__(self, callback: _CookieVerifyCallback) -> None: + _CallbackExceptionHelper.__init__(self) + + @wraps(callback) + def wrapper(ssl, c_cookie, cookie_len): # type: ignore[no-untyped-def] + try: + conn = Connection._reverse_mapping[ssl] + return callback(conn, bytes(c_cookie[0:cookie_len])) + except Exception as e: + self._problems.append(e) + return 0 + + self.callback = _ffi.callback( + "int (*)(SSL *, unsigned char *, unsigned int)", + wrapper, + ) + + +def _asFileDescriptor(obj: Any) -> int: + fd = None + if not isinstance(obj, int): + meth = getattr(obj, "fileno", None) + if meth is not None: + obj = meth() + + if isinstance(obj, int): + fd = obj + + if not isinstance(fd, int): + raise TypeError("argument must be an int, or have a fileno() method.") + elif fd < 0: + raise ValueError( + f"file descriptor cannot be a negative integer ({fd:i})" + ) + + return fd + + +def OpenSSL_version(type: int) -> bytes: + """ + Return a string describing the version of OpenSSL in use. + + :param type: One of the :const:`OPENSSL_` constants defined in this module. + """ + return _ffi.string(_lib.OpenSSL_version(type)) + + +SSLeay_version = OpenSSL_version + + +def _make_requires(flag: int, error: str) -> Callable[[_T], _T]: + """ + Builds a decorator that ensures that functions that rely on OpenSSL + functions that are not present in this build raise NotImplementedError, + rather than AttributeError coming out of cryptography. + + :param flag: A cryptography flag that guards the functions, e.g. + ``Cryptography_HAS_NEXTPROTONEG``. + :param error: The string to be used in the exception if the flag is false. + """ + + def _requires_decorator(func): # type: ignore[no-untyped-def] + if not flag: + + @wraps(func) + def explode(*args, **kwargs): # type: ignore[no-untyped-def] + raise NotImplementedError(error) + + return explode + else: + return func + + return _requires_decorator + + +_requires_keylog = _make_requires( + getattr(_lib, "Cryptography_HAS_KEYLOG", 0), "Key logging not available" +) + + +class Session: + """ + A class representing an SSL session. A session defines certain connection + parameters which may be re-used to speed up the setup of subsequent + connections. + + .. versionadded:: 0.14 + """ + + _session: Any + + +F = TypeVar("F", bound=Callable[..., Any]) + + +def _require_not_used(f: F) -> F: + @wraps(f) + def inner(self: Context, *args: Any, **kwargs: Any) -> Any: + if self._used: + warnings.warn( + ( + "Attempting to mutate a Context after a Connection was " + "created. In the future, this will raise an exception" + ), + DeprecationWarning, + stacklevel=2, + ) + return f(self, *args, **kwargs) + + return typing.cast(F, inner) + + +class Context: + """ + :class:`OpenSSL.SSL.Context` instances define the parameters for setting + up new SSL connections. + + :param method: One of TLS_METHOD, TLS_CLIENT_METHOD, TLS_SERVER_METHOD, + DTLS_METHOD, DTLS_CLIENT_METHOD, or DTLS_SERVER_METHOD. + SSLv23_METHOD, TLSv1_METHOD, etc. are deprecated and should + not be used. + """ + + _methods: typing.ClassVar[ + dict[int, tuple[Callable[[], Any], int | None]] + ] = { + SSLv23_METHOD: (_lib.TLS_method, None), + TLSv1_METHOD: (_lib.TLS_method, TLS1_VERSION), + TLSv1_1_METHOD: (_lib.TLS_method, TLS1_1_VERSION), + TLSv1_2_METHOD: (_lib.TLS_method, TLS1_2_VERSION), + TLS_METHOD: (_lib.TLS_method, None), + TLS_SERVER_METHOD: (_lib.TLS_server_method, None), + TLS_CLIENT_METHOD: (_lib.TLS_client_method, None), + DTLS_METHOD: (_lib.DTLS_method, None), + DTLS_SERVER_METHOD: (_lib.DTLS_server_method, None), + DTLS_CLIENT_METHOD: (_lib.DTLS_client_method, None), + } + + def __init__(self, method: int) -> None: + if not isinstance(method, int): + raise TypeError("method must be an integer") + + try: + method_func, version = self._methods[method] + except KeyError: + raise ValueError("No such protocol") + + method_obj = method_func() + _openssl_assert(method_obj != _ffi.NULL) + + context = _lib.SSL_CTX_new(method_obj) + _openssl_assert(context != _ffi.NULL) + context = _ffi.gc(context, _lib.SSL_CTX_free) + + self._context = context + self._used = False + self._passphrase_helper: _PassphraseHelper | None = None + self._passphrase_callback: _PassphraseCallback[Any] | None = None + self._passphrase_userdata: Any | None = None + self._verify_helper: _VerifyHelper | None = None + self._verify_callback: _VerifyCallback | None = None + self._info_callback = None + self._keylog_callback = None + self._tlsext_servername_callback = None + self._app_data = None + self._alpn_select_helper: _ALPNSelectHelper | None = None + self._alpn_select_callback: _ALPNSelectCallback | None = None + self._ocsp_helper: ( + _OCSPClientCallbackHelper | _OCSPServerCallbackHelper | None + ) = None + self._ocsp_callback: ( + _OCSPClientCallback[Any] | _OCSPServerCallback[Any] | None + ) = None + self._ocsp_data: Any | None = None + self._cookie_generate_helper: _CookieGenerateCallbackHelper | None = ( + None + ) + self._cookie_verify_helper: _CookieVerifyCallbackHelper | None = None + + self.set_mode( + _lib.SSL_MODE_ENABLE_PARTIAL_WRITE + | _lib.SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER + ) + if version is not None: + self.set_min_proto_version(version) + self.set_max_proto_version(version) + + @_require_not_used + def set_min_proto_version(self, version: int) -> None: + """ + Set the minimum supported protocol version. Setting the minimum + version to 0 will enable protocol versions down to the lowest version + supported by the library. + + If the underlying OpenSSL build is missing support for the selected + version, this method will raise an exception. + """ + _openssl_assert( + _lib.SSL_CTX_set_min_proto_version(self._context, version) == 1 + ) + + @_require_not_used + def set_max_proto_version(self, version: int) -> None: + """ + Set the maximum supported protocol version. Setting the maximum + version to 0 will enable protocol versions up to the highest version + supported by the library. + + If the underlying OpenSSL build is missing support for the selected + version, this method will raise an exception. + """ + _openssl_assert( + _lib.SSL_CTX_set_max_proto_version(self._context, version) == 1 + ) + + @_require_not_used + def load_verify_locations( + self, + cafile: _StrOrBytesPath | None, + capath: _StrOrBytesPath | None = None, + ) -> None: + """ + Let SSL know where we can find trusted certificates for the certificate + chain. Note that the certificates have to be in PEM format. + + If capath is passed, it must be a directory prepared using the + ``c_rehash`` tool included with OpenSSL. Either, but not both, of + *pemfile* or *capath* may be :data:`None`. + + :param cafile: In which file we can find the certificates (``bytes`` or + ``str``). + :param capath: In which directory we can find the certificates + (``bytes`` or ``str``). + + :return: None + """ + if cafile is None: + cafile = _ffi.NULL + else: + cafile = _path_bytes(cafile) + + if capath is None: + capath = _ffi.NULL + else: + capath = _path_bytes(capath) + + load_result = _lib.SSL_CTX_load_verify_locations( + self._context, cafile, capath + ) + if not load_result: + _raise_current_error() + + def _wrap_callback( + self, callback: _PassphraseCallback[_T] + ) -> _PassphraseHelper: + @wraps(callback) + def wrapper(size: int, verify: bool, userdata: Any) -> bytes: + return callback(size, verify, self._passphrase_userdata) + + return _PassphraseHelper( + FILETYPE_PEM, wrapper, more_args=True, truncate=True + ) + + @_require_not_used + def set_passwd_cb( + self, + callback: _PassphraseCallback[_T], + userdata: _T | None = None, + ) -> None: + """ + Set the passphrase callback. This function will be called + when a private key with a passphrase is loaded. + + :param callback: The Python callback to use. This must accept three + positional arguments. First, an integer giving the maximum length + of the passphrase it may return. If the returned passphrase is + longer than this, it will be truncated. Second, a boolean value + which will be true if the user should be prompted for the + passphrase twice and the callback should verify that the two values + supplied are equal. Third, the value given as the *userdata* + parameter to :meth:`set_passwd_cb`. The *callback* must return + a byte string. If an error occurs, *callback* should return a false + value (e.g. an empty string). + :param userdata: (optional) A Python object which will be given as + argument to the callback + :return: None + """ + if not callable(callback): + raise TypeError("callback must be callable") + + self._passphrase_helper = self._wrap_callback(callback) + self._passphrase_callback = self._passphrase_helper.callback + _lib.SSL_CTX_set_default_passwd_cb( + self._context, self._passphrase_callback + ) + self._passphrase_userdata = userdata + + @_require_not_used + def set_default_verify_paths(self) -> None: + """ + Specify that the platform provided CA certificates are to be used for + verification purposes. This method has some caveats related to the + binary wheels that cryptography (pyOpenSSL's primary dependency) ships: + + * macOS will only load certificates using this method if the user has + the ``openssl@1.1`` `Homebrew `_ formula installed + in the default location. + * Windows will not work. + * manylinux cryptography wheels will work on most common Linux + distributions in pyOpenSSL 17.1.0 and above. pyOpenSSL detects the + manylinux wheel and attempts to load roots via a fallback path. + + :return: None + """ + # SSL_CTX_set_default_verify_paths will attempt to load certs from + # both a cafile and capath that are set at compile time. However, + # it will first check environment variables and, if present, load + # those paths instead + set_result = _lib.SSL_CTX_set_default_verify_paths(self._context) + _openssl_assert(set_result == 1) + # After attempting to set default_verify_paths we need to know whether + # to go down the fallback path. + # First we'll check to see if any env vars have been set. If so, + # we won't try to do anything else because the user has set the path + # themselves. + if not self._check_env_vars_set("SSL_CERT_DIR", "SSL_CERT_FILE"): + default_dir = _ffi.string(_lib.X509_get_default_cert_dir()) + default_file = _ffi.string(_lib.X509_get_default_cert_file()) + # Now we check to see if the default_dir and default_file are set + # to the exact values we use in our manylinux builds. If they are + # then we know to load the fallbacks + if ( + default_dir == _CRYPTOGRAPHY_MANYLINUX_CA_DIR + and default_file == _CRYPTOGRAPHY_MANYLINUX_CA_FILE + ): + # This is manylinux, let's load our fallback paths + self._fallback_default_verify_paths( + _CERTIFICATE_FILE_LOCATIONS, _CERTIFICATE_PATH_LOCATIONS + ) + + def _check_env_vars_set(self, dir_env_var: str, file_env_var: str) -> bool: + """ + Check to see if the default cert dir/file environment vars are present. + + :return: bool + """ + return ( + os.environ.get(file_env_var) is not None + or os.environ.get(dir_env_var) is not None + ) + + def _fallback_default_verify_paths( + self, file_path: list[str], dir_path: list[str] + ) -> None: + """ + Default verify paths are based on the compiled version of OpenSSL. + However, when pyca/cryptography is compiled as a manylinux wheel + that compiled location can potentially be wrong. So, like Go, we + will try a predefined set of paths and attempt to load roots + from there. + + :return: None + """ + for cafile in file_path: + if os.path.isfile(cafile): + self.load_verify_locations(cafile) + break + + for capath in dir_path: + if os.path.isdir(capath): + self.load_verify_locations(None, capath) + break + + @_require_not_used + def use_certificate_chain_file(self, certfile: _StrOrBytesPath) -> None: + """ + Load a certificate chain from a file. + + :param certfile: The name of the certificate chain file (``bytes`` or + ``str``). Must be PEM encoded. + + :return: None + """ + certfile = _path_bytes(certfile) + + result = _lib.SSL_CTX_use_certificate_chain_file( + self._context, certfile + ) + if not result: + _raise_current_error() + + @_require_not_used + def use_certificate_file( + self, certfile: _StrOrBytesPath, filetype: int = FILETYPE_PEM + ) -> None: + """ + Load a certificate from a file + + :param certfile: The name of the certificate file (``bytes`` or + ``str``). + :param filetype: (optional) The encoding of the file, which is either + :const:`FILETYPE_PEM` or :const:`FILETYPE_ASN1`. The default is + :const:`FILETYPE_PEM`. + + :return: None + """ + certfile = _path_bytes(certfile) + if not isinstance(filetype, int): + raise TypeError("filetype must be an integer") + + use_result = _lib.SSL_CTX_use_certificate_file( + self._context, certfile, filetype + ) + if not use_result: + _raise_current_error() + + @_require_not_used + def use_certificate(self, cert: X509 | x509.Certificate) -> None: + """ + Load a certificate from a X509 object + + :param cert: The X509 object + :return: None + """ + # Mirrored at Connection.use_certificate + if not isinstance(cert, X509): + cert = X509.from_cryptography(cert) + else: + warnings.warn( + ( + "Passing pyOpenSSL X509 objects is deprecated. You " + "should use a cryptography.x509.Certificate instead." + ), + DeprecationWarning, + stacklevel=2, + ) + + use_result = _lib.SSL_CTX_use_certificate(self._context, cert._x509) + if not use_result: + _raise_current_error() + + @_require_not_used + def add_extra_chain_cert(self, certobj: X509 | x509.Certificate) -> None: + """ + Add certificate to chain + + :param certobj: The X509 certificate object to add to the chain + :return: None + """ + if not isinstance(certobj, X509): + certobj = X509.from_cryptography(certobj) + else: + warnings.warn( + ( + "Passing pyOpenSSL X509 objects is deprecated. You " + "should use a cryptography.x509.Certificate instead." + ), + DeprecationWarning, + stacklevel=2, + ) + + copy = _lib.X509_dup(certobj._x509) + add_result = _lib.SSL_CTX_add_extra_chain_cert(self._context, copy) + if not add_result: + # TODO: This is untested. + _lib.X509_free(copy) + _raise_current_error() + + def _raise_passphrase_exception(self) -> None: + if self._passphrase_helper is not None: + self._passphrase_helper.raise_if_problem(Error) + + _raise_current_error() + + @_require_not_used + def use_privatekey_file( + self, keyfile: _StrOrBytesPath, filetype: int = FILETYPE_PEM + ) -> None: + """ + Load a private key from a file + + :param keyfile: The name of the key file (``bytes`` or ``str``) + :param filetype: (optional) The encoding of the file, which is either + :const:`FILETYPE_PEM` or :const:`FILETYPE_ASN1`. The default is + :const:`FILETYPE_PEM`. + + :return: None + """ + keyfile = _path_bytes(keyfile) + + if not isinstance(filetype, int): + raise TypeError("filetype must be an integer") + + use_result = _lib.SSL_CTX_use_PrivateKey_file( + self._context, keyfile, filetype + ) + if not use_result: + self._raise_passphrase_exception() + + @_require_not_used + def use_privatekey(self, pkey: _PrivateKey | PKey) -> None: + """ + Load a private key from a PKey object + + :param pkey: The PKey object + :return: None + """ + # Mirrored at Connection.use_privatekey + if not isinstance(pkey, PKey): + pkey = PKey.from_cryptography_key(pkey) + else: + warnings.warn( + ( + "Passing pyOpenSSL PKey objects is deprecated. You " + "should use a cryptography private key instead." + ), + DeprecationWarning, + stacklevel=2, + ) + + use_result = _lib.SSL_CTX_use_PrivateKey(self._context, pkey._pkey) + if not use_result: + self._raise_passphrase_exception() + + def check_privatekey(self) -> None: + """ + Check if the private key (loaded with :meth:`use_privatekey`) matches + the certificate (loaded with :meth:`use_certificate`) + + :return: :data:`None` (raises :exc:`Error` if something's wrong) + """ + if not _lib.SSL_CTX_check_private_key(self._context): + _raise_current_error() + + @_require_not_used + def load_client_ca(self, cafile: bytes) -> None: + """ + Load the trusted certificates that will be sent to the client. Does + not actually imply any of the certificates are trusted; that must be + configured separately. + + :param bytes cafile: The path to a certificates file in PEM format. + :return: None + """ + ca_list = _lib.SSL_load_client_CA_file( + _text_to_bytes_and_warn("cafile", cafile) + ) + _openssl_assert(ca_list != _ffi.NULL) + _lib.SSL_CTX_set_client_CA_list(self._context, ca_list) + + @_require_not_used + def set_session_id(self, buf: bytes) -> None: + """ + Set the session id to *buf* within which a session can be reused for + this Context object. This is needed when doing session resumption, + because there is no way for a stored session to know which Context + object it is associated with. + + :param bytes buf: The session id. + + :returns: None + """ + buf = _text_to_bytes_and_warn("buf", buf) + _openssl_assert( + _lib.SSL_CTX_set_session_id_context(self._context, buf, len(buf)) + == 1 + ) + + @_require_not_used + def set_session_cache_mode(self, mode: int) -> int: + """ + Set the behavior of the session cache used by all connections using + this Context. The previously set mode is returned. See + :const:`SESS_CACHE_*` for details about particular modes. + + :param mode: One or more of the SESS_CACHE_* flags (combine using + bitwise or) + :returns: The previously set caching mode. + + .. versionadded:: 0.14 + """ + if not isinstance(mode, int): + raise TypeError("mode must be an integer") + + return _lib.SSL_CTX_set_session_cache_mode(self._context, mode) + + def get_session_cache_mode(self) -> int: + """ + Get the current session cache mode. + + :returns: The currently used cache mode. + + .. versionadded:: 0.14 + """ + return _lib.SSL_CTX_get_session_cache_mode(self._context) + + @_require_not_used + def set_verify( + self, mode: int, callback: _VerifyCallback | None = None + ) -> None: + """ + Set the verification flags for this Context object to *mode* and + specify that *callback* should be used for verification callbacks. + + :param mode: The verify mode, this should be one of + :const:`VERIFY_NONE` and :const:`VERIFY_PEER`. If + :const:`VERIFY_PEER` is used, *mode* can be OR:ed with + :const:`VERIFY_FAIL_IF_NO_PEER_CERT` and + :const:`VERIFY_CLIENT_ONCE` to further control the behaviour. + :param callback: The optional Python verification callback to use. + This should take five arguments: A Connection object, an X509 + object, and three integer variables, which are in turn potential + error number, error depth and return code. *callback* should + return True if verification passes and False otherwise. + If omitted, OpenSSL's default verification is used. + :return: None + + See SSL_CTX_set_verify(3SSL) for further details. + """ + if not isinstance(mode, int): + raise TypeError("mode must be an integer") + + if callback is None: + self._verify_helper = None + self._verify_callback = None + _lib.SSL_CTX_set_verify(self._context, mode, _ffi.NULL) + else: + if not callable(callback): + raise TypeError("callback must be callable") + + self._verify_helper = _VerifyHelper(callback) + self._verify_callback = self._verify_helper.callback + _lib.SSL_CTX_set_verify(self._context, mode, self._verify_callback) + + @_require_not_used + def set_verify_depth(self, depth: int) -> None: + """ + Set the maximum depth for the certificate chain verification that shall + be allowed for this Context object. + + :param depth: An integer specifying the verify depth + :return: None + """ + if not isinstance(depth, int): + raise TypeError("depth must be an integer") + + _lib.SSL_CTX_set_verify_depth(self._context, depth) + + def get_verify_mode(self) -> int: + """ + Retrieve the Context object's verify mode, as set by + :meth:`set_verify`. + + :return: The verify mode + """ + return _lib.SSL_CTX_get_verify_mode(self._context) + + def get_verify_depth(self) -> int: + """ + Retrieve the Context object's verify depth, as set by + :meth:`set_verify_depth`. + + :return: The verify depth + """ + return _lib.SSL_CTX_get_verify_depth(self._context) + + @_require_not_used + def load_tmp_dh(self, dhfile: _StrOrBytesPath) -> None: + """ + Load parameters for Ephemeral Diffie-Hellman + + :param dhfile: The file to load EDH parameters from (``bytes`` or + ``str``). + + :return: None + """ + dhfile = _path_bytes(dhfile) + + bio = _lib.BIO_new_file(dhfile, b"r") + if bio == _ffi.NULL: + _raise_current_error() + bio = _ffi.gc(bio, _lib.BIO_free) + + dh = _lib.PEM_read_bio_DHparams(bio, _ffi.NULL, _ffi.NULL, _ffi.NULL) + dh = _ffi.gc(dh, _lib.DH_free) + res = _lib.SSL_CTX_set_tmp_dh(self._context, dh) + _openssl_assert(res == 1) + + @_require_not_used + def set_tmp_ecdh(self, curve: _EllipticCurve | ec.EllipticCurve) -> None: + """ + Select a curve to use for ECDHE key exchange. + + :param curve: A curve instance from cryptography + (:class:`~cryptogragraphy.hazmat.primitives.asymmetric.ec.EllipticCurve`). + Alternatively (deprecated) a curve object from either + :meth:`OpenSSL.crypto.get_elliptic_curve` or + :meth:`OpenSSL.crypto.get_elliptic_curves`. + + :return: None + """ + + if isinstance(curve, _EllipticCurve): + warnings.warn( + ( + "Passing pyOpenSSL elliptic curves to set_tmp_ecdh is " + "deprecated. You should use cryptography's elliptic curve " + "types instead." + ), + DeprecationWarning, + stacklevel=2, + ) + _lib.SSL_CTX_set_tmp_ecdh(self._context, curve._to_EC_KEY()) + else: + name = curve.name + if name == "secp192r1": + name = "prime192v1" + elif name == "secp256r1": + name = "prime256v1" + nid = _lib.OBJ_txt2nid(name.encode()) + if nid == _lib.NID_undef: + _raise_current_error() + + ec = _lib.EC_KEY_new_by_curve_name(nid) + _openssl_assert(ec != _ffi.NULL) + ec = _ffi.gc(ec, _lib.EC_KEY_free) + _lib.SSL_CTX_set_tmp_ecdh(self._context, ec) + + @_require_not_used + def set_cipher_list(self, cipher_list: bytes) -> None: + """ + Set the list of ciphers to be used in this context. + + See the OpenSSL manual for more information (e.g. + :manpage:`ciphers(1)`). + + Note this API does not change the cipher suites used in TLS 1.3 + Use `set_tls13_ciphersuites` for that. + + :param bytes cipher_list: An OpenSSL cipher string. + :return: None + """ + cipher_list = _text_to_bytes_and_warn("cipher_list", cipher_list) + + if not isinstance(cipher_list, bytes): + raise TypeError("cipher_list must be a byte string.") + + _openssl_assert( + _lib.SSL_CTX_set_cipher_list(self._context, cipher_list) == 1 + ) + + @_require_not_used + def set_tls13_ciphersuites(self, ciphersuites: bytes) -> None: + """ + Set the list of TLS 1.3 ciphers to be used in this context. + OpenSSL maintains a separate list of TLS 1.3+ ciphers to + ciphers for TLS 1.2 and lowers. + + See the OpenSSL manual for more information (e.g. + :manpage:`ciphers(1)`). + + :param bytes ciphersuites: An OpenSSL cipher string containing + TLS 1.3+ ciphersuites. + :return: None + + .. versionadded:: 25.2.0 + """ + if not isinstance(ciphersuites, bytes): + raise TypeError("ciphersuites must be a byte string.") + + _openssl_assert( + _lib.SSL_CTX_set_ciphersuites(self._context, ciphersuites) == 1 + ) + + @_require_not_used + def set_client_ca_list( + self, certificate_authorities: Sequence[X509Name] + ) -> None: + """ + Set the list of preferred client certificate signers for this server + context. + + This list of certificate authorities will be sent to the client when + the server requests a client certificate. + + :param certificate_authorities: a sequence of X509Names. + :return: None + + .. versionadded:: 0.10 + """ + name_stack = _lib.sk_X509_NAME_new_null() + _openssl_assert(name_stack != _ffi.NULL) + + try: + for ca_name in certificate_authorities: + if not isinstance(ca_name, X509Name): + raise TypeError( + f"client CAs must be X509Name objects, not " + f"{type(ca_name).__name__} objects" + ) + copy = _lib.X509_NAME_dup(ca_name._name) + _openssl_assert(copy != _ffi.NULL) + push_result = _lib.sk_X509_NAME_push(name_stack, copy) + if not push_result: + _lib.X509_NAME_free(copy) + _raise_current_error() + except Exception: + _lib.sk_X509_NAME_free(name_stack) + raise + + _lib.SSL_CTX_set_client_CA_list(self._context, name_stack) + + @_require_not_used + def add_client_ca( + self, certificate_authority: X509 | x509.Certificate + ) -> None: + """ + Add the CA certificate to the list of preferred signers for this + context. + + The list of certificate authorities will be sent to the client when the + server requests a client certificate. + + :param certificate_authority: certificate authority's X509 certificate. + :return: None + + .. versionadded:: 0.10 + """ + if not isinstance(certificate_authority, X509): + certificate_authority = X509.from_cryptography( + certificate_authority + ) + else: + warnings.warn( + ( + "Passing pyOpenSSL X509 objects is deprecated. You " + "should use a cryptography.x509.Certificate instead." + ), + DeprecationWarning, + stacklevel=2, + ) + + add_result = _lib.SSL_CTX_add_client_CA( + self._context, certificate_authority._x509 + ) + _openssl_assert(add_result == 1) + + @_require_not_used + def set_timeout(self, timeout: int) -> None: + """ + Set the timeout for newly created sessions for this Context object to + *timeout*. The default value is 300 seconds. See the OpenSSL manual + for more information (e.g. :manpage:`SSL_CTX_set_timeout(3)`). + + :param timeout: The timeout in (whole) seconds + :return: The previous session timeout + """ + if not isinstance(timeout, int): + raise TypeError("timeout must be an integer") + + return _lib.SSL_CTX_set_timeout(self._context, timeout) + + def get_timeout(self) -> int: + """ + Retrieve session timeout, as set by :meth:`set_timeout`. The default + is 300 seconds. + + :return: The session timeout + """ + return _lib.SSL_CTX_get_timeout(self._context) + + @_require_not_used + def set_info_callback( + self, callback: Callable[[Connection, int, int], None] + ) -> None: + """ + Set the information callback to *callback*. This function will be + called from time to time during SSL handshakes. + + :param callback: The Python callback to use. This should take three + arguments: a Connection object and two integers. The first integer + specifies where in the SSL handshake the function was called, and + the other the return code from a (possibly failed) internal + function call. + :return: None + """ + + @wraps(callback) + def wrapper(ssl, where, return_code): # type: ignore[no-untyped-def] + callback(Connection._reverse_mapping[ssl], where, return_code) + + self._info_callback = _ffi.callback( + "void (*)(const SSL *, int, int)", wrapper + ) + _lib.SSL_CTX_set_info_callback(self._context, self._info_callback) + + @_requires_keylog + @_require_not_used + def set_keylog_callback( + self, callback: Callable[[Connection, bytes], None] + ) -> None: + """ + Set the TLS key logging callback to *callback*. This function will be + called whenever TLS key material is generated or received, in order + to allow applications to store this keying material for debugging + purposes. + + :param callback: The Python callback to use. This should take two + arguments: a Connection object and a bytestring that contains + the key material in the format used by NSS for its SSLKEYLOGFILE + debugging output. + :return: None + """ + + @wraps(callback) + def wrapper(ssl, line): # type: ignore[no-untyped-def] + line = _ffi.string(line) + callback(Connection._reverse_mapping[ssl], line) + + self._keylog_callback = _ffi.callback( + "void (*)(const SSL *, const char *)", wrapper + ) + _lib.SSL_CTX_set_keylog_callback(self._context, self._keylog_callback) + + def get_app_data(self) -> Any: + """ + Get the application data (supplied via :meth:`set_app_data()`) + + :return: The application data + """ + return self._app_data + + @_require_not_used + def set_app_data(self, data: Any) -> None: + """ + Set the application data (will be returned from get_app_data()) + + :param data: Any Python object + :return: None + """ + self._app_data = data + + def get_cert_store(self) -> X509Store | None: + """ + Get the certificate store for the context. This can be used to add + "trusted" certificates without using the + :meth:`load_verify_locations` method. + + :return: A X509Store object or None if it does not have one. + """ + store = _lib.SSL_CTX_get_cert_store(self._context) + if store == _ffi.NULL: + # TODO: This is untested. + return None + + pystore = X509Store.__new__(X509Store) + pystore._store = store + return pystore + + @_require_not_used + def set_options(self, options: int) -> int: + """ + Add options. Options set before are not cleared! + This method should be used with the :const:`OP_*` constants. + + :param options: The options to add. + :return: The new option bitmask. + """ + if not isinstance(options, int): + raise TypeError("options must be an integer") + + return _lib.SSL_CTX_set_options(self._context, options) + + @_require_not_used + def set_mode(self, mode: int) -> int: + """ + Add modes via bitmask. Modes set before are not cleared! This method + should be used with the :const:`MODE_*` constants. + + :param mode: The mode to add. + :return: The new mode bitmask. + """ + if not isinstance(mode, int): + raise TypeError("mode must be an integer") + + return _lib.SSL_CTX_set_mode(self._context, mode) + + @_require_not_used + def clear_mode(self, mode_to_clear: int) -> int: + """ + Modes previously set cannot be overwritten without being + cleared first. This method should be used to clear existing modes. + """ + return _lib.SSL_CTX_clear_mode(self._context, mode_to_clear) + + @_require_not_used + def set_tlsext_servername_callback( + self, callback: Callable[[Connection], None] + ) -> None: + """ + Specify a callback function to be called when clients specify a server + name. + + :param callback: The callback function. It will be invoked with one + argument, the Connection instance. + + .. versionadded:: 0.13 + """ + + @wraps(callback) + def wrapper(ssl, alert, arg): # type: ignore[no-untyped-def] + callback(Connection._reverse_mapping[ssl]) + return 0 + + self._tlsext_servername_callback = _ffi.callback( + "int (*)(SSL *, int *, void *)", wrapper + ) + _lib.SSL_CTX_set_tlsext_servername_callback( + self._context, self._tlsext_servername_callback + ) + + @_require_not_used + def set_tlsext_use_srtp(self, profiles: bytes) -> None: + """ + Enable support for negotiating SRTP keying material. + + :param bytes profiles: A colon delimited list of protection profile + names, like ``b'SRTP_AES128_CM_SHA1_80:SRTP_AES128_CM_SHA1_32'``. + :return: None + """ + if not isinstance(profiles, bytes): + raise TypeError("profiles must be a byte string.") + + _openssl_assert( + _lib.SSL_CTX_set_tlsext_use_srtp(self._context, profiles) == 0 + ) + + @_require_not_used + def set_alpn_protos(self, protos: list[bytes]) -> None: + """ + Specify the protocols that the client is prepared to speak after the + TLS connection has been negotiated using Application Layer Protocol + Negotiation. + + :param protos: A list of the protocols to be offered to the server. + This list should be a Python list of bytestrings representing the + protocols to offer, e.g. ``[b'http/1.1', b'spdy/2']``. + """ + # Different versions of OpenSSL are inconsistent about how they handle + # empty proto lists (see #1043), so we avoid the problem entirely by + # rejecting them ourselves. + if not protos: + raise ValueError("at least one protocol must be specified") + + # Take the list of protocols and join them together, prefixing them + # with their lengths. + protostr = b"".join( + chain.from_iterable((bytes((len(p),)), p) for p in protos) + ) + + # Build a C string from the list. We don't need to save this off + # because OpenSSL immediately copies the data out. + input_str = _ffi.new("unsigned char[]", protostr) + + # https://www.openssl.org/docs/man1.1.0/man3/SSL_CTX_set_alpn_protos.html: + # SSL_CTX_set_alpn_protos() and SSL_set_alpn_protos() + # return 0 on success, and non-0 on failure. + # WARNING: these functions reverse the return value convention. + _openssl_assert( + _lib.SSL_CTX_set_alpn_protos( + self._context, input_str, len(protostr) + ) + == 0 + ) + + @_require_not_used + def set_alpn_select_callback(self, callback: _ALPNSelectCallback) -> None: + """ + Specify a callback function that will be called on the server when a + client offers protocols using ALPN. + + :param callback: The callback function. It will be invoked with two + arguments: the Connection, and a list of offered protocols as + bytestrings, e.g ``[b'http/1.1', b'spdy/2']``. It can return + one of those bytestrings to indicate the chosen protocol, the + empty bytestring to terminate the TLS connection, or the + :py:obj:`NO_OVERLAPPING_PROTOCOLS` to indicate that no offered + protocol was selected, but that the connection should not be + aborted. + """ + self._alpn_select_helper = _ALPNSelectHelper(callback) + self._alpn_select_callback = self._alpn_select_helper.callback + _lib.SSL_CTX_set_alpn_select_cb( + self._context, self._alpn_select_callback, _ffi.NULL + ) + + def _set_ocsp_callback( + self, + helper: _OCSPClientCallbackHelper | _OCSPServerCallbackHelper, + data: Any | None, + ) -> None: + """ + This internal helper does the common work for + ``set_ocsp_server_callback`` and ``set_ocsp_client_callback``, which is + almost all of it. + """ + self._ocsp_helper = helper + self._ocsp_callback = helper.callback + if data is None: + self._ocsp_data = _ffi.NULL + else: + self._ocsp_data = _ffi.new_handle(data) + + rc = _lib.SSL_CTX_set_tlsext_status_cb( + self._context, self._ocsp_callback + ) + _openssl_assert(rc == 1) + rc = _lib.SSL_CTX_set_tlsext_status_arg(self._context, self._ocsp_data) + _openssl_assert(rc == 1) + + @_require_not_used + def set_ocsp_server_callback( + self, + callback: _OCSPServerCallback[_T], + data: _T | None = None, + ) -> None: + """ + Set a callback to provide OCSP data to be stapled to the TLS handshake + on the server side. + + :param callback: The callback function. It will be invoked with two + arguments: the Connection, and the optional arbitrary data you have + provided. The callback must return a bytestring that contains the + OCSP data to staple to the handshake. If no OCSP data is available + for this connection, return the empty bytestring. + :param data: Some opaque data that will be passed into the callback + function when called. This can be used to avoid needing to do + complex data lookups or to keep track of what context is being + used. This parameter is optional. + """ + helper = _OCSPServerCallbackHelper(callback) + self._set_ocsp_callback(helper, data) + + @_require_not_used + def set_ocsp_client_callback( + self, + callback: _OCSPClientCallback[_T], + data: _T | None = None, + ) -> None: + """ + Set a callback to validate OCSP data stapled to the TLS handshake on + the client side. + + :param callback: The callback function. It will be invoked with three + arguments: the Connection, a bytestring containing the stapled OCSP + assertion, and the optional arbitrary data you have provided. The + callback must return a boolean that indicates the result of + validating the OCSP data: ``True`` if the OCSP data is valid and + the certificate can be trusted, or ``False`` if either the OCSP + data is invalid or the certificate has been revoked. + :param data: Some opaque data that will be passed into the callback + function when called. This can be used to avoid needing to do + complex data lookups or to keep track of what context is being + used. This parameter is optional. + """ + helper = _OCSPClientCallbackHelper(callback) + self._set_ocsp_callback(helper, data) + + @_require_not_used + def set_cookie_generate_callback( + self, callback: _CookieGenerateCallback + ) -> None: + self._cookie_generate_helper = _CookieGenerateCallbackHelper(callback) + _lib.SSL_CTX_set_cookie_generate_cb( + self._context, + self._cookie_generate_helper.callback, + ) + + @_require_not_used + def set_cookie_verify_callback( + self, callback: _CookieVerifyCallback + ) -> None: + self._cookie_verify_helper = _CookieVerifyCallbackHelper(callback) + _lib.SSL_CTX_set_cookie_verify_cb( + self._context, + self._cookie_verify_helper.callback, + ) + + +class Connection: + _reverse_mapping: typing.MutableMapping[Any, Connection] = ( + WeakValueDictionary() + ) + + def __init__( + self, context: Context, socket: socket.socket | None = None + ) -> None: + """ + Create a new Connection object, using the given OpenSSL.SSL.Context + instance and socket. + + :param context: An SSL Context to use for this connection + :param socket: The socket to use for transport layer + """ + if not isinstance(context, Context): + raise TypeError("context must be a Context instance") + + context._used = True + + ssl = _lib.SSL_new(context._context) + self._ssl = _ffi.gc(ssl, _lib.SSL_free) + # We set SSL_MODE_AUTO_RETRY to handle situations where OpenSSL returns + # an SSL_ERROR_WANT_READ when processing a non-application data packet + # even though there is still data on the underlying transport. + # See https://github.com/openssl/openssl/issues/6234 for more details. + _lib.SSL_set_mode(self._ssl, _lib.SSL_MODE_AUTO_RETRY) + self._context = context + self._app_data = None + + # References to strings used for Application Layer Protocol + # Negotiation. These strings get copied at some point but it's well + # after the callback returns, so we have to hang them somewhere to + # avoid them getting freed. + self._alpn_select_callback_args: Any = None + + # Reference the verify_callback of the Context. This ensures that if + # set_verify is called again after the SSL object has been created we + # do not point to a dangling reference + self._verify_helper = context._verify_helper + self._verify_callback = context._verify_callback + + # And likewise for the cookie callbacks + self._cookie_generate_helper = context._cookie_generate_helper + self._cookie_verify_helper = context._cookie_verify_helper + + self._reverse_mapping[self._ssl] = self + + if socket is None: + self._socket = None + # Don't set up any gc for these, SSL_free will take care of them. + self._into_ssl = _lib.BIO_new(_lib.BIO_s_mem()) + _openssl_assert(self._into_ssl != _ffi.NULL) + + self._from_ssl = _lib.BIO_new(_lib.BIO_s_mem()) + _openssl_assert(self._from_ssl != _ffi.NULL) + + _lib.SSL_set_bio(self._ssl, self._into_ssl, self._from_ssl) + else: + self._into_ssl = None + self._from_ssl = None + self._socket = socket + set_result = _lib.SSL_set_fd( + self._ssl, _asFileDescriptor(self._socket) + ) + _openssl_assert(set_result == 1) + + def __getattr__(self, name: str) -> Any: + """ + Look up attributes on the wrapped socket object if they are not found + on the Connection object. + """ + if self._socket is None: + raise AttributeError( + f"'{self.__class__.__name__}' object has no attribute '{name}'" + ) + else: + return getattr(self._socket, name) + + def _raise_ssl_error(self, ssl: Any, result: int) -> None: + if self._context._verify_helper is not None: + self._context._verify_helper.raise_if_problem() + if self._context._alpn_select_helper is not None: + self._context._alpn_select_helper.raise_if_problem() + if self._context._ocsp_helper is not None: + self._context._ocsp_helper.raise_if_problem() + + error = _lib.SSL_get_error(ssl, result) + if error == _lib.SSL_ERROR_WANT_READ: + raise WantReadError() + elif error == _lib.SSL_ERROR_WANT_WRITE: + raise WantWriteError() + elif error == _lib.SSL_ERROR_ZERO_RETURN: + raise ZeroReturnError() + elif error == _lib.SSL_ERROR_WANT_X509_LOOKUP: + # TODO: This is untested. + raise WantX509LookupError() + elif error == _lib.SSL_ERROR_SYSCALL: + if platform == "win32": + errno = _ffi.getwinerror()[0] + else: + errno = _ffi.errno + if _lib.ERR_peek_error() == 0 or errno != 0: + if result < 0 and errno != 0: + raise SysCallError(errno, errorcode.get(errno)) + raise SysCallError(-1, "Unexpected EOF") + else: + # TODO: This is untested, but I think twisted hits it? + _raise_current_error() + elif error == _lib.SSL_ERROR_SSL and _lib.ERR_peek_error() != 0: + # In 3.0.x an unexpected EOF no longer triggers syscall error + # but we want to maintain compatibility so we check here and + # raise syscall if it is an EOF. Since we're not actually sure + # what else could raise SSL_ERROR_SSL we check for the presence + # of the OpenSSL 3 constant SSL_R_UNEXPECTED_EOF_WHILE_READING + # and if it's not present we just raise an error, which matches + # the behavior before we added this elif section + peeked_error = _lib.ERR_peek_error() + reason = _lib.ERR_GET_REASON(peeked_error) + if _lib.Cryptography_HAS_UNEXPECTED_EOF_WHILE_READING: + _openssl_assert( + reason == _lib.SSL_R_UNEXPECTED_EOF_WHILE_READING + ) + _lib.ERR_clear_error() + raise SysCallError(-1, "Unexpected EOF") + else: + _raise_current_error() + elif error == _lib.SSL_ERROR_NONE: + pass + else: + _raise_current_error() + + def get_context(self) -> Context: + """ + Retrieve the :class:`Context` object associated with this + :class:`Connection`. + """ + return self._context + + def set_context(self, context: Context) -> None: + """ + Switch this connection to a new session context. + + :param context: A :class:`Context` instance giving the new session + context to use. + """ + if not isinstance(context, Context): + raise TypeError("context must be a Context instance") + + _lib.SSL_set_SSL_CTX(self._ssl, context._context) + self._context = context + self._context._used = True + + def get_servername(self) -> bytes | None: + """ + Retrieve the servername extension value if provided in the client hello + message, or None if there wasn't one. + + :return: A byte string giving the server name or :data:`None`. + + .. versionadded:: 0.13 + """ + name = _lib.SSL_get_servername( + self._ssl, _lib.TLSEXT_NAMETYPE_host_name + ) + if name == _ffi.NULL: + return None + + return _ffi.string(name) + + def set_verify( + self, mode: int, callback: _VerifyCallback | None = None + ) -> None: + """ + Override the Context object's verification flags for this specific + connection. See :py:meth:`Context.set_verify` for details. + """ + if not isinstance(mode, int): + raise TypeError("mode must be an integer") + + if callback is None: + self._verify_helper = None + self._verify_callback = None + _lib.SSL_set_verify(self._ssl, mode, _ffi.NULL) + else: + if not callable(callback): + raise TypeError("callback must be callable") + + self._verify_helper = _VerifyHelper(callback) + self._verify_callback = self._verify_helper.callback + _lib.SSL_set_verify(self._ssl, mode, self._verify_callback) + + def get_verify_mode(self) -> int: + """ + Retrieve the Connection object's verify mode, as set by + :meth:`set_verify`. + + :return: The verify mode + """ + return _lib.SSL_get_verify_mode(self._ssl) + + def use_certificate(self, cert: X509 | x509.Certificate) -> None: + """ + Load a certificate from a X509 object + + :param cert: The X509 object + :return: None + """ + # Mirrored from Context.use_certificate + if not isinstance(cert, X509): + cert = X509.from_cryptography(cert) + else: + warnings.warn( + ( + "Passing pyOpenSSL X509 objects is deprecated. You " + "should use a cryptography.x509.Certificate instead." + ), + DeprecationWarning, + stacklevel=2, + ) + + use_result = _lib.SSL_use_certificate(self._ssl, cert._x509) + if not use_result: + _raise_current_error() + + def use_privatekey(self, pkey: _PrivateKey | PKey) -> None: + """ + Load a private key from a PKey object + + :param pkey: The PKey object + :return: None + """ + # Mirrored from Context.use_privatekey + if not isinstance(pkey, PKey): + pkey = PKey.from_cryptography_key(pkey) + else: + warnings.warn( + ( + "Passing pyOpenSSL PKey objects is deprecated. You " + "should use a cryptography private key instead." + ), + DeprecationWarning, + stacklevel=2, + ) + + use_result = _lib.SSL_use_PrivateKey(self._ssl, pkey._pkey) + if not use_result: + self._context._raise_passphrase_exception() + + def set_ciphertext_mtu(self, mtu: int) -> None: + """ + For DTLS, set the maximum UDP payload size (*not* including IP/UDP + overhead). + + Note that you might have to set :data:`OP_NO_QUERY_MTU` to prevent + OpenSSL from spontaneously clearing this. + + :param mtu: An integer giving the maximum transmission unit. + + .. versionadded:: 21.1 + """ + _lib.SSL_set_mtu(self._ssl, mtu) + + def get_cleartext_mtu(self) -> int: + """ + For DTLS, get the maximum size of unencrypted data you can pass to + :meth:`write` without exceeding the MTU (as passed to + :meth:`set_ciphertext_mtu`). + + :return: The effective MTU as an integer. + + .. versionadded:: 21.1 + """ + + if not hasattr(_lib, "DTLS_get_data_mtu"): + raise NotImplementedError("requires OpenSSL 1.1.1 or better") + return _lib.DTLS_get_data_mtu(self._ssl) + + def set_tlsext_host_name(self, name: bytes) -> None: + """ + Set the value of the servername extension to send in the client hello. + + :param name: A byte string giving the name. + + .. versionadded:: 0.13 + """ + if not isinstance(name, bytes): + raise TypeError("name must be a byte string") + elif b"\0" in name: + raise TypeError("name must not contain NUL byte") + + # XXX I guess this can fail sometimes? + _lib.SSL_set_tlsext_host_name(self._ssl, name) + + def pending(self) -> int: + """ + Get the number of bytes that can be safely read from the SSL buffer + (**not** the underlying transport buffer). + + :return: The number of bytes available in the receive buffer. + """ + return _lib.SSL_pending(self._ssl) + + def send(self, buf: _Buffer, flags: int = 0) -> int: + """ + Send data on the connection. NOTE: If you get one of the WantRead, + WantWrite or WantX509Lookup exceptions on this, you have to call the + method again with the SAME buffer. + + :param buf: The string, buffer or memoryview to send + :param flags: (optional) Included for compatibility with the socket + API, the value is ignored + :return: The number of bytes written + """ + # Backward compatibility + buf = _text_to_bytes_and_warn("buf", buf) + + with _ffi.from_buffer(buf) as data: + # check len(buf) instead of len(data) for testability + if len(buf) > 2147483647: + raise ValueError( + "Cannot send more than 2**31-1 bytes at once." + ) + + result = _lib.SSL_write(self._ssl, data, len(data)) + self._raise_ssl_error(self._ssl, result) + + return result + + write = send + + def sendall(self, buf: _Buffer, flags: int = 0) -> int: + """ + Send "all" data on the connection. This calls send() repeatedly until + all data is sent. If an error occurs, it's impossible to tell how much + data has been sent. + + :param buf: The string, buffer or memoryview to send + :param flags: (optional) Included for compatibility with the socket + API, the value is ignored + :return: The number of bytes written + """ + buf = _text_to_bytes_and_warn("buf", buf) + + with _ffi.from_buffer(buf) as data: + left_to_send = len(buf) + total_sent = 0 + + while left_to_send: + # SSL_write's num arg is an int, + # so we cannot send more than 2**31-1 bytes at once. + result = _lib.SSL_write( + self._ssl, data + total_sent, min(left_to_send, 2147483647) + ) + self._raise_ssl_error(self._ssl, result) + total_sent += result + left_to_send -= result + + return total_sent + + def recv(self, bufsiz: int, flags: int | None = None) -> bytes: + """ + Receive data on the connection. + + :param bufsiz: The maximum number of bytes to read + :param flags: (optional) The only supported flag is ``MSG_PEEK``, + all other flags are ignored. + :return: The string read from the Connection + """ + buf = _no_zero_allocator("char[]", bufsiz) + if flags is not None and flags & socket.MSG_PEEK: + result = _lib.SSL_peek(self._ssl, buf, bufsiz) + else: + result = _lib.SSL_read(self._ssl, buf, bufsiz) + self._raise_ssl_error(self._ssl, result) + return _ffi.buffer(buf, result)[:] + + read = recv + + def recv_into( + self, + buffer: Any, # collections.abc.Buffer once we use Python 3.12+ + nbytes: int | None = None, + flags: int | None = None, + ) -> int: + """ + Receive data on the connection and copy it directly into the provided + buffer, rather than creating a new string. + + :param buffer: The buffer to copy into. + :param nbytes: (optional) The maximum number of bytes to read into the + buffer. If not present, defaults to the size of the buffer. If + larger than the size of the buffer, is reduced to the size of the + buffer. + :param flags: (optional) The only supported flag is ``MSG_PEEK``, + all other flags are ignored. + :return: The number of bytes read into the buffer. + """ + if nbytes is None: + nbytes = len(buffer) + else: + nbytes = min(nbytes, len(buffer)) + + # We need to create a temporary buffer. This is annoying, it would be + # better if we could pass memoryviews straight into the SSL_read call, + # but right now we can't. Revisit this if CFFI gets that ability. + buf = _no_zero_allocator("char[]", nbytes) + if flags is not None and flags & socket.MSG_PEEK: + result = _lib.SSL_peek(self._ssl, buf, nbytes) + else: + result = _lib.SSL_read(self._ssl, buf, nbytes) + self._raise_ssl_error(self._ssl, result) + + # This strange line is all to avoid a memory copy. The buffer protocol + # should allow us to assign a CFFI buffer to the LHS of this line, but + # on CPython 3.3+ that segfaults. As a workaround, we can temporarily + # wrap it in a memoryview. + buffer[:result] = memoryview(_ffi.buffer(buf, result)) + + return result + + def _handle_bio_errors(self, bio: Any, result: int) -> typing.NoReturn: + if _lib.BIO_should_retry(bio): + if _lib.BIO_should_read(bio): + raise WantReadError() + elif _lib.BIO_should_write(bio): + # TODO: This is untested. + raise WantWriteError() + elif _lib.BIO_should_io_special(bio): + # TODO: This is untested. I think io_special means the socket + # BIO has a not-yet connected socket. + raise ValueError("BIO_should_io_special") + else: + # TODO: This is untested. + raise ValueError("unknown bio failure") + else: + # TODO: This is untested. + _raise_current_error() + + def bio_read(self, bufsiz: int) -> bytes: + """ + If the Connection was created with a memory BIO, this method can be + used to read bytes from the write end of that memory BIO. Many + Connection methods will add bytes which must be read in this manner or + the buffer will eventually fill up and the Connection will be able to + take no further actions. + + :param bufsiz: The maximum number of bytes to read + :return: The string read. + """ + if self._from_ssl is None: + raise TypeError("Connection sock was not None") + + if not isinstance(bufsiz, int): + raise TypeError("bufsiz must be an integer") + + buf = _no_zero_allocator("char[]", bufsiz) + result = _lib.BIO_read(self._from_ssl, buf, bufsiz) + if result <= 0: + self._handle_bio_errors(self._from_ssl, result) + + return _ffi.buffer(buf, result)[:] + + def bio_write(self, buf: _Buffer) -> int: + """ + If the Connection was created with a memory BIO, this method can be + used to add bytes to the read end of that memory BIO. The Connection + can then read the bytes (for example, in response to a call to + :meth:`recv`). + + :param buf: The string to put into the memory BIO. + :return: The number of bytes written + """ + buf = _text_to_bytes_and_warn("buf", buf) + + if self._into_ssl is None: + raise TypeError("Connection sock was not None") + + with _ffi.from_buffer(buf) as data: + result = _lib.BIO_write(self._into_ssl, data, len(data)) + if result <= 0: + self._handle_bio_errors(self._into_ssl, result) + return result + + def renegotiate(self) -> bool: + """ + Renegotiate the session. + + :return: True if the renegotiation can be started, False otherwise + """ + if not self.renegotiate_pending(): + _openssl_assert(_lib.SSL_renegotiate(self._ssl) == 1) + return True + return False + + def do_handshake(self) -> None: + """ + Perform an SSL handshake (usually called after :meth:`renegotiate` or + one of :meth:`set_accept_state` or :meth:`set_connect_state`). This can + raise the same exceptions as :meth:`send` and :meth:`recv`. + + :return: None. + """ + result = _lib.SSL_do_handshake(self._ssl) + self._raise_ssl_error(self._ssl, result) + + def renegotiate_pending(self) -> bool: + """ + Check if there's a renegotiation in progress, it will return False once + a renegotiation is finished. + + :return: Whether there's a renegotiation in progress + """ + return _lib.SSL_renegotiate_pending(self._ssl) == 1 + + def total_renegotiations(self) -> int: + """ + Find out the total number of renegotiations. + + :return: The number of renegotiations. + """ + return _lib.SSL_total_renegotiations(self._ssl) + + def connect(self, addr: Any) -> None: + """ + Call the :meth:`connect` method of the underlying socket and set up SSL + on the socket, using the :class:`Context` object supplied to this + :class:`Connection` object at creation. + + :param addr: A remote address + :return: What the socket's connect method returns + """ + _lib.SSL_set_connect_state(self._ssl) + return self._socket.connect(addr) # type: ignore[return-value, union-attr] + + def connect_ex(self, addr: Any) -> int: + """ + Call the :meth:`connect_ex` method of the underlying socket and set up + SSL on the socket, using the Context object supplied to this Connection + object at creation. Note that if the :meth:`connect_ex` method of the + socket doesn't return 0, SSL won't be initialized. + + :param addr: A remove address + :return: What the socket's connect_ex method returns + """ + connect_ex = self._socket.connect_ex # type: ignore[union-attr] + self.set_connect_state() + return connect_ex(addr) + + def accept(self) -> tuple[Connection, Any]: + """ + Call the :meth:`accept` method of the underlying socket and set up SSL + on the returned socket, using the Context object supplied to this + :class:`Connection` object at creation. + + :return: A *(conn, addr)* pair where *conn* is the new + :class:`Connection` object created, and *address* is as returned by + the socket's :meth:`accept`. + """ + client, addr = self._socket.accept() # type: ignore[union-attr] + conn = Connection(self._context, client) + conn.set_accept_state() + return (conn, addr) + + def DTLSv1_listen(self) -> None: + """ + Call the OpenSSL function DTLSv1_listen on this connection. See the + OpenSSL manual for more details. + + :return: None + """ + # Possible future extension: return the BIO_ADDR in some form. + bio_addr = _lib.BIO_ADDR_new() + try: + result = _lib.DTLSv1_listen(self._ssl, bio_addr) + finally: + _lib.BIO_ADDR_free(bio_addr) + # DTLSv1_listen is weird. A zero return value means 'didn't find a + # ClientHello with valid cookie, but keep trying'. So basically + # WantReadError. But it doesn't work correctly with _raise_ssl_error. + # So we raise it manually instead. + if self._cookie_generate_helper is not None: + self._cookie_generate_helper.raise_if_problem() + if self._cookie_verify_helper is not None: + self._cookie_verify_helper.raise_if_problem() + if result == 0: + raise WantReadError() + if result < 0: + self._raise_ssl_error(self._ssl, result) + + def DTLSv1_get_timeout(self) -> int | None: + """ + Determine when the DTLS SSL object next needs to perform internal + processing due to the passage of time. + + When the returned number of seconds have passed, the + :meth:`DTLSv1_handle_timeout` method needs to be called. + + :return: The time left in seconds before the next timeout or `None` + if no timeout is currently active. + """ + ptv_sec = _ffi.new("time_t *") + ptv_usec = _ffi.new("long *") + if _lib.Cryptography_DTLSv1_get_timeout(self._ssl, ptv_sec, ptv_usec): + return ptv_sec[0] + (ptv_usec[0] / 1000000) + else: + return None + + def DTLSv1_handle_timeout(self) -> bool: + """ + Handles any timeout events which have become pending on a DTLS SSL + object. + + :return: `True` if there was a pending timeout, `False` otherwise. + """ + result = _lib.DTLSv1_handle_timeout(self._ssl) + if result < 0: + self._raise_ssl_error(self._ssl, result) + assert False, "unreachable" + else: + return bool(result) + + def bio_shutdown(self) -> None: + """ + If the Connection was created with a memory BIO, this method can be + used to indicate that *end of file* has been reached on the read end of + that memory BIO. + + :return: None + """ + if self._from_ssl is None: + raise TypeError("Connection sock was not None") + + _lib.BIO_set_mem_eof_return(self._into_ssl, 0) + + def shutdown(self) -> bool: + """ + Send the shutdown message to the Connection. + + :return: True if the shutdown completed successfully (i.e. both sides + have sent closure alerts), False otherwise (in which case you + call :meth:`recv` or :meth:`send` when the connection becomes + readable/writeable). + """ + result = _lib.SSL_shutdown(self._ssl) + if result < 0: + self._raise_ssl_error(self._ssl, result) + assert False, "unreachable" + elif result > 0: + return True + else: + return False + + def get_cipher_list(self) -> list[str]: + """ + Retrieve the list of ciphers used by the Connection object. + + :return: A list of native cipher strings. + """ + ciphers = [] + for i in count(): + result = _lib.SSL_get_cipher_list(self._ssl, i) + if result == _ffi.NULL: + break + ciphers.append(_ffi.string(result).decode("utf-8")) + return ciphers + + def get_client_ca_list(self) -> list[X509Name]: + """ + Get CAs whose certificates are suggested for client authentication. + + :return: If this is a server connection, the list of certificate + authorities that will be sent or has been sent to the client, as + controlled by this :class:`Connection`'s :class:`Context`. + + If this is a client connection, the list will be empty until the + connection with the server is established. + + .. versionadded:: 0.10 + """ + ca_names = _lib.SSL_get_client_CA_list(self._ssl) + if ca_names == _ffi.NULL: + # TODO: This is untested. + return [] + + result = [] + for i in range(_lib.sk_X509_NAME_num(ca_names)): + name = _lib.sk_X509_NAME_value(ca_names, i) + copy = _lib.X509_NAME_dup(name) + _openssl_assert(copy != _ffi.NULL) + + pyname = X509Name.__new__(X509Name) + pyname._name = _ffi.gc(copy, _lib.X509_NAME_free) + result.append(pyname) + return result + + def makefile(self, *args: Any, **kwargs: Any) -> typing.NoReturn: + """ + The makefile() method is not implemented, since there is no dup + semantics for SSL connections + + :raise: NotImplementedError + """ + raise NotImplementedError( + "Cannot make file object of OpenSSL.SSL.Connection" + ) + + def get_app_data(self) -> Any: + """ + Retrieve application data as set by :meth:`set_app_data`. + + :return: The application data + """ + return self._app_data + + def set_app_data(self, data: Any) -> None: + """ + Set application data + + :param data: The application data + :return: None + """ + self._app_data = data + + def get_shutdown(self) -> int: + """ + Get the shutdown state of the Connection. + + :return: The shutdown state, a bitvector of SENT_SHUTDOWN, + RECEIVED_SHUTDOWN. + """ + return _lib.SSL_get_shutdown(self._ssl) + + def set_shutdown(self, state: int) -> None: + """ + Set the shutdown state of the Connection. + + :param state: bitvector of SENT_SHUTDOWN, RECEIVED_SHUTDOWN. + :return: None + """ + if not isinstance(state, int): + raise TypeError("state must be an integer") + + _lib.SSL_set_shutdown(self._ssl, state) + + def get_state_string(self) -> bytes: + """ + Retrieve a verbose string detailing the state of the Connection. + + :return: A string representing the state + """ + return _ffi.string(_lib.SSL_state_string_long(self._ssl)) + + def server_random(self) -> bytes | None: + """ + Retrieve the random value used with the server hello message. + + :return: A string representing the state + """ + session = _lib.SSL_get_session(self._ssl) + if session == _ffi.NULL: + return None + length = _lib.SSL_get_server_random(self._ssl, _ffi.NULL, 0) + _openssl_assert(length > 0) + outp = _no_zero_allocator("unsigned char[]", length) + _lib.SSL_get_server_random(self._ssl, outp, length) + return _ffi.buffer(outp, length)[:] + + def client_random(self) -> bytes | None: + """ + Retrieve the random value used with the client hello message. + + :return: A string representing the state + """ + session = _lib.SSL_get_session(self._ssl) + if session == _ffi.NULL: + return None + + length = _lib.SSL_get_client_random(self._ssl, _ffi.NULL, 0) + _openssl_assert(length > 0) + outp = _no_zero_allocator("unsigned char[]", length) + _lib.SSL_get_client_random(self._ssl, outp, length) + return _ffi.buffer(outp, length)[:] + + def master_key(self) -> bytes | None: + """ + Retrieve the value of the master key for this session. + + :return: A string representing the state + """ + session = _lib.SSL_get_session(self._ssl) + if session == _ffi.NULL: + return None + + length = _lib.SSL_SESSION_get_master_key(session, _ffi.NULL, 0) + _openssl_assert(length > 0) + outp = _no_zero_allocator("unsigned char[]", length) + _lib.SSL_SESSION_get_master_key(session, outp, length) + return _ffi.buffer(outp, length)[:] + + def export_keying_material( + self, label: bytes, olen: int, context: bytes | None = None + ) -> bytes: + """ + Obtain keying material for application use. + + :param: label - a disambiguating label string as described in RFC 5705 + :param: olen - the length of the exported key material in bytes + :param: context - a per-association context value + :return: the exported key material bytes or None + """ + outp = _no_zero_allocator("unsigned char[]", olen) + context_buf = _ffi.NULL + context_len = 0 + use_context = 0 + if context is not None: + context_buf = context + context_len = len(context) + use_context = 1 + success = _lib.SSL_export_keying_material( + self._ssl, + outp, + olen, + label, + len(label), + context_buf, + context_len, + use_context, + ) + _openssl_assert(success == 1) + return _ffi.buffer(outp, olen)[:] + + def sock_shutdown(self, *args: Any, **kwargs: Any) -> None: + """ + Call the :meth:`shutdown` method of the underlying socket. + See :manpage:`shutdown(2)`. + + :return: What the socket's shutdown() method returns + """ + return self._socket.shutdown(*args, **kwargs) # type: ignore[return-value, union-attr] + + @typing.overload + def get_certificate( + self, *, as_cryptography: typing.Literal[True] + ) -> x509.Certificate | None: + pass + + @typing.overload + def get_certificate( + self, *, as_cryptography: typing.Literal[False] = False + ) -> X509 | None: + pass + + def get_certificate( + self, + *, + as_cryptography: typing.Literal[True] | typing.Literal[False] = False, + ) -> X509 | x509.Certificate | None: + """ + Retrieve the local certificate (if any) + + :param bool as_cryptography: Controls whether a + ``cryptography.x509.Certificate`` or an ``OpenSSL.crypto.X509`` + object should be returned. + + :return: The local certificate + """ + cert = _lib.SSL_get_certificate(self._ssl) + if cert != _ffi.NULL: + _lib.X509_up_ref(cert) + pycert = X509._from_raw_x509_ptr(cert) + if as_cryptography: + return pycert.to_cryptography() + return pycert + return None + + @typing.overload + def get_peer_certificate( + self, *, as_cryptography: typing.Literal[True] + ) -> x509.Certificate | None: + pass + + @typing.overload + def get_peer_certificate( + self, *, as_cryptography: typing.Literal[False] = False + ) -> X509 | None: + pass + + def get_peer_certificate( + self, + *, + as_cryptography: typing.Literal[True] | typing.Literal[False] = False, + ) -> X509 | x509.Certificate | None: + """ + Retrieve the other side's certificate (if any) + + :param bool as_cryptography: Controls whether a + ``cryptography.x509.Certificate`` or an ``OpenSSL.crypto.X509`` + object should be returned. + + :return: The peer's certificate + """ + cert = _lib.SSL_get_peer_certificate(self._ssl) + if cert != _ffi.NULL: + pycert = X509._from_raw_x509_ptr(cert) + if as_cryptography: + return pycert.to_cryptography() + return pycert + return None + + @staticmethod + def _cert_stack_to_list(cert_stack: Any) -> list[X509]: + """ + Internal helper to convert a STACK_OF(X509) to a list of X509 + instances. + """ + result = [] + for i in range(_lib.sk_X509_num(cert_stack)): + cert = _lib.sk_X509_value(cert_stack, i) + _openssl_assert(cert != _ffi.NULL) + res = _lib.X509_up_ref(cert) + _openssl_assert(res >= 1) + pycert = X509._from_raw_x509_ptr(cert) + result.append(pycert) + return result + + @staticmethod + def _cert_stack_to_cryptography_list( + cert_stack: Any, + ) -> list[x509.Certificate]: + """ + Internal helper to convert a STACK_OF(X509) to a list of X509 + instances. + """ + result = [] + for i in range(_lib.sk_X509_num(cert_stack)): + cert = _lib.sk_X509_value(cert_stack, i) + _openssl_assert(cert != _ffi.NULL) + res = _lib.X509_up_ref(cert) + _openssl_assert(res >= 1) + pycert = X509._from_raw_x509_ptr(cert) + result.append(pycert.to_cryptography()) + return result + + @typing.overload + def get_peer_cert_chain( + self, *, as_cryptography: typing.Literal[True] + ) -> list[x509.Certificate] | None: + pass + + @typing.overload + def get_peer_cert_chain( + self, *, as_cryptography: typing.Literal[False] = False + ) -> list[X509] | None: + pass + + def get_peer_cert_chain( + self, + *, + as_cryptography: typing.Literal[True] | typing.Literal[False] = False, + ) -> list[X509] | list[x509.Certificate] | None: + """ + Retrieve the other side's certificate (if any) + + :param bool as_cryptography: Controls whether a list of + ``cryptography.x509.Certificate`` or ``OpenSSL.crypto.X509`` + object should be returned. + + :return: A list of X509 instances giving the peer's certificate chain, + or None if it does not have one. + """ + cert_stack = _lib.SSL_get_peer_cert_chain(self._ssl) + if cert_stack == _ffi.NULL: + return None + + if as_cryptography: + return self._cert_stack_to_cryptography_list(cert_stack) + return self._cert_stack_to_list(cert_stack) + + @typing.overload + def get_verified_chain( + self, *, as_cryptography: typing.Literal[True] + ) -> list[x509.Certificate] | None: + pass + + @typing.overload + def get_verified_chain( + self, *, as_cryptography: typing.Literal[False] = False + ) -> list[X509] | None: + pass + + def get_verified_chain( + self, + *, + as_cryptography: typing.Literal[True] | typing.Literal[False] = False, + ) -> list[X509] | list[x509.Certificate] | None: + """ + Retrieve the verified certificate chain of the peer including the + peer's end entity certificate. It must be called after a session has + been successfully established. If peer verification was not successful + the chain may be incomplete, invalid, or None. + + :param bool as_cryptography: Controls whether a list of + ``cryptography.x509.Certificate`` or ``OpenSSL.crypto.X509`` + object should be returned. + + :return: A list of X509 instances giving the peer's verified + certificate chain, or None if it does not have one. + + .. versionadded:: 20.0 + """ + # OpenSSL 1.1+ + cert_stack = _lib.SSL_get0_verified_chain(self._ssl) + if cert_stack == _ffi.NULL: + return None + + if as_cryptography: + return self._cert_stack_to_cryptography_list(cert_stack) + return self._cert_stack_to_list(cert_stack) + + def want_read(self) -> bool: + """ + Checks if more data has to be read from the transport layer to complete + an operation. + + :return: True iff more data has to be read + """ + return _lib.SSL_want_read(self._ssl) + + def want_write(self) -> bool: + """ + Checks if there is data to write to the transport layer to complete an + operation. + + :return: True iff there is data to write + """ + return _lib.SSL_want_write(self._ssl) + + def set_accept_state(self) -> None: + """ + Set the connection to work in server mode. The handshake will be + handled automatically by read/write. + + :return: None + """ + _lib.SSL_set_accept_state(self._ssl) + + def set_connect_state(self) -> None: + """ + Set the connection to work in client mode. The handshake will be + handled automatically by read/write. + + :return: None + """ + _lib.SSL_set_connect_state(self._ssl) + + def get_session(self) -> Session | None: + """ + Returns the Session currently used. + + :return: An instance of :class:`OpenSSL.SSL.Session` or + :obj:`None` if no session exists. + + .. versionadded:: 0.14 + """ + session = _lib.SSL_get1_session(self._ssl) + if session == _ffi.NULL: + return None + + pysession = Session.__new__(Session) + pysession._session = _ffi.gc(session, _lib.SSL_SESSION_free) + return pysession + + def set_session(self, session: Session) -> None: + """ + Set the session to be used when the TLS/SSL connection is established. + + :param session: A Session instance representing the session to use. + :returns: None + + .. versionadded:: 0.14 + """ + if not isinstance(session, Session): + raise TypeError("session must be a Session instance") + + result = _lib.SSL_set_session(self._ssl, session._session) + _openssl_assert(result == 1) + + def _get_finished_message( + self, function: Callable[[Any, Any, int], int] + ) -> bytes | None: + """ + Helper to implement :meth:`get_finished` and + :meth:`get_peer_finished`. + + :param function: Either :data:`SSL_get_finished`: or + :data:`SSL_get_peer_finished`. + + :return: :data:`None` if the desired message has not yet been + received, otherwise the contents of the message. + """ + # The OpenSSL documentation says nothing about what might happen if the + # count argument given is zero. Specifically, it doesn't say whether + # the output buffer may be NULL in that case or not. Inspection of the + # implementation reveals that it calls memcpy() unconditionally. + # Section 7.1.4, paragraph 1 of the C standard suggests that + # memcpy(NULL, source, 0) is not guaranteed to produce defined (let + # alone desirable) behavior (though it probably does on just about + # every implementation...) + # + # Allocate a tiny buffer to pass in (instead of just passing NULL as + # one might expect) for the initial call so as to be safe against this + # potentially undefined behavior. + empty = _ffi.new("char[]", 0) + size = function(self._ssl, empty, 0) + if size == 0: + # No Finished message so far. + return None + + buf = _no_zero_allocator("char[]", size) + function(self._ssl, buf, size) + return _ffi.buffer(buf, size)[:] + + def get_finished(self) -> bytes | None: + """ + Obtain the latest TLS Finished message that we sent. + + :return: The contents of the message or :obj:`None` if the TLS + handshake has not yet completed. + + .. versionadded:: 0.15 + """ + return self._get_finished_message(_lib.SSL_get_finished) + + def get_peer_finished(self) -> bytes | None: + """ + Obtain the latest TLS Finished message that we received from the peer. + + :return: The contents of the message or :obj:`None` if the TLS + handshake has not yet completed. + + .. versionadded:: 0.15 + """ + return self._get_finished_message(_lib.SSL_get_peer_finished) + + def get_cipher_name(self) -> str | None: + """ + Obtain the name of the currently used cipher. + + :returns: The name of the currently used cipher or :obj:`None` + if no connection has been established. + + .. versionadded:: 0.15 + """ + cipher = _lib.SSL_get_current_cipher(self._ssl) + if cipher == _ffi.NULL: + return None + else: + name = _ffi.string(_lib.SSL_CIPHER_get_name(cipher)) + return name.decode("utf-8") + + def get_cipher_bits(self) -> int | None: + """ + Obtain the number of secret bits of the currently used cipher. + + :returns: The number of secret bits of the currently used cipher + or :obj:`None` if no connection has been established. + + .. versionadded:: 0.15 + """ + cipher = _lib.SSL_get_current_cipher(self._ssl) + if cipher == _ffi.NULL: + return None + else: + return _lib.SSL_CIPHER_get_bits(cipher, _ffi.NULL) + + def get_cipher_version(self) -> str | None: + """ + Obtain the protocol version of the currently used cipher. + + :returns: The protocol name of the currently used cipher + or :obj:`None` if no connection has been established. + + .. versionadded:: 0.15 + """ + cipher = _lib.SSL_get_current_cipher(self._ssl) + if cipher == _ffi.NULL: + return None + else: + version = _ffi.string(_lib.SSL_CIPHER_get_version(cipher)) + return version.decode("utf-8") + + def get_protocol_version_name(self) -> str: + """ + Retrieve the protocol version of the current connection. + + :returns: The TLS version of the current connection, for example + the value for TLS 1.2 would be ``TLSv1.2``or ``Unknown`` + for connections that were not successfully established. + """ + version = _ffi.string(_lib.SSL_get_version(self._ssl)) + return version.decode("utf-8") + + def get_protocol_version(self) -> int: + """ + Retrieve the SSL or TLS protocol version of the current connection. + + :returns: The TLS version of the current connection. For example, + it will return ``0x769`` for connections made over TLS version 1. + """ + version = _lib.SSL_version(self._ssl) + return version + + def set_alpn_protos(self, protos: list[bytes]) -> None: + """ + Specify the client's ALPN protocol list. + + These protocols are offered to the server during protocol negotiation. + + :param protos: A list of the protocols to be offered to the server. + This list should be a Python list of bytestrings representing the + protocols to offer, e.g. ``[b'http/1.1', b'spdy/2']``. + """ + # Different versions of OpenSSL are inconsistent about how they handle + # empty proto lists (see #1043), so we avoid the problem entirely by + # rejecting them ourselves. + if not protos: + raise ValueError("at least one protocol must be specified") + + # Take the list of protocols and join them together, prefixing them + # with their lengths. + protostr = b"".join( + chain.from_iterable((bytes((len(p),)), p) for p in protos) + ) + + # Build a C string from the list. We don't need to save this off + # because OpenSSL immediately copies the data out. + input_str = _ffi.new("unsigned char[]", protostr) + + # https://www.openssl.org/docs/man1.1.0/man3/SSL_CTX_set_alpn_protos.html: + # SSL_CTX_set_alpn_protos() and SSL_set_alpn_protos() + # return 0 on success, and non-0 on failure. + # WARNING: these functions reverse the return value convention. + _openssl_assert( + _lib.SSL_set_alpn_protos(self._ssl, input_str, len(protostr)) == 0 + ) + + def get_alpn_proto_negotiated(self) -> bytes: + """ + Get the protocol that was negotiated by ALPN. + + :returns: A bytestring of the protocol name. If no protocol has been + negotiated yet, returns an empty bytestring. + """ + data = _ffi.new("unsigned char **") + data_len = _ffi.new("unsigned int *") + + _lib.SSL_get0_alpn_selected(self._ssl, data, data_len) + + if not data_len: + return b"" + + return _ffi.buffer(data[0], data_len[0])[:] + + def get_selected_srtp_profile(self) -> bytes: + """ + Get the SRTP protocol which was negotiated. + + :returns: A bytestring of the SRTP profile name. If no profile has been + negotiated yet, returns an empty bytestring. + """ + profile = _lib.SSL_get_selected_srtp_profile(self._ssl) + if not profile: + return b"" + + return _ffi.string(profile.name) + + def request_ocsp(self) -> None: + """ + Called to request that the server sends stapled OCSP data, if + available. If this is not called on the client side then the server + will not send OCSP data. Should be used in conjunction with + :meth:`Context.set_ocsp_client_callback`. + """ + rc = _lib.SSL_set_tlsext_status_type( + self._ssl, _lib.TLSEXT_STATUSTYPE_ocsp + ) + _openssl_assert(rc == 1) + + def set_info_callback( + self, callback: Callable[[Connection, int, int], None] + ) -> None: + """ + Set the information callback to *callback*. This function will be + called from time to time during SSL handshakes. + + :param callback: The Python callback to use. This should take three + arguments: a Connection object and two integers. The first integer + specifies where in the SSL handshake the function was called, and + the other the return code from a (possibly failed) internal + function call. + :return: None + """ + + @wraps(callback) + def wrapper(ssl, where, return_code): # type: ignore[no-untyped-def] + callback(Connection._reverse_mapping[ssl], where, return_code) + + self._info_callback = _ffi.callback( + "void (*)(const SSL *, int, int)", wrapper + ) + _lib.SSL_set_info_callback(self._ssl, self._info_callback) diff --git a/Backend/venv/lib/python3.12/site-packages/OpenSSL/__init__.py b/Backend/venv/lib/python3.12/site-packages/OpenSSL/__init__.py new file mode 100644 index 00000000..7b077cf7 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/OpenSSL/__init__.py @@ -0,0 +1,31 @@ +# Copyright (C) AB Strakt +# See LICENSE for details. + +""" +pyOpenSSL - A simple wrapper around the OpenSSL library +""" + +from OpenSSL import SSL, crypto +from OpenSSL.version import ( + __author__, + __copyright__, + __email__, + __license__, + __summary__, + __title__, + __uri__, + __version__, +) + +__all__ = [ + "SSL", + "__author__", + "__copyright__", + "__email__", + "__license__", + "__summary__", + "__title__", + "__uri__", + "__version__", + "crypto", +] diff --git a/Backend/venv/lib/python3.12/site-packages/OpenSSL/__pycache__/SSL.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/OpenSSL/__pycache__/SSL.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0263af6c7807008d4dca96e17a28766b017a3a8a GIT binary patch literal 137342 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 z≻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μtCNSV7Zdpb1AX6%{xu7ThrD-|!v} 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 literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/OpenSSL/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/OpenSSL/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..19fc85eab1c2f2ddb21910b464c3300e4e9d76b8 GIT binary patch literal 611 zcma))J&)8d5Qgn!H=ny8Aw-9ih9bqT1yo1~i4(;Y2#V`0AuA+S)>?nbNtO#8|A3C3 zj^DyRNJ~Y>vBgSPG1lgKTs)ewU%xXR`R96_Ay}uckHrl}=$B9KRxk(0O9;N922s@D zCXiSKG*BT8vCl)fP)oX05sg$#W0lZEr8HF;%~VcvwW2GGTGTAQW4a!fW%T()X2#M7`#in>&bV6Cli%+hymb;>IX3$O1?|5;ilH#MQ+?f6L9hJcp!qq9N-DrDLCR4^( zHS{~<7@O9N)y9raw7VYClrgRUbrWquEi8=74F%8?Z1B3mSt?(7GTy$D;t~O2;xGPWk-P$jwKhVCDiU{r&pTQ?98TT z*76EDwIozPAyv|W1P(bkmxRO|IFeIRx#ptHl9FmrB~Bm*ZlVO0luvoDXJ#eKhN4T` z-P8U0_3M7$`)U0(k%$r~|6MzxYDq#q!4I#5oQ|~fGl`IQ$Tgx6Mbb!B%1aXVeVQ-t z6Rkh*7i}OPfYz@CtD$_T8qSBSk$j}umG2Vt0WDgM>C5*JFu8(EW}m2nF#gz{ z0gt{{39&vU{49L4p2`#VQz()5yKckXVaXp*x|Qhbf&4+GM~Ok(uk$+jdmTKtcR5oDy$Ml9B8J9Ip zp4FHgnKG_2tIl;hcufZySP{OU>WZq*WqqIdfyZZEQ1Jj%wqH|cF9AirId9Z8rBKqC z%nNeaVo+P1agyno+k0`%~bbREV(+mGP=gvv4=KdgRR)$t;_A$ z(0X8K2k6K>`bAs_{T>x&KSyp#UF7Ta>%sM=Z`r3v3y%Y^BwbyW9;9t6j5}i4!xQ)1 zSC%`d@X+zVm9c%x;PV@1Qe=C z;jeDiVNHXY>YNT8rU-dv8-j&{U3y*C>TC#vQ&2$0xxpzS6xW-U!2$Ow?CwqdsLtw4 zumQjuB~`Y7U{ST^1Yb0#Y}Is>8t%g%Xg+_CNzh?r>IoVN90o{%r5__3;&}qRy2zV*phw=>U(w4bV zbyBqc3t?5(%=5W>i7q1(%uW6WSc#B$a&2bi{8s$2TlK%khqwJCJ|J|M z4e&uAvIDb*q1hqF$nC(Cp|jtUtWU_oF$4&KiY`uLdj#NFm>olkG*qzLm+@dQx1EF? z)&qy`2TA~_1WUbu&^O}hUC%ytWs=Gz;lCkQkZD=fm@ZeDmoYfmhKZSm;QKiEUsVx%8D_3* z;$YSz_R@@oWD^|LIo$>308_cIxbU@0>tyPlpu4U@A-&<$0SY{ufN=T^?G zO}1l4*8@j|OiM#>PeK>3p1SFH0;(DM9OJG|nKFd_3_KAaq_h{`h-F~~zlF|TD*$YF z=sMVbZWsHN4)S54TdauJt8~!rjX)OD$(gN=1t`+{zT0?rV4pb8QwXon3mV=GM|@->d>9&@ zgUXJ$dN%C<_UuGqX5t4kg_p*zPEAf-2Crg(tyy-@MSNueOGr;&a**LzpU(~o{n>sv z?>+wG0G_8{8IB7nK+G)Q4*UXaTZNx_5i0N{10>S3Hu$#rQTXsyB#o)gR{YRLoVMch zR;C?4v6VTod9eS>Z~zjRC`tFOF0CxRd!n5>z8*Qg8A~?5=LJAW1Dy9O$6P=h55nRR z=-*9Y%J%Yvms-5yP@o9{1;%MUjuoz3%6M<)mtV$U`pOW6m-H(@hi=ABPFws%egPf9 z74VN@i5(O=cS*#?&IS{(A{*k*LF0^Kd=*b@XFh=Q)Q%P)6@|AsD-^gNDW1UU6jskb zWrsj|z>u>LJq}07Ili0hp%QP@EMpFGrTIo~US0xi z&T|Yy7$wZVK(+0cBy| z{Z_Ua-V7z)Sa@xr>EDd?tUj~yOw-?-Zj%GsagyoZ=zFx)_vnZ9^}a{jeG}`XdnXi? thIa-IO2>B2CZvHKnv}YCj!V+RpT|im^VWPbb|-zlnfM~qC#A$0{}0-U>45+M literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/OpenSSL/__pycache__/crypto.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/OpenSSL/__pycache__/crypto.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4735342ace240101820fa9ad87177477a7a72ab2 GIT binary patch literal 104888 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�v*hxxEAy1V7kK3nIKQf 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 g_Y05R)yMAS*G$8=G<#o?pv2Z(6tr2} zuj2APd_GDFEg?p<|Rq36CjyCp^xnK%QW;l%PDMXk8UYZ-pn|vbHoZ_GWp=1jfrg#y;bP zh=MSORL7VmUKGQ&hjASFG|gy}WV0lJ22D{O<#BzkVmuR3Q!u9@i&%w)hv1u>$ z4assh%yXVSv@BjQ;GJc$$wXk4_R9j8q#Nc5BQp^4e*xuf0KmDmCq(GuCzyuUysEOJSM}+ zCIA;LS(bkpiroIK={==VFLtHvy{h+PYp>E5#;r= (3, 9): + StrOrBytesPath = Union[str, bytes, os.PathLike[str], os.PathLike[bytes]] +else: + StrOrBytesPath = Union[str, bytes, os.PathLike] + +binding = Binding() +ffi = binding.ffi +lib: Any = binding.lib + + +# This is a special CFFI allocator that does not bother to zero its memory +# after allocation. This has vastly better performance on large allocations and +# so should be used whenever we don't need the memory zeroed out. +no_zero_allocator = ffi.new_allocator(should_clear_after_alloc=False) + + +def text(charp: Any) -> str: + """ + Get a native string type representing of the given CFFI ``char*`` object. + + :param charp: A C-style string represented using CFFI. + + :return: :class:`str` + """ + if not charp: + return "" + return ffi.string(charp).decode("utf-8") + + +def exception_from_error_queue(exception_type: type[Exception]) -> NoReturn: + """ + Convert an OpenSSL library failure into a Python exception. + + When a call to the native OpenSSL library fails, this is usually signalled + by the return value, and an error code is stored in an error queue + associated with the current thread. The err library provides functions to + obtain these error codes and textual error messages. + """ + errors = [] + + while True: + error = lib.ERR_get_error() + if error == 0: + break + errors.append( + ( + text(lib.ERR_lib_error_string(error)), + text(lib.ERR_func_error_string(error)), + text(lib.ERR_reason_error_string(error)), + ) + ) + + raise exception_type(errors) + + +def make_assert(error: type[Exception]) -> Callable[[bool], Any]: + """ + Create an assert function that uses :func:`exception_from_error_queue` to + raise an exception wrapped by *error*. + """ + + def openssl_assert(ok: bool) -> None: + """ + If *ok* is not True, retrieve the error from OpenSSL and raise it. + """ + if ok is not True: + exception_from_error_queue(error) + + return openssl_assert + + +def path_bytes(s: StrOrBytesPath) -> bytes: + """ + Convert a Python path to a :py:class:`bytes` for the path which can be + passed into an OpenSSL API accepting a filename. + + :param s: A path (valid for os.fspath). + + :return: An instance of :py:class:`bytes`. + """ + b = os.fspath(s) + + if isinstance(b, str): + return b.encode(sys.getfilesystemencoding()) + else: + return b + + +def byte_string(s: str) -> bytes: + return s.encode("charmap") + + +# A marker object to observe whether some optional arguments are passed any +# value or not. +UNSPECIFIED = object() + +_TEXT_WARNING = "str for {0} is no longer accepted, use bytes" + + +def text_to_bytes_and_warn(label: str, obj: Any) -> Any: + """ + If ``obj`` is text, emit a warning that it should be bytes instead and try + to convert it to bytes automatically. + + :param str label: The name of the parameter from which ``obj`` was taken + (so a developer can easily find the source of the problem and correct + it). + + :return: If ``obj`` is the text string type, a ``bytes`` object giving the + UTF-8 encoding of that text is returned. Otherwise, ``obj`` itself is + returned. + """ + if isinstance(obj, str): + warnings.warn( + _TEXT_WARNING.format(label), + category=DeprecationWarning, + stacklevel=3, + ) + return obj.encode("utf-8") + return obj diff --git a/Backend/venv/lib/python3.12/site-packages/OpenSSL/crypto.py b/Backend/venv/lib/python3.12/site-packages/OpenSSL/crypto.py new file mode 100644 index 00000000..366007e8 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/OpenSSL/crypto.py @@ -0,0 +1,2450 @@ +from __future__ import annotations + +import calendar +import datetime +import functools +import sys +import typing +import warnings +from base64 import b16encode +from collections.abc import Iterable, Sequence +from functools import partial +from typing import ( + Any, + Callable, + Union, +) + +if sys.version_info >= (3, 13): + from warnings import deprecated +elif sys.version_info < (3, 8): + _T = typing.TypeVar("T") + + def deprecated(msg: str, **kwargs: object) -> Callable[[_T], _T]: + return lambda f: f +else: + from typing_extensions import deprecated + +from cryptography import utils, x509 +from cryptography.hazmat.primitives.asymmetric import ( + dsa, + ec, + ed448, + ed25519, + rsa, +) + +from OpenSSL._util import StrOrBytesPath +from OpenSSL._util import ( + byte_string as _byte_string, +) +from OpenSSL._util import ( + exception_from_error_queue as _exception_from_error_queue, +) +from OpenSSL._util import ( + ffi as _ffi, +) +from OpenSSL._util import ( + lib as _lib, +) +from OpenSSL._util import ( + make_assert as _make_assert, +) +from OpenSSL._util import ( + path_bytes as _path_bytes, +) + +__all__ = [ + "FILETYPE_ASN1", + "FILETYPE_PEM", + "FILETYPE_TEXT", + "TYPE_DSA", + "TYPE_RSA", + "X509", + "Error", + "PKey", + "X509Extension", + "X509Name", + "X509Req", + "X509Store", + "X509StoreContext", + "X509StoreContextError", + "X509StoreFlags", + "dump_certificate", + "dump_certificate_request", + "dump_privatekey", + "dump_publickey", + "get_elliptic_curve", + "get_elliptic_curves", + "load_certificate", + "load_certificate_request", + "load_privatekey", + "load_publickey", +] + + +_PrivateKey = Union[ + dsa.DSAPrivateKey, + ec.EllipticCurvePrivateKey, + ed25519.Ed25519PrivateKey, + ed448.Ed448PrivateKey, + rsa.RSAPrivateKey, +] +_PublicKey = Union[ + dsa.DSAPublicKey, + ec.EllipticCurvePublicKey, + ed25519.Ed25519PublicKey, + ed448.Ed448PublicKey, + rsa.RSAPublicKey, +] +_Key = Union[_PrivateKey, _PublicKey] +PassphraseCallableT = Union[bytes, Callable[..., bytes]] + + +FILETYPE_PEM: int = _lib.SSL_FILETYPE_PEM +FILETYPE_ASN1: int = _lib.SSL_FILETYPE_ASN1 + +# TODO This was an API mistake. OpenSSL has no such constant. +FILETYPE_TEXT = 2**16 - 1 + +TYPE_RSA: int = _lib.EVP_PKEY_RSA +TYPE_DSA: int = _lib.EVP_PKEY_DSA +TYPE_DH: int = _lib.EVP_PKEY_DH +TYPE_EC: int = _lib.EVP_PKEY_EC + + +class Error(Exception): + """ + An error occurred in an `OpenSSL.crypto` API. + """ + + +_raise_current_error = partial(_exception_from_error_queue, Error) +_openssl_assert = _make_assert(Error) + + +def _new_mem_buf(buffer: bytes | None = None) -> Any: + """ + Allocate a new OpenSSL memory BIO. + + Arrange for the garbage collector to clean it up automatically. + + :param buffer: None or some bytes to use to put into the BIO so that they + can be read out. + """ + if buffer is None: + bio = _lib.BIO_new(_lib.BIO_s_mem()) + free = _lib.BIO_free + else: + data = _ffi.new("char[]", buffer) + bio = _lib.BIO_new_mem_buf(data, len(buffer)) + + # Keep the memory alive as long as the bio is alive! + def free(bio: Any, ref: Any = data) -> Any: + return _lib.BIO_free(bio) + + _openssl_assert(bio != _ffi.NULL) + + bio = _ffi.gc(bio, free) + return bio + + +def _bio_to_string(bio: Any) -> bytes: + """ + Copy the contents of an OpenSSL BIO object into a Python byte string. + """ + result_buffer = _ffi.new("char**") + buffer_length = _lib.BIO_get_mem_data(bio, result_buffer) + return _ffi.buffer(result_buffer[0], buffer_length)[:] + + +def _set_asn1_time(boundary: Any, when: bytes) -> None: + """ + The the time value of an ASN1 time object. + + @param boundary: An ASN1_TIME pointer (or an object safely + castable to that type) which will have its value set. + @param when: A string representation of the desired time value. + + @raise TypeError: If C{when} is not a L{bytes} string. + @raise ValueError: If C{when} does not represent a time in the required + format. + @raise RuntimeError: If the time value cannot be set for some other + (unspecified) reason. + """ + if not isinstance(when, bytes): + raise TypeError("when must be a byte string") + # ASN1_TIME_set_string validates the string without writing anything + # when the destination is NULL. + _openssl_assert(boundary != _ffi.NULL) + + set_result = _lib.ASN1_TIME_set_string(boundary, when) + if set_result == 0: + raise ValueError("Invalid string") + + +def _new_asn1_time(when: bytes) -> Any: + """ + Behaves like _set_asn1_time but returns a new ASN1_TIME object. + + @param when: A string representation of the desired time value. + + @raise TypeError: If C{when} is not a L{bytes} string. + @raise ValueError: If C{when} does not represent a time in the required + format. + @raise RuntimeError: If the time value cannot be set for some other + (unspecified) reason. + """ + ret = _lib.ASN1_TIME_new() + _openssl_assert(ret != _ffi.NULL) + ret = _ffi.gc(ret, _lib.ASN1_TIME_free) + _set_asn1_time(ret, when) + return ret + + +def _get_asn1_time(timestamp: Any) -> bytes | None: + """ + Retrieve the time value of an ASN1 time object. + + @param timestamp: An ASN1_GENERALIZEDTIME* (or an object safely castable to + that type) from which the time value will be retrieved. + + @return: The time value from C{timestamp} as a L{bytes} string in a certain + format. Or C{None} if the object contains no time value. + """ + string_timestamp = _ffi.cast("ASN1_STRING*", timestamp) + if _lib.ASN1_STRING_length(string_timestamp) == 0: + return None + elif ( + _lib.ASN1_STRING_type(string_timestamp) == _lib.V_ASN1_GENERALIZEDTIME + ): + return _ffi.string(_lib.ASN1_STRING_get0_data(string_timestamp)) + else: + generalized_timestamp = _ffi.new("ASN1_GENERALIZEDTIME**") + _lib.ASN1_TIME_to_generalizedtime(timestamp, generalized_timestamp) + _openssl_assert(generalized_timestamp[0] != _ffi.NULL) + + string_timestamp = _ffi.cast("ASN1_STRING*", generalized_timestamp[0]) + string_data = _lib.ASN1_STRING_get0_data(string_timestamp) + string_result = _ffi.string(string_data) + _lib.ASN1_GENERALIZEDTIME_free(generalized_timestamp[0]) + return string_result + + +class _X509NameInvalidator: + def __init__(self) -> None: + self._names: list[X509Name] = [] + + def add(self, name: X509Name) -> None: + self._names.append(name) + + def clear(self) -> None: + for name in self._names: + # Breaks the object, but also prevents UAF! + del name._name + + +class PKey: + """ + A class representing an DSA or RSA public key or key pair. + """ + + _only_public = False + _initialized = True + + def __init__(self) -> None: + pkey = _lib.EVP_PKEY_new() + self._pkey = _ffi.gc(pkey, _lib.EVP_PKEY_free) + self._initialized = False + + def to_cryptography_key(self) -> _Key: + """ + Export as a ``cryptography`` key. + + :rtype: One of ``cryptography``'s `key interfaces`_. + + .. _key interfaces: https://cryptography.io/en/latest/hazmat/\ + primitives/asymmetric/rsa/#key-interfaces + + .. versionadded:: 16.1.0 + """ + from cryptography.hazmat.primitives.serialization import ( + load_der_private_key, + load_der_public_key, + ) + + if self._only_public: + der = dump_publickey(FILETYPE_ASN1, self) + return typing.cast(_Key, load_der_public_key(der)) + else: + der = dump_privatekey(FILETYPE_ASN1, self) + return typing.cast(_Key, load_der_private_key(der, password=None)) + + @classmethod + def from_cryptography_key(cls, crypto_key: _Key) -> PKey: + """ + Construct based on a ``cryptography`` *crypto_key*. + + :param crypto_key: A ``cryptography`` key. + :type crypto_key: One of ``cryptography``'s `key interfaces`_. + + :rtype: PKey + + .. versionadded:: 16.1.0 + """ + if not isinstance( + crypto_key, + ( + dsa.DSAPrivateKey, + dsa.DSAPublicKey, + ec.EllipticCurvePrivateKey, + ec.EllipticCurvePublicKey, + ed25519.Ed25519PrivateKey, + ed25519.Ed25519PublicKey, + ed448.Ed448PrivateKey, + ed448.Ed448PublicKey, + rsa.RSAPrivateKey, + rsa.RSAPublicKey, + ), + ): + raise TypeError("Unsupported key type") + + from cryptography.hazmat.primitives.serialization import ( + Encoding, + NoEncryption, + PrivateFormat, + PublicFormat, + ) + + if isinstance( + crypto_key, + ( + dsa.DSAPublicKey, + ec.EllipticCurvePublicKey, + ed25519.Ed25519PublicKey, + ed448.Ed448PublicKey, + rsa.RSAPublicKey, + ), + ): + return load_publickey( + FILETYPE_ASN1, + crypto_key.public_bytes( + Encoding.DER, PublicFormat.SubjectPublicKeyInfo + ), + ) + else: + der = crypto_key.private_bytes( + Encoding.DER, PrivateFormat.PKCS8, NoEncryption() + ) + return load_privatekey(FILETYPE_ASN1, der) + + def generate_key(self, type: int, bits: int) -> None: + """ + Generate a key pair of the given type, with the given number of bits. + + This generates a key "into" the this object. + + :param type: The key type. + :type type: :py:data:`TYPE_RSA` or :py:data:`TYPE_DSA` + :param bits: The number of bits. + :type bits: :py:data:`int` ``>= 0`` + :raises TypeError: If :py:data:`type` or :py:data:`bits` isn't + of the appropriate type. + :raises ValueError: If the number of bits isn't an integer of + the appropriate size. + :return: ``None`` + """ + if not isinstance(type, int): + raise TypeError("type must be an integer") + + if not isinstance(bits, int): + raise TypeError("bits must be an integer") + + if type == TYPE_RSA: + if bits <= 0: + raise ValueError("Invalid number of bits") + + # TODO Check error return + exponent = _lib.BN_new() + exponent = _ffi.gc(exponent, _lib.BN_free) + _lib.BN_set_word(exponent, _lib.RSA_F4) + + rsa = _lib.RSA_new() + + result = _lib.RSA_generate_key_ex(rsa, bits, exponent, _ffi.NULL) + _openssl_assert(result == 1) + + result = _lib.EVP_PKEY_assign_RSA(self._pkey, rsa) + _openssl_assert(result == 1) + + elif type == TYPE_DSA: + dsa = _lib.DSA_new() + _openssl_assert(dsa != _ffi.NULL) + + dsa = _ffi.gc(dsa, _lib.DSA_free) + res = _lib.DSA_generate_parameters_ex( + dsa, bits, _ffi.NULL, 0, _ffi.NULL, _ffi.NULL, _ffi.NULL + ) + _openssl_assert(res == 1) + + _openssl_assert(_lib.DSA_generate_key(dsa) == 1) + _openssl_assert(_lib.EVP_PKEY_set1_DSA(self._pkey, dsa) == 1) + else: + raise Error("No such key type") + + self._initialized = True + + def check(self) -> bool: + """ + Check the consistency of an RSA private key. + + This is the Python equivalent of OpenSSL's ``RSA_check_key``. + + :return: ``True`` if key is consistent. + + :raise OpenSSL.crypto.Error: if the key is inconsistent. + + :raise TypeError: if the key is of a type which cannot be checked. + Only RSA keys can currently be checked. + """ + if self._only_public: + raise TypeError("public key only") + + if _lib.EVP_PKEY_type(self.type()) != _lib.EVP_PKEY_RSA: + raise TypeError("Only RSA keys can currently be checked.") + + rsa = _lib.EVP_PKEY_get1_RSA(self._pkey) + rsa = _ffi.gc(rsa, _lib.RSA_free) + result = _lib.RSA_check_key(rsa) + if result == 1: + return True + _raise_current_error() + + def type(self) -> int: + """ + Returns the type of the key + + :return: The type of the key. + """ + return _lib.EVP_PKEY_id(self._pkey) + + def bits(self) -> int: + """ + Returns the number of bits of the key + + :return: The number of bits of the key. + """ + return _lib.EVP_PKEY_bits(self._pkey) + + +class _EllipticCurve: + """ + A representation of a supported elliptic curve. + + @cvar _curves: :py:obj:`None` until an attempt is made to load the curves. + Thereafter, a :py:type:`set` containing :py:type:`_EllipticCurve` + instances each of which represents one curve supported by the system. + @type _curves: :py:type:`NoneType` or :py:type:`set` + """ + + _curves = None + + def __ne__(self, other: Any) -> bool: + """ + Implement cooperation with the right-hand side argument of ``!=``. + + Python 3 seems to have dropped this cooperation in this very narrow + circumstance. + """ + if isinstance(other, _EllipticCurve): + return super().__ne__(other) + return NotImplemented + + @classmethod + def _load_elliptic_curves(cls, lib: Any) -> set[_EllipticCurve]: + """ + Get the curves supported by OpenSSL. + + :param lib: The OpenSSL library binding object. + + :return: A :py:type:`set` of ``cls`` instances giving the names of the + elliptic curves the underlying library supports. + """ + num_curves = lib.EC_get_builtin_curves(_ffi.NULL, 0) + builtin_curves = _ffi.new("EC_builtin_curve[]", num_curves) + # The return value on this call should be num_curves again. We + # could check it to make sure but if it *isn't* then.. what could + # we do? Abort the whole process, I suppose...? -exarkun + lib.EC_get_builtin_curves(builtin_curves, num_curves) + return set(cls.from_nid(lib, c.nid) for c in builtin_curves) + + @classmethod + def _get_elliptic_curves(cls, lib: Any) -> set[_EllipticCurve]: + """ + Get, cache, and return the curves supported by OpenSSL. + + :param lib: The OpenSSL library binding object. + + :return: A :py:type:`set` of ``cls`` instances giving the names of the + elliptic curves the underlying library supports. + """ + if cls._curves is None: + cls._curves = cls._load_elliptic_curves(lib) + return cls._curves + + @classmethod + def from_nid(cls, lib: Any, nid: int) -> _EllipticCurve: + """ + Instantiate a new :py:class:`_EllipticCurve` associated with the given + OpenSSL NID. + + :param lib: The OpenSSL library binding object. + + :param nid: The OpenSSL NID the resulting curve object will represent. + This must be a curve NID (and not, for example, a hash NID) or + subsequent operations will fail in unpredictable ways. + :type nid: :py:class:`int` + + :return: The curve object. + """ + return cls(lib, nid, _ffi.string(lib.OBJ_nid2sn(nid)).decode("ascii")) + + def __init__(self, lib: Any, nid: int, name: str) -> None: + """ + :param _lib: The :py:mod:`cryptography` binding instance used to + interface with OpenSSL. + + :param _nid: The OpenSSL NID identifying the curve this object + represents. + :type _nid: :py:class:`int` + + :param name: The OpenSSL short name identifying the curve this object + represents. + :type name: :py:class:`unicode` + """ + self._lib = lib + self._nid = nid + self.name = name + + def __repr__(self) -> str: + return f"" + + def _to_EC_KEY(self) -> Any: + """ + Create a new OpenSSL EC_KEY structure initialized to use this curve. + + The structure is automatically garbage collected when the Python object + is garbage collected. + """ + key = self._lib.EC_KEY_new_by_curve_name(self._nid) + return _ffi.gc(key, _lib.EC_KEY_free) + + +@deprecated( + "get_elliptic_curves is deprecated. You should use the APIs in " + "cryptography instead." +) +def get_elliptic_curves() -> set[_EllipticCurve]: + """ + Return a set of objects representing the elliptic curves supported in the + OpenSSL build in use. + + The curve objects have a :py:class:`unicode` ``name`` attribute by which + they identify themselves. + + The curve objects are useful as values for the argument accepted by + :py:meth:`Context.set_tmp_ecdh` to specify which elliptical curve should be + used for ECDHE key exchange. + """ + return _EllipticCurve._get_elliptic_curves(_lib) + + +@deprecated( + "get_elliptic_curve is deprecated. You should use the APIs in " + "cryptography instead." +) +def get_elliptic_curve(name: str) -> _EllipticCurve: + """ + Return a single curve object selected by name. + + See :py:func:`get_elliptic_curves` for information about curve objects. + + :param name: The OpenSSL short name identifying the curve object to + retrieve. + :type name: :py:class:`unicode` + + If the named curve is not supported then :py:class:`ValueError` is raised. + """ + for curve in get_elliptic_curves(): + if curve.name == name: + return curve + raise ValueError("unknown curve name", name) + + +@functools.total_ordering +class X509Name: + """ + An X.509 Distinguished Name. + + :ivar countryName: The country of the entity. + :ivar C: Alias for :py:attr:`countryName`. + + :ivar stateOrProvinceName: The state or province of the entity. + :ivar ST: Alias for :py:attr:`stateOrProvinceName`. + + :ivar localityName: The locality of the entity. + :ivar L: Alias for :py:attr:`localityName`. + + :ivar organizationName: The organization name of the entity. + :ivar O: Alias for :py:attr:`organizationName`. + + :ivar organizationalUnitName: The organizational unit of the entity. + :ivar OU: Alias for :py:attr:`organizationalUnitName` + + :ivar commonName: The common name of the entity. + :ivar CN: Alias for :py:attr:`commonName`. + + :ivar emailAddress: The e-mail address of the entity. + """ + + def __init__(self, name: X509Name) -> None: + """ + Create a new X509Name, copying the given X509Name instance. + + :param name: The name to copy. + :type name: :py:class:`X509Name` + """ + name = _lib.X509_NAME_dup(name._name) + self._name: Any = _ffi.gc(name, _lib.X509_NAME_free) + + def __setattr__(self, name: str, value: Any) -> None: + if name.startswith("_"): + return super().__setattr__(name, value) + + # Note: we really do not want str subclasses here, so we do not use + # isinstance. + if type(name) is not str: + raise TypeError( + f"attribute name must be string, not " + f"'{type(value).__name__:.200}'" + ) + + nid = _lib.OBJ_txt2nid(_byte_string(name)) + if nid == _lib.NID_undef: + try: + _raise_current_error() + except Error: + pass + raise AttributeError("No such attribute") + + # If there's an old entry for this NID, remove it + for i in range(_lib.X509_NAME_entry_count(self._name)): + ent = _lib.X509_NAME_get_entry(self._name, i) + ent_obj = _lib.X509_NAME_ENTRY_get_object(ent) + ent_nid = _lib.OBJ_obj2nid(ent_obj) + if nid == ent_nid: + ent = _lib.X509_NAME_delete_entry(self._name, i) + _lib.X509_NAME_ENTRY_free(ent) + break + + if isinstance(value, str): + value = value.encode("utf-8") + + add_result = _lib.X509_NAME_add_entry_by_NID( + self._name, nid, _lib.MBSTRING_UTF8, value, -1, -1, 0 + ) + if not add_result: + _raise_current_error() + + def __getattr__(self, name: str) -> str | None: + """ + Find attribute. An X509Name object has the following attributes: + countryName (alias C), stateOrProvince (alias ST), locality (alias L), + organization (alias O), organizationalUnit (alias OU), commonName + (alias CN) and more... + """ + nid = _lib.OBJ_txt2nid(_byte_string(name)) + if nid == _lib.NID_undef: + # This is a bit weird. OBJ_txt2nid indicated failure, but it seems + # a lower level function, a2d_ASN1_OBJECT, also feels the need to + # push something onto the error queue. If we don't clean that up + # now, someone else will bump into it later and be quite confused. + # See lp#314814. + try: + _raise_current_error() + except Error: + pass + raise AttributeError("No such attribute") + + entry_index = _lib.X509_NAME_get_index_by_NID(self._name, nid, -1) + if entry_index == -1: + return None + + entry = _lib.X509_NAME_get_entry(self._name, entry_index) + data = _lib.X509_NAME_ENTRY_get_data(entry) + + result_buffer = _ffi.new("unsigned char**") + data_length = _lib.ASN1_STRING_to_UTF8(result_buffer, data) + _openssl_assert(data_length >= 0) + + try: + result = _ffi.buffer(result_buffer[0], data_length)[:].decode( + "utf-8" + ) + finally: + # XXX untested + _lib.OPENSSL_free(result_buffer[0]) + return result + + def __eq__(self, other: Any) -> bool: + if not isinstance(other, X509Name): + return NotImplemented + + return _lib.X509_NAME_cmp(self._name, other._name) == 0 + + def __lt__(self, other: Any) -> bool: + if not isinstance(other, X509Name): + return NotImplemented + + return _lib.X509_NAME_cmp(self._name, other._name) < 0 + + def __repr__(self) -> str: + """ + String representation of an X509Name + """ + result_buffer = _ffi.new("char[]", 512) + format_result = _lib.X509_NAME_oneline( + self._name, result_buffer, len(result_buffer) + ) + _openssl_assert(format_result != _ffi.NULL) + + return "".format( + _ffi.string(result_buffer).decode("utf-8"), + ) + + def hash(self) -> int: + """ + Return an integer representation of the first four bytes of the + MD5 digest of the DER representation of the name. + + This is the Python equivalent of OpenSSL's ``X509_NAME_hash``. + + :return: The (integer) hash of this name. + :rtype: :py:class:`int` + """ + return _lib.X509_NAME_hash(self._name) + + def der(self) -> bytes: + """ + Return the DER encoding of this name. + + :return: The DER encoded form of this name. + :rtype: :py:class:`bytes` + """ + result_buffer = _ffi.new("unsigned char**") + encode_result = _lib.i2d_X509_NAME(self._name, result_buffer) + _openssl_assert(encode_result >= 0) + + string_result = _ffi.buffer(result_buffer[0], encode_result)[:] + _lib.OPENSSL_free(result_buffer[0]) + return string_result + + def get_components(self) -> list[tuple[bytes, bytes]]: + """ + Returns the components of this name, as a sequence of 2-tuples. + + :return: The components of this name. + :rtype: :py:class:`list` of ``name, value`` tuples. + """ + result = [] + for i in range(_lib.X509_NAME_entry_count(self._name)): + ent = _lib.X509_NAME_get_entry(self._name, i) + + fname = _lib.X509_NAME_ENTRY_get_object(ent) + fval = _lib.X509_NAME_ENTRY_get_data(ent) + + nid = _lib.OBJ_obj2nid(fname) + name = _lib.OBJ_nid2sn(nid) + + # ffi.string does not handle strings containing NULL bytes + # (which may have been generated by old, broken software) + value = _ffi.buffer( + _lib.ASN1_STRING_get0_data(fval), _lib.ASN1_STRING_length(fval) + )[:] + result.append((_ffi.string(name), value)) + + return result + + +@deprecated( + "X509Extension support in pyOpenSSL is deprecated. You should use the " + "APIs in cryptography." +) +class X509Extension: + """ + An X.509 v3 certificate extension. + + .. deprecated:: 23.3.0 + Use cryptography's X509 APIs instead. + """ + + def __init__( + self, + type_name: bytes, + critical: bool, + value: bytes, + subject: X509 | None = None, + issuer: X509 | None = None, + ) -> None: + """ + Initializes an X509 extension. + + :param type_name: The name of the type of extension_ to create. + :type type_name: :py:data:`bytes` + + :param bool critical: A flag indicating whether this is a critical + extension. + + :param value: The OpenSSL textual representation of the extension's + value. + :type value: :py:data:`bytes` + + :param subject: Optional X509 certificate to use as subject. + :type subject: :py:class:`X509` + + :param issuer: Optional X509 certificate to use as issuer. + :type issuer: :py:class:`X509` + + .. _extension: https://www.openssl.org/docs/manmaster/man5/ + x509v3_config.html#STANDARD-EXTENSIONS + """ + ctx = _ffi.new("X509V3_CTX*") + + # A context is necessary for any extension which uses the r2i + # conversion method. That is, X509V3_EXT_nconf may segfault if passed + # a NULL ctx. Start off by initializing most of the fields to NULL. + _lib.X509V3_set_ctx(ctx, _ffi.NULL, _ffi.NULL, _ffi.NULL, _ffi.NULL, 0) + + # We have no configuration database - but perhaps we should (some + # extensions may require it). + _lib.X509V3_set_ctx_nodb(ctx) + + # Initialize the subject and issuer, if appropriate. ctx is a local, + # and as far as I can tell none of the X509V3_* APIs invoked here steal + # any references, so no need to mess with reference counts or + # duplicates. + if issuer is not None: + if not isinstance(issuer, X509): + raise TypeError("issuer must be an X509 instance") + ctx.issuer_cert = issuer._x509 + if subject is not None: + if not isinstance(subject, X509): + raise TypeError("subject must be an X509 instance") + ctx.subject_cert = subject._x509 + + if critical: + # There are other OpenSSL APIs which would let us pass in critical + # separately, but they're harder to use, and since value is already + # a pile of crappy junk smuggling a ton of utterly important + # structured data, what's the point of trying to avoid nasty stuff + # with strings? (However, X509V3_EXT_i2d in particular seems like + # it would be a better API to invoke. I do not know where to get + # the ext_struc it desires for its last parameter, though.) + value = b"critical," + value + + extension = _lib.X509V3_EXT_nconf(_ffi.NULL, ctx, type_name, value) + if extension == _ffi.NULL: + _raise_current_error() + self._extension = _ffi.gc(extension, _lib.X509_EXTENSION_free) + + @property + def _nid(self) -> Any: + return _lib.OBJ_obj2nid( + _lib.X509_EXTENSION_get_object(self._extension) + ) + + _prefixes: typing.ClassVar[dict[int, str]] = { + _lib.GEN_EMAIL: "email", + _lib.GEN_DNS: "DNS", + _lib.GEN_URI: "URI", + } + + def _subjectAltNameString(self) -> str: + names = _ffi.cast( + "GENERAL_NAMES*", _lib.X509V3_EXT_d2i(self._extension) + ) + + names = _ffi.gc(names, _lib.GENERAL_NAMES_free) + parts = [] + for i in range(_lib.sk_GENERAL_NAME_num(names)): + name = _lib.sk_GENERAL_NAME_value(names, i) + try: + label = self._prefixes[name.type] + except KeyError: + bio = _new_mem_buf() + _lib.GENERAL_NAME_print(bio, name) + parts.append(_bio_to_string(bio).decode("utf-8")) + else: + value = _ffi.buffer(name.d.ia5.data, name.d.ia5.length)[ + : + ].decode("utf-8") + parts.append(label + ":" + value) + return ", ".join(parts) + + def __str__(self) -> str: + """ + :return: a nice text representation of the extension + """ + if _lib.NID_subject_alt_name == self._nid: + return self._subjectAltNameString() + + bio = _new_mem_buf() + print_result = _lib.X509V3_EXT_print(bio, self._extension, 0, 0) + _openssl_assert(print_result != 0) + + return _bio_to_string(bio).decode("utf-8") + + def get_critical(self) -> bool: + """ + Returns the critical field of this X.509 extension. + + :return: The critical field. + """ + return _lib.X509_EXTENSION_get_critical(self._extension) + + def get_short_name(self) -> bytes: + """ + Returns the short type name of this X.509 extension. + + The result is a byte string such as :py:const:`b"basicConstraints"`. + + :return: The short type name. + :rtype: :py:data:`bytes` + + .. versionadded:: 0.12 + """ + obj = _lib.X509_EXTENSION_get_object(self._extension) + nid = _lib.OBJ_obj2nid(obj) + # OpenSSL 3.1.0 has a bug where nid2sn returns NULL for NIDs that + # previously returned UNDEF. This is a workaround for that issue. + # https://github.com/openssl/openssl/commit/908ba3ed9adbb3df90f76 + buf = _lib.OBJ_nid2sn(nid) + if buf != _ffi.NULL: + return _ffi.string(buf) + else: + return b"UNDEF" + + def get_data(self) -> bytes: + """ + Returns the data of the X509 extension, encoded as ASN.1. + + :return: The ASN.1 encoded data of this X509 extension. + :rtype: :py:data:`bytes` + + .. versionadded:: 0.12 + """ + octet_result = _lib.X509_EXTENSION_get_data(self._extension) + string_result = _ffi.cast("ASN1_STRING*", octet_result) + char_result = _lib.ASN1_STRING_get0_data(string_result) + result_length = _lib.ASN1_STRING_length(string_result) + return _ffi.buffer(char_result, result_length)[:] + + +@deprecated( + "CSR support in pyOpenSSL is deprecated. You should use the APIs " + "in cryptography." +) +class X509Req: + """ + An X.509 certificate signing requests. + + .. deprecated:: 24.2.0 + Use `cryptography.x509.CertificateSigningRequest` instead. + """ + + def __init__(self) -> None: + req = _lib.X509_REQ_new() + self._req = _ffi.gc(req, _lib.X509_REQ_free) + # Default to version 0. + self.set_version(0) + + def to_cryptography(self) -> x509.CertificateSigningRequest: + """ + Export as a ``cryptography`` certificate signing request. + + :rtype: ``cryptography.x509.CertificateSigningRequest`` + + .. versionadded:: 17.1.0 + """ + from cryptography.x509 import load_der_x509_csr + + der = _dump_certificate_request_internal(FILETYPE_ASN1, self) + + return load_der_x509_csr(der) + + @classmethod + def from_cryptography( + cls, crypto_req: x509.CertificateSigningRequest + ) -> X509Req: + """ + Construct based on a ``cryptography`` *crypto_req*. + + :param crypto_req: A ``cryptography`` X.509 certificate signing request + :type crypto_req: ``cryptography.x509.CertificateSigningRequest`` + + :rtype: X509Req + + .. versionadded:: 17.1.0 + """ + if not isinstance(crypto_req, x509.CertificateSigningRequest): + raise TypeError("Must be a certificate signing request") + + from cryptography.hazmat.primitives.serialization import Encoding + + der = crypto_req.public_bytes(Encoding.DER) + return _load_certificate_request_internal(FILETYPE_ASN1, der) + + def set_pubkey(self, pkey: PKey) -> None: + """ + Set the public key of the certificate signing request. + + :param pkey: The public key to use. + :type pkey: :py:class:`PKey` + + :return: ``None`` + """ + set_result = _lib.X509_REQ_set_pubkey(self._req, pkey._pkey) + _openssl_assert(set_result == 1) + + def get_pubkey(self) -> PKey: + """ + Get the public key of the certificate signing request. + + :return: The public key. + :rtype: :py:class:`PKey` + """ + pkey = PKey.__new__(PKey) + pkey._pkey = _lib.X509_REQ_get_pubkey(self._req) + _openssl_assert(pkey._pkey != _ffi.NULL) + pkey._pkey = _ffi.gc(pkey._pkey, _lib.EVP_PKEY_free) + pkey._only_public = True + return pkey + + def set_version(self, version: int) -> None: + """ + Set the version subfield (RFC 2986, section 4.1) of the certificate + request. + + :param int version: The version number. + :return: ``None`` + """ + if not isinstance(version, int): + raise TypeError("version must be an int") + if version != 0: + raise ValueError( + "Invalid version. The only valid version for X509Req is 0." + ) + set_result = _lib.X509_REQ_set_version(self._req, version) + _openssl_assert(set_result == 1) + + def get_version(self) -> int: + """ + Get the version subfield (RFC 2459, section 4.1.2.1) of the certificate + request. + + :return: The value of the version subfield. + :rtype: :py:class:`int` + """ + return _lib.X509_REQ_get_version(self._req) + + def get_subject(self) -> X509Name: + """ + Return the subject of this certificate signing request. + + This creates a new :class:`X509Name` that wraps the underlying subject + name field on the certificate signing request. Modifying it will modify + the underlying signing request, and will have the effect of modifying + any other :class:`X509Name` that refers to this subject. + + :return: The subject of this certificate signing request. + :rtype: :class:`X509Name` + """ + name = X509Name.__new__(X509Name) + name._name = _lib.X509_REQ_get_subject_name(self._req) + _openssl_assert(name._name != _ffi.NULL) + + # The name is owned by the X509Req structure. As long as the X509Name + # Python object is alive, keep the X509Req Python object alive. + name._owner = self + + return name + + def add_extensions(self, extensions: Iterable[X509Extension]) -> None: + """ + Add extensions to the certificate signing request. + + :param extensions: The X.509 extensions to add. + :type extensions: iterable of :py:class:`X509Extension` + :return: ``None`` + """ + warnings.warn( + ( + "This API is deprecated and will be removed in a future " + "version of pyOpenSSL. You should use pyca/cryptography's " + "X.509 APIs instead." + ), + DeprecationWarning, + stacklevel=2, + ) + + stack = _lib.sk_X509_EXTENSION_new_null() + _openssl_assert(stack != _ffi.NULL) + + stack = _ffi.gc(stack, _lib.sk_X509_EXTENSION_free) + + for ext in extensions: + if not isinstance(ext, X509Extension): + raise ValueError("One of the elements is not an X509Extension") + + # TODO push can fail (here and elsewhere) + _lib.sk_X509_EXTENSION_push(stack, ext._extension) + + add_result = _lib.X509_REQ_add_extensions(self._req, stack) + _openssl_assert(add_result == 1) + + def get_extensions(self) -> list[X509Extension]: + """ + Get X.509 extensions in the certificate signing request. + + :return: The X.509 extensions in this request. + :rtype: :py:class:`list` of :py:class:`X509Extension` objects. + + .. versionadded:: 0.15 + """ + warnings.warn( + ( + "This API is deprecated and will be removed in a future " + "version of pyOpenSSL. You should use pyca/cryptography's " + "X.509 APIs instead." + ), + DeprecationWarning, + stacklevel=2, + ) + + exts = [] + native_exts_obj = _lib.X509_REQ_get_extensions(self._req) + native_exts_obj = _ffi.gc( + native_exts_obj, + lambda x: _lib.sk_X509_EXTENSION_pop_free( + x, + _ffi.addressof(_lib._original_lib, "X509_EXTENSION_free"), + ), + ) + + for i in range(_lib.sk_X509_EXTENSION_num(native_exts_obj)): + ext = X509Extension.__new__(X509Extension) + extension = _lib.X509_EXTENSION_dup( + _lib.sk_X509_EXTENSION_value(native_exts_obj, i) + ) + ext._extension = _ffi.gc(extension, _lib.X509_EXTENSION_free) + exts.append(ext) + return exts + + def sign(self, pkey: PKey, digest: str) -> None: + """ + Sign the certificate signing request with this key and digest type. + + :param pkey: The key pair to sign with. + :type pkey: :py:class:`PKey` + :param digest: The name of the message digest to use for the signature, + e.g. :py:data:`"sha256"`. + :type digest: :py:class:`str` + :return: ``None`` + """ + if pkey._only_public: + raise ValueError("Key has only public part") + + if not pkey._initialized: + raise ValueError("Key is uninitialized") + + digest_obj = _lib.EVP_get_digestbyname(_byte_string(digest)) + if digest_obj == _ffi.NULL: + raise ValueError("No such digest method") + + sign_result = _lib.X509_REQ_sign(self._req, pkey._pkey, digest_obj) + _openssl_assert(sign_result > 0) + + def verify(self, pkey: PKey) -> bool: + """ + Verifies the signature on this certificate signing request. + + :param PKey key: A public key. + + :return: ``True`` if the signature is correct. + :rtype: bool + + :raises OpenSSL.crypto.Error: If the signature is invalid or there is a + problem verifying the signature. + """ + if not isinstance(pkey, PKey): + raise TypeError("pkey must be a PKey instance") + + result = _lib.X509_REQ_verify(self._req, pkey._pkey) + if result <= 0: + _raise_current_error() + + return result + + +class X509: + """ + An X.509 certificate. + """ + + def __init__(self) -> None: + x509 = _lib.X509_new() + _openssl_assert(x509 != _ffi.NULL) + self._x509 = _ffi.gc(x509, _lib.X509_free) + + self._issuer_invalidator = _X509NameInvalidator() + self._subject_invalidator = _X509NameInvalidator() + + @classmethod + def _from_raw_x509_ptr(cls, x509: Any) -> X509: + cert = cls.__new__(cls) + cert._x509 = _ffi.gc(x509, _lib.X509_free) + cert._issuer_invalidator = _X509NameInvalidator() + cert._subject_invalidator = _X509NameInvalidator() + return cert + + def to_cryptography(self) -> x509.Certificate: + """ + Export as a ``cryptography`` certificate. + + :rtype: ``cryptography.x509.Certificate`` + + .. versionadded:: 17.1.0 + """ + from cryptography.x509 import load_der_x509_certificate + + der = dump_certificate(FILETYPE_ASN1, self) + return load_der_x509_certificate(der) + + @classmethod + def from_cryptography(cls, crypto_cert: x509.Certificate) -> X509: + """ + Construct based on a ``cryptography`` *crypto_cert*. + + :param crypto_key: A ``cryptography`` X.509 certificate. + :type crypto_key: ``cryptography.x509.Certificate`` + + :rtype: X509 + + .. versionadded:: 17.1.0 + """ + if not isinstance(crypto_cert, x509.Certificate): + raise TypeError("Must be a certificate") + + from cryptography.hazmat.primitives.serialization import Encoding + + der = crypto_cert.public_bytes(Encoding.DER) + return load_certificate(FILETYPE_ASN1, der) + + def set_version(self, version: int) -> None: + """ + Set the version number of the certificate. Note that the + version value is zero-based, eg. a value of 0 is V1. + + :param version: The version number of the certificate. + :type version: :py:class:`int` + + :return: ``None`` + """ + if not isinstance(version, int): + raise TypeError("version must be an integer") + + _openssl_assert(_lib.X509_set_version(self._x509, version) == 1) + + def get_version(self) -> int: + """ + Return the version number of the certificate. + + :return: The version number of the certificate. + :rtype: :py:class:`int` + """ + return _lib.X509_get_version(self._x509) + + def get_pubkey(self) -> PKey: + """ + Get the public key of the certificate. + + :return: The public key. + :rtype: :py:class:`PKey` + """ + pkey = PKey.__new__(PKey) + pkey._pkey = _lib.X509_get_pubkey(self._x509) + if pkey._pkey == _ffi.NULL: + _raise_current_error() + pkey._pkey = _ffi.gc(pkey._pkey, _lib.EVP_PKEY_free) + pkey._only_public = True + return pkey + + def set_pubkey(self, pkey: PKey) -> None: + """ + Set the public key of the certificate. + + :param pkey: The public key. + :type pkey: :py:class:`PKey` + + :return: :py:data:`None` + """ + if not isinstance(pkey, PKey): + raise TypeError("pkey must be a PKey instance") + + set_result = _lib.X509_set_pubkey(self._x509, pkey._pkey) + _openssl_assert(set_result == 1) + + def sign(self, pkey: PKey, digest: str) -> None: + """ + Sign the certificate with this key and digest type. + + :param pkey: The key to sign with. + :type pkey: :py:class:`PKey` + + :param digest: The name of the message digest to use. + :type digest: :py:class:`str` + + :return: :py:data:`None` + """ + if not isinstance(pkey, PKey): + raise TypeError("pkey must be a PKey instance") + + if pkey._only_public: + raise ValueError("Key only has public part") + + if not pkey._initialized: + raise ValueError("Key is uninitialized") + + evp_md = _lib.EVP_get_digestbyname(_byte_string(digest)) + if evp_md == _ffi.NULL: + raise ValueError("No such digest method") + + sign_result = _lib.X509_sign(self._x509, pkey._pkey, evp_md) + _openssl_assert(sign_result > 0) + + def get_signature_algorithm(self) -> bytes: + """ + Return the signature algorithm used in the certificate. + + :return: The name of the algorithm. + :rtype: :py:class:`bytes` + + :raises ValueError: If the signature algorithm is undefined. + + .. versionadded:: 0.13 + """ + sig_alg = _lib.X509_get0_tbs_sigalg(self._x509) + alg = _ffi.new("ASN1_OBJECT **") + _lib.X509_ALGOR_get0(alg, _ffi.NULL, _ffi.NULL, sig_alg) + nid = _lib.OBJ_obj2nid(alg[0]) + if nid == _lib.NID_undef: + raise ValueError("Undefined signature algorithm") + return _ffi.string(_lib.OBJ_nid2ln(nid)) + + def digest(self, digest_name: str) -> bytes: + """ + Return the digest of the X509 object. + + :param digest_name: The name of the digest algorithm to use. + :type digest_name: :py:class:`str` + + :return: The digest of the object, formatted as + :py:const:`b":"`-delimited hex pairs. + :rtype: :py:class:`bytes` + """ + digest = _lib.EVP_get_digestbyname(_byte_string(digest_name)) + if digest == _ffi.NULL: + raise ValueError("No such digest method") + + result_buffer = _ffi.new("unsigned char[]", _lib.EVP_MAX_MD_SIZE) + result_length = _ffi.new("unsigned int[]", 1) + result_length[0] = len(result_buffer) + + digest_result = _lib.X509_digest( + self._x509, digest, result_buffer, result_length + ) + _openssl_assert(digest_result == 1) + + return b":".join( + [ + b16encode(ch).upper() + for ch in _ffi.buffer(result_buffer, result_length[0]) + ] + ) + + def subject_name_hash(self) -> int: + """ + Return the hash of the X509 subject. + + :return: The hash of the subject. + :rtype: :py:class:`int` + """ + return _lib.X509_subject_name_hash(self._x509) + + def set_serial_number(self, serial: int) -> None: + """ + Set the serial number of the certificate. + + :param serial: The new serial number. + :type serial: :py:class:`int` + + :return: :py:data`None` + """ + if not isinstance(serial, int): + raise TypeError("serial must be an integer") + + hex_serial = hex(serial)[2:] + hex_serial_bytes = hex_serial.encode("ascii") + + bignum_serial = _ffi.new("BIGNUM**") + + # BN_hex2bn stores the result in &bignum. + result = _lib.BN_hex2bn(bignum_serial, hex_serial_bytes) + _openssl_assert(result != _ffi.NULL) + + asn1_serial = _lib.BN_to_ASN1_INTEGER(bignum_serial[0], _ffi.NULL) + _lib.BN_free(bignum_serial[0]) + _openssl_assert(asn1_serial != _ffi.NULL) + asn1_serial = _ffi.gc(asn1_serial, _lib.ASN1_INTEGER_free) + set_result = _lib.X509_set_serialNumber(self._x509, asn1_serial) + _openssl_assert(set_result == 1) + + def get_serial_number(self) -> int: + """ + Return the serial number of this certificate. + + :return: The serial number. + :rtype: int + """ + asn1_serial = _lib.X509_get_serialNumber(self._x509) + bignum_serial = _lib.ASN1_INTEGER_to_BN(asn1_serial, _ffi.NULL) + try: + hex_serial = _lib.BN_bn2hex(bignum_serial) + try: + hexstring_serial = _ffi.string(hex_serial) + serial = int(hexstring_serial, 16) + return serial + finally: + _lib.OPENSSL_free(hex_serial) + finally: + _lib.BN_free(bignum_serial) + + def gmtime_adj_notAfter(self, amount: int) -> None: + """ + Adjust the time stamp on which the certificate stops being valid. + + :param int amount: The number of seconds by which to adjust the + timestamp. + :return: ``None`` + """ + if not isinstance(amount, int): + raise TypeError("amount must be an integer") + + notAfter = _lib.X509_getm_notAfter(self._x509) + _lib.X509_gmtime_adj(notAfter, amount) + + def gmtime_adj_notBefore(self, amount: int) -> None: + """ + Adjust the timestamp on which the certificate starts being valid. + + :param amount: The number of seconds by which to adjust the timestamp. + :return: ``None`` + """ + if not isinstance(amount, int): + raise TypeError("amount must be an integer") + + notBefore = _lib.X509_getm_notBefore(self._x509) + _lib.X509_gmtime_adj(notBefore, amount) + + def has_expired(self) -> bool: + """ + Check whether the certificate has expired. + + :return: ``True`` if the certificate has expired, ``False`` otherwise. + :rtype: bool + """ + time_bytes = self.get_notAfter() + if time_bytes is None: + raise ValueError("Unable to determine notAfter") + time_string = time_bytes.decode("utf-8") + not_after = datetime.datetime.strptime(time_string, "%Y%m%d%H%M%SZ") + + UTC = datetime.timezone.utc + utcnow = datetime.datetime.now(UTC).replace(tzinfo=None) + return not_after < utcnow + + def _get_boundary_time(self, which: Any) -> bytes | None: + return _get_asn1_time(which(self._x509)) + + def get_notBefore(self) -> bytes | None: + """ + Get the timestamp at which the certificate starts being valid. + + The timestamp is formatted as an ASN.1 TIME:: + + YYYYMMDDhhmmssZ + + :return: A timestamp string, or ``None`` if there is none. + :rtype: bytes or NoneType + """ + return self._get_boundary_time(_lib.X509_getm_notBefore) + + def _set_boundary_time( + self, which: Callable[..., Any], when: bytes + ) -> None: + return _set_asn1_time(which(self._x509), when) + + def set_notBefore(self, when: bytes) -> None: + """ + Set the timestamp at which the certificate starts being valid. + + The timestamp is formatted as an ASN.1 TIME:: + + YYYYMMDDhhmmssZ + + :param bytes when: A timestamp string. + :return: ``None`` + """ + return self._set_boundary_time(_lib.X509_getm_notBefore, when) + + def get_notAfter(self) -> bytes | None: + """ + Get the timestamp at which the certificate stops being valid. + + The timestamp is formatted as an ASN.1 TIME:: + + YYYYMMDDhhmmssZ + + :return: A timestamp string, or ``None`` if there is none. + :rtype: bytes or NoneType + """ + return self._get_boundary_time(_lib.X509_getm_notAfter) + + def set_notAfter(self, when: bytes) -> None: + """ + Set the timestamp at which the certificate stops being valid. + + The timestamp is formatted as an ASN.1 TIME:: + + YYYYMMDDhhmmssZ + + :param bytes when: A timestamp string. + :return: ``None`` + """ + return self._set_boundary_time(_lib.X509_getm_notAfter, when) + + def _get_name(self, which: Any) -> X509Name: + name = X509Name.__new__(X509Name) + name._name = which(self._x509) + _openssl_assert(name._name != _ffi.NULL) + + # The name is owned by the X509 structure. As long as the X509Name + # Python object is alive, keep the X509 Python object alive. + name._owner = self + + return name + + def _set_name(self, which: Any, name: X509Name) -> None: + if not isinstance(name, X509Name): + raise TypeError("name must be an X509Name") + set_result = which(self._x509, name._name) + _openssl_assert(set_result == 1) + + def get_issuer(self) -> X509Name: + """ + Return the issuer of this certificate. + + This creates a new :class:`X509Name` that wraps the underlying issuer + name field on the certificate. Modifying it will modify the underlying + certificate, and will have the effect of modifying any other + :class:`X509Name` that refers to this issuer. + + :return: The issuer of this certificate. + :rtype: :class:`X509Name` + """ + name = self._get_name(_lib.X509_get_issuer_name) + self._issuer_invalidator.add(name) + return name + + def set_issuer(self, issuer: X509Name) -> None: + """ + Set the issuer of this certificate. + + :param issuer: The issuer. + :type issuer: :py:class:`X509Name` + + :return: ``None`` + """ + self._set_name(_lib.X509_set_issuer_name, issuer) + self._issuer_invalidator.clear() + + def get_subject(self) -> X509Name: + """ + Return the subject of this certificate. + + This creates a new :class:`X509Name` that wraps the underlying subject + name field on the certificate. Modifying it will modify the underlying + certificate, and will have the effect of modifying any other + :class:`X509Name` that refers to this subject. + + :return: The subject of this certificate. + :rtype: :class:`X509Name` + """ + name = self._get_name(_lib.X509_get_subject_name) + self._subject_invalidator.add(name) + return name + + def set_subject(self, subject: X509Name) -> None: + """ + Set the subject of this certificate. + + :param subject: The subject. + :type subject: :py:class:`X509Name` + + :return: ``None`` + """ + self._set_name(_lib.X509_set_subject_name, subject) + self._subject_invalidator.clear() + + def get_extension_count(self) -> int: + """ + Get the number of extensions on this certificate. + + :return: The number of extensions. + :rtype: :py:class:`int` + + .. versionadded:: 0.12 + """ + return _lib.X509_get_ext_count(self._x509) + + def add_extensions(self, extensions: Iterable[X509Extension]) -> None: + """ + Add extensions to the certificate. + + :param extensions: The extensions to add. + :type extensions: An iterable of :py:class:`X509Extension` objects. + :return: ``None`` + """ + warnings.warn( + ( + "This API is deprecated and will be removed in a future " + "version of pyOpenSSL. You should use pyca/cryptography's " + "X.509 APIs instead." + ), + DeprecationWarning, + stacklevel=2, + ) + + for ext in extensions: + if not isinstance(ext, X509Extension): + raise ValueError("One of the elements is not an X509Extension") + + add_result = _lib.X509_add_ext(self._x509, ext._extension, -1) + _openssl_assert(add_result == 1) + + def get_extension(self, index: int) -> X509Extension: + """ + Get a specific extension of the certificate by index. + + Extensions on a certificate are kept in order. The index + parameter selects which extension will be returned. + + :param int index: The index of the extension to retrieve. + :return: The extension at the specified index. + :rtype: :py:class:`X509Extension` + :raises IndexError: If the extension index was out of bounds. + + .. versionadded:: 0.12 + """ + warnings.warn( + ( + "This API is deprecated and will be removed in a future " + "version of pyOpenSSL. You should use pyca/cryptography's " + "X.509 APIs instead." + ), + DeprecationWarning, + stacklevel=2, + ) + + ext = X509Extension.__new__(X509Extension) + ext._extension = _lib.X509_get_ext(self._x509, index) + if ext._extension == _ffi.NULL: + raise IndexError("extension index out of bounds") + + extension = _lib.X509_EXTENSION_dup(ext._extension) + ext._extension = _ffi.gc(extension, _lib.X509_EXTENSION_free) + return ext + + +class X509StoreFlags: + """ + Flags for X509 verification, used to change the behavior of + :class:`X509Store`. + + See `OpenSSL Verification Flags`_ for details. + + .. _OpenSSL Verification Flags: + https://www.openssl.org/docs/manmaster/man3/X509_VERIFY_PARAM_set_flags.html + """ + + CRL_CHECK: int = _lib.X509_V_FLAG_CRL_CHECK + CRL_CHECK_ALL: int = _lib.X509_V_FLAG_CRL_CHECK_ALL + IGNORE_CRITICAL: int = _lib.X509_V_FLAG_IGNORE_CRITICAL + X509_STRICT: int = _lib.X509_V_FLAG_X509_STRICT + ALLOW_PROXY_CERTS: int = _lib.X509_V_FLAG_ALLOW_PROXY_CERTS + POLICY_CHECK: int = _lib.X509_V_FLAG_POLICY_CHECK + EXPLICIT_POLICY: int = _lib.X509_V_FLAG_EXPLICIT_POLICY + INHIBIT_MAP: int = _lib.X509_V_FLAG_INHIBIT_MAP + CHECK_SS_SIGNATURE: int = _lib.X509_V_FLAG_CHECK_SS_SIGNATURE + PARTIAL_CHAIN: int = _lib.X509_V_FLAG_PARTIAL_CHAIN + + +class X509Store: + """ + An X.509 store. + + An X.509 store is used to describe a context in which to verify a + certificate. A description of a context may include a set of certificates + to trust, a set of certificate revocation lists, verification flags and + more. + + An X.509 store, being only a description, cannot be used by itself to + verify a certificate. To carry out the actual verification process, see + :class:`X509StoreContext`. + """ + + def __init__(self) -> None: + store = _lib.X509_STORE_new() + self._store = _ffi.gc(store, _lib.X509_STORE_free) + + def add_cert(self, cert: X509) -> None: + """ + Adds a trusted certificate to this store. + + Adding a certificate with this method adds this certificate as a + *trusted* certificate. + + :param X509 cert: The certificate to add to this store. + + :raises TypeError: If the certificate is not an :class:`X509`. + + :raises OpenSSL.crypto.Error: If OpenSSL was unhappy with your + certificate. + + :return: ``None`` if the certificate was added successfully. + """ + if not isinstance(cert, X509): + raise TypeError() + + res = _lib.X509_STORE_add_cert(self._store, cert._x509) + _openssl_assert(res == 1) + + def add_crl(self, crl: x509.CertificateRevocationList) -> None: + """ + Add a certificate revocation list to this store. + + The certificate revocation lists added to a store will only be used if + the associated flags are configured to check certificate revocation + lists. + + .. versionadded:: 16.1.0 + + :param crl: The certificate revocation list to add to this store. + :type crl: ``cryptography.x509.CertificateRevocationList`` + :return: ``None`` if the certificate revocation list was added + successfully. + """ + if isinstance(crl, x509.CertificateRevocationList): + from cryptography.hazmat.primitives.serialization import Encoding + + bio = _new_mem_buf(crl.public_bytes(Encoding.DER)) + openssl_crl = _lib.d2i_X509_CRL_bio(bio, _ffi.NULL) + _openssl_assert(openssl_crl != _ffi.NULL) + crl = _ffi.gc(openssl_crl, _lib.X509_CRL_free) + else: + raise TypeError( + "CRL must be of type " + "cryptography.x509.CertificateRevocationList" + ) + + _openssl_assert(_lib.X509_STORE_add_crl(self._store, crl) != 0) + + def set_flags(self, flags: int) -> None: + """ + Set verification flags to this store. + + Verification flags can be combined by oring them together. + + .. note:: + + Setting a verification flag sometimes requires clients to add + additional information to the store, otherwise a suitable error will + be raised. + + For example, in setting flags to enable CRL checking a + suitable CRL must be added to the store otherwise an error will be + raised. + + .. versionadded:: 16.1.0 + + :param int flags: The verification flags to set on this store. + See :class:`X509StoreFlags` for available constants. + :return: ``None`` if the verification flags were successfully set. + """ + _openssl_assert(_lib.X509_STORE_set_flags(self._store, flags) != 0) + + def set_time(self, vfy_time: datetime.datetime) -> None: + """ + Set the time against which the certificates are verified. + + Normally the current time is used. + + .. note:: + + For example, you can determine if a certificate was valid at a given + time. + + .. versionadded:: 17.0.0 + + :param datetime vfy_time: The verification time to set on this store. + :return: ``None`` if the verification time was successfully set. + """ + param = _lib.X509_VERIFY_PARAM_new() + param = _ffi.gc(param, _lib.X509_VERIFY_PARAM_free) + + _lib.X509_VERIFY_PARAM_set_time( + param, calendar.timegm(vfy_time.timetuple()) + ) + _openssl_assert(_lib.X509_STORE_set1_param(self._store, param) != 0) + + def load_locations( + self, + cafile: StrOrBytesPath | None, + capath: StrOrBytesPath | None = None, + ) -> None: + """ + Let X509Store know where we can find trusted certificates for the + certificate chain. Note that the certificates have to be in PEM + format. + + If *capath* is passed, it must be a directory prepared using the + ``c_rehash`` tool included with OpenSSL. Either, but not both, of + *cafile* or *capath* may be ``None``. + + .. note:: + + Both *cafile* and *capath* may be set simultaneously. + + Call this method multiple times to add more than one location. + For example, CA certificates, and certificate revocation list bundles + may be passed in *cafile* in subsequent calls to this method. + + .. versionadded:: 20.0 + + :param cafile: In which file we can find the certificates (``bytes`` or + ``unicode``). + :param capath: In which directory we can find the certificates + (``bytes`` or ``unicode``). + + :return: ``None`` if the locations were set successfully. + + :raises OpenSSL.crypto.Error: If both *cafile* and *capath* is ``None`` + or the locations could not be set for any reason. + + """ + if cafile is None: + cafile = _ffi.NULL + else: + cafile = _path_bytes(cafile) + + if capath is None: + capath = _ffi.NULL + else: + capath = _path_bytes(capath) + + load_result = _lib.X509_STORE_load_locations( + self._store, cafile, capath + ) + if not load_result: + _raise_current_error() + + +class X509StoreContextError(Exception): + """ + An exception raised when an error occurred while verifying a certificate + using `OpenSSL.X509StoreContext.verify_certificate`. + + :ivar certificate: The certificate which caused verificate failure. + :type certificate: :class:`X509` + """ + + def __init__( + self, message: str, errors: list[Any], certificate: X509 + ) -> None: + super().__init__(message) + self.errors = errors + self.certificate = certificate + + +class X509StoreContext: + """ + An X.509 store context. + + An X.509 store context is used to carry out the actual verification process + of a certificate in a described context. For describing such a context, see + :class:`X509Store`. + + :param X509Store store: The certificates which will be trusted for the + purposes of any verifications. + :param X509 certificate: The certificate to be verified. + :param chain: List of untrusted certificates that may be used for building + the certificate chain. May be ``None``. + :type chain: :class:`list` of :class:`X509` + """ + + def __init__( + self, + store: X509Store, + certificate: X509, + chain: Sequence[X509] | None = None, + ) -> None: + self._store = store + self._cert = certificate + self._chain = self._build_certificate_stack(chain) + + @staticmethod + def _build_certificate_stack( + certificates: Sequence[X509] | None, + ) -> None: + def cleanup(s: Any) -> None: + # Equivalent to sk_X509_pop_free, but we don't + # currently have a CFFI binding for that available + for i in range(_lib.sk_X509_num(s)): + x = _lib.sk_X509_value(s, i) + _lib.X509_free(x) + _lib.sk_X509_free(s) + + if certificates is None or len(certificates) == 0: + return _ffi.NULL + + stack = _lib.sk_X509_new_null() + _openssl_assert(stack != _ffi.NULL) + stack = _ffi.gc(stack, cleanup) + + for cert in certificates: + if not isinstance(cert, X509): + raise TypeError("One of the elements is not an X509 instance") + + _openssl_assert(_lib.X509_up_ref(cert._x509) > 0) + if _lib.sk_X509_push(stack, cert._x509) <= 0: + _lib.X509_free(cert._x509) + _raise_current_error() + + return stack + + @staticmethod + def _exception_from_context(store_ctx: Any) -> X509StoreContextError: + """ + Convert an OpenSSL native context error failure into a Python + exception. + + When a call to native OpenSSL X509_verify_cert fails, additional + information about the failure can be obtained from the store context. + """ + message = _ffi.string( + _lib.X509_verify_cert_error_string( + _lib.X509_STORE_CTX_get_error(store_ctx) + ) + ).decode("utf-8") + errors = [ + _lib.X509_STORE_CTX_get_error(store_ctx), + _lib.X509_STORE_CTX_get_error_depth(store_ctx), + message, + ] + # A context error should always be associated with a certificate, so we + # expect this call to never return :class:`None`. + _x509 = _lib.X509_STORE_CTX_get_current_cert(store_ctx) + _cert = _lib.X509_dup(_x509) + pycert = X509._from_raw_x509_ptr(_cert) + return X509StoreContextError(message, errors, pycert) + + def _verify_certificate(self) -> Any: + """ + Verifies the certificate and runs an X509_STORE_CTX containing the + results. + + :raises X509StoreContextError: If an error occurred when validating a + certificate in the context. Sets ``certificate`` attribute to + indicate which certificate caused the error. + """ + store_ctx = _lib.X509_STORE_CTX_new() + _openssl_assert(store_ctx != _ffi.NULL) + store_ctx = _ffi.gc(store_ctx, _lib.X509_STORE_CTX_free) + + ret = _lib.X509_STORE_CTX_init( + store_ctx, self._store._store, self._cert._x509, self._chain + ) + _openssl_assert(ret == 1) + + ret = _lib.X509_verify_cert(store_ctx) + if ret <= 0: + raise self._exception_from_context(store_ctx) + + return store_ctx + + def set_store(self, store: X509Store) -> None: + """ + Set the context's X.509 store. + + .. versionadded:: 0.15 + + :param X509Store store: The store description which will be used for + the purposes of any *future* verifications. + """ + self._store = store + + def verify_certificate(self) -> None: + """ + Verify a certificate in a context. + + .. versionadded:: 0.15 + + :raises X509StoreContextError: If an error occurred when validating a + certificate in the context. Sets ``certificate`` attribute to + indicate which certificate caused the error. + """ + self._verify_certificate() + + def get_verified_chain(self) -> list[X509]: + """ + Verify a certificate in a context and return the complete validated + chain. + + :raises X509StoreContextError: If an error occurred when validating a + certificate in the context. Sets ``certificate`` attribute to + indicate which certificate caused the error. + + .. versionadded:: 20.0 + """ + store_ctx = self._verify_certificate() + + # Note: X509_STORE_CTX_get1_chain returns a deep copy of the chain. + cert_stack = _lib.X509_STORE_CTX_get1_chain(store_ctx) + _openssl_assert(cert_stack != _ffi.NULL) + + result = [] + for i in range(_lib.sk_X509_num(cert_stack)): + cert = _lib.sk_X509_value(cert_stack, i) + _openssl_assert(cert != _ffi.NULL) + pycert = X509._from_raw_x509_ptr(cert) + result.append(pycert) + + # Free the stack but not the members which are freed by the X509 class. + _lib.sk_X509_free(cert_stack) + return result + + +def load_certificate(type: int, buffer: bytes) -> X509: + """ + Load a certificate (X509) from the string *buffer* encoded with the + type *type*. + + :param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1) + + :param bytes buffer: The buffer the certificate is stored in + + :return: The X509 object + """ + if isinstance(buffer, str): + buffer = buffer.encode("ascii") + + bio = _new_mem_buf(buffer) + + if type == FILETYPE_PEM: + x509 = _lib.PEM_read_bio_X509(bio, _ffi.NULL, _ffi.NULL, _ffi.NULL) + elif type == FILETYPE_ASN1: + x509 = _lib.d2i_X509_bio(bio, _ffi.NULL) + else: + raise ValueError("type argument must be FILETYPE_PEM or FILETYPE_ASN1") + + if x509 == _ffi.NULL: + _raise_current_error() + + return X509._from_raw_x509_ptr(x509) + + +def dump_certificate(type: int, cert: X509) -> bytes: + """ + Dump the certificate *cert* into a buffer string encoded with the type + *type*. + + :param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1, or + FILETYPE_TEXT) + :param cert: The certificate to dump + :return: The buffer with the dumped certificate in + """ + bio = _new_mem_buf() + + if type == FILETYPE_PEM: + result_code = _lib.PEM_write_bio_X509(bio, cert._x509) + elif type == FILETYPE_ASN1: + result_code = _lib.i2d_X509_bio(bio, cert._x509) + elif type == FILETYPE_TEXT: + result_code = _lib.X509_print_ex(bio, cert._x509, 0, 0) + else: + raise ValueError( + "type argument must be FILETYPE_PEM, FILETYPE_ASN1, or " + "FILETYPE_TEXT" + ) + + _openssl_assert(result_code == 1) + return _bio_to_string(bio) + + +def dump_publickey(type: int, pkey: PKey) -> bytes: + """ + Dump a public key to a buffer. + + :param type: The file type (one of :data:`FILETYPE_PEM` or + :data:`FILETYPE_ASN1`). + :param PKey pkey: The public key to dump + :return: The buffer with the dumped key in it. + :rtype: bytes + """ + bio = _new_mem_buf() + if type == FILETYPE_PEM: + write_bio = _lib.PEM_write_bio_PUBKEY + elif type == FILETYPE_ASN1: + write_bio = _lib.i2d_PUBKEY_bio + else: + raise ValueError("type argument must be FILETYPE_PEM or FILETYPE_ASN1") + + result_code = write_bio(bio, pkey._pkey) + if result_code != 1: # pragma: no cover + _raise_current_error() + + return _bio_to_string(bio) + + +def dump_privatekey( + type: int, + pkey: PKey, + cipher: str | None = None, + passphrase: PassphraseCallableT | None = None, +) -> bytes: + """ + Dump the private key *pkey* into a buffer string encoded with the type + *type*. Optionally (if *type* is :const:`FILETYPE_PEM`) encrypting it + using *cipher* and *passphrase*. + + :param type: The file type (one of :const:`FILETYPE_PEM`, + :const:`FILETYPE_ASN1`, or :const:`FILETYPE_TEXT`) + :param PKey pkey: The PKey to dump + :param cipher: (optional) if encrypted PEM format, the cipher to use + :param passphrase: (optional) if encrypted PEM format, this can be either + the passphrase to use, or a callback for providing the passphrase. + + :return: The buffer with the dumped key in + :rtype: bytes + """ + bio = _new_mem_buf() + + if not isinstance(pkey, PKey): + raise TypeError("pkey must be a PKey") + + if cipher is not None: + if passphrase is None: + raise TypeError( + "if a value is given for cipher " + "one must also be given for passphrase" + ) + cipher_obj = _lib.EVP_get_cipherbyname(_byte_string(cipher)) + if cipher_obj == _ffi.NULL: + raise ValueError("Invalid cipher name") + else: + cipher_obj = _ffi.NULL + + helper = _PassphraseHelper(type, passphrase) + if type == FILETYPE_PEM: + result_code = _lib.PEM_write_bio_PrivateKey( + bio, + pkey._pkey, + cipher_obj, + _ffi.NULL, + 0, + helper.callback, + helper.callback_args, + ) + helper.raise_if_problem() + elif type == FILETYPE_ASN1: + result_code = _lib.i2d_PrivateKey_bio(bio, pkey._pkey) + elif type == FILETYPE_TEXT: + if _lib.EVP_PKEY_id(pkey._pkey) != _lib.EVP_PKEY_RSA: + raise TypeError("Only RSA keys are supported for FILETYPE_TEXT") + + rsa = _ffi.gc(_lib.EVP_PKEY_get1_RSA(pkey._pkey), _lib.RSA_free) + result_code = _lib.RSA_print(bio, rsa, 0) + else: + raise ValueError( + "type argument must be FILETYPE_PEM, FILETYPE_ASN1, or " + "FILETYPE_TEXT" + ) + + _openssl_assert(result_code != 0) + + return _bio_to_string(bio) + + +class _PassphraseHelper: + def __init__( + self, + type: int, + passphrase: PassphraseCallableT | None, + more_args: bool = False, + truncate: bool = False, + ) -> None: + if type != FILETYPE_PEM and passphrase is not None: + raise ValueError( + "only FILETYPE_PEM key format supports encryption" + ) + self._passphrase = passphrase + self._more_args = more_args + self._truncate = truncate + self._problems: list[Exception] = [] + + @property + def callback(self) -> Any: + if self._passphrase is None: + return _ffi.NULL + elif isinstance(self._passphrase, bytes) or callable(self._passphrase): + return _ffi.callback("pem_password_cb", self._read_passphrase) + else: + raise TypeError( + "Last argument must be a byte string or a callable." + ) + + @property + def callback_args(self) -> Any: + if self._passphrase is None: + return _ffi.NULL + elif isinstance(self._passphrase, bytes) or callable(self._passphrase): + return _ffi.NULL + else: + raise TypeError( + "Last argument must be a byte string or a callable." + ) + + def raise_if_problem(self, exceptionType: type[Exception] = Error) -> None: + if self._problems: + # Flush the OpenSSL error queue + try: + _exception_from_error_queue(exceptionType) + except exceptionType: + pass + + raise self._problems.pop(0) + + def _read_passphrase( + self, buf: Any, size: int, rwflag: Any, userdata: Any + ) -> int: + try: + if callable(self._passphrase): + if self._more_args: + result = self._passphrase(size, rwflag, userdata) + else: + result = self._passphrase(rwflag) + else: + assert self._passphrase is not None + result = self._passphrase + if not isinstance(result, bytes): + raise ValueError("Bytes expected") + if len(result) > size: + if self._truncate: + result = result[:size] + else: + raise ValueError( + "passphrase returned by callback is too long" + ) + for i in range(len(result)): + buf[i] = result[i : i + 1] + return len(result) + except Exception as e: + self._problems.append(e) + return 0 + + +def load_publickey(type: int, buffer: str | bytes) -> PKey: + """ + Load a public key from a buffer. + + :param type: The file type (one of :data:`FILETYPE_PEM`, + :data:`FILETYPE_ASN1`). + :param buffer: The buffer the key is stored in. + :type buffer: A Python string object, either unicode or bytestring. + :return: The PKey object. + :rtype: :class:`PKey` + """ + if isinstance(buffer, str): + buffer = buffer.encode("ascii") + + bio = _new_mem_buf(buffer) + + if type == FILETYPE_PEM: + evp_pkey = _lib.PEM_read_bio_PUBKEY( + bio, _ffi.NULL, _ffi.NULL, _ffi.NULL + ) + elif type == FILETYPE_ASN1: + evp_pkey = _lib.d2i_PUBKEY_bio(bio, _ffi.NULL) + else: + raise ValueError("type argument must be FILETYPE_PEM or FILETYPE_ASN1") + + if evp_pkey == _ffi.NULL: + _raise_current_error() + + pkey = PKey.__new__(PKey) + pkey._pkey = _ffi.gc(evp_pkey, _lib.EVP_PKEY_free) + pkey._only_public = True + return pkey + + +def load_privatekey( + type: int, + buffer: str | bytes, + passphrase: PassphraseCallableT | None = None, +) -> PKey: + """ + Load a private key (PKey) from the string *buffer* encoded with the type + *type*. + + :param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1) + :param buffer: The buffer the key is stored in + :param passphrase: (optional) if encrypted PEM format, this can be + either the passphrase to use, or a callback for + providing the passphrase. + + :return: The PKey object + """ + if isinstance(buffer, str): + buffer = buffer.encode("ascii") + + bio = _new_mem_buf(buffer) + + helper = _PassphraseHelper(type, passphrase) + if type == FILETYPE_PEM: + evp_pkey = _lib.PEM_read_bio_PrivateKey( + bio, _ffi.NULL, helper.callback, helper.callback_args + ) + helper.raise_if_problem() + elif type == FILETYPE_ASN1: + evp_pkey = _lib.d2i_PrivateKey_bio(bio, _ffi.NULL) + else: + raise ValueError("type argument must be FILETYPE_PEM or FILETYPE_ASN1") + + if evp_pkey == _ffi.NULL: + _raise_current_error() + + pkey = PKey.__new__(PKey) + pkey._pkey = _ffi.gc(evp_pkey, _lib.EVP_PKEY_free) + return pkey + + +def dump_certificate_request(type: int, req: X509Req) -> bytes: + """ + Dump the certificate request *req* into a buffer string encoded with the + type *type*. + + :param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1) + :param req: The certificate request to dump + :return: The buffer with the dumped certificate request in + + + .. deprecated:: 24.2.0 + Use `cryptography.x509.CertificateSigningRequest` instead. + """ + bio = _new_mem_buf() + + if type == FILETYPE_PEM: + result_code = _lib.PEM_write_bio_X509_REQ(bio, req._req) + elif type == FILETYPE_ASN1: + result_code = _lib.i2d_X509_REQ_bio(bio, req._req) + elif type == FILETYPE_TEXT: + result_code = _lib.X509_REQ_print_ex(bio, req._req, 0, 0) + else: + raise ValueError( + "type argument must be FILETYPE_PEM, FILETYPE_ASN1, or " + "FILETYPE_TEXT" + ) + + _openssl_assert(result_code != 0) + + return _bio_to_string(bio) + + +_dump_certificate_request_internal = dump_certificate_request + +utils.deprecated( + dump_certificate_request, + __name__, + ( + "CSR support in pyOpenSSL is deprecated. You should use the APIs " + "in cryptography." + ), + DeprecationWarning, + name="dump_certificate_request", +) + + +def load_certificate_request(type: int, buffer: bytes) -> X509Req: + """ + Load a certificate request (X509Req) from the string *buffer* encoded with + the type *type*. + + :param type: The file type (one of FILETYPE_PEM, FILETYPE_ASN1) + :param buffer: The buffer the certificate request is stored in + :return: The X509Req object + + .. deprecated:: 24.2.0 + Use `cryptography.x509.load_der_x509_csr` or + `cryptography.x509.load_pem_x509_csr` instead. + """ + if isinstance(buffer, str): + buffer = buffer.encode("ascii") + + bio = _new_mem_buf(buffer) + + if type == FILETYPE_PEM: + req = _lib.PEM_read_bio_X509_REQ(bio, _ffi.NULL, _ffi.NULL, _ffi.NULL) + elif type == FILETYPE_ASN1: + req = _lib.d2i_X509_REQ_bio(bio, _ffi.NULL) + else: + raise ValueError("type argument must be FILETYPE_PEM or FILETYPE_ASN1") + + _openssl_assert(req != _ffi.NULL) + + x509req = X509Req.__new__(X509Req) + x509req._req = _ffi.gc(req, _lib.X509_REQ_free) + return x509req + + +_load_certificate_request_internal = load_certificate_request + +utils.deprecated( + load_certificate_request, + __name__, + ( + "CSR support in pyOpenSSL is deprecated. You should use the APIs " + "in cryptography." + ), + DeprecationWarning, + name="load_certificate_request", +) diff --git a/Backend/venv/lib/python3.12/site-packages/OpenSSL/debug.py b/Backend/venv/lib/python3.12/site-packages/OpenSSL/debug.py new file mode 100644 index 00000000..e0ed3f81 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/OpenSSL/debug.py @@ -0,0 +1,40 @@ +import ssl +import sys + +import cffi +import cryptography + +import OpenSSL.SSL + +from . import version + +_env_info = """\ +pyOpenSSL: {pyopenssl} +cryptography: {cryptography} +cffi: {cffi} +cryptography's compiled against OpenSSL: {crypto_openssl_compile} +cryptography's linked OpenSSL: {crypto_openssl_link} +Python's OpenSSL: {python_openssl} +Python executable: {python} +Python version: {python_version} +Platform: {platform} +sys.path: {sys_path}""".format( + pyopenssl=version.__version__, + crypto_openssl_compile=OpenSSL._util.ffi.string( + OpenSSL._util.lib.OPENSSL_VERSION_TEXT, + ).decode("ascii"), + crypto_openssl_link=OpenSSL.SSL.SSLeay_version( + OpenSSL.SSL.SSLEAY_VERSION + ).decode("ascii"), + python_openssl=getattr(ssl, "OPENSSL_VERSION", "n/a"), + cryptography=cryptography.__version__, + cffi=cffi.__version__, + python=sys.executable, + python_version=sys.version, + platform=sys.platform, + sys_path=sys.path, +) + + +if __name__ == "__main__": + print(_env_info) diff --git a/Backend/venv/lib/python3.12/site-packages/OpenSSL/py.typed b/Backend/venv/lib/python3.12/site-packages/OpenSSL/py.typed new file mode 100644 index 00000000..e69de29b diff --git a/Backend/venv/lib/python3.12/site-packages/OpenSSL/rand.py b/Backend/venv/lib/python3.12/site-packages/OpenSSL/rand.py new file mode 100644 index 00000000..e57425f3 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/OpenSSL/rand.py @@ -0,0 +1,50 @@ +""" +PRNG management routines, thin wrappers. +""" + +from __future__ import annotations + +import warnings + +from OpenSSL._util import lib as _lib + +warnings.warn( + "OpenSSL.rand is deprecated - you should use os.urandom instead", + DeprecationWarning, + stacklevel=3, +) + + +def add(buffer: bytes, entropy: int) -> None: + """ + Mix bytes from *string* into the PRNG state. + + The *entropy* argument is (the lower bound of) an estimate of how much + randomness is contained in *string*, measured in bytes. + + For more information, see e.g. :rfc:`1750`. + + This function is only relevant if you are forking Python processes and + need to reseed the CSPRNG after fork. + + :param buffer: Buffer with random data. + :param entropy: The entropy (in bytes) measurement of the buffer. + + :return: :obj:`None` + """ + if not isinstance(buffer, bytes): + raise TypeError("buffer must be a byte string") + + if not isinstance(entropy, int): + raise TypeError("entropy must be an integer") + + _lib.RAND_add(buffer, len(buffer), entropy) + + +def status() -> int: + """ + Check whether the PRNG has been seeded with enough data. + + :return: 1 if the PRNG is seeded enough, 0 otherwise. + """ + return _lib.RAND_status() diff --git a/Backend/venv/lib/python3.12/site-packages/OpenSSL/version.py b/Backend/venv/lib/python3.12/site-packages/OpenSSL/version.py new file mode 100644 index 00000000..c49055e1 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/OpenSSL/version.py @@ -0,0 +1,28 @@ +# Copyright (C) AB Strakt +# Copyright (C) Jean-Paul Calderone +# See LICENSE for details. + +""" +pyOpenSSL - A simple wrapper around the OpenSSL library +""" + +__all__ = [ + "__author__", + "__copyright__", + "__email__", + "__license__", + "__summary__", + "__title__", + "__uri__", + "__version__", +] + +__version__ = "25.3.0" + +__title__ = "pyOpenSSL" +__uri__ = "https://pyopenssl.org/" +__summary__ = "Python wrapper module around the OpenSSL library" +__author__ = "The pyOpenSSL developers" +__email__ = "cryptography-dev@python.org" +__license__ = "Apache License, Version 2.0" +__copyright__ = f"Copyright 2001-2025 {__author__}" diff --git a/Backend/venv/lib/python3.12/site-packages/__pycache__/png.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/__pycache__/png.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3467ba8f50b9d2754d348db35678d73f53475efa GIT binary patch literal 87963 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 -License: Apache-2.0 OR BSD-3-Clause -Project-URL: homepage, https://github.com/pyca/cryptography -Project-URL: documentation, https://cryptography.io/ -Project-URL: source, https://github.com/pyca/cryptography/ -Project-URL: issues, https://github.com/pyca/cryptography/issues -Project-URL: changelog, https://cryptography.io/en/latest/changelog/ +Version: 46.0.3 Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: Apache Software License -Classifier: License :: OSI Approved :: BSD License Classifier: Natural Language :: English Classifier: Operating System :: MacOS :: MacOS X Classifier: Operating System :: POSIX @@ -22,46 +12,62 @@ Classifier: Operating System :: Microsoft :: Windows Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3 :: Only -Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 +Classifier: Programming Language :: Python :: 3.12 +Classifier: Programming Language :: Python :: 3.13 +Classifier: Programming Language :: Python :: 3.14 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy +Classifier: Programming Language :: Python :: Free Threading :: 3 - Stable Classifier: Topic :: Security :: Cryptography -Requires-Python: >=3.7 -Description-Content-Type: text/x-rst +Requires-Dist: cffi>=1.14 ; python_full_version == '3.8.*' and platform_python_implementation != 'PyPy' +Requires-Dist: cffi>=2.0.0 ; python_full_version >= '3.9' and platform_python_implementation != 'PyPy' +Requires-Dist: typing-extensions>=4.13.2 ; python_full_version < '3.11' +Requires-Dist: bcrypt>=3.1.5 ; extra == 'ssh' +Requires-Dist: nox[uv]>=2024.4.15 ; extra == 'nox' +Requires-Dist: cryptography-vectors==46.0.3 ; extra == 'test' +Requires-Dist: pytest>=7.4.0 ; extra == 'test' +Requires-Dist: pytest-benchmark>=4.0 ; extra == 'test' +Requires-Dist: pytest-cov>=2.10.1 ; extra == 'test' +Requires-Dist: pytest-xdist>=3.5.0 ; extra == 'test' +Requires-Dist: pretend>=0.7 ; extra == 'test' +Requires-Dist: certifi>=2024 ; extra == 'test' +Requires-Dist: pytest-randomly ; extra == 'test-randomorder' +Requires-Dist: sphinx>=5.3.0 ; extra == 'docs' +Requires-Dist: sphinx-rtd-theme>=3.0.0 ; extra == 'docs' +Requires-Dist: sphinx-inline-tabs ; extra == 'docs' +Requires-Dist: pyenchant>=3 ; extra == 'docstest' +Requires-Dist: readme-renderer>=30.0 ; extra == 'docstest' +Requires-Dist: sphinxcontrib-spelling>=7.3.1 ; extra == 'docstest' +Requires-Dist: build>=1.0.0 ; extra == 'sdist' +Requires-Dist: ruff>=0.11.11 ; extra == 'pep8test' +Requires-Dist: mypy>=1.14 ; extra == 'pep8test' +Requires-Dist: check-sdist ; extra == 'pep8test' +Requires-Dist: click>=8.0.1 ; extra == 'pep8test' +Provides-Extra: ssh +Provides-Extra: nox +Provides-Extra: test +Provides-Extra: test-randomorder +Provides-Extra: docs +Provides-Extra: docstest +Provides-Extra: sdist +Provides-Extra: pep8test License-File: LICENSE License-File: LICENSE.APACHE License-File: LICENSE.BSD -Requires-Dist: cffi >=1.12 -Provides-Extra: docs -Requires-Dist: sphinx >=5.3.0 ; extra == 'docs' -Requires-Dist: sphinx-rtd-theme >=1.1.1 ; extra == 'docs' -Provides-Extra: docstest -Requires-Dist: pyenchant >=1.6.11 ; extra == 'docstest' -Requires-Dist: twine >=1.12.0 ; extra == 'docstest' -Requires-Dist: sphinxcontrib-spelling >=4.0.1 ; extra == 'docstest' -Provides-Extra: nox -Requires-Dist: nox ; extra == 'nox' -Provides-Extra: pep8test -Requires-Dist: black ; extra == 'pep8test' -Requires-Dist: ruff ; extra == 'pep8test' -Requires-Dist: mypy ; extra == 'pep8test' -Requires-Dist: check-sdist ; extra == 'pep8test' -Provides-Extra: sdist -Requires-Dist: build ; extra == 'sdist' -Provides-Extra: ssh -Requires-Dist: bcrypt >=3.1.5 ; extra == 'ssh' -Provides-Extra: test -Requires-Dist: pytest >=6.2.0 ; extra == 'test' -Requires-Dist: pytest-benchmark ; extra == 'test' -Requires-Dist: pytest-cov ; extra == 'test' -Requires-Dist: pytest-xdist ; extra == 'test' -Requires-Dist: pretend ; extra == 'test' -Provides-Extra: test-randomorder -Requires-Dist: pytest-randomly ; extra == 'test-randomorder' +Summary: cryptography is a package which provides cryptographic recipes and primitives to Python developers. +Author-email: The Python Cryptographic Authority and individual contributors +License-Expression: Apache-2.0 OR BSD-3-Clause +Requires-Python: >=3.8, !=3.9.0, !=3.9.1 +Description-Content-Type: text/x-rst; charset=UTF-8 +Project-URL: homepage, https://github.com/pyca/cryptography +Project-URL: documentation, https://cryptography.io/ +Project-URL: source, https://github.com/pyca/cryptography/ +Project-URL: issues, https://github.com/pyca/cryptography/issues +Project-URL: changelog, https://cryptography.io/en/latest/changelog/ pyca/cryptography ================= @@ -74,13 +80,12 @@ pyca/cryptography :target: https://cryptography.io :alt: Latest Docs -.. image:: https://github.com/pyca/cryptography/workflows/CI/badge.svg?branch=main - :target: https://github.com/pyca/cryptography/actions?query=workflow%3ACI+branch%3Amain - +.. image:: https://github.com/pyca/cryptography/actions/workflows/ci.yml/badge.svg + :target: https://github.com/pyca/cryptography/actions/workflows/ci.yml?query=branch%3Amain ``cryptography`` is a package which provides cryptographic recipes and primitives to Python developers. Our goal is for it to be your "cryptographic -standard library". It supports Python 3.7+ and PyPy3 7.3.10+. +standard library". It supports Python 3.8+ and PyPy3 7.3.11+. ``cryptography`` includes both high level recipes and low level interfaces to common cryptographic algorithms such as symmetric ciphers, message digests, and @@ -131,3 +136,4 @@ documentation. .. _`issue tracker`: https://github.com/pyca/cryptography/issues .. _`cryptography-dev`: https://mail.python.org/mailman/listinfo/cryptography-dev .. _`security reporting`: https://cryptography.io/en/latest/security/ + diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography-46.0.3.dist-info/RECORD b/Backend/venv/lib/python3.12/site-packages/cryptography-46.0.3.dist-info/RECORD new file mode 100644 index 00000000..9099b5bc --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/cryptography-46.0.3.dist-info/RECORD @@ -0,0 +1,180 @@ +cryptography-46.0.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +cryptography-46.0.3.dist-info/METADATA,sha256=bx2LyCEmOVUC8FH5hsGEZewWPiZoIIYTq0hM9mu9r4s,5748 +cryptography-46.0.3.dist-info/RECORD,, +cryptography-46.0.3.dist-info/WHEEL,sha256=jkxrJemT4jZpYSr-u9xPalWqoow8benNmiXfjKXLlJw,108 +cryptography-46.0.3.dist-info/licenses/LICENSE,sha256=Pgx8CRqUi4JTO6mP18u0BDLW8amsv4X1ki0vmak65rs,197 +cryptography-46.0.3.dist-info/licenses/LICENSE.APACHE,sha256=qsc7MUj20dcRHbyjIJn2jSbGRMaBOuHk8F9leaomY_4,11360 +cryptography-46.0.3.dist-info/licenses/LICENSE.BSD,sha256=YCxMdILeZHndLpeTzaJ15eY9dz2s0eymiSMqtwCPtPs,1532 +cryptography/__about__.py,sha256=QCLxNH_Abbygdc9RQGpUmrK14Wp3Cl_SEiB2byLwyxo,445 +cryptography/__init__.py,sha256=mthuUrTd4FROCpUYrTIqhjz6s6T9djAZrV7nZ1oMm2o,364 +cryptography/__pycache__/__about__.cpython-312.pyc,, +cryptography/__pycache__/__init__.cpython-312.pyc,, +cryptography/__pycache__/exceptions.cpython-312.pyc,, +cryptography/__pycache__/fernet.cpython-312.pyc,, +cryptography/__pycache__/utils.cpython-312.pyc,, +cryptography/exceptions.py,sha256=835EWILc2fwxw-gyFMriciC2SqhViETB10LBSytnDIc,1087 +cryptography/fernet.py,sha256=3Cvxkh0KJSbX8HbnCHu4wfCW7U0GgfUA3v_qQ8a8iWc,6963 +cryptography/hazmat/__init__.py,sha256=5IwrLWrVp0AjEr_4FdWG_V057NSJGY_W4egNNsuct0g,455 +cryptography/hazmat/__pycache__/__init__.cpython-312.pyc,, +cryptography/hazmat/__pycache__/_oid.cpython-312.pyc,, +cryptography/hazmat/_oid.py,sha256=p8ThjwJB56Ci_rAIrjyJ1f8VjgD6e39es2dh8JIUBOw,17240 +cryptography/hazmat/asn1/__init__.py,sha256=hS_EWx3wVvZzfbCcNV8hzcDnyMM8H-BhIoS1TipUosk,293 +cryptography/hazmat/asn1/__pycache__/__init__.cpython-312.pyc,, +cryptography/hazmat/asn1/__pycache__/asn1.cpython-312.pyc,, +cryptography/hazmat/asn1/asn1.py,sha256=eMEThEXa19LQjcyVofgHsW6tsZnjp3ddH7bWkkcxfLM,3860 +cryptography/hazmat/backends/__init__.py,sha256=O5jvKFQdZnXhKeqJ-HtulaEL9Ni7mr1mDzZY5kHlYhI,361 +cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc,, +cryptography/hazmat/backends/openssl/__init__.py,sha256=p3jmJfnCag9iE5sdMrN6VvVEu55u46xaS_IjoI0SrmA,305 +cryptography/hazmat/backends/openssl/__pycache__/__init__.cpython-312.pyc,, +cryptography/hazmat/backends/openssl/__pycache__/backend.cpython-312.pyc,, +cryptography/hazmat/backends/openssl/backend.py,sha256=tV5AxBoFJ2GfA0DMWSY-0TxQJrpQoexzI9R4Kybb--4,10215 +cryptography/hazmat/bindings/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 +cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc,, +cryptography/hazmat/bindings/_rust.abi3.so,sha256=4bUN0J2p_ZQMdgmAc9eL0VMj_lgbTsHUmX4doekVIJ4,12955672 +cryptography/hazmat/bindings/_rust/__init__.pyi,sha256=KhqLhXFPArPzzJ7DYO9Fl8FoXB_BagAd_r4Dm_Ze9Xo,1257 +cryptography/hazmat/bindings/_rust/_openssl.pyi,sha256=mpNJLuYLbCVrd5i33FBTmWwL_55Dw7JPkSLlSX9Q7oI,230 +cryptography/hazmat/bindings/_rust/asn1.pyi,sha256=BrGjC8J6nwuS-r3EVcdXJB8ndotfY9mbQYOfpbPG0HA,354 +cryptography/hazmat/bindings/_rust/declarative_asn1.pyi,sha256=2ECFmYue1EPkHEE2Bm7aLwkjB0mSUTpr23v9MN4pri4,892 +cryptography/hazmat/bindings/_rust/exceptions.pyi,sha256=exXr2xw_0pB1kk93cYbM3MohbzoUkjOms1ZMUi0uQZE,640 +cryptography/hazmat/bindings/_rust/ocsp.pyi,sha256=VPVWuKHI9EMs09ZLRYAGvR0Iz0mCMmEzXAkgJHovpoM,4020 +cryptography/hazmat/bindings/_rust/openssl/__init__.pyi,sha256=iOAMDyHoNwwCSZfZzuXDr64g4GpGUeDgEN-LjXqdrBM,1522 +cryptography/hazmat/bindings/_rust/openssl/aead.pyi,sha256=4Nddw6-ynzIB3w2W86WvkGKTLlTDk_6F5l54RHCuy3E,2688 +cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi,sha256=LhPzHWSXJq4grAJXn6zSvSSdV-aYIIscHDwIPlJGGPs,1315 +cryptography/hazmat/bindings/_rust/openssl/cmac.pyi,sha256=nPH0X57RYpsAkRowVpjQiHE566ThUTx7YXrsadmrmHk,564 +cryptography/hazmat/bindings/_rust/openssl/dh.pyi,sha256=Z3TC-G04-THtSdAOPLM1h2G7ml5bda1ElZUcn5wpuhk,1564 +cryptography/hazmat/bindings/_rust/openssl/dsa.pyi,sha256=qBtkgj2albt2qFcnZ9UDrhzoNhCVO7HTby5VSf1EXMI,1299 +cryptography/hazmat/bindings/_rust/openssl/ec.pyi,sha256=zJy0pRa5n-_p2dm45PxECB_-B6SVZyNKfjxFDpPqT38,1691 +cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi,sha256=VXfXd5G6hUivg399R1DYdmW3eTb0EebzDTqjRC2gaRw,532 +cryptography/hazmat/bindings/_rust/openssl/ed448.pyi,sha256=Yx49lqdnjsD7bxiDV1kcaMrDktug5evi5a6zerMiy2s,514 +cryptography/hazmat/bindings/_rust/openssl/hashes.pyi,sha256=OWZvBx7xfo_HJl41Nc--DugVyCVPIprZ3HlOPTSWH9g,984 +cryptography/hazmat/bindings/_rust/openssl/hmac.pyi,sha256=BXZn7NDjL3JAbYW0SQ8pg1iyC5DbQXVhUAiwsi8DFR8,702 +cryptography/hazmat/bindings/_rust/openssl/kdf.pyi,sha256=xXfFBb9QehHfDtEaxV_65Z0YK7NquOVIChpTLkgAs_k,2029 +cryptography/hazmat/bindings/_rust/openssl/keys.pyi,sha256=teIt8M6ZEMJrn4s3W0UnW0DZ-30Jd68WnSsKKG124l0,912 +cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi,sha256=_SW9NtQ5FDlAbdclFtWpT4lGmxKIKHpN-4j8J2BzYfQ,585 +cryptography/hazmat/bindings/_rust/openssl/rsa.pyi,sha256=2OQCNSXkxgc-3uw1xiCCloIQTV6p9_kK79Yu0rhZgPc,1364 +cryptography/hazmat/bindings/_rust/openssl/x25519.pyi,sha256=ewn4GpQyb7zPwE-ni7GtyQgMC0A1mLuqYsSyqv6nI_s,523 +cryptography/hazmat/bindings/_rust/openssl/x448.pyi,sha256=juTZTmli8jO_5Vcufg-vHvx_tCyezmSLIh_9PU3TczI,505 +cryptography/hazmat/bindings/_rust/pkcs12.pyi,sha256=vEEd5wDiZvb8ZGFaziLCaWLzAwoG_tvPUxLQw5_uOl8,1605 +cryptography/hazmat/bindings/_rust/pkcs7.pyi,sha256=txGBJijqZshEcqra6byPNbnisIdlxzOSIHP2hl9arPs,1601 +cryptography/hazmat/bindings/_rust/test_support.pyi,sha256=PPhld-WkO743iXFPebeG0LtgK0aTzGdjcIsay1Gm5GE,757 +cryptography/hazmat/bindings/_rust/x509.pyi,sha256=n9X0IQ6ICbdIi-ExdCFZoBgeY6njm3QOVAVZwDQdnbk,9784 +cryptography/hazmat/bindings/openssl/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 +cryptography/hazmat/bindings/openssl/__pycache__/__init__.cpython-312.pyc,, +cryptography/hazmat/bindings/openssl/__pycache__/_conditional.cpython-312.pyc,, +cryptography/hazmat/bindings/openssl/__pycache__/binding.cpython-312.pyc,, +cryptography/hazmat/bindings/openssl/_conditional.py,sha256=DMOpA_XN4l70zTc5_J9DpwlbQeUBRTWpfIJ4yRIn1-U,5791 +cryptography/hazmat/bindings/openssl/binding.py,sha256=x8eocEmukO4cm7cHqfVmOoYY7CCXdoF1v1WhZQt9neo,4610 +cryptography/hazmat/decrepit/__init__.py,sha256=wHCbWfaefa-fk6THSw9th9fJUsStJo7245wfFBqmduA,216 +cryptography/hazmat/decrepit/__pycache__/__init__.cpython-312.pyc,, +cryptography/hazmat/decrepit/ciphers/__init__.py,sha256=wHCbWfaefa-fk6THSw9th9fJUsStJo7245wfFBqmduA,216 +cryptography/hazmat/decrepit/ciphers/__pycache__/__init__.cpython-312.pyc,, +cryptography/hazmat/decrepit/ciphers/__pycache__/algorithms.cpython-312.pyc,, +cryptography/hazmat/decrepit/ciphers/algorithms.py,sha256=YrKgHS4MfwWaMmPBYRymRRlC0phwWp9ycICFezeJPGk,2595 +cryptography/hazmat/primitives/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 +cryptography/hazmat/primitives/__pycache__/__init__.cpython-312.pyc,, +cryptography/hazmat/primitives/__pycache__/_asymmetric.cpython-312.pyc,, +cryptography/hazmat/primitives/__pycache__/_cipheralgorithm.cpython-312.pyc,, +cryptography/hazmat/primitives/__pycache__/_serialization.cpython-312.pyc,, +cryptography/hazmat/primitives/__pycache__/cmac.cpython-312.pyc,, +cryptography/hazmat/primitives/__pycache__/constant_time.cpython-312.pyc,, +cryptography/hazmat/primitives/__pycache__/hashes.cpython-312.pyc,, +cryptography/hazmat/primitives/__pycache__/hmac.cpython-312.pyc,, +cryptography/hazmat/primitives/__pycache__/keywrap.cpython-312.pyc,, +cryptography/hazmat/primitives/__pycache__/padding.cpython-312.pyc,, +cryptography/hazmat/primitives/__pycache__/poly1305.cpython-312.pyc,, +cryptography/hazmat/primitives/_asymmetric.py,sha256=RhgcouUB6HTiFDBrR1LxqkMjpUxIiNvQ1r_zJjRG6qQ,532 +cryptography/hazmat/primitives/_cipheralgorithm.py,sha256=Eh3i7lwedHfi0eLSsH93PZxQKzY9I6lkK67vL4V5tOc,1522 +cryptography/hazmat/primitives/_serialization.py,sha256=chgPCSF2jxI2Cr5gB-qbWXOvOfupBh4CARS0KAhv9AM,5123 +cryptography/hazmat/primitives/asymmetric/__init__.py,sha256=s9oKCQ2ycFdXoERdS1imafueSkBsL9kvbyfghaauZ9Y,180 +cryptography/hazmat/primitives/asymmetric/__pycache__/__init__.cpython-312.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/dh.cpython-312.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/dsa.cpython-312.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/ec.cpython-312.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/ed25519.cpython-312.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/ed448.cpython-312.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/padding.cpython-312.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/rsa.cpython-312.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/types.cpython-312.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/utils.cpython-312.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/x25519.cpython-312.pyc,, +cryptography/hazmat/primitives/asymmetric/__pycache__/x448.cpython-312.pyc,, +cryptography/hazmat/primitives/asymmetric/dh.py,sha256=0v_vEFFz5pQ1QG-FkWDyvgv7IfuVZSH5Q6LyFI5A8rg,3645 +cryptography/hazmat/primitives/asymmetric/dsa.py,sha256=Ld_bbbqQFz12dObHxIkzEQzX0SWWP41RLSWkYSaKhqE,4213 +cryptography/hazmat/primitives/asymmetric/ec.py,sha256=Vf5ig2PcS3PVnsb5N49Kx1uIkFBJyhg4BWXThDz5cug,12999 +cryptography/hazmat/primitives/asymmetric/ed25519.py,sha256=jZW5cs472wXXV3eB0sE1b8w64gdazwwU0_MT5UOTiXs,3700 +cryptography/hazmat/primitives/asymmetric/ed448.py,sha256=yAetgn2f2JYf0BO8MapGzXeThsvSMG5LmUCrxVOidAA,3729 +cryptography/hazmat/primitives/asymmetric/padding.py,sha256=vQ6l6gOg9HqcbOsvHrSiJRVLdEj9L4m4HkRGYziTyFA,2854 +cryptography/hazmat/primitives/asymmetric/rsa.py,sha256=ZnKOo2f34MCCOupC03Y1uR-_jiSG5IrelHEmxaME3D4,8303 +cryptography/hazmat/primitives/asymmetric/types.py,sha256=LnsOJym-wmPUJ7Knu_7bCNU3kIiELCd6krOaW_JU08I,2996 +cryptography/hazmat/primitives/asymmetric/utils.py,sha256=DPTs6T4F-UhwzFQTh-1fSEpQzazH2jf2xpIro3ItF4o,790 +cryptography/hazmat/primitives/asymmetric/x25519.py,sha256=_4nQeZ3yJ3Lg0RpXnaqA-1yt6vbx1F-wzLcaZHwSpeE,3613 +cryptography/hazmat/primitives/asymmetric/x448.py,sha256=WKBLtuVfJqiBRro654fGaQAlvsKbqbNkK7c4A_ZCdV0,3642 +cryptography/hazmat/primitives/ciphers/__init__.py,sha256=eyEXmjk6_CZXaOPYDr7vAYGXr29QvzgWL2-4CSolLFs,680 +cryptography/hazmat/primitives/ciphers/__pycache__/__init__.cpython-312.pyc,, +cryptography/hazmat/primitives/ciphers/__pycache__/aead.cpython-312.pyc,, +cryptography/hazmat/primitives/ciphers/__pycache__/algorithms.cpython-312.pyc,, +cryptography/hazmat/primitives/ciphers/__pycache__/base.cpython-312.pyc,, +cryptography/hazmat/primitives/ciphers/__pycache__/modes.cpython-312.pyc,, +cryptography/hazmat/primitives/ciphers/aead.py,sha256=Fzlyx7w8KYQakzDp1zWgJnIr62zgZrgVh1u2h4exB54,634 +cryptography/hazmat/primitives/ciphers/algorithms.py,sha256=Q7ZJwcsx83Mgxv5y7r6CyJKSdsOwC-my-5A67-ma2vw,3407 +cryptography/hazmat/primitives/ciphers/base.py,sha256=aBC7HHBBoixebmparVr0UlODs3VD0A7B6oz_AaRjDv8,4253 +cryptography/hazmat/primitives/ciphers/modes.py,sha256=20stpwhDtbAvpH0SMf9EDHIciwmTF-JMBUOZ9bU8WiQ,8318 +cryptography/hazmat/primitives/cmac.py,sha256=sz_s6H_cYnOvx-VNWdIKhRhe3Ymp8z8J0D3CBqOX3gg,338 +cryptography/hazmat/primitives/constant_time.py,sha256=xdunWT0nf8OvKdcqUhhlFKayGp4_PgVJRU2W1wLSr_A,422 +cryptography/hazmat/primitives/hashes.py,sha256=M8BrlKB3U6DEtHvWTV5VRjpteHv1kS3Zxm_Bsk04cr8,5184 +cryptography/hazmat/primitives/hmac.py,sha256=RpB3z9z5skirCQrm7zQbtnp9pLMnAjrlTUvKqF5aDDc,423 +cryptography/hazmat/primitives/kdf/__init__.py,sha256=4XibZnrYq4hh5xBjWiIXzaYW6FKx8hPbVaa_cB9zS64,750 +cryptography/hazmat/primitives/kdf/__pycache__/__init__.cpython-312.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/argon2.cpython-312.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/concatkdf.cpython-312.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/hkdf.cpython-312.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/kbkdf.cpython-312.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/pbkdf2.cpython-312.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/scrypt.cpython-312.pyc,, +cryptography/hazmat/primitives/kdf/__pycache__/x963kdf.cpython-312.pyc,, +cryptography/hazmat/primitives/kdf/argon2.py,sha256=UFDNXG0v-rw3DqAQTB1UQAsQC2M5Ejg0k_6OCyhLKus,460 +cryptography/hazmat/primitives/kdf/concatkdf.py,sha256=Ua8KoLXXnzgsrAUmHpyKymaPt8aPRP0EHEaBz7QCQ9I,3737 +cryptography/hazmat/primitives/kdf/hkdf.py,sha256=M0lAEfRoc4kpp4-nwDj9yB-vNZukIOYEQrUlWsBNn9o,543 +cryptography/hazmat/primitives/kdf/kbkdf.py,sha256=oZepvo4evhKkkJQWRDwaPoIbyTaFmDc5NPimxg6lfKg,9165 +cryptography/hazmat/primitives/kdf/pbkdf2.py,sha256=1WIwhELR0w8ztTpTu8BrFiYWmK3hUfJq08I79TxwieE,1957 +cryptography/hazmat/primitives/kdf/scrypt.py,sha256=XyWUdUUmhuI9V6TqAPOvujCSMGv1XQdg0a21IWCmO-U,590 +cryptography/hazmat/primitives/kdf/x963kdf.py,sha256=zLTcF665QFvXX2f8TS7fmBZTteXpFjKahzfjjQcCJyw,1999 +cryptography/hazmat/primitives/keywrap.py,sha256=XV4Pj2fqSeD-RqZVvY2cA3j5_7RwJSFygYuLfk2ujCo,5650 +cryptography/hazmat/primitives/padding.py,sha256=QT-U-NvV2eQGO1wVPbDiNGNSc9keRDS-ig5cQOrLz0E,1865 +cryptography/hazmat/primitives/poly1305.py,sha256=P5EPQV-RB_FJPahpg01u0Ts4S_PnAmsroxIGXbGeRRo,355 +cryptography/hazmat/primitives/serialization/__init__.py,sha256=Q7uTgDlt7n3WfsMT6jYwutC6DIg_7SEeoAm1GHZ5B5E,1705 +cryptography/hazmat/primitives/serialization/__pycache__/__init__.cpython-312.pyc,, +cryptography/hazmat/primitives/serialization/__pycache__/base.cpython-312.pyc,, +cryptography/hazmat/primitives/serialization/__pycache__/pkcs12.cpython-312.pyc,, +cryptography/hazmat/primitives/serialization/__pycache__/pkcs7.cpython-312.pyc,, +cryptography/hazmat/primitives/serialization/__pycache__/ssh.cpython-312.pyc,, +cryptography/hazmat/primitives/serialization/base.py,sha256=ikq5MJIwp_oUnjiaBco_PmQwOTYuGi-XkYUYHKy8Vo0,615 +cryptography/hazmat/primitives/serialization/pkcs12.py,sha256=mS9cFNG4afzvseoc5e1MWoY2VskfL8N8Y_OFjl67luY,5104 +cryptography/hazmat/primitives/serialization/pkcs7.py,sha256=5OR_Tkysxaprn4FegvJIfbep9rJ9wok6FLWvWwQ5-Mg,13943 +cryptography/hazmat/primitives/serialization/ssh.py,sha256=hPV5obFznz0QhFfXFPOeQ8y6MsurA0xVMQiLnLESEs8,53700 +cryptography/hazmat/primitives/twofactor/__init__.py,sha256=tmMZGB-g4IU1r7lIFqASU019zr0uPp_wEBYcwdDCKCA,258 +cryptography/hazmat/primitives/twofactor/__pycache__/__init__.cpython-312.pyc,, +cryptography/hazmat/primitives/twofactor/__pycache__/hotp.cpython-312.pyc,, +cryptography/hazmat/primitives/twofactor/__pycache__/totp.cpython-312.pyc,, +cryptography/hazmat/primitives/twofactor/hotp.py,sha256=ivZo5BrcCGWLsqql4nZV0XXCjyGPi_iHfDFltGlOJwk,3256 +cryptography/hazmat/primitives/twofactor/totp.py,sha256=m5LPpRL00kp4zY8gTjr55Hfz9aMlPS53kHmVkSQCmdY,1652 +cryptography/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +cryptography/utils.py,sha256=bZAjFC5KVpfmF29qS_18vvpW3mKxmdiRALcusHhTTkg,4301 +cryptography/x509/__init__.py,sha256=xloN0swseNx-m2WFZmCA17gOoxQWqeU82UVjEdJBePQ,8257 +cryptography/x509/__pycache__/__init__.cpython-312.pyc,, +cryptography/x509/__pycache__/base.cpython-312.pyc,, +cryptography/x509/__pycache__/certificate_transparency.cpython-312.pyc,, +cryptography/x509/__pycache__/extensions.cpython-312.pyc,, +cryptography/x509/__pycache__/general_name.cpython-312.pyc,, +cryptography/x509/__pycache__/name.cpython-312.pyc,, +cryptography/x509/__pycache__/ocsp.cpython-312.pyc,, +cryptography/x509/__pycache__/oid.cpython-312.pyc,, +cryptography/x509/__pycache__/verification.cpython-312.pyc,, +cryptography/x509/base.py,sha256=OrmTw3y8B6AE_nGXQPN8x9kq-d7rDWeH13gCq6T6D6U,27997 +cryptography/x509/certificate_transparency.py,sha256=JqoOIDhlwInrYMFW6IFn77WJ0viF-PB_rlZV3vs9MYc,797 +cryptography/x509/extensions.py,sha256=QxYrqR6SF1qzR9ZraP8wDiIczlEVlAFuwDRVcltB6Tk,77724 +cryptography/x509/general_name.py,sha256=sP_rV11Qlpsk4x3XXGJY_Mv0Q_s9dtjeLckHsjpLQoQ,7836 +cryptography/x509/name.py,sha256=ty0_xf0LnHwZAdEf-d8FLO1K4hGqx_7DsD3CHwoLJiY,15101 +cryptography/x509/ocsp.py,sha256=Yey6NdFV1MPjop24Mj_VenjEpg3kUaMopSWOK0AbeBs,12699 +cryptography/x509/oid.py,sha256=BUzgXXGVWilkBkdKPTm9R4qElE9gAGHgdYPMZAp7PJo,931 +cryptography/x509/verification.py,sha256=gR2C2c-XZQtblZhT5T5vjSKOtCb74ef2alPVmEcwFlM,958 diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography-46.0.3.dist-info/WHEEL b/Backend/venv/lib/python3.12/site-packages/cryptography-46.0.3.dist-info/WHEEL new file mode 100644 index 00000000..8e48aa14 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/cryptography-46.0.3.dist-info/WHEEL @@ -0,0 +1,5 @@ +Wheel-Version: 1.0 +Generator: maturin (1.9.4) +Root-Is-Purelib: false +Tag: cp311-abi3-manylinux_2_34_x86_64 + diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography-41.0.7.dist-info/LICENSE b/Backend/venv/lib/python3.12/site-packages/cryptography-46.0.3.dist-info/licenses/LICENSE similarity index 100% rename from Backend/venv/lib/python3.12/site-packages/cryptography-41.0.7.dist-info/LICENSE rename to Backend/venv/lib/python3.12/site-packages/cryptography-46.0.3.dist-info/licenses/LICENSE diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography-41.0.7.dist-info/LICENSE.APACHE b/Backend/venv/lib/python3.12/site-packages/cryptography-46.0.3.dist-info/licenses/LICENSE.APACHE similarity index 100% rename from Backend/venv/lib/python3.12/site-packages/cryptography-41.0.7.dist-info/LICENSE.APACHE rename to Backend/venv/lib/python3.12/site-packages/cryptography-46.0.3.dist-info/licenses/LICENSE.APACHE diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography-41.0.7.dist-info/LICENSE.BSD b/Backend/venv/lib/python3.12/site-packages/cryptography-46.0.3.dist-info/licenses/LICENSE.BSD similarity index 100% rename from Backend/venv/lib/python3.12/site-packages/cryptography-41.0.7.dist-info/LICENSE.BSD rename to Backend/venv/lib/python3.12/site-packages/cryptography-46.0.3.dist-info/licenses/LICENSE.BSD diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/__about__.py b/Backend/venv/lib/python3.12/site-packages/cryptography/__about__.py index 014e0adb..a8116284 100644 --- a/Backend/venv/lib/python3.12/site-packages/cryptography/__about__.py +++ b/Backend/venv/lib/python3.12/site-packages/cryptography/__about__.py @@ -5,13 +5,13 @@ from __future__ import annotations __all__ = [ - "__version__", "__author__", "__copyright__", + "__version__", ] -__version__ = "41.0.7" +__version__ = "46.0.3" __author__ = "The Python Cryptographic Authority and individual contributors" -__copyright__ = f"Copyright 2013-2023 {__author__}" +__copyright__ = f"Copyright 2013-2025 {__author__}" diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/__init__.py b/Backend/venv/lib/python3.12/site-packages/cryptography/__init__.py index 86b9a257..d374f752 100644 --- a/Backend/venv/lib/python3.12/site-packages/cryptography/__init__.py +++ b/Backend/venv/lib/python3.12/site-packages/cryptography/__init__.py @@ -7,7 +7,7 @@ from __future__ import annotations from cryptography.__about__ import __author__, __copyright__, __version__ __all__ = [ - "__version__", "__author__", "__copyright__", + "__version__", ] diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/__pycache__/__about__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/cryptography/__pycache__/__about__.cpython-312.pyc index 16a74985e6b8b44c9f86ab46fc40117868f2c707..8d19f948f912667a8fe9d5c639a5064c5adfd82c 100644 GIT binary patch delta 68 zcmcc2e3_a1G%qg~0}y=q>K}__EZZ;>`TK`1mR|6Ei&nJ>!XULKsaa Uew62C1F9`z0THZ|r5Ses0LhmVPyhe` delta 68 zcmcc2e3_a1G%qg~0}#|)lbpz%#KRpQUzS=_oSB~&A3rfinxl%%#8A&b&wS#X5JuyP TALY4OfNG0aK?K`mX~rD@mwgf} diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/cryptography/__pycache__/__init__.cpython-312.pyc index dea6f303f15d755bf9c47ac99003cdc281f7c884..57e9aceb5b7fdbb8f132bf5127298da60db382b9 100644 GIT binary patch delta 35 pcmeBT{>j9BnwOW00SLZNke$fw!pXFVF^a8{S(9aAgx$pDj{%}_3IG5A delta 53 zcmey#)WytwnwOW00SIcYNlxT;;bdOK7{yk}qRBcj!cI_=xrhxYRm1`!Sb@aEX^#Ov CYztce diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/__pycache__/exceptions.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/cryptography/__pycache__/exceptions.cpython-312.pyc index 16c476e00635b5d8479993ab4c6f6debae6d34dd..0310a8f8d28be0b5ae180bb1f6aef37c6db1ca7e 100644 GIT binary patch delta 195 zcmbOzd|in5G%qg~0}yKC2$!)CJjOv>|u?jLW>P%)~w_uXbne58$ o&Zs@PmtBg{aq}k zRW_l?UzyaUBugp_GV{{){0mAl^YapOqT_>76N~fnieo41FlQQT0FC<5!tlVs?6A+OoNPR$!lo9tC;J-8J(4M^HBZ$D6hCxSo&?Z5$Hk7 zPBsD$c7XRNaT$%VqkK|H%4mfh=3i3cbb?<~9(Cc4`F}e*Yrjx_?x08c*L??47?0)8 z9QGl&0W5j;)YOq@q`G@*|2OyGGEqNerYXZvN9EUlTvd{3pwX0{vdF;bo^&%t?1e;Sh!h~AhB~~ul z=MFp)jxYj--V7&z@Pm?bd?7j%ETH@ifDQ6NsJnJE`WpQh8yM!2odmFCJ0ONR7mmS2 zgBNE(+UjDSU+(Os)!Ow=hqIc2=@0Sduw?)>A`Doe%yUyOW~R@4Zu)d)_Vmd)Hjf&D zpIA-U(+D*I$JL3s)Jod`#Auhia0kMH%a9tskn#Y7ByBW zIA66**d!JTBD#l633gP_0p{U>7XpTT;!c`8DmIDs)CA3%OgDVHb~UTJTSngyNW%{* zuSd+)NtKlZ6o?2*UuD zFIUJKMo~9c${KqV#m5j1BTOL7AzVOM0I>W}biBzvgpIa@M`Q2**)jDrxGT-ChNsU1}ct5p1fY*eL0qojx7LDZ= zJI8pXuZzA74Km8#?CXGawZ0W~9oONB?UtXHP=ME=wfr3BC;C(Lhg|O;hI0C?{&8Bx z{>rc^1G&U;i4zqD#fge)YIk4MoIp*t2$TsYf`)i8ExKgUifDrd_Dm?N__I5`%*wzT zeZ8$Y11NKv`j2W)4?aP&^==_N&!H>yyxSjyE4-6z1HfqX2Na?9dV90wdO7?R>SBT1 zAX||R{+IoKpKA6ZI4!(LO#ulnqLOUja{PK|1i~(Gc{oLX&xePXVmVCP?ho~xgwP$6 z|E4eQKS35d2zkljA=ezdGStc6?N|8CA+@SrAy=Ij$Q8<(w}LmTrGJQkH$d8YfT*|L z+Z-wsWR}gDnZ54;3m5GL{d(_>-n+!*>Ghs2OPIN6Veapgapj{3OWhzej?7>e8rL^HuX@^Y)C(;{?=ECYIzw9i&}2SF53nx zP@e0J$3TTWEnuXu{eM;3hNf7Lg;Di>Qo(B~Z!e=eU=Os1z54d?5_Sc35N^T0$m=HA zamZ3?CrqWu9hpkgbVv3}GxXj*S&Cy7i*L0juy)0__CI1jADPC^Cc}V6#QxIk#gVvt<1n&hyH8r7T)9xtb7sC=G7e=g<`~`w%P+nd z%gZcVSy^MqM=RDWI;3CC=@qd^e6LuE-C15zV=~@ZrtnwPgW<-3 m+r)F5_->QHpUEIUJ2KpJ#zDLOMG!ywqU#uq-z5MdY5xNkp5!9{ delta 3405 zcmZuzZ)jWB6~9-1o}MI2vSmm9BU_g3)XsC<#Eo5N%R-tgiSy4%oupYi8TD21lO3&= ztlan9)uL2c$zYUiS#}xyFxa<2p^z~|*(emsJ`K7rBXpQ&O3lVL@@ZP)G6);&ob#S6 zIf;ya_r7!QJ?EZ#&i$SH!&mQIi+&!7gc$tZ`Acu%AANVDJ^T-M#}=x^NG8IW!3Xxt9xN~KjRXBAdU9`jNy$@}?81cn4c7yO%kfZJ@tr;2z({@|$m zGS$ofBrQ)i8e~Q!$Qpn0zGqx*eANEu`I@IYVVSM!dZARXbiERr&5KgrI?xdG*W&&d zS9@TV<`aEVQ(oYmazPp82jzRpULKb>)9W%F*gH9lihM@S%9-e2IxR?bAYWP(>t(AF zbv3)+Q_>1(u>4m6Gt!INy+VUVjLVdoR8X0ik}s))!>C0}0#p*aHRw4@w+hAljJ%~j z&*Qaw>ZXTJ$@jzi(>|DPx9N*F@{4ck*VnDQDFP_+&tEus^{@!aFTw}IDk>gA2+3Gm z>Uij!C{O)A1=s_iz1)S}`uTdK9K; zTpW}C?9?t%(2^h#{RjgHba4i;hv#aCC<>GukbC48IwH`hi8q(bp=4gZ-Zk1@MENfP z;LKFk-dFp1*Dv@JNh8kT{8Iq7;&>+Tf|6-4(oCO=Al+>wBX1@K_It)L+ zTOpPJv<^~W$MlOQUeiy`y?pY5e)YoXS49SAP#OoZcLKplXza}b*g-eqtAe&APU8s0 z7cYc3j__>&TU{$r4hyYK9B*!vLU0XdHG@uRe*tB0;>z~&O0H0{@^4#^(|8NSik$Bo zBxa%9sdP0iKx-1eU%S(n)9pRShC z=5+wb5{eb}MN_J@Na=#o1!|6~&m1Rrp3+1Kv5NZ9@yA`TwJPrIV}cMx7f zSOBowOe|lE?t*!gQ`TO_UIzj)1hJLF3rIV7aZM#BK$eYQ`wj5 z(`=5<^SW2{AKTdTywgsfrFJVAedGsuy-W3<YliNa3eNW z_d>fB9D3-7_K}wT30 z8vM2|<28bY2U?#IGQ80Gjj-W^R)I3y)~LH!k`3jyKNDz5oSqRi0x(-$_iHhEW$?pU zyr@u|m#8M2nui#~4!GZ@2Zr4`3*mt{cU@dtu?mgb=GOGz$m8irD%6z`ylvtjKtq?e zXfE&4GcBV-J^XiaYzV9K<)Itr*KrL7xWQoWpaAdJZU)0Cm1OG<8uiXC)SpQ2@R)+} zUi3)b-Bmj^+{dpI&7midz|ERNMkz^%ww6Uhzu z8-GwTJ{uY2pVqcUj_~igC5Y5hs-pTv(II`rbCBxHY!)5(qQtIrwz}uC+2=U-oc!bH zfc)um_p7ZI=pK*-f6I=^0`U`>!3yE-6z$-e-N)EqP4^hTKzmp~Zn3(;;)xFi?hZU; zzTlo8ov3@fa%=Ql6{1@~HQnw#KWF7d?mEzjlN!h%L$%RK_YL#XjmZLgMTw8f1)L; z^%OhLFA-%VH#+wt7bG_h%~I=9MiMEbW$;C3(rMzABuv@{UP(F(fZDZQJEZGNYxro< zb%75C=c(9_J<8WZ(6bc?!3-1*yN%v&tIHx+zOgPax9sj#(SiKii+L(8COsPLl>B5o z6`;qc2*`KGC!7~6mHLqUcwDREi`5REZme@&INwA22?X5c6CC?kJz88f)>iVz#E)SV zD3+O6A?jYv`PU)FNB+hln=H1;f}1S7$s&JesV~{|SM11FZ0^r&4*J^)=fR(SbDMGb a#{O{MyodMvn<4&Z$#;+^A2I+srvC%bhw^y< diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/__pycache__/utils.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/cryptography/__pycache__/utils.cpython-312.pyc index 643a0e101d0b38aa61fda055eec2f9b0302a81e7..2869efbcda4d1d77e870e5a73419f02f8067ee6d 100644 GIT binary patch delta 2693 zcmZuz-ESMm5x>1VlE>rSkrF>d(vm|vR-Cgc*|HB37*wLjhEvXr(L=2aO-xytskT=ll_YQMo}7<`ATLDNw%|uz>)1C_1xeN{U(n zJGVDGGdmx@nd7Y&?j5tfFil;8-w$g&)%%HcD@)ea5B_|~ksPHKnbnHgY_u39k}RE* z9CbxD zEA|MU1-v*_r%&>Zc+zYK^h{K8G9Qwzo~)AqqXj4Dbig(Hgi0r{T0ecifhJ?R2?TD^J#_uT9V!^R!-}yh>V!A|TF?bijHX0pH8Vh5jI&T+ zLMO3Pr&gVztQ$@TxTRiw?su@eEiDp<%sdaeF^>R4{2Y1X>HZese^fKZB6*Lvc_J-J z(;*E0jkciDgq@={;ZBf{3Bbb%w=+E<*^zOE?lki?TEFI9FO=D}`B_@`3YBvGpjVir zg(Lj$YT8tM{q1sXo{losVEkX|;7|~9weFR?#?z1wf~6r??(0C7rB=jT>$vrsZ>{WR zZs<#EcvBnZCqlz2<`9x>^T9~IUxOEBAQ7oWtITebQ@Dw59oqbpRF1Dlnk35&?LaPz zCj&?h194R#1^6+Gk7>^@jUW$2z>{=-RsDnB>e>qrqt$b0RsBlKiyOynm7$OyZcI+o ziYM&(it8~rh{6HG=3_A=gGhGy+J`(OuflQ>F)Pv&Sqb$;f`Iz?588jageF?^wNlBc zR=iTlR@f14=+A^j$b)=P?-ZTDUeA(R(Z=2eH z$cQboUw}|E;VsNjci?=(nXl1Hum@0xG#rCdKg_5%4|O;SFLrqQKqN_U*_$Y*jyLLo z<~YQNs)ElZP)`>7rr91pR{(nNK%)L1_RgUyHWxdOb&<7%2=pP>|R7 za-ugZ+G>bzB)(e`#SH_v7hFFwD`IkkG6)?3);oRG~JWZbNRcUO|3k@$j`d)|jKrTYyTSW#%9$BdGupL*UniS0ESsLMk1aLLQ$^9f6BK zNwp4QvP5eAun4Q(gcU>E(egny_!EzmWNLFCEXlX@yER)bUc@id} z7lY}7=YTv>5rHdgPnJRg$Xk*Ei0u~e!z1%kQQQ`j$zBKKK- zDw`d78@7H(bfF)H2TVUPF8p|Gd9uQUdI-g1Z@H8`y_iM#Vs;<@Tefq_ zx6W(r)Ls^j01ABA0#?Kj~%0$_s1{I>_)EeFT^j9z&OK zqKGdy!*8G;9euAt=g_y{TZUnd`ug@537Qm}f+0dhop%A?N9|v562kj) zdz62|AB5L(`_HyI4li4eEJ=-gtt1~P$+esRPU><+} z?DuB!Yjf`dbMNxm$6=WaKGsz-{KN{8@RI~z&e?Ldn{VWvjqQ6BwTSgdmttxDO|Dmb Gs{acMTt^K6 delta 2756 zcmZuzTWl0n7@jjTJA0YEwcTyIT%=vBFcub?aw!y%J6>=l7DQWcnC?v5E!*Ao%q-Aa zSR{SW7X^+H9yGz2cu5~@H1S1^@x>R>K!`%dXiW6Mz8JJMCO#Pd|IGGc<22`=)Bkq< z%lDtzcRMd`ihdP|gamlTzf0vmj9rd4leL%EY^#dGLBW(J1XH&BlM*TjLT|td^af#t zV5zXeW`pUQkb5KWR^S~q6K2x%PxyLcW}_JZPMrG*f}fC8H}9vOb5-DmC&ilY2F{BB zFKWrdWG#DxEZ>$43T7fG{NJD1WX9m2Mzh(B!$D2lybjFkEpd1wS}$uJ6}8kf`qzl7 z8pUGCF`Rs8Qe?=cjW+8=lJYLxsi#|E6rixxM4jvWaUoj z{iBX$($%5!z<5j0qvWH z=8KN*lxkt7K}CaQZv}EeU}h%iouWo9HB zG}Kx0j0=-BFXzN@(FuBD_IseYI*ey5c}!_soXcd+a6p8dZ zkVe^|x}zy>I!8y#PHB)D<)P8ckTEu5IGO%@(aaYI?Tk(cFSC=8g=WeLyeqMv(yV#anKo}>p^J)EPFeU z3&Ia__fMhvSJ%C~?oKFuE0n(8c{{Y`!rr@T^fl?yBUcYyK6EG1mb{f{yMAh_^LAqE z?ReKswd`nh#(#^i~x0+b=tR_>`brs0f$~oM|m7qc(z$Q|J4#j3s#Kh8AI*^A1)3woH zLYNgLU%MA?2YWp5PZKvp8FWlH^H4Kgljs(9GPp|R8KJ^h3;QCn%%3mjLA-}e2HT1H z(VZY6kM0C1jUmB<+`t)w7O|DCjJt&_c_QzFW7Luj$DyTkoP(MfyqUwL6q>mu) zQ6%$SaQ&uL;O9IB{6%g*h-@Z@A*_evzXW2J7Pj~8==$n0bdNX31>tTy_0kJ(^juH8yW*`Cw^wFv#WFVo z8QvUCq`N_9Ebfe!Ej#l>$*dHtBd~|g^W?XI)K#eERG`XT@Q_n1jmz{{&sVHs&gui0oq+oNAI=V;hbNIdh2&`mT8{+8(I55yx>B z)HT0152~l57mX2Xp@p;oJ!08h(LBxZj$;LncY%jYt4yt&;aDcsL8}jz-3x>rsp|vK zOw~3HbfUl3K&l%BEpi^KUH*AC;ZYZfMiO=_8@p$Q7g=eX|e*Lsjs8~8Z ziXLl-f-R0Mg~W7yEV92?8OhB3d!9+j?ci}|awJ^_MVOs=uau(y#h%#L$z|k4_G_}e zidklBu;5_Pd`nT_p!sPeORm2W;@j?BJSYda@^*1B;v`f2 zaw8N0p@>WBfr7T+UPICfWFDqZmhl&WQRstj!U+$}=l~kfj%uMAns*mRJ$SFIF^*Kq z1*>mCx~>HsXyJvCsnQd88V`(L4}6C=_59&SU=aI`c{kk&p2xgsJ}w*|FD`^{4H#pw z+R1y3Lc!=SSf0i(YNXtdt`AfkcC@K(4Pw*vfwE=0if6-bEmu8igOPVM^|AMwTE)(- z?31RJD*qY7f0NKOSo4pa8{B_3XYo>bUnYJ@hZe3AZz^#bI0|{|mh|-Rzz%QRcG8QW zhsd+P0dh|wg!~y2$m*X3^?QL$HHX+|&FRJ&MI;?FA(?EMjY>qB3Cm>LY?QU7G%@`E ZJDggruDutGlIXpVpsr%)Q*AN=?q3UrXUPBn diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/exceptions.py b/Backend/venv/lib/python3.12/site-packages/cryptography/exceptions.py index 47fdd18e..fe125ea9 100644 --- a/Backend/venv/lib/python3.12/site-packages/cryptography/exceptions.py +++ b/Backend/venv/lib/python3.12/site-packages/cryptography/exceptions.py @@ -15,9 +15,7 @@ _Reasons = rust_exceptions._Reasons class UnsupportedAlgorithm(Exception): - def __init__( - self, message: str, reason: typing.Optional[_Reasons] = None - ) -> None: + def __init__(self, message: str, reason: _Reasons | None = None) -> None: super().__init__(message) self._reason = reason @@ -44,7 +42,7 @@ class InvalidSignature(Exception): class InternalError(Exception): def __init__( - self, msg: str, err_code: typing.List[rust_openssl.OpenSSLError] + self, msg: str, err_code: list[rust_openssl.OpenSSLError] ) -> None: super().__init__(msg) self.err_code = err_code diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/fernet.py b/Backend/venv/lib/python3.12/site-packages/cryptography/fernet.py index ad8fb40b..c6744ae3 100644 --- a/Backend/venv/lib/python3.12/site-packages/cryptography/fernet.py +++ b/Backend/venv/lib/python3.12/site-packages/cryptography/fernet.py @@ -9,6 +9,7 @@ import binascii import os import time import typing +from collections.abc import Iterable from cryptography import utils from cryptography.exceptions import InvalidSignature @@ -27,7 +28,7 @@ _MAX_CLOCK_SKEW = 60 class Fernet: def __init__( self, - key: typing.Union[bytes, str], + key: bytes | str, backend: typing.Any = None, ) -> None: try: @@ -80,9 +81,7 @@ class Fernet: hmac = h.finalize() return base64.urlsafe_b64encode(basic_parts + hmac) - def decrypt( - self, token: typing.Union[bytes, str], ttl: typing.Optional[int] = None - ) -> bytes: + def decrypt(self, token: bytes | str, ttl: int | None = None) -> bytes: timestamp, data = Fernet._get_unverified_token_data(token) if ttl is None: time_info = None @@ -91,7 +90,7 @@ class Fernet: return self._decrypt_data(data, timestamp, time_info) def decrypt_at_time( - self, token: typing.Union[bytes, str], ttl: int, current_time: int + self, token: bytes | str, ttl: int, current_time: int ) -> bytes: if ttl is None: raise ValueError( @@ -100,16 +99,14 @@ class Fernet: timestamp, data = Fernet._get_unverified_token_data(token) return self._decrypt_data(data, timestamp, (ttl, current_time)) - def extract_timestamp(self, token: typing.Union[bytes, str]) -> int: + def extract_timestamp(self, token: bytes | str) -> int: timestamp, data = Fernet._get_unverified_token_data(token) # Verify the token was not tampered with. self._verify_signature(data) return timestamp @staticmethod - def _get_unverified_token_data( - token: typing.Union[bytes, str] - ) -> typing.Tuple[int, bytes]: + def _get_unverified_token_data(token: bytes | str) -> tuple[int, bytes]: if not isinstance(token, (str, bytes)): raise TypeError("token must be bytes or str") @@ -139,7 +136,7 @@ class Fernet: self, data: bytes, timestamp: int, - time_info: typing.Optional[typing.Tuple[int, int]], + time_info: tuple[int, int] | None, ) -> bytes: if time_info is not None: ttl, current_time = time_info @@ -172,7 +169,7 @@ class Fernet: class MultiFernet: - def __init__(self, fernets: typing.Iterable[Fernet]): + def __init__(self, fernets: Iterable[Fernet]): fernets = list(fernets) if not fernets: raise ValueError( @@ -186,7 +183,7 @@ class MultiFernet: def encrypt_at_time(self, msg: bytes, current_time: int) -> bytes: return self._fernets[0].encrypt_at_time(msg, current_time) - def rotate(self, msg: typing.Union[bytes, str]) -> bytes: + def rotate(self, msg: bytes | str) -> bytes: timestamp, data = Fernet._get_unverified_token_data(msg) for f in self._fernets: try: @@ -200,9 +197,7 @@ class MultiFernet: iv = os.urandom(16) return self._fernets[0]._encrypt_from_parts(p, timestamp, iv) - def decrypt( - self, msg: typing.Union[bytes, str], ttl: typing.Optional[int] = None - ) -> bytes: + def decrypt(self, msg: bytes | str, ttl: int | None = None) -> bytes: for f in self._fernets: try: return f.decrypt(msg, ttl) @@ -211,7 +206,7 @@ class MultiFernet: raise InvalidToken def decrypt_at_time( - self, msg: typing.Union[bytes, str], ttl: int, current_time: int + self, msg: bytes | str, ttl: int, current_time: int ) -> bytes: for f in self._fernets: try: @@ -219,3 +214,11 @@ class MultiFernet: except InvalidToken: pass raise InvalidToken + + def extract_timestamp(self, msg: bytes | str) -> int: + for f in self._fernets: + try: + return f.extract_timestamp(msg) + except InvalidToken: + pass + raise InvalidToken diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/__pycache__/__init__.cpython-312.pyc index 2c4887a184d4632defada83e96b55edddf9ed3d9..46244f4a37d6bb654f325be80fda7421f63ed453 100644 GIT binary patch delta 19 ZcmZo-YGUF(&CAQh00iGB$WG+`4gf3P1v&r# delta 19 ZcmZo-YGUF(&CAQh00cGHBqwrz2LLKd1pxp6 diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/__pycache__/_oid.cpython-312.pyc index 23e9f2d9451cfb2493a6d2b9669ce65d3f72d555..1e8ce9cc87d4f942bda085acb630943b22b606d5 100644 GIT binary patch literal 21048 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 I86AxLFQVFHfB*mh delta 6204 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 QwRFct?Z;teO!!^-|5$5N{{R30 diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/_oid.py b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/_oid.py index 01d4b340..4bf138d4 100644 --- a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/_oid.py +++ b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/_oid.py @@ -4,8 +4,6 @@ from __future__ import annotations -import typing - from cryptography.hazmat.bindings._rust import ( ObjectIdentifier as ObjectIdentifier, ) @@ -16,6 +14,7 @@ class ExtensionOID: SUBJECT_DIRECTORY_ATTRIBUTES = ObjectIdentifier("2.5.29.9") SUBJECT_KEY_IDENTIFIER = ObjectIdentifier("2.5.29.14") KEY_USAGE = ObjectIdentifier("2.5.29.15") + PRIVATE_KEY_USAGE_PERIOD = ObjectIdentifier("2.5.29.16") SUBJECT_ALTERNATIVE_NAME = ObjectIdentifier("2.5.29.17") ISSUER_ALTERNATIVE_NAME = ObjectIdentifier("2.5.29.18") BASIC_CONSTRAINTS = ObjectIdentifier("2.5.29.19") @@ -41,6 +40,7 @@ class ExtensionOID: PRECERT_POISON = ObjectIdentifier("1.3.6.1.4.1.11129.2.4.3") SIGNED_CERTIFICATE_TIMESTAMPS = ObjectIdentifier("1.3.6.1.4.1.11129.2.4.5") MS_CERTIFICATE_TEMPLATE = ObjectIdentifier("1.3.6.1.4.1.311.21.7") + ADMISSIONS = ObjectIdentifier("1.3.36.8.3.3") class OCSPExtensionOID: @@ -60,6 +60,7 @@ class NameOID: LOCALITY_NAME = ObjectIdentifier("2.5.4.7") STATE_OR_PROVINCE_NAME = ObjectIdentifier("2.5.4.8") STREET_ADDRESS = ObjectIdentifier("2.5.4.9") + ORGANIZATION_IDENTIFIER = ObjectIdentifier("2.5.4.97") ORGANIZATION_NAME = ObjectIdentifier("2.5.4.10") ORGANIZATIONAL_UNIT_NAME = ObjectIdentifier("2.5.4.11") SERIAL_NUMBER = ObjectIdentifier("2.5.4.5") @@ -123,9 +124,7 @@ class SignatureAlgorithmOID: GOSTR3410_2012_WITH_3411_2012_512 = ObjectIdentifier("1.2.643.7.1.1.3.3") -_SIG_OIDS_TO_HASH: typing.Dict[ - ObjectIdentifier, typing.Optional[hashes.HashAlgorithm] -] = { +_SIG_OIDS_TO_HASH: dict[ObjectIdentifier, hashes.HashAlgorithm | None] = { SignatureAlgorithmOID.RSA_WITH_MD5: hashes.MD5(), SignatureAlgorithmOID.RSA_WITH_SHA1: hashes.SHA1(), SignatureAlgorithmOID._RSA_WITH_SHA1: hashes.SHA1(), @@ -157,6 +156,33 @@ _SIG_OIDS_TO_HASH: typing.Dict[ } +class HashAlgorithmOID: + SHA1 = ObjectIdentifier("1.3.14.3.2.26") + SHA224 = ObjectIdentifier("2.16.840.1.101.3.4.2.4") + SHA256 = ObjectIdentifier("2.16.840.1.101.3.4.2.1") + SHA384 = ObjectIdentifier("2.16.840.1.101.3.4.2.2") + SHA512 = ObjectIdentifier("2.16.840.1.101.3.4.2.3") + SHA3_224 = ObjectIdentifier("1.3.6.1.4.1.37476.3.2.1.99.7.224") + SHA3_256 = ObjectIdentifier("1.3.6.1.4.1.37476.3.2.1.99.7.256") + SHA3_384 = ObjectIdentifier("1.3.6.1.4.1.37476.3.2.1.99.7.384") + SHA3_512 = ObjectIdentifier("1.3.6.1.4.1.37476.3.2.1.99.7.512") + SHA3_224_NIST = ObjectIdentifier("2.16.840.1.101.3.4.2.7") + SHA3_256_NIST = ObjectIdentifier("2.16.840.1.101.3.4.2.8") + SHA3_384_NIST = ObjectIdentifier("2.16.840.1.101.3.4.2.9") + SHA3_512_NIST = ObjectIdentifier("2.16.840.1.101.3.4.2.10") + + +class PublicKeyAlgorithmOID: + DSA = ObjectIdentifier("1.2.840.10040.4.1") + EC_PUBLIC_KEY = ObjectIdentifier("1.2.840.10045.2.1") + RSAES_PKCS1_v1_5 = ObjectIdentifier("1.2.840.113549.1.1.1") + RSASSA_PSS = ObjectIdentifier("1.2.840.113549.1.1.10") + X25519 = ObjectIdentifier("1.3.101.110") + X448 = ObjectIdentifier("1.3.101.111") + ED25519 = ObjectIdentifier("1.3.101.112") + ED448 = ObjectIdentifier("1.3.101.113") + + class ExtendedKeyUsageOID: SERVER_AUTH = ObjectIdentifier("1.3.6.1.5.5.7.3.1") CLIENT_AUTH = ObjectIdentifier("1.3.6.1.5.5.7.3.2") @@ -168,9 +194,20 @@ class ExtendedKeyUsageOID: SMARTCARD_LOGON = ObjectIdentifier("1.3.6.1.4.1.311.20.2.2") KERBEROS_PKINIT_KDC = ObjectIdentifier("1.3.6.1.5.2.3.5") IPSEC_IKE = ObjectIdentifier("1.3.6.1.5.5.7.3.17") + BUNDLE_SECURITY = ObjectIdentifier("1.3.6.1.5.5.7.3.35") CERTIFICATE_TRANSPARENCY = ObjectIdentifier("1.3.6.1.4.1.11129.2.4.4") +class OtherNameFormOID: + PERMANENT_IDENTIFIER = ObjectIdentifier("1.3.6.1.5.5.7.8.3") + HW_MODULE_NAME = ObjectIdentifier("1.3.6.1.5.5.7.8.4") + DNS_SRV = ObjectIdentifier("1.3.6.1.5.5.7.8.7") + NAI_REALM = ObjectIdentifier("1.3.6.1.5.5.7.8.8") + SMTP_UTF8_MAILBOX = ObjectIdentifier("1.3.6.1.5.5.7.8.9") + ACP_NODE_NAME = ObjectIdentifier("1.3.6.1.5.5.7.8.10") + BUNDLE_EID = ObjectIdentifier("1.3.6.1.5.5.7.8.11") + + class AuthorityInformationAccessOID: CA_ISSUERS = ObjectIdentifier("1.3.6.1.5.5.7.48.2") OCSP = ObjectIdentifier("1.3.6.1.5.5.7.48.1") @@ -228,7 +265,7 @@ _OID_NAMES = { SignatureAlgorithmOID.RSA_WITH_SHA256: "sha256WithRSAEncryption", SignatureAlgorithmOID.RSA_WITH_SHA384: "sha384WithRSAEncryption", SignatureAlgorithmOID.RSA_WITH_SHA512: "sha512WithRSAEncryption", - SignatureAlgorithmOID.RSASSA_PSS: "RSASSA-PSS", + SignatureAlgorithmOID.RSASSA_PSS: "rsassaPss", SignatureAlgorithmOID.ECDSA_WITH_SHA1: "ecdsa-with-SHA1", SignatureAlgorithmOID.ECDSA_WITH_SHA224: "ecdsa-with-SHA224", SignatureAlgorithmOID.ECDSA_WITH_SHA256: "ecdsa-with-SHA256", @@ -248,6 +285,24 @@ _OID_NAMES = { SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_512: ( "GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)" ), + HashAlgorithmOID.SHA1: "sha1", + HashAlgorithmOID.SHA224: "sha224", + HashAlgorithmOID.SHA256: "sha256", + HashAlgorithmOID.SHA384: "sha384", + HashAlgorithmOID.SHA512: "sha512", + HashAlgorithmOID.SHA3_224: "sha3_224", + HashAlgorithmOID.SHA3_256: "sha3_256", + HashAlgorithmOID.SHA3_384: "sha3_384", + HashAlgorithmOID.SHA3_512: "sha3_512", + HashAlgorithmOID.SHA3_224_NIST: "sha3_224", + HashAlgorithmOID.SHA3_256_NIST: "sha3_256", + HashAlgorithmOID.SHA3_384_NIST: "sha3_384", + HashAlgorithmOID.SHA3_512_NIST: "sha3_512", + PublicKeyAlgorithmOID.DSA: "dsaEncryption", + PublicKeyAlgorithmOID.EC_PUBLIC_KEY: "id-ecPublicKey", + PublicKeyAlgorithmOID.RSAES_PKCS1_v1_5: "rsaEncryption", + PublicKeyAlgorithmOID.X25519: "X25519", + PublicKeyAlgorithmOID.X448: "X448", ExtendedKeyUsageOID.SERVER_AUTH: "serverAuth", ExtendedKeyUsageOID.CLIENT_AUTH: "clientAuth", ExtendedKeyUsageOID.CODE_SIGNING: "codeSigning", @@ -259,6 +314,7 @@ _OID_NAMES = { ExtensionOID.SUBJECT_DIRECTORY_ATTRIBUTES: "subjectDirectoryAttributes", ExtensionOID.SUBJECT_KEY_IDENTIFIER: "subjectKeyIdentifier", ExtensionOID.KEY_USAGE: "keyUsage", + ExtensionOID.PRIVATE_KEY_USAGE_PERIOD: "privateKeyUsagePeriod", ExtensionOID.SUBJECT_ALTERNATIVE_NAME: "subjectAltName", ExtensionOID.ISSUER_ALTERNATIVE_NAME: "issuerAltName", ExtensionOID.BASIC_CONSTRAINTS: "basicConstraints", @@ -270,6 +326,7 @@ _OID_NAMES = { ), ExtensionOID.PRECERT_POISON: "ctPoison", ExtensionOID.MS_CERTIFICATE_TEMPLATE: "msCertificateTemplate", + ExtensionOID.ADMISSIONS: "Admissions", CRLEntryExtensionOID.CRL_REASON: "cRLReason", CRLEntryExtensionOID.INVALIDITY_DATE: "invalidityDate", CRLEntryExtensionOID.CERTIFICATE_ISSUER: "certificateIssuer", @@ -282,7 +339,7 @@ _OID_NAMES = { ExtensionOID.EXTENDED_KEY_USAGE: "extendedKeyUsage", ExtensionOID.FRESHEST_CRL: "freshestCRL", ExtensionOID.INHIBIT_ANY_POLICY: "inhibitAnyPolicy", - ExtensionOID.ISSUING_DISTRIBUTION_POINT: ("issuingDistributionPoint"), + ExtensionOID.ISSUING_DISTRIBUTION_POINT: "issuingDistributionPoint", ExtensionOID.AUTHORITY_INFORMATION_ACCESS: "authorityInfoAccess", ExtensionOID.SUBJECT_INFORMATION_ACCESS: "subjectInfoAccess", ExtensionOID.OCSP_NO_CHECK: "OCSPNoCheck", diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__init__.py b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__init__.py new file mode 100644 index 00000000..be683736 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__init__.py @@ -0,0 +1,10 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from cryptography.hazmat.asn1.asn1 import encode_der, sequence + +__all__ = [ + "encode_der", + "sequence", +] diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/asn1/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..641ae7c223eb2044c82c439a61a26a641f278fdd GIT binary patch literal 337 zcmYjNy-ve07_^;~MnOelM4}@@hUQaYMIcoSOgumr%fz3OsEHkHw<2u30UOW2v+x2a zD-&C#4wX9L@FTe4bf-IgI(@IBQA|9xPvi2067t@gU$7ssIrie2NFr%PYC5Min=?uz zlR?hrK^rE6kG`6)E=HAUiCm)TB8zuR@6iN4G@+-PB<#kSX&a|=BbuU33-M43mkO(< zU-Z}QhMbG4;{1hd`s+Idg{~2Dbq`l)7fv^DtsPdAnbwO^7&-6`uVgm;VweS)wFbjFj3YBaxMC8MSL9wd=@^TMGrO=_oB6wkXY*=Anw68##B+jr@ooxlC&eWoyE?) zoq6--?fd!O{38_dBWVA=pD6T25c-jPxQ%xRrg^|1^Z+SHVTx##$uSI}*&>@`>B!|c zI`TPQ<(8>DSA;Vv+zN{jo}^r!oaY2Co^pj$&vN+9{p2g>)#56D!bM#M|=z#l9mgc$me?ucAz{#)wew4(A|A5L%1B?x2B3081yH4IvKmdCoKJ2dDTa`jMRO86`Oaf>MzEwfbj|Gg{n=B`xVOClr1 z*a2D7bW=79x@OF!*q0nkzYLHy7L#yz>2vsc6g6LzF)*&Hl5A*GHZwmD`+a$RUB(4j zGi~PMe9NS;1tGE3o6?Ft8MSt-X+8uUJ)r5DbJkkfTmstEC0sJhlwkW83Tjc2$ayZU z$*Vwj0>TcrXjP#?>%ohYh}A%(saBk7YiF|mohjG%De-wQG%|DjyxzjR_mRxdMEaJGu2x!yy2~lhac>F z->b*RYw;;7KD8A-h{PXe_S2VZ>6=#i=6>X(gXr+?>6s_m?#zd~BeQ$a8@s_9^+;k@ zOuQIM*M_cHL)X5$yf-wr6?qXDt_4z7AoaKG)608-*FjpXFxna z1+>XPAa`@XJZWwMTt|0LA@muf$R-QHP12FJ3fBpxO&$V^sjydIl(JWeuLP6m}xik~C+87^q~Vo6aY^-B}W22Jji zXonY7ljf$hRM1R=q5B!1G zN!N;HNl_Q%Qqg?F_XPN;@Ba=2_#S$v9alFLW(6_}Ct1{~8^`%tVd=x|@Q+(@(uLxT zmiT}6?+C7EyZ3h0pLV=3PD*+pC7mKlYQyaOBi`n*x`u65{lfMGtmT&^87~^Pw`C7t z&j2URLI?TF8D+x`uB+I9>MRws1>FuPvMEC$HVoCUeeDlST=$5@XJN2I?P&?Zz#uu` zx?XJi`d2Xf2Y3x)UjR!H1tYbajt{^pSU< zizkkHVX+ZKk!UmKOT@mu-8jX)&3z=m6mSENmrKO9Zo>(_%7Wb|S-4t0@e9*d6XTmv+LTlg2H#@N={CcoL+fID7#HJVQESL3|OqZi8WB zCfXIq3ISYzJW+`IzX{X^C#}KBdhe-vq^~|OQtul)^1(vGj{@OlK!``SLPx=4{yF8L z_`BhU(hG$#b5$!-R0emO*!E!6EMaZq^xO9>;G-8cr^u&xn%)}`rI0s2g^d&R=5QDP z8dTg!b!Pv&n7bf{#LR0ixd(juv9sUi=X6bNEn)K0R4k=ZG21Um3nfrel_X4n#WCVE zP`1bUCw!iK^g15|*;I{$uz|^Las2z#2w|-cOv{k9QuF`b5T427sifNT|;E(vuj&;HwkW@1k;Eq6D_XyEgqu}>iyt1k*rK0*iCiROHVxtfG z2FEbWzx;?9{}Dx>BmZ+0I^;YxE@pAD`-{)G#B+WGJSzrj-T})y@bJttZ?Yaw*W#C~ z_@%GIhw;%`JY&T(K=u#U`qNf_x;pny^uZw?ttN~T-D$3gqRyly=SPwQR3Wt4sj@qHw7}&Ncx#*y=Sz+!FVWSngWc?Aun^T zkwm<=OW{Kyy(^rm32946KfSOo{N@$gCnTC2@?2$pB4p#2$djyoQWHikVe|>VFU-7R N{SL>)p9n>*_8;Ow8q@#) literal 0 HcmV?d00001 diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/asn1/asn1.py b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/asn1/asn1.py new file mode 100644 index 00000000..dedad6f2 --- /dev/null +++ b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/asn1/asn1.py @@ -0,0 +1,116 @@ +# This file is dual licensed under the terms of the Apache License, Version +# 2.0, and the BSD License. See the LICENSE file in the root of this repository +# for complete details. + +from __future__ import annotations + +import dataclasses +import sys +import typing + +if sys.version_info < (3, 11): + import typing_extensions + + # We use the `include_extras` parameter of `get_type_hints`, which was + # added in Python 3.9. This can be replaced by the `typing` version + # once the min version is >= 3.9 + if sys.version_info < (3, 9): + get_type_hints = typing_extensions.get_type_hints + else: + get_type_hints = typing.get_type_hints +else: + get_type_hints = typing.get_type_hints + +from cryptography.hazmat.bindings._rust import declarative_asn1 + +T = typing.TypeVar("T", covariant=True) +U = typing.TypeVar("U") + + +encode_der = declarative_asn1.encode_der + + +def _normalize_field_type( + field_type: typing.Any, field_name: str +) -> declarative_asn1.AnnotatedType: + annotation = declarative_asn1.Annotation() + + if hasattr(field_type, "__asn1_root__"): + annotated_root = field_type.__asn1_root__ + if not isinstance(annotated_root, declarative_asn1.AnnotatedType): + raise TypeError(f"unsupported root type: {annotated_root}") + return annotated_root + else: + rust_field_type = declarative_asn1.non_root_python_to_rust(field_type) + + return declarative_asn1.AnnotatedType(rust_field_type, annotation) + + +def _annotate_fields( + raw_fields: dict[str, type], +) -> dict[str, declarative_asn1.AnnotatedType]: + fields = {} + for field_name, field_type in raw_fields.items(): + # Recursively normalize the field type into something that the + # Rust code can understand. + annotated_field_type = _normalize_field_type(field_type, field_name) + fields[field_name] = annotated_field_type + + return fields + + +def _register_asn1_sequence(cls: type[U]) -> None: + raw_fields = get_type_hints(cls, include_extras=True) + root = declarative_asn1.AnnotatedType( + declarative_asn1.Type.Sequence(cls, _annotate_fields(raw_fields)), + declarative_asn1.Annotation(), + ) + + setattr(cls, "__asn1_root__", root) + + +# Due to https://github.com/python/mypy/issues/19731, we can't define an alias +# for `dataclass_transform` that conditionally points to `typing` or +# `typing_extensions` depending on the Python version (like we do for +# `get_type_hints`). +# We work around it by making the whole decorated class conditional on the +# Python version. +if sys.version_info < (3, 11): + + @typing_extensions.dataclass_transform(kw_only_default=True) + def sequence(cls: type[U]) -> type[U]: + # We use `dataclasses.dataclass` to add an __init__ method + # to the class with keyword-only parameters. + if sys.version_info >= (3, 10): + dataclass_cls = dataclasses.dataclass( + repr=False, + eq=False, + # `match_args` was added in Python 3.10 and defaults + # to True + match_args=False, + # `kw_only` was added in Python 3.10 and defaults to + # False + kw_only=True, + )(cls) + else: + dataclass_cls = dataclasses.dataclass( + repr=False, + eq=False, + )(cls) + _register_asn1_sequence(dataclass_cls) + return dataclass_cls + +else: + + @typing.dataclass_transform(kw_only_default=True) + def sequence(cls: type[U]) -> type[U]: + # Only add an __init__ method, with keyword-only + # parameters. + dataclass_cls = dataclasses.dataclass( + repr=False, + eq=False, + match_args=False, + kw_only=True, + )(cls) + _register_asn1_sequence(dataclass_cls) + return dataclass_cls diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/__pycache__/__init__.cpython-312.pyc index 3d6578df8a9cac4999e4784beb6e8666757bba5a..0b77f63ad7d47b3fb35bda99b8753cc5a4b4d836 100644 GIT binary patch delta 20 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

;mod#L5rhm=c~fF`JcsCH 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 diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/ciphers.cpython-312.pyc deleted file mode 100644 index 1be2e05baf0114f73131c0f645a7caa0d09560d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14751 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 a(jt()hotY+! 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 diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/ec.cpython-312.pyc deleted file mode 100644 index ce01d9ca0c221f5d702c070db095a70a6f090280..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17724 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 Ke*%wW>--M`Y?Uhj diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/rsa.cpython-312.pyc deleted file mode 100644 index f341cff77ef6033b54a1ad418a0c1795ae632776..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28875 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 diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/__pycache__/utils.cpython-312.pyc deleted file mode 100644 index 947ff333219ec2680adfda7f4c3da44cc73c747d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3438 zcmb7G-%lGy9^dt@*Y+CQal<76LU58c;KZ>DRB3aCR;lAOQ4yjIty@K=J`CSnFsJvYSZfPa zs&HVjH7p#IaEMhJctPf9D{x0C6!pvr)CvPKfzI`+MgNt$7T*MYbW;ay`P)q{c#Mrs zGF9m5Bp&j&bD1hcI*C=L<<$y%%r04pUK}~%eWxO-aH5llM?hyMnJS#@BtkSjh2BoO zuhXW~j;8k*PX{`sUgjKCz3phcM83M6Ua#b_ zwjg;HZyw3+uiY(Mb#%BfA+7j~q1LM8t@>KFzdG(_ zpKo!u`zly&?!F}r07mswcd0lx{gZV~v32*C{kpu21S58NIZ{@2c|k=|ESnecy)Tvr zG8mU|EL$pSWkXgMVmi=ac@b5T@hD*hMV==oGM~%{GaqC=6VkJv3M#q}^juCR?DWS| zQzTr{kgDs7AnH282JtLpN%W9J4kJW*U6O>byo3Zsnn!BjyiVL+a6 zO~pFAUR2C!zuZsdOGT7gP#>gjB7M;)X{p;K11VSEE0q=@3n}NZNG&0CDFrD=X%!=1 zQpb~{V<}xW&{Yi_5*Lu3${vVcDlaYin?D4{!OO5C1*!ZK6JwHpkL6{^rBqC>~&}5B&2Si({ubBLmEl~IRVRh%9ytTu= zy5|f3vHH7e-FN+k@A_`|H|xrpQV(ATEH=X`)8Hs?kL$5xBGkM7`P%38(4ZL_+$hvS@rSou=PsH2rA>Y7{con8PSq2W zW@7TYr5b;$o2%_uT-!YVoB z_*L<%2fNWT_2`Hh9jQexuX5jq&usTy`;M!H-`)1VyBBthELI zrQP?{1Mgcm96neVcnV!=02lcvwWmsVd-+#r!+qPUu0G)H@+R9D8#LS(SaLnI5VT6? zJb;3p>E-F!Jc?( zi(FV^_j(8Gy(4Dt$ZFuRdLWR$T=yz>ibZ5#Ih(XG);C_T8#M;Z+Ddy$ET7kU6kF7>kyMz)dv17{5YU;qFB diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/aead.py b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/aead.py deleted file mode 100644 index b36f535f..00000000 --- a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/aead.py +++ /dev/null @@ -1,527 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import typing - -from cryptography.exceptions import InvalidTag - -if typing.TYPE_CHECKING: - from cryptography.hazmat.backends.openssl.backend import Backend - from cryptography.hazmat.primitives.ciphers.aead import ( - AESCCM, - AESGCM, - AESOCB3, - AESSIV, - ChaCha20Poly1305, - ) - - _AEADTypes = typing.Union[ - AESCCM, AESGCM, AESOCB3, AESSIV, ChaCha20Poly1305 - ] - - -def _is_evp_aead_supported_cipher( - backend: Backend, cipher: _AEADTypes -) -> bool: - """ - Checks whether the given cipher is supported through - EVP_AEAD rather than the normal OpenSSL EVP_CIPHER API. - """ - from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305 - - return backend._lib.Cryptography_HAS_EVP_AEAD and isinstance( - cipher, ChaCha20Poly1305 - ) - - -def _aead_cipher_supported(backend: Backend, cipher: _AEADTypes) -> bool: - if _is_evp_aead_supported_cipher(backend, cipher): - return True - else: - cipher_name = _evp_cipher_cipher_name(cipher) - if backend._fips_enabled and cipher_name not in backend._fips_aead: - return False - # SIV isn't loaded through get_cipherbyname but instead a new fetch API - # only available in 3.0+. But if we know we're on 3.0+ then we know - # it's supported. - if cipher_name.endswith(b"-siv"): - return backend._lib.CRYPTOGRAPHY_OPENSSL_300_OR_GREATER == 1 - else: - return ( - backend._lib.EVP_get_cipherbyname(cipher_name) - != backend._ffi.NULL - ) - - -def _aead_create_ctx( - backend: Backend, - cipher: _AEADTypes, - key: bytes, -): - if _is_evp_aead_supported_cipher(backend, cipher): - return _evp_aead_create_ctx(backend, cipher, key) - else: - return _evp_cipher_create_ctx(backend, cipher, key) - - -def _encrypt( - backend: Backend, - cipher: _AEADTypes, - nonce: bytes, - data: bytes, - associated_data: typing.List[bytes], - tag_length: int, - ctx: typing.Any = None, -) -> bytes: - if _is_evp_aead_supported_cipher(backend, cipher): - return _evp_aead_encrypt( - backend, cipher, nonce, data, associated_data, tag_length, ctx - ) - else: - return _evp_cipher_encrypt( - backend, cipher, nonce, data, associated_data, tag_length, ctx - ) - - -def _decrypt( - backend: Backend, - cipher: _AEADTypes, - nonce: bytes, - data: bytes, - associated_data: typing.List[bytes], - tag_length: int, - ctx: typing.Any = None, -) -> bytes: - if _is_evp_aead_supported_cipher(backend, cipher): - return _evp_aead_decrypt( - backend, cipher, nonce, data, associated_data, tag_length, ctx - ) - else: - return _evp_cipher_decrypt( - backend, cipher, nonce, data, associated_data, tag_length, ctx - ) - - -def _evp_aead_create_ctx( - backend: Backend, - cipher: _AEADTypes, - key: bytes, - tag_len: typing.Optional[int] = None, -): - aead_cipher = _evp_aead_get_cipher(backend, cipher) - assert aead_cipher is not None - key_ptr = backend._ffi.from_buffer(key) - tag_len = ( - backend._lib.EVP_AEAD_DEFAULT_TAG_LENGTH - if tag_len is None - else tag_len - ) - ctx = backend._lib.Cryptography_EVP_AEAD_CTX_new( - aead_cipher, key_ptr, len(key), tag_len - ) - backend.openssl_assert(ctx != backend._ffi.NULL) - ctx = backend._ffi.gc(ctx, backend._lib.EVP_AEAD_CTX_free) - return ctx - - -def _evp_aead_get_cipher(backend: Backend, cipher: _AEADTypes): - from cryptography.hazmat.primitives.ciphers.aead import ( - ChaCha20Poly1305, - ) - - # Currently only ChaCha20-Poly1305 is supported using this API - assert isinstance(cipher, ChaCha20Poly1305) - return backend._lib.EVP_aead_chacha20_poly1305() - - -def _evp_aead_encrypt( - backend: Backend, - cipher: _AEADTypes, - nonce: bytes, - data: bytes, - associated_data: typing.List[bytes], - tag_length: int, - ctx: typing.Any, -) -> bytes: - assert ctx is not None - - aead_cipher = _evp_aead_get_cipher(backend, cipher) - assert aead_cipher is not None - - out_len = backend._ffi.new("size_t *") - # max_out_len should be in_len plus the result of - # EVP_AEAD_max_overhead. - max_out_len = len(data) + backend._lib.EVP_AEAD_max_overhead(aead_cipher) - out_buf = backend._ffi.new("uint8_t[]", max_out_len) - data_ptr = backend._ffi.from_buffer(data) - nonce_ptr = backend._ffi.from_buffer(nonce) - aad = b"".join(associated_data) - aad_ptr = backend._ffi.from_buffer(aad) - - res = backend._lib.EVP_AEAD_CTX_seal( - ctx, - out_buf, - out_len, - max_out_len, - nonce_ptr, - len(nonce), - data_ptr, - len(data), - aad_ptr, - len(aad), - ) - backend.openssl_assert(res == 1) - encrypted_data = backend._ffi.buffer(out_buf, out_len[0])[:] - return encrypted_data - - -def _evp_aead_decrypt( - backend: Backend, - cipher: _AEADTypes, - nonce: bytes, - data: bytes, - associated_data: typing.List[bytes], - tag_length: int, - ctx: typing.Any, -) -> bytes: - if len(data) < tag_length: - raise InvalidTag - - assert ctx is not None - - out_len = backend._ffi.new("size_t *") - # max_out_len should at least in_len - max_out_len = len(data) - out_buf = backend._ffi.new("uint8_t[]", max_out_len) - data_ptr = backend._ffi.from_buffer(data) - nonce_ptr = backend._ffi.from_buffer(nonce) - aad = b"".join(associated_data) - aad_ptr = backend._ffi.from_buffer(aad) - - res = backend._lib.EVP_AEAD_CTX_open( - ctx, - out_buf, - out_len, - max_out_len, - nonce_ptr, - len(nonce), - data_ptr, - len(data), - aad_ptr, - len(aad), - ) - - if res == 0: - backend._consume_errors() - raise InvalidTag - - decrypted_data = backend._ffi.buffer(out_buf, out_len[0])[:] - return decrypted_data - - -_ENCRYPT = 1 -_DECRYPT = 0 - - -def _evp_cipher_cipher_name(cipher: _AEADTypes) -> bytes: - from cryptography.hazmat.primitives.ciphers.aead import ( - AESCCM, - AESGCM, - AESOCB3, - AESSIV, - ChaCha20Poly1305, - ) - - if isinstance(cipher, ChaCha20Poly1305): - return b"chacha20-poly1305" - elif isinstance(cipher, AESCCM): - return f"aes-{len(cipher._key) * 8}-ccm".encode("ascii") - elif isinstance(cipher, AESOCB3): - return f"aes-{len(cipher._key) * 8}-ocb".encode("ascii") - elif isinstance(cipher, AESSIV): - return f"aes-{len(cipher._key) * 8 // 2}-siv".encode("ascii") - else: - assert isinstance(cipher, AESGCM) - return f"aes-{len(cipher._key) * 8}-gcm".encode("ascii") - - -def _evp_cipher(cipher_name: bytes, backend: Backend): - if cipher_name.endswith(b"-siv"): - evp_cipher = backend._lib.EVP_CIPHER_fetch( - backend._ffi.NULL, - cipher_name, - backend._ffi.NULL, - ) - backend.openssl_assert(evp_cipher != backend._ffi.NULL) - evp_cipher = backend._ffi.gc(evp_cipher, backend._lib.EVP_CIPHER_free) - else: - evp_cipher = backend._lib.EVP_get_cipherbyname(cipher_name) - backend.openssl_assert(evp_cipher != backend._ffi.NULL) - - return evp_cipher - - -def _evp_cipher_create_ctx( - backend: Backend, - cipher: _AEADTypes, - key: bytes, -): - ctx = backend._lib.EVP_CIPHER_CTX_new() - backend.openssl_assert(ctx != backend._ffi.NULL) - ctx = backend._ffi.gc(ctx, backend._lib.EVP_CIPHER_CTX_free) - cipher_name = _evp_cipher_cipher_name(cipher) - evp_cipher = _evp_cipher(cipher_name, backend) - key_ptr = backend._ffi.from_buffer(key) - res = backend._lib.EVP_CipherInit_ex( - ctx, - evp_cipher, - backend._ffi.NULL, - key_ptr, - backend._ffi.NULL, - 0, - ) - backend.openssl_assert(res != 0) - return ctx - - -def _evp_cipher_aead_setup( - backend: Backend, - cipher_name: bytes, - key: bytes, - nonce: bytes, - tag: typing.Optional[bytes], - tag_len: int, - operation: int, -): - evp_cipher = _evp_cipher(cipher_name, backend) - ctx = backend._lib.EVP_CIPHER_CTX_new() - ctx = backend._ffi.gc(ctx, backend._lib.EVP_CIPHER_CTX_free) - res = backend._lib.EVP_CipherInit_ex( - ctx, - evp_cipher, - backend._ffi.NULL, - backend._ffi.NULL, - backend._ffi.NULL, - int(operation == _ENCRYPT), - ) - backend.openssl_assert(res != 0) - # CCM requires the IVLEN to be set before calling SET_TAG on decrypt - res = backend._lib.EVP_CIPHER_CTX_ctrl( - ctx, - backend._lib.EVP_CTRL_AEAD_SET_IVLEN, - len(nonce), - backend._ffi.NULL, - ) - backend.openssl_assert(res != 0) - if operation == _DECRYPT: - assert tag is not None - _evp_cipher_set_tag(backend, ctx, tag) - elif cipher_name.endswith(b"-ccm"): - res = backend._lib.EVP_CIPHER_CTX_ctrl( - ctx, - backend._lib.EVP_CTRL_AEAD_SET_TAG, - tag_len, - backend._ffi.NULL, - ) - backend.openssl_assert(res != 0) - - nonce_ptr = backend._ffi.from_buffer(nonce) - key_ptr = backend._ffi.from_buffer(key) - res = backend._lib.EVP_CipherInit_ex( - ctx, - backend._ffi.NULL, - backend._ffi.NULL, - key_ptr, - nonce_ptr, - int(operation == _ENCRYPT), - ) - backend.openssl_assert(res != 0) - return ctx - - -def _evp_cipher_set_tag(backend, ctx, tag: bytes) -> None: - tag_ptr = backend._ffi.from_buffer(tag) - res = backend._lib.EVP_CIPHER_CTX_ctrl( - ctx, backend._lib.EVP_CTRL_AEAD_SET_TAG, len(tag), tag_ptr - ) - backend.openssl_assert(res != 0) - - -def _evp_cipher_set_nonce_operation( - backend, ctx, nonce: bytes, operation: int -) -> None: - nonce_ptr = backend._ffi.from_buffer(nonce) - res = backend._lib.EVP_CipherInit_ex( - ctx, - backend._ffi.NULL, - backend._ffi.NULL, - backend._ffi.NULL, - nonce_ptr, - int(operation == _ENCRYPT), - ) - backend.openssl_assert(res != 0) - - -def _evp_cipher_set_length(backend: Backend, ctx, data_len: int) -> None: - intptr = backend._ffi.new("int *") - res = backend._lib.EVP_CipherUpdate( - ctx, backend._ffi.NULL, intptr, backend._ffi.NULL, data_len - ) - backend.openssl_assert(res != 0) - - -def _evp_cipher_process_aad( - backend: Backend, ctx, associated_data: bytes -) -> None: - outlen = backend._ffi.new("int *") - a_data_ptr = backend._ffi.from_buffer(associated_data) - res = backend._lib.EVP_CipherUpdate( - ctx, backend._ffi.NULL, outlen, a_data_ptr, len(associated_data) - ) - backend.openssl_assert(res != 0) - - -def _evp_cipher_process_data(backend: Backend, ctx, data: bytes) -> bytes: - outlen = backend._ffi.new("int *") - buf = backend._ffi.new("unsigned char[]", len(data)) - data_ptr = backend._ffi.from_buffer(data) - res = backend._lib.EVP_CipherUpdate(ctx, buf, outlen, data_ptr, len(data)) - if res == 0: - # AES SIV can error here if the data is invalid on decrypt - backend._consume_errors() - raise InvalidTag - return backend._ffi.buffer(buf, outlen[0])[:] - - -def _evp_cipher_encrypt( - backend: Backend, - cipher: _AEADTypes, - nonce: bytes, - data: bytes, - associated_data: typing.List[bytes], - tag_length: int, - ctx: typing.Any = None, -) -> bytes: - from cryptography.hazmat.primitives.ciphers.aead import AESCCM, AESSIV - - if ctx is None: - cipher_name = _evp_cipher_cipher_name(cipher) - ctx = _evp_cipher_aead_setup( - backend, - cipher_name, - cipher._key, - nonce, - None, - tag_length, - _ENCRYPT, - ) - else: - _evp_cipher_set_nonce_operation(backend, ctx, nonce, _ENCRYPT) - - # CCM requires us to pass the length of the data before processing - # anything. - # However calling this with any other AEAD results in an error - if isinstance(cipher, AESCCM): - _evp_cipher_set_length(backend, ctx, len(data)) - - for ad in associated_data: - _evp_cipher_process_aad(backend, ctx, ad) - processed_data = _evp_cipher_process_data(backend, ctx, data) - outlen = backend._ffi.new("int *") - # All AEADs we support besides OCB are streaming so they return nothing - # in finalization. OCB can return up to (16 byte block - 1) bytes so - # we need a buffer here too. - buf = backend._ffi.new("unsigned char[]", 16) - res = backend._lib.EVP_CipherFinal_ex(ctx, buf, outlen) - backend.openssl_assert(res != 0) - processed_data += backend._ffi.buffer(buf, outlen[0])[:] - tag_buf = backend._ffi.new("unsigned char[]", tag_length) - res = backend._lib.EVP_CIPHER_CTX_ctrl( - ctx, backend._lib.EVP_CTRL_AEAD_GET_TAG, tag_length, tag_buf - ) - backend.openssl_assert(res != 0) - tag = backend._ffi.buffer(tag_buf)[:] - - if isinstance(cipher, AESSIV): - # RFC 5297 defines the output as IV || C, where the tag we generate - # is the "IV" and C is the ciphertext. This is the opposite of our - # other AEADs, which are Ciphertext || Tag - backend.openssl_assert(len(tag) == 16) - return tag + processed_data - else: - return processed_data + tag - - -def _evp_cipher_decrypt( - backend: Backend, - cipher: _AEADTypes, - nonce: bytes, - data: bytes, - associated_data: typing.List[bytes], - tag_length: int, - ctx: typing.Any = None, -) -> bytes: - from cryptography.hazmat.primitives.ciphers.aead import AESCCM, AESSIV - - if len(data) < tag_length: - raise InvalidTag - - if isinstance(cipher, AESSIV): - # RFC 5297 defines the output as IV || C, where the tag we generate - # is the "IV" and C is the ciphertext. This is the opposite of our - # other AEADs, which are Ciphertext || Tag - tag = data[:tag_length] - data = data[tag_length:] - else: - tag = data[-tag_length:] - data = data[:-tag_length] - if ctx is None: - cipher_name = _evp_cipher_cipher_name(cipher) - ctx = _evp_cipher_aead_setup( - backend, - cipher_name, - cipher._key, - nonce, - tag, - tag_length, - _DECRYPT, - ) - else: - _evp_cipher_set_nonce_operation(backend, ctx, nonce, _DECRYPT) - _evp_cipher_set_tag(backend, ctx, tag) - - # CCM requires us to pass the length of the data before processing - # anything. - # However calling this with any other AEAD results in an error - if isinstance(cipher, AESCCM): - _evp_cipher_set_length(backend, ctx, len(data)) - - for ad in associated_data: - _evp_cipher_process_aad(backend, ctx, ad) - # CCM has a different error path if the tag doesn't match. Errors are - # raised in Update and Final is irrelevant. - if isinstance(cipher, AESCCM): - outlen = backend._ffi.new("int *") - buf = backend._ffi.new("unsigned char[]", len(data)) - d_ptr = backend._ffi.from_buffer(data) - res = backend._lib.EVP_CipherUpdate(ctx, buf, outlen, d_ptr, len(data)) - if res != 1: - backend._consume_errors() - raise InvalidTag - - processed_data = backend._ffi.buffer(buf, outlen[0])[:] - else: - processed_data = _evp_cipher_process_data(backend, ctx, data) - outlen = backend._ffi.new("int *") - # OCB can return up to 15 bytes (16 byte block - 1) in finalization - buf = backend._ffi.new("unsigned char[]", 16) - res = backend._lib.EVP_CipherFinal_ex(ctx, buf, outlen) - processed_data += backend._ffi.buffer(buf, outlen[0])[:] - if res == 0: - backend._consume_errors() - raise InvalidTag - - return processed_data diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/backend.py b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/backend.py index f1c79008..248b8c52 100644 --- a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/backend.py +++ b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/backend.py @@ -4,93 +4,28 @@ from __future__ import annotations -import collections -import contextlib -import itertools -import typing -from contextlib import contextmanager - -from cryptography import utils, x509 -from cryptography.exceptions import UnsupportedAlgorithm, _Reasons -from cryptography.hazmat.backends.openssl import aead -from cryptography.hazmat.backends.openssl.ciphers import _CipherContext -from cryptography.hazmat.backends.openssl.cmac import _CMACContext -from cryptography.hazmat.backends.openssl.ec import ( - _EllipticCurvePrivateKey, - _EllipticCurvePublicKey, -) -from cryptography.hazmat.backends.openssl.rsa import ( - _RSAPrivateKey, - _RSAPublicKey, -) from cryptography.hazmat.bindings._rust import openssl as rust_openssl from cryptography.hazmat.bindings.openssl import binding -from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives._asymmetric import AsymmetricPadding -from cryptography.hazmat.primitives.asymmetric import ( - dh, - dsa, - ec, - ed448, - ed25519, - rsa, - x448, - x25519, -) +from cryptography.hazmat.primitives.asymmetric import ec +from cryptography.hazmat.primitives.asymmetric import utils as asym_utils from cryptography.hazmat.primitives.asymmetric.padding import ( MGF1, OAEP, PSS, PKCS1v15, ) -from cryptography.hazmat.primitives.asymmetric.types import ( - PrivateKeyTypes, - PublicKeyTypes, -) from cryptography.hazmat.primitives.ciphers import ( - BlockCipherAlgorithm, CipherAlgorithm, ) from cryptography.hazmat.primitives.ciphers.algorithms import ( AES, - AES128, - AES256, - ARC4, - SM4, - Camellia, - ChaCha20, - TripleDES, - _BlowfishInternal, - _CAST5Internal, - _IDEAInternal, - _SEEDInternal, ) from cryptography.hazmat.primitives.ciphers.modes import ( CBC, - CFB, - CFB8, - CTR, - ECB, - GCM, - OFB, - XTS, Mode, ) -from cryptography.hazmat.primitives.serialization import ssh -from cryptography.hazmat.primitives.serialization.pkcs12 import ( - PBES, - PKCS12Certificate, - PKCS12KeyAndCertificates, - PKCS12PrivateKeyTypes, - _PKCS12CATypes, -) - -_MemoryBIO = collections.namedtuple("_MemoryBIO", ["bio", "char_ptr"]) - - -# Not actually supported, just used as a marker for some serialization tests. -class _RC2: - pass class Backend: @@ -100,18 +35,6 @@ class Backend: name = "openssl" - # FIPS has opinions about acceptable algorithms and key sizes, but the - # disallowed algorithms are still present in OpenSSL. They just error if - # you try to use them. To avoid that we allowlist the algorithms in - # FIPS 140-3. This isn't ideal, but FIPS 140-3 is trash so here we are. - _fips_aead = { - b"aes-128-ccm", - b"aes-192-ccm", - b"aes-256-ccm", - b"aes-128-gcm", - b"aes-192-gcm", - b"aes-256-gcm", - } # TripleDES encryption is disallowed/deprecated throughout 2023 in # FIPS 140-3. To keep it simple we denylist any use of TripleDES (TDEA). _fips_ciphers = (AES,) @@ -149,33 +72,20 @@ class Backend: self._lib = self._binding.lib self._fips_enabled = rust_openssl.is_fips_enabled() - self._cipher_registry: typing.Dict[ - typing.Tuple[typing.Type[CipherAlgorithm], typing.Type[Mode]], - typing.Callable, - ] = {} - self._register_default_ciphers() - self._dh_types = [self._lib.EVP_PKEY_DH] - if self._lib.Cryptography_HAS_EVP_PKEY_DHX: - self._dh_types.append(self._lib.EVP_PKEY_DHX) - def __repr__(self) -> str: - return "".format( - self.openssl_version_text(), - self._fips_enabled, - self._binding._legacy_provider_loaded, + return ( + f"" ) - def openssl_assert( - self, - ok: bool, - errors: typing.Optional[typing.List[rust_openssl.OpenSSLError]] = None, - ) -> None: - return binding._openssl_assert(self._lib, ok, errors=errors) + def openssl_assert(self, ok: bool) -> None: + return binding._openssl_assert(ok) def _enable_fips(self) -> None: # This function enables FIPS mode for OpenSSL 3.0.0 on installs that # have the FIPS provider installed properly. - self._binding._enable_fips() + rust_openssl.enable_fips(rust_openssl._providers) assert rust_openssl.is_fips_enabled() self._fips_enabled = rust_openssl.is_fips_enabled() @@ -184,37 +94,18 @@ class Backend: Friendly string name of the loaded OpenSSL library. This is not necessarily the same version as it was compiled against. - Example: OpenSSL 1.1.1d 10 Sep 2019 + Example: OpenSSL 3.2.1 30 Jan 2024 """ - return self._ffi.string( - self._lib.OpenSSL_version(self._lib.OPENSSL_VERSION) - ).decode("ascii") + return rust_openssl.openssl_version_text() def openssl_version_number(self) -> int: - return self._lib.OpenSSL_version_num() - - def _evp_md_from_algorithm(self, algorithm: hashes.HashAlgorithm): - if algorithm.name == "blake2b" or algorithm.name == "blake2s": - alg = "{}{}".format( - algorithm.name, algorithm.digest_size * 8 - ).encode("ascii") - else: - alg = algorithm.name.encode("ascii") - - evp_md = self._lib.EVP_get_digestbyname(alg) - return evp_md - - def _evp_md_non_null_from_algorithm(self, algorithm: hashes.HashAlgorithm): - evp_md = self._evp_md_from_algorithm(algorithm) - self.openssl_assert(evp_md != self._ffi.NULL) - return evp_md + return rust_openssl.openssl_version() def hash_supported(self, algorithm: hashes.HashAlgorithm) -> bool: if self._fips_enabled and not isinstance(algorithm, self._fips_hashes): return False - evp_md = self._evp_md_from_algorithm(algorithm) - return evp_md != self._ffi.NULL + return rust_openssl.hashes.hash_supported(algorithm) def signature_hash_supported( self, algorithm: hashes.HashAlgorithm @@ -229,13 +120,31 @@ class Backend: if self._fips_enabled: return False else: - return self._lib.Cryptography_HAS_SCRYPT == 1 + return hasattr(rust_openssl.kdf.Scrypt, "derive") + + def argon2_supported(self) -> bool: + if self._fips_enabled: + return False + else: + return hasattr(rust_openssl.kdf.Argon2id, "derive") def hmac_supported(self, algorithm: hashes.HashAlgorithm) -> bool: # FIPS mode still allows SHA1 for HMAC if self._fips_enabled and isinstance(algorithm, hashes.SHA1): return True - + if rust_openssl.CRYPTOGRAPHY_IS_AWSLC: + return isinstance( + algorithm, + ( + hashes.SHA1, + hashes.SHA224, + hashes.SHA256, + hashes.SHA384, + hashes.SHA512, + hashes.SHA512_224, + hashes.SHA512_256, + ), + ) return self.hash_supported(algorithm) def cipher_supported(self, cipher: CipherAlgorithm, mode: Mode) -> bool: @@ -245,404 +154,14 @@ class Backend: if not isinstance(cipher, self._fips_ciphers): return False - try: - adapter = self._cipher_registry[type(cipher), type(mode)] - except KeyError: - return False - evp_cipher = adapter(self, cipher, mode) - return self._ffi.NULL != evp_cipher - - def register_cipher_adapter(self, cipher_cls, mode_cls, adapter) -> None: - if (cipher_cls, mode_cls) in self._cipher_registry: - raise ValueError( - "Duplicate registration for: {} {}.".format( - cipher_cls, mode_cls - ) - ) - self._cipher_registry[cipher_cls, mode_cls] = adapter - - def _register_default_ciphers(self) -> None: - for cipher_cls in [AES, AES128, AES256]: - for mode_cls in [CBC, CTR, ECB, OFB, CFB, CFB8, GCM]: - self.register_cipher_adapter( - cipher_cls, - mode_cls, - GetCipherByName( - "{cipher.name}-{cipher.key_size}-{mode.name}" - ), - ) - for mode_cls in [CBC, CTR, ECB, OFB, CFB]: - self.register_cipher_adapter( - Camellia, - mode_cls, - GetCipherByName("{cipher.name}-{cipher.key_size}-{mode.name}"), - ) - for mode_cls in [CBC, CFB, CFB8, OFB]: - self.register_cipher_adapter( - TripleDES, mode_cls, GetCipherByName("des-ede3-{mode.name}") - ) - self.register_cipher_adapter( - TripleDES, ECB, GetCipherByName("des-ede3") - ) - self.register_cipher_adapter( - ChaCha20, type(None), GetCipherByName("chacha20") - ) - self.register_cipher_adapter(AES, XTS, _get_xts_cipher) - for mode_cls in [ECB, CBC, OFB, CFB, CTR]: - self.register_cipher_adapter( - SM4, mode_cls, GetCipherByName("sm4-{mode.name}") - ) - # Don't register legacy ciphers if they're unavailable. Hypothetically - # this wouldn't be necessary because we test availability by seeing if - # we get an EVP_CIPHER * in the _CipherContext __init__, but OpenSSL 3 - # will return a valid pointer even though the cipher is unavailable. - if ( - self._binding._legacy_provider_loaded - or not self._lib.CRYPTOGRAPHY_OPENSSL_300_OR_GREATER - ): - for mode_cls in [CBC, CFB, OFB, ECB]: - self.register_cipher_adapter( - _BlowfishInternal, - mode_cls, - GetCipherByName("bf-{mode.name}"), - ) - for mode_cls in [CBC, CFB, OFB, ECB]: - self.register_cipher_adapter( - _SEEDInternal, - mode_cls, - GetCipherByName("seed-{mode.name}"), - ) - for cipher_cls, mode_cls in itertools.product( - [_CAST5Internal, _IDEAInternal], - [CBC, OFB, CFB, ECB], - ): - self.register_cipher_adapter( - cipher_cls, - mode_cls, - GetCipherByName("{cipher.name}-{mode.name}"), - ) - self.register_cipher_adapter( - ARC4, type(None), GetCipherByName("rc4") - ) - # We don't actually support RC2, this is just used by some tests. - self.register_cipher_adapter( - _RC2, type(None), GetCipherByName("rc2") - ) - - def create_symmetric_encryption_ctx( - self, cipher: CipherAlgorithm, mode: Mode - ) -> _CipherContext: - return _CipherContext(self, cipher, mode, _CipherContext._ENCRYPT) - - def create_symmetric_decryption_ctx( - self, cipher: CipherAlgorithm, mode: Mode - ) -> _CipherContext: - return _CipherContext(self, cipher, mode, _CipherContext._DECRYPT) + return rust_openssl.ciphers.cipher_supported(cipher, mode) def pbkdf2_hmac_supported(self, algorithm: hashes.HashAlgorithm) -> bool: return self.hmac_supported(algorithm) - def _consume_errors(self) -> typing.List[rust_openssl.OpenSSLError]: + def _consume_errors(self) -> list[rust_openssl.OpenSSLError]: return rust_openssl.capture_error_stack() - def _bn_to_int(self, bn) -> int: - assert bn != self._ffi.NULL - self.openssl_assert(not self._lib.BN_is_negative(bn)) - - bn_num_bytes = self._lib.BN_num_bytes(bn) - bin_ptr = self._ffi.new("unsigned char[]", bn_num_bytes) - bin_len = self._lib.BN_bn2bin(bn, bin_ptr) - # A zero length means the BN has value 0 - self.openssl_assert(bin_len >= 0) - val = int.from_bytes(self._ffi.buffer(bin_ptr)[:bin_len], "big") - return val - - def _int_to_bn(self, num: int): - """ - Converts a python integer to a BIGNUM. The returned BIGNUM will not - be garbage collected (to support adding them to structs that take - ownership of the object). Be sure to register it for GC if it will - be discarded after use. - """ - binary = num.to_bytes(int(num.bit_length() / 8.0 + 1), "big") - bn_ptr = self._lib.BN_bin2bn(binary, len(binary), self._ffi.NULL) - self.openssl_assert(bn_ptr != self._ffi.NULL) - return bn_ptr - - def generate_rsa_private_key( - self, public_exponent: int, key_size: int - ) -> rsa.RSAPrivateKey: - rsa._verify_rsa_parameters(public_exponent, key_size) - - rsa_cdata = self._lib.RSA_new() - self.openssl_assert(rsa_cdata != self._ffi.NULL) - rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) - - bn = self._int_to_bn(public_exponent) - bn = self._ffi.gc(bn, self._lib.BN_free) - - res = self._lib.RSA_generate_key_ex( - rsa_cdata, key_size, bn, self._ffi.NULL - ) - self.openssl_assert(res == 1) - evp_pkey = self._rsa_cdata_to_evp_pkey(rsa_cdata) - - # We can skip RSA key validation here since we just generated the key - return _RSAPrivateKey( - self, rsa_cdata, evp_pkey, unsafe_skip_rsa_key_validation=True - ) - - def generate_rsa_parameters_supported( - self, public_exponent: int, key_size: int - ) -> bool: - return ( - public_exponent >= 3 - and public_exponent & 1 != 0 - and key_size >= 512 - ) - - def load_rsa_private_numbers( - self, - numbers: rsa.RSAPrivateNumbers, - unsafe_skip_rsa_key_validation: bool, - ) -> rsa.RSAPrivateKey: - rsa._check_private_key_components( - numbers.p, - numbers.q, - numbers.d, - numbers.dmp1, - numbers.dmq1, - numbers.iqmp, - numbers.public_numbers.e, - numbers.public_numbers.n, - ) - rsa_cdata = self._lib.RSA_new() - self.openssl_assert(rsa_cdata != self._ffi.NULL) - rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) - p = self._int_to_bn(numbers.p) - q = self._int_to_bn(numbers.q) - d = self._int_to_bn(numbers.d) - dmp1 = self._int_to_bn(numbers.dmp1) - dmq1 = self._int_to_bn(numbers.dmq1) - iqmp = self._int_to_bn(numbers.iqmp) - e = self._int_to_bn(numbers.public_numbers.e) - n = self._int_to_bn(numbers.public_numbers.n) - res = self._lib.RSA_set0_factors(rsa_cdata, p, q) - self.openssl_assert(res == 1) - res = self._lib.RSA_set0_key(rsa_cdata, n, e, d) - self.openssl_assert(res == 1) - res = self._lib.RSA_set0_crt_params(rsa_cdata, dmp1, dmq1, iqmp) - self.openssl_assert(res == 1) - evp_pkey = self._rsa_cdata_to_evp_pkey(rsa_cdata) - - return _RSAPrivateKey( - self, - rsa_cdata, - evp_pkey, - unsafe_skip_rsa_key_validation=unsafe_skip_rsa_key_validation, - ) - - def load_rsa_public_numbers( - self, numbers: rsa.RSAPublicNumbers - ) -> rsa.RSAPublicKey: - rsa._check_public_key_components(numbers.e, numbers.n) - rsa_cdata = self._lib.RSA_new() - self.openssl_assert(rsa_cdata != self._ffi.NULL) - rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) - e = self._int_to_bn(numbers.e) - n = self._int_to_bn(numbers.n) - res = self._lib.RSA_set0_key(rsa_cdata, n, e, self._ffi.NULL) - self.openssl_assert(res == 1) - evp_pkey = self._rsa_cdata_to_evp_pkey(rsa_cdata) - - return _RSAPublicKey(self, rsa_cdata, evp_pkey) - - def _create_evp_pkey_gc(self): - evp_pkey = self._lib.EVP_PKEY_new() - self.openssl_assert(evp_pkey != self._ffi.NULL) - evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) - return evp_pkey - - def _rsa_cdata_to_evp_pkey(self, rsa_cdata): - evp_pkey = self._create_evp_pkey_gc() - res = self._lib.EVP_PKEY_set1_RSA(evp_pkey, rsa_cdata) - self.openssl_assert(res == 1) - return evp_pkey - - def _bytes_to_bio(self, data: bytes) -> _MemoryBIO: - """ - Return a _MemoryBIO namedtuple of (BIO, char*). - - The char* is the storage for the BIO and it must stay alive until the - BIO is finished with. - """ - data_ptr = self._ffi.from_buffer(data) - bio = self._lib.BIO_new_mem_buf(data_ptr, len(data)) - self.openssl_assert(bio != self._ffi.NULL) - - return _MemoryBIO(self._ffi.gc(bio, self._lib.BIO_free), data_ptr) - - def _create_mem_bio_gc(self): - """ - Creates an empty memory BIO. - """ - bio_method = self._lib.BIO_s_mem() - self.openssl_assert(bio_method != self._ffi.NULL) - bio = self._lib.BIO_new(bio_method) - self.openssl_assert(bio != self._ffi.NULL) - bio = self._ffi.gc(bio, self._lib.BIO_free) - return bio - - def _read_mem_bio(self, bio) -> bytes: - """ - Reads a memory BIO. This only works on memory BIOs. - """ - buf = self._ffi.new("char **") - buf_len = self._lib.BIO_get_mem_data(bio, buf) - self.openssl_assert(buf_len > 0) - self.openssl_assert(buf[0] != self._ffi.NULL) - bio_data = self._ffi.buffer(buf[0], buf_len)[:] - return bio_data - - def _evp_pkey_to_private_key( - self, evp_pkey, unsafe_skip_rsa_key_validation: bool - ) -> PrivateKeyTypes: - """ - Return the appropriate type of PrivateKey given an evp_pkey cdata - pointer. - """ - - key_type = self._lib.EVP_PKEY_id(evp_pkey) - - if key_type == self._lib.EVP_PKEY_RSA: - rsa_cdata = self._lib.EVP_PKEY_get1_RSA(evp_pkey) - self.openssl_assert(rsa_cdata != self._ffi.NULL) - rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) - return _RSAPrivateKey( - self, - rsa_cdata, - evp_pkey, - unsafe_skip_rsa_key_validation=unsafe_skip_rsa_key_validation, - ) - elif ( - key_type == self._lib.EVP_PKEY_RSA_PSS - and not self._lib.CRYPTOGRAPHY_IS_LIBRESSL - and not self._lib.CRYPTOGRAPHY_IS_BORINGSSL - and not self._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_111E - ): - # At the moment the way we handle RSA PSS keys is to strip the - # PSS constraints from them and treat them as normal RSA keys - # Unfortunately the RSA * itself tracks this data so we need to - # extract, serialize, and reload it without the constraints. - rsa_cdata = self._lib.EVP_PKEY_get1_RSA(evp_pkey) - self.openssl_assert(rsa_cdata != self._ffi.NULL) - rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) - bio = self._create_mem_bio_gc() - res = self._lib.i2d_RSAPrivateKey_bio(bio, rsa_cdata) - self.openssl_assert(res == 1) - return self.load_der_private_key( - self._read_mem_bio(bio), - password=None, - unsafe_skip_rsa_key_validation=unsafe_skip_rsa_key_validation, - ) - elif key_type == self._lib.EVP_PKEY_DSA: - return rust_openssl.dsa.private_key_from_ptr( - int(self._ffi.cast("uintptr_t", evp_pkey)) - ) - elif key_type == self._lib.EVP_PKEY_EC: - ec_cdata = self._lib.EVP_PKEY_get1_EC_KEY(evp_pkey) - self.openssl_assert(ec_cdata != self._ffi.NULL) - ec_cdata = self._ffi.gc(ec_cdata, self._lib.EC_KEY_free) - return _EllipticCurvePrivateKey(self, ec_cdata, evp_pkey) - elif key_type in self._dh_types: - return rust_openssl.dh.private_key_from_ptr( - int(self._ffi.cast("uintptr_t", evp_pkey)) - ) - elif key_type == getattr(self._lib, "EVP_PKEY_ED25519", None): - # EVP_PKEY_ED25519 is not present in CRYPTOGRAPHY_IS_LIBRESSL - return rust_openssl.ed25519.private_key_from_ptr( - int(self._ffi.cast("uintptr_t", evp_pkey)) - ) - elif key_type == getattr(self._lib, "EVP_PKEY_X448", None): - # EVP_PKEY_X448 is not present in CRYPTOGRAPHY_IS_LIBRESSL - return rust_openssl.x448.private_key_from_ptr( - int(self._ffi.cast("uintptr_t", evp_pkey)) - ) - elif key_type == self._lib.EVP_PKEY_X25519: - return rust_openssl.x25519.private_key_from_ptr( - int(self._ffi.cast("uintptr_t", evp_pkey)) - ) - elif key_type == getattr(self._lib, "EVP_PKEY_ED448", None): - # EVP_PKEY_ED448 is not present in CRYPTOGRAPHY_IS_LIBRESSL - return rust_openssl.ed448.private_key_from_ptr( - int(self._ffi.cast("uintptr_t", evp_pkey)) - ) - else: - raise UnsupportedAlgorithm("Unsupported key type.") - - def _evp_pkey_to_public_key(self, evp_pkey) -> PublicKeyTypes: - """ - Return the appropriate type of PublicKey given an evp_pkey cdata - pointer. - """ - - key_type = self._lib.EVP_PKEY_id(evp_pkey) - - if key_type == self._lib.EVP_PKEY_RSA: - rsa_cdata = self._lib.EVP_PKEY_get1_RSA(evp_pkey) - self.openssl_assert(rsa_cdata != self._ffi.NULL) - rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) - return _RSAPublicKey(self, rsa_cdata, evp_pkey) - elif ( - key_type == self._lib.EVP_PKEY_RSA_PSS - and not self._lib.CRYPTOGRAPHY_IS_LIBRESSL - and not self._lib.CRYPTOGRAPHY_IS_BORINGSSL - and not self._lib.CRYPTOGRAPHY_OPENSSL_LESS_THAN_111E - ): - rsa_cdata = self._lib.EVP_PKEY_get1_RSA(evp_pkey) - self.openssl_assert(rsa_cdata != self._ffi.NULL) - rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) - bio = self._create_mem_bio_gc() - res = self._lib.i2d_RSAPublicKey_bio(bio, rsa_cdata) - self.openssl_assert(res == 1) - return self.load_der_public_key(self._read_mem_bio(bio)) - elif key_type == self._lib.EVP_PKEY_DSA: - return rust_openssl.dsa.public_key_from_ptr( - int(self._ffi.cast("uintptr_t", evp_pkey)) - ) - elif key_type == self._lib.EVP_PKEY_EC: - ec_cdata = self._lib.EVP_PKEY_get1_EC_KEY(evp_pkey) - if ec_cdata == self._ffi.NULL: - errors = self._consume_errors() - raise ValueError("Unable to load EC key", errors) - ec_cdata = self._ffi.gc(ec_cdata, self._lib.EC_KEY_free) - return _EllipticCurvePublicKey(self, ec_cdata, evp_pkey) - elif key_type in self._dh_types: - return rust_openssl.dh.public_key_from_ptr( - int(self._ffi.cast("uintptr_t", evp_pkey)) - ) - elif key_type == getattr(self._lib, "EVP_PKEY_ED25519", None): - # EVP_PKEY_ED25519 is not present in CRYPTOGRAPHY_IS_LIBRESSL - return rust_openssl.ed25519.public_key_from_ptr( - int(self._ffi.cast("uintptr_t", evp_pkey)) - ) - elif key_type == getattr(self._lib, "EVP_PKEY_X448", None): - # EVP_PKEY_X448 is not present in CRYPTOGRAPHY_IS_LIBRESSL - return rust_openssl.x448.public_key_from_ptr( - int(self._ffi.cast("uintptr_t", evp_pkey)) - ) - elif key_type == self._lib.EVP_PKEY_X25519: - return rust_openssl.x25519.public_key_from_ptr( - int(self._ffi.cast("uintptr_t", evp_pkey)) - ) - elif key_type == getattr(self._lib, "EVP_PKEY_ED448", None): - # EVP_PKEY_ED448 is not present in CRYPTOGRAPHY_IS_LIBRESSL - return rust_openssl.ed448.public_key_from_ptr( - int(self._ffi.cast("uintptr_t", evp_pkey)) - ) - else: - raise UnsupportedAlgorithm("Unsupported key type.") - def _oaep_hash_supported(self, algorithm: hashes.HashAlgorithm) -> bool: if self._fips_enabled and isinstance(algorithm, hashes.SHA1): return False @@ -662,14 +181,17 @@ class Backend: if isinstance(padding, PKCS1v15): return True elif isinstance(padding, PSS) and isinstance(padding._mgf, MGF1): - # SHA1 is permissible in MGF1 in FIPS even when SHA1 is blocked - # as signature algorithm. - if self._fips_enabled and isinstance( - padding._mgf._algorithm, hashes.SHA1 + # FIPS 186-4 only allows salt length == digest length for PSS + # It is technically acceptable to set an explicit salt length + # equal to the digest length and this will incorrectly fail, but + # since we don't do that in the tests and this method is + # private, we'll ignore that until we need to do otherwise. + if ( + self._fips_enabled + and padding._salt_length != PSS.DIGEST_LENGTH ): - return True - else: - return self.hash_supported(padding._mgf._algorithm) + return False + return self.hash_supported(padding._mgf._algorithm) elif isinstance(padding, OAEP) and isinstance(padding._mgf, MGF1): return self._oaep_hash_supported( padding._mgf._algorithm @@ -683,46 +205,10 @@ class Backend: else: return self.rsa_padding_supported(padding) - def generate_dsa_parameters(self, key_size: int) -> dsa.DSAParameters: - if key_size not in (1024, 2048, 3072, 4096): - raise ValueError( - "Key size must be 1024, 2048, 3072, or 4096 bits." - ) - - return rust_openssl.dsa.generate_parameters(key_size) - - def generate_dsa_private_key( - self, parameters: dsa.DSAParameters - ) -> dsa.DSAPrivateKey: - return parameters.generate_private_key() - - def generate_dsa_private_key_and_parameters( - self, key_size: int - ) -> dsa.DSAPrivateKey: - parameters = self.generate_dsa_parameters(key_size) - return self.generate_dsa_private_key(parameters) - - def load_dsa_private_numbers( - self, numbers: dsa.DSAPrivateNumbers - ) -> dsa.DSAPrivateKey: - dsa._check_dsa_private_numbers(numbers) - return rust_openssl.dsa.from_private_numbers(numbers) - - def load_dsa_public_numbers( - self, numbers: dsa.DSAPublicNumbers - ) -> dsa.DSAPublicKey: - dsa._check_dsa_parameters(numbers.parameter_numbers) - return rust_openssl.dsa.from_public_numbers(numbers) - - def load_dsa_parameter_numbers( - self, numbers: dsa.DSAParameterNumbers - ) -> dsa.DSAParameters: - dsa._check_dsa_parameters(numbers) - return rust_openssl.dsa.from_parameter_numbers(numbers) - def dsa_supported(self) -> bool: return ( - not self._lib.CRYPTOGRAPHY_IS_BORINGSSL and not self._fips_enabled + not rust_openssl.CRYPTOGRAPHY_IS_BORINGSSL + and not self._fips_enabled ) def dsa_hash_supported(self, algorithm: hashes.HashAlgorithm) -> bool: @@ -735,275 +221,13 @@ class Backend: algorithm, CBC(b"\x00" * algorithm.block_size) ) - def create_cmac_ctx(self, algorithm: BlockCipherAlgorithm) -> _CMACContext: - return _CMACContext(self, algorithm) - - def load_pem_private_key( - self, - data: bytes, - password: typing.Optional[bytes], - unsafe_skip_rsa_key_validation: bool, - ) -> PrivateKeyTypes: - return self._load_key( - self._lib.PEM_read_bio_PrivateKey, - data, - password, - unsafe_skip_rsa_key_validation, - ) - - def load_pem_public_key(self, data: bytes) -> PublicKeyTypes: - mem_bio = self._bytes_to_bio(data) - # In OpenSSL 3.0.x the PEM_read_bio_PUBKEY function will invoke - # the default password callback if you pass an encrypted private - # key. This is very, very, very bad as the default callback can - # trigger an interactive console prompt, which will hang the - # Python process. We therefore provide our own callback to - # catch this and error out properly. - userdata = self._ffi.new("CRYPTOGRAPHY_PASSWORD_DATA *") - evp_pkey = self._lib.PEM_read_bio_PUBKEY( - mem_bio.bio, - self._ffi.NULL, - self._ffi.addressof( - self._lib._original_lib, "Cryptography_pem_password_cb" - ), - userdata, - ) - if evp_pkey != self._ffi.NULL: - evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) - return self._evp_pkey_to_public_key(evp_pkey) - else: - # It's not a (RSA/DSA/ECDSA) subjectPublicKeyInfo, but we still - # need to check to see if it is a pure PKCS1 RSA public key (not - # embedded in a subjectPublicKeyInfo) - self._consume_errors() - res = self._lib.BIO_reset(mem_bio.bio) - self.openssl_assert(res == 1) - rsa_cdata = self._lib.PEM_read_bio_RSAPublicKey( - mem_bio.bio, - self._ffi.NULL, - self._ffi.addressof( - self._lib._original_lib, "Cryptography_pem_password_cb" - ), - userdata, - ) - if rsa_cdata != self._ffi.NULL: - rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) - evp_pkey = self._rsa_cdata_to_evp_pkey(rsa_cdata) - return _RSAPublicKey(self, rsa_cdata, evp_pkey) - else: - self._handle_key_loading_error() - - def load_pem_parameters(self, data: bytes) -> dh.DHParameters: - return rust_openssl.dh.from_pem_parameters(data) - - def load_der_private_key( - self, - data: bytes, - password: typing.Optional[bytes], - unsafe_skip_rsa_key_validation: bool, - ) -> PrivateKeyTypes: - # OpenSSL has a function called d2i_AutoPrivateKey that in theory - # handles this automatically, however it doesn't handle encrypted - # private keys. Instead we try to load the key two different ways. - # First we'll try to load it as a traditional key. - bio_data = self._bytes_to_bio(data) - key = self._evp_pkey_from_der_traditional_key(bio_data, password) - if key: - return self._evp_pkey_to_private_key( - key, unsafe_skip_rsa_key_validation - ) - else: - # Finally we try to load it with the method that handles encrypted - # PKCS8 properly. - return self._load_key( - self._lib.d2i_PKCS8PrivateKey_bio, - data, - password, - unsafe_skip_rsa_key_validation, - ) - - def _evp_pkey_from_der_traditional_key(self, bio_data, password): - key = self._lib.d2i_PrivateKey_bio(bio_data.bio, self._ffi.NULL) - if key != self._ffi.NULL: - key = self._ffi.gc(key, self._lib.EVP_PKEY_free) - if password is not None: - raise TypeError( - "Password was given but private key is not encrypted." - ) - - return key - else: - self._consume_errors() - return None - - def load_der_public_key(self, data: bytes) -> PublicKeyTypes: - mem_bio = self._bytes_to_bio(data) - evp_pkey = self._lib.d2i_PUBKEY_bio(mem_bio.bio, self._ffi.NULL) - if evp_pkey != self._ffi.NULL: - evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) - return self._evp_pkey_to_public_key(evp_pkey) - else: - # It's not a (RSA/DSA/ECDSA) subjectPublicKeyInfo, but we still - # need to check to see if it is a pure PKCS1 RSA public key (not - # embedded in a subjectPublicKeyInfo) - self._consume_errors() - res = self._lib.BIO_reset(mem_bio.bio) - self.openssl_assert(res == 1) - rsa_cdata = self._lib.d2i_RSAPublicKey_bio( - mem_bio.bio, self._ffi.NULL - ) - if rsa_cdata != self._ffi.NULL: - rsa_cdata = self._ffi.gc(rsa_cdata, self._lib.RSA_free) - evp_pkey = self._rsa_cdata_to_evp_pkey(rsa_cdata) - return _RSAPublicKey(self, rsa_cdata, evp_pkey) - else: - self._handle_key_loading_error() - - def load_der_parameters(self, data: bytes) -> dh.DHParameters: - return rust_openssl.dh.from_der_parameters(data) - - def _cert2ossl(self, cert: x509.Certificate) -> typing.Any: - data = cert.public_bytes(serialization.Encoding.DER) - mem_bio = self._bytes_to_bio(data) - x509 = self._lib.d2i_X509_bio(mem_bio.bio, self._ffi.NULL) - self.openssl_assert(x509 != self._ffi.NULL) - x509 = self._ffi.gc(x509, self._lib.X509_free) - return x509 - - def _ossl2cert(self, x509_ptr: typing.Any) -> x509.Certificate: - bio = self._create_mem_bio_gc() - res = self._lib.i2d_X509_bio(bio, x509_ptr) - self.openssl_assert(res == 1) - return x509.load_der_x509_certificate(self._read_mem_bio(bio)) - - def _key2ossl(self, key: PKCS12PrivateKeyTypes) -> typing.Any: - data = key.private_bytes( - serialization.Encoding.DER, - serialization.PrivateFormat.PKCS8, - serialization.NoEncryption(), - ) - mem_bio = self._bytes_to_bio(data) - - evp_pkey = self._lib.d2i_PrivateKey_bio( - mem_bio.bio, - self._ffi.NULL, - ) - self.openssl_assert(evp_pkey != self._ffi.NULL) - return self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) - - def _load_key( - self, openssl_read_func, data, password, unsafe_skip_rsa_key_validation - ) -> PrivateKeyTypes: - mem_bio = self._bytes_to_bio(data) - - userdata = self._ffi.new("CRYPTOGRAPHY_PASSWORD_DATA *") - if password is not None: - utils._check_byteslike("password", password) - password_ptr = self._ffi.from_buffer(password) - userdata.password = password_ptr - userdata.length = len(password) - - evp_pkey = openssl_read_func( - mem_bio.bio, - self._ffi.NULL, - self._ffi.addressof( - self._lib._original_lib, "Cryptography_pem_password_cb" - ), - userdata, - ) - - if evp_pkey == self._ffi.NULL: - if userdata.error != 0: - self._consume_errors() - if userdata.error == -1: - raise TypeError( - "Password was not given but private key is encrypted" - ) - else: - assert userdata.error == -2 - raise ValueError( - "Passwords longer than {} bytes are not supported " - "by this backend.".format(userdata.maxsize - 1) - ) - else: - self._handle_key_loading_error() - - evp_pkey = self._ffi.gc(evp_pkey, self._lib.EVP_PKEY_free) - - if password is not None and userdata.called == 0: - raise TypeError( - "Password was given but private key is not encrypted." - ) - - assert ( - password is not None and userdata.called == 1 - ) or password is None - - return self._evp_pkey_to_private_key( - evp_pkey, unsafe_skip_rsa_key_validation - ) - - def _handle_key_loading_error(self) -> typing.NoReturn: - errors = self._consume_errors() - - if not errors: - raise ValueError( - "Could not deserialize key data. The data may be in an " - "incorrect format or it may be encrypted with an unsupported " - "algorithm." - ) - - elif ( - errors[0]._lib_reason_match( - self._lib.ERR_LIB_EVP, self._lib.EVP_R_BAD_DECRYPT - ) - or errors[0]._lib_reason_match( - self._lib.ERR_LIB_PKCS12, - self._lib.PKCS12_R_PKCS12_CIPHERFINAL_ERROR, - ) - or ( - self._lib.Cryptography_HAS_PROVIDERS - and errors[0]._lib_reason_match( - self._lib.ERR_LIB_PROV, - self._lib.PROV_R_BAD_DECRYPT, - ) - ) - ): - raise ValueError("Bad decrypt. Incorrect password?") - - elif any( - error._lib_reason_match( - self._lib.ERR_LIB_EVP, - self._lib.EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM, - ) - for error in errors - ): - raise ValueError("Unsupported public key algorithm.") - - else: - raise ValueError( - "Could not deserialize key data. The data may be in an " - "incorrect format, it may be encrypted with an unsupported " - "algorithm, or it may be an unsupported key type (e.g. EC " - "curves with explicit parameters).", - errors, - ) - def elliptic_curve_supported(self, curve: ec.EllipticCurve) -> bool: - try: - curve_nid = self._elliptic_curve_to_nid(curve) - except UnsupportedAlgorithm: - curve_nid = self._lib.NID_undef - - group = self._lib.EC_GROUP_new_by_curve_name(curve_nid) - - if group == self._ffi.NULL: - self._consume_errors() + if self._fips_enabled and not isinstance( + curve, self._fips_ecdh_curves + ): return False - else: - self.openssl_assert(curve_nid != self._lib.NID_undef) - self._lib.EC_GROUP_free(group) - return True + + return rust_openssl.ec.curve_supported(curve) def elliptic_curve_signature_algorithm_supported( self, @@ -1014,925 +238,65 @@ class Backend: if not isinstance(signature_algorithm, ec.ECDSA): return False - return self.elliptic_curve_supported(curve) - - def generate_elliptic_curve_private_key( - self, curve: ec.EllipticCurve - ) -> ec.EllipticCurvePrivateKey: - """ - Generate a new private key on the named curve. - """ - - if self.elliptic_curve_supported(curve): - ec_cdata = self._ec_key_new_by_curve(curve) - - res = self._lib.EC_KEY_generate_key(ec_cdata) - self.openssl_assert(res == 1) - - evp_pkey = self._ec_cdata_to_evp_pkey(ec_cdata) - - return _EllipticCurvePrivateKey(self, ec_cdata, evp_pkey) - else: - raise UnsupportedAlgorithm( - f"Backend object does not support {curve.name}.", - _Reasons.UNSUPPORTED_ELLIPTIC_CURVE, - ) - - def load_elliptic_curve_private_numbers( - self, numbers: ec.EllipticCurvePrivateNumbers - ) -> ec.EllipticCurvePrivateKey: - public = numbers.public_numbers - - ec_cdata = self._ec_key_new_by_curve(public.curve) - - private_value = self._ffi.gc( - self._int_to_bn(numbers.private_value), self._lib.BN_clear_free + return self.elliptic_curve_supported(curve) and ( + isinstance(signature_algorithm.algorithm, asym_utils.Prehashed) + or self.hash_supported(signature_algorithm.algorithm) ) - res = self._lib.EC_KEY_set_private_key(ec_cdata, private_value) - if res != 1: - self._consume_errors() - raise ValueError("Invalid EC key.") - - with self._tmp_bn_ctx() as bn_ctx: - self._ec_key_set_public_key_affine_coordinates( - ec_cdata, public.x, public.y, bn_ctx - ) - # derive the expected public point and compare it to the one we - # just set based on the values we were given. If they don't match - # this isn't a valid key pair. - group = self._lib.EC_KEY_get0_group(ec_cdata) - self.openssl_assert(group != self._ffi.NULL) - set_point = backend._lib.EC_KEY_get0_public_key(ec_cdata) - self.openssl_assert(set_point != self._ffi.NULL) - computed_point = self._lib.EC_POINT_new(group) - self.openssl_assert(computed_point != self._ffi.NULL) - computed_point = self._ffi.gc( - computed_point, self._lib.EC_POINT_free - ) - res = self._lib.EC_POINT_mul( - group, - computed_point, - private_value, - self._ffi.NULL, - self._ffi.NULL, - bn_ctx, - ) - self.openssl_assert(res == 1) - if ( - self._lib.EC_POINT_cmp( - group, set_point, computed_point, bn_ctx - ) - != 0 - ): - raise ValueError("Invalid EC key.") - - evp_pkey = self._ec_cdata_to_evp_pkey(ec_cdata) - - return _EllipticCurvePrivateKey(self, ec_cdata, evp_pkey) - - def load_elliptic_curve_public_numbers( - self, numbers: ec.EllipticCurvePublicNumbers - ) -> ec.EllipticCurvePublicKey: - ec_cdata = self._ec_key_new_by_curve(numbers.curve) - with self._tmp_bn_ctx() as bn_ctx: - self._ec_key_set_public_key_affine_coordinates( - ec_cdata, numbers.x, numbers.y, bn_ctx - ) - evp_pkey = self._ec_cdata_to_evp_pkey(ec_cdata) - - return _EllipticCurvePublicKey(self, ec_cdata, evp_pkey) - - def load_elliptic_curve_public_bytes( - self, curve: ec.EllipticCurve, point_bytes: bytes - ) -> ec.EllipticCurvePublicKey: - ec_cdata = self._ec_key_new_by_curve(curve) - group = self._lib.EC_KEY_get0_group(ec_cdata) - self.openssl_assert(group != self._ffi.NULL) - point = self._lib.EC_POINT_new(group) - self.openssl_assert(point != self._ffi.NULL) - point = self._ffi.gc(point, self._lib.EC_POINT_free) - with self._tmp_bn_ctx() as bn_ctx: - res = self._lib.EC_POINT_oct2point( - group, point, point_bytes, len(point_bytes), bn_ctx - ) - if res != 1: - self._consume_errors() - raise ValueError("Invalid public bytes for the given curve") - - res = self._lib.EC_KEY_set_public_key(ec_cdata, point) - self.openssl_assert(res == 1) - evp_pkey = self._ec_cdata_to_evp_pkey(ec_cdata) - return _EllipticCurvePublicKey(self, ec_cdata, evp_pkey) - - def derive_elliptic_curve_private_key( - self, private_value: int, curve: ec.EllipticCurve - ) -> ec.EllipticCurvePrivateKey: - ec_cdata = self._ec_key_new_by_curve(curve) - - group = self._lib.EC_KEY_get0_group(ec_cdata) - self.openssl_assert(group != self._ffi.NULL) - - point = self._lib.EC_POINT_new(group) - self.openssl_assert(point != self._ffi.NULL) - point = self._ffi.gc(point, self._lib.EC_POINT_free) - - value = self._int_to_bn(private_value) - value = self._ffi.gc(value, self._lib.BN_clear_free) - - with self._tmp_bn_ctx() as bn_ctx: - res = self._lib.EC_POINT_mul( - group, point, value, self._ffi.NULL, self._ffi.NULL, bn_ctx - ) - self.openssl_assert(res == 1) - - bn_x = self._lib.BN_CTX_get(bn_ctx) - bn_y = self._lib.BN_CTX_get(bn_ctx) - - res = self._lib.EC_POINT_get_affine_coordinates( - group, point, bn_x, bn_y, bn_ctx - ) - if res != 1: - self._consume_errors() - raise ValueError("Unable to derive key from private_value") - - res = self._lib.EC_KEY_set_public_key(ec_cdata, point) - self.openssl_assert(res == 1) - private = self._int_to_bn(private_value) - private = self._ffi.gc(private, self._lib.BN_clear_free) - res = self._lib.EC_KEY_set_private_key(ec_cdata, private) - self.openssl_assert(res == 1) - - evp_pkey = self._ec_cdata_to_evp_pkey(ec_cdata) - - return _EllipticCurvePrivateKey(self, ec_cdata, evp_pkey) - - def _ec_key_new_by_curve(self, curve: ec.EllipticCurve): - curve_nid = self._elliptic_curve_to_nid(curve) - return self._ec_key_new_by_curve_nid(curve_nid) - - def _ec_key_new_by_curve_nid(self, curve_nid: int): - ec_cdata = self._lib.EC_KEY_new_by_curve_name(curve_nid) - self.openssl_assert(ec_cdata != self._ffi.NULL) - return self._ffi.gc(ec_cdata, self._lib.EC_KEY_free) def elliptic_curve_exchange_algorithm_supported( self, algorithm: ec.ECDH, curve: ec.EllipticCurve ) -> bool: - if self._fips_enabled and not isinstance( - curve, self._fips_ecdh_curves - ): - return False - return self.elliptic_curve_supported(curve) and isinstance( algorithm, ec.ECDH ) - def _ec_cdata_to_evp_pkey(self, ec_cdata): - evp_pkey = self._create_evp_pkey_gc() - res = self._lib.EVP_PKEY_set1_EC_KEY(evp_pkey, ec_cdata) - self.openssl_assert(res == 1) - return evp_pkey - - def _elliptic_curve_to_nid(self, curve: ec.EllipticCurve) -> int: - """ - Get the NID for a curve name. - """ - - curve_aliases = {"secp192r1": "prime192v1", "secp256r1": "prime256v1"} - - curve_name = curve_aliases.get(curve.name, curve.name) - - curve_nid = self._lib.OBJ_sn2nid(curve_name.encode()) - if curve_nid == self._lib.NID_undef: - raise UnsupportedAlgorithm( - f"{curve.name} is not a supported elliptic curve", - _Reasons.UNSUPPORTED_ELLIPTIC_CURVE, - ) - return curve_nid - - @contextmanager - def _tmp_bn_ctx(self): - bn_ctx = self._lib.BN_CTX_new() - self.openssl_assert(bn_ctx != self._ffi.NULL) - bn_ctx = self._ffi.gc(bn_ctx, self._lib.BN_CTX_free) - self._lib.BN_CTX_start(bn_ctx) - try: - yield bn_ctx - finally: - self._lib.BN_CTX_end(bn_ctx) - - def _ec_key_set_public_key_affine_coordinates( - self, - ec_cdata, - x: int, - y: int, - bn_ctx, - ) -> None: - """ - Sets the public key point in the EC_KEY context to the affine x and y - values. - """ - - if x < 0 or y < 0: - raise ValueError( - "Invalid EC key. Both x and y must be non-negative." - ) - - x = self._ffi.gc(self._int_to_bn(x), self._lib.BN_free) - y = self._ffi.gc(self._int_to_bn(y), self._lib.BN_free) - group = self._lib.EC_KEY_get0_group(ec_cdata) - self.openssl_assert(group != self._ffi.NULL) - point = self._lib.EC_POINT_new(group) - self.openssl_assert(point != self._ffi.NULL) - point = self._ffi.gc(point, self._lib.EC_POINT_free) - res = self._lib.EC_POINT_set_affine_coordinates( - group, point, x, y, bn_ctx - ) - if res != 1: - self._consume_errors() - raise ValueError("Invalid EC key.") - res = self._lib.EC_KEY_set_public_key(ec_cdata, point) - self.openssl_assert(res == 1) - - def _private_key_bytes( - self, - encoding: serialization.Encoding, - format: serialization.PrivateFormat, - encryption_algorithm: serialization.KeySerializationEncryption, - key, - evp_pkey, - cdata, - ) -> bytes: - # validate argument types - if not isinstance(encoding, serialization.Encoding): - raise TypeError("encoding must be an item from the Encoding enum") - if not isinstance(format, serialization.PrivateFormat): - raise TypeError( - "format must be an item from the PrivateFormat enum" - ) - if not isinstance( - encryption_algorithm, serialization.KeySerializationEncryption - ): - raise TypeError( - "Encryption algorithm must be a KeySerializationEncryption " - "instance" - ) - - # validate password - if isinstance(encryption_algorithm, serialization.NoEncryption): - password = b"" - elif isinstance( - encryption_algorithm, serialization.BestAvailableEncryption - ): - password = encryption_algorithm.password - if len(password) > 1023: - raise ValueError( - "Passwords longer than 1023 bytes are not supported by " - "this backend" - ) - elif ( - isinstance( - encryption_algorithm, serialization._KeySerializationEncryption - ) - and encryption_algorithm._format - is format - is serialization.PrivateFormat.OpenSSH - ): - password = encryption_algorithm.password - else: - raise ValueError("Unsupported encryption type") - - # PKCS8 + PEM/DER - if format is serialization.PrivateFormat.PKCS8: - if encoding is serialization.Encoding.PEM: - write_bio = self._lib.PEM_write_bio_PKCS8PrivateKey - elif encoding is serialization.Encoding.DER: - write_bio = self._lib.i2d_PKCS8PrivateKey_bio - else: - raise ValueError("Unsupported encoding for PKCS8") - return self._private_key_bytes_via_bio( - write_bio, evp_pkey, password - ) - - # TraditionalOpenSSL + PEM/DER - if format is serialization.PrivateFormat.TraditionalOpenSSL: - if self._fips_enabled and not isinstance( - encryption_algorithm, serialization.NoEncryption - ): - raise ValueError( - "Encrypted traditional OpenSSL format is not " - "supported in FIPS mode." - ) - key_type = self._lib.EVP_PKEY_id(evp_pkey) - - if encoding is serialization.Encoding.PEM: - if key_type == self._lib.EVP_PKEY_RSA: - write_bio = self._lib.PEM_write_bio_RSAPrivateKey - else: - assert key_type == self._lib.EVP_PKEY_EC - write_bio = self._lib.PEM_write_bio_ECPrivateKey - return self._private_key_bytes_via_bio( - write_bio, cdata, password - ) - - if encoding is serialization.Encoding.DER: - if password: - raise ValueError( - "Encryption is not supported for DER encoded " - "traditional OpenSSL keys" - ) - if key_type == self._lib.EVP_PKEY_RSA: - write_bio = self._lib.i2d_RSAPrivateKey_bio - else: - assert key_type == self._lib.EVP_PKEY_EC - write_bio = self._lib.i2d_ECPrivateKey_bio - return self._bio_func_output(write_bio, cdata) - - raise ValueError("Unsupported encoding for TraditionalOpenSSL") - - # OpenSSH + PEM - if format is serialization.PrivateFormat.OpenSSH: - if encoding is serialization.Encoding.PEM: - return ssh._serialize_ssh_private_key( - key, password, encryption_algorithm - ) - - raise ValueError( - "OpenSSH private key format can only be used" - " with PEM encoding" - ) - - # Anything that key-specific code was supposed to handle earlier, - # like Raw. - raise ValueError("format is invalid with this key") - - def _private_key_bytes_via_bio( - self, write_bio, evp_pkey, password - ) -> bytes: - if not password: - evp_cipher = self._ffi.NULL - else: - # This is a curated value that we will update over time. - evp_cipher = self._lib.EVP_get_cipherbyname(b"aes-256-cbc") - - return self._bio_func_output( - write_bio, - evp_pkey, - evp_cipher, - password, - len(password), - self._ffi.NULL, - self._ffi.NULL, - ) - - def _bio_func_output(self, write_bio, *args) -> bytes: - bio = self._create_mem_bio_gc() - res = write_bio(bio, *args) - self.openssl_assert(res == 1) - return self._read_mem_bio(bio) - - def _public_key_bytes( - self, - encoding: serialization.Encoding, - format: serialization.PublicFormat, - key, - evp_pkey, - cdata, - ) -> bytes: - if not isinstance(encoding, serialization.Encoding): - raise TypeError("encoding must be an item from the Encoding enum") - if not isinstance(format, serialization.PublicFormat): - raise TypeError( - "format must be an item from the PublicFormat enum" - ) - - # SubjectPublicKeyInfo + PEM/DER - if format is serialization.PublicFormat.SubjectPublicKeyInfo: - if encoding is serialization.Encoding.PEM: - write_bio = self._lib.PEM_write_bio_PUBKEY - elif encoding is serialization.Encoding.DER: - write_bio = self._lib.i2d_PUBKEY_bio - else: - raise ValueError( - "SubjectPublicKeyInfo works only with PEM or DER encoding" - ) - return self._bio_func_output(write_bio, evp_pkey) - - # PKCS1 + PEM/DER - if format is serialization.PublicFormat.PKCS1: - # Only RSA is supported here. - key_type = self._lib.EVP_PKEY_id(evp_pkey) - if key_type != self._lib.EVP_PKEY_RSA: - raise ValueError("PKCS1 format is supported only for RSA keys") - - if encoding is serialization.Encoding.PEM: - write_bio = self._lib.PEM_write_bio_RSAPublicKey - elif encoding is serialization.Encoding.DER: - write_bio = self._lib.i2d_RSAPublicKey_bio - else: - raise ValueError("PKCS1 works only with PEM or DER encoding") - return self._bio_func_output(write_bio, cdata) - - # OpenSSH + OpenSSH - if format is serialization.PublicFormat.OpenSSH: - if encoding is serialization.Encoding.OpenSSH: - return ssh.serialize_ssh_public_key(key) - - raise ValueError( - "OpenSSH format must be used with OpenSSH encoding" - ) - - # Anything that key-specific code was supposed to handle earlier, - # like Raw, CompressedPoint, UncompressedPoint - raise ValueError("format is invalid with this key") - def dh_supported(self) -> bool: - return not self._lib.CRYPTOGRAPHY_IS_BORINGSSL - - def generate_dh_parameters( - self, generator: int, key_size: int - ) -> dh.DHParameters: - return rust_openssl.dh.generate_parameters(generator, key_size) - - def generate_dh_private_key( - self, parameters: dh.DHParameters - ) -> dh.DHPrivateKey: - return parameters.generate_private_key() - - def generate_dh_private_key_and_parameters( - self, generator: int, key_size: int - ) -> dh.DHPrivateKey: - return self.generate_dh_private_key( - self.generate_dh_parameters(generator, key_size) + return ( + not rust_openssl.CRYPTOGRAPHY_IS_BORINGSSL + and not rust_openssl.CRYPTOGRAPHY_IS_AWSLC ) - def load_dh_private_numbers( - self, numbers: dh.DHPrivateNumbers - ) -> dh.DHPrivateKey: - return rust_openssl.dh.from_private_numbers(numbers) - - def load_dh_public_numbers( - self, numbers: dh.DHPublicNumbers - ) -> dh.DHPublicKey: - return rust_openssl.dh.from_public_numbers(numbers) - - def load_dh_parameter_numbers( - self, numbers: dh.DHParameterNumbers - ) -> dh.DHParameters: - return rust_openssl.dh.from_parameter_numbers(numbers) - - def dh_parameters_supported( - self, p: int, g: int, q: typing.Optional[int] = None - ) -> bool: - try: - rust_openssl.dh.from_parameter_numbers( - dh.DHParameterNumbers(p=p, g=g, q=q) - ) - except ValueError: - return False - else: - return True - def dh_x942_serialization_supported(self) -> bool: return self._lib.Cryptography_HAS_EVP_PKEY_DHX == 1 - def x25519_load_public_bytes(self, data: bytes) -> x25519.X25519PublicKey: - return rust_openssl.x25519.from_public_bytes(data) - - def x25519_load_private_bytes( - self, data: bytes - ) -> x25519.X25519PrivateKey: - return rust_openssl.x25519.from_private_bytes(data) - - def x25519_generate_key(self) -> x25519.X25519PrivateKey: - return rust_openssl.x25519.generate_key() - def x25519_supported(self) -> bool: - if self._fips_enabled: - return False - return not self._lib.CRYPTOGRAPHY_LIBRESSL_LESS_THAN_370 - - def x448_load_public_bytes(self, data: bytes) -> x448.X448PublicKey: - return rust_openssl.x448.from_public_bytes(data) - - def x448_load_private_bytes(self, data: bytes) -> x448.X448PrivateKey: - return rust_openssl.x448.from_private_bytes(data) - - def x448_generate_key(self) -> x448.X448PrivateKey: - return rust_openssl.x448.generate_key() + return not self._fips_enabled def x448_supported(self) -> bool: if self._fips_enabled: return False return ( - not self._lib.CRYPTOGRAPHY_IS_LIBRESSL - and not self._lib.CRYPTOGRAPHY_IS_BORINGSSL + not rust_openssl.CRYPTOGRAPHY_IS_LIBRESSL + and not rust_openssl.CRYPTOGRAPHY_IS_BORINGSSL + and not rust_openssl.CRYPTOGRAPHY_IS_AWSLC ) def ed25519_supported(self) -> bool: - if self._fips_enabled: - return False - return self._lib.CRYPTOGRAPHY_HAS_WORKING_ED25519 - - def ed25519_load_public_bytes( - self, data: bytes - ) -> ed25519.Ed25519PublicKey: - return rust_openssl.ed25519.from_public_bytes(data) - - def ed25519_load_private_bytes( - self, data: bytes - ) -> ed25519.Ed25519PrivateKey: - return rust_openssl.ed25519.from_private_bytes(data) - - def ed25519_generate_key(self) -> ed25519.Ed25519PrivateKey: - return rust_openssl.ed25519.generate_key() + return not self._fips_enabled def ed448_supported(self) -> bool: if self._fips_enabled: return False return ( - not self._lib.CRYPTOGRAPHY_IS_LIBRESSL - and not self._lib.CRYPTOGRAPHY_IS_BORINGSSL + not rust_openssl.CRYPTOGRAPHY_IS_LIBRESSL + and not rust_openssl.CRYPTOGRAPHY_IS_BORINGSSL + and not rust_openssl.CRYPTOGRAPHY_IS_AWSLC ) - def ed448_load_public_bytes(self, data: bytes) -> ed448.Ed448PublicKey: - return rust_openssl.ed448.from_public_bytes(data) - - def ed448_load_private_bytes(self, data: bytes) -> ed448.Ed448PrivateKey: - return rust_openssl.ed448.from_private_bytes(data) - - def ed448_generate_key(self) -> ed448.Ed448PrivateKey: - return rust_openssl.ed448.generate_key() - - def aead_cipher_supported(self, cipher) -> bool: - return aead._aead_cipher_supported(self, cipher) - - def _zero_data(self, data, length: int) -> None: - # We clear things this way because at the moment we're not - # sure of a better way that can guarantee it overwrites the - # memory of a bytearray and doesn't just replace the underlying char *. - for i in range(length): - data[i] = 0 - - @contextlib.contextmanager - def _zeroed_null_terminated_buf(self, data): - """ - This method takes bytes, which can be a bytestring or a mutable - buffer like a bytearray, and yields a null-terminated version of that - data. This is required because PKCS12_parse doesn't take a length with - its password char * and ffi.from_buffer doesn't provide null - termination. So, to support zeroing the data via bytearray we - need to build this ridiculous construct that copies the memory, but - zeroes it after use. - """ - if data is None: - yield self._ffi.NULL - else: - data_len = len(data) - buf = self._ffi.new("char[]", data_len + 1) - self._ffi.memmove(buf, data, data_len) - try: - yield buf - finally: - # Cast to a uint8_t * so we can assign by integer - self._zero_data(self._ffi.cast("uint8_t *", buf), data_len) - - def load_key_and_certificates_from_pkcs12( - self, data: bytes, password: typing.Optional[bytes] - ) -> typing.Tuple[ - typing.Optional[PrivateKeyTypes], - typing.Optional[x509.Certificate], - typing.List[x509.Certificate], - ]: - pkcs12 = self.load_pkcs12(data, password) + def ecdsa_deterministic_supported(self) -> bool: return ( - pkcs12.key, - pkcs12.cert.certificate if pkcs12.cert else None, - [cert.certificate for cert in pkcs12.additional_certs], + rust_openssl.CRYPTOGRAPHY_OPENSSL_320_OR_GREATER + and not self._fips_enabled ) - def load_pkcs12( - self, data: bytes, password: typing.Optional[bytes] - ) -> PKCS12KeyAndCertificates: - if password is not None: - utils._check_byteslike("password", password) - - bio = self._bytes_to_bio(data) - p12 = self._lib.d2i_PKCS12_bio(bio.bio, self._ffi.NULL) - if p12 == self._ffi.NULL: - self._consume_errors() - raise ValueError("Could not deserialize PKCS12 data") - - p12 = self._ffi.gc(p12, self._lib.PKCS12_free) - evp_pkey_ptr = self._ffi.new("EVP_PKEY **") - x509_ptr = self._ffi.new("X509 **") - sk_x509_ptr = self._ffi.new("Cryptography_STACK_OF_X509 **") - with self._zeroed_null_terminated_buf(password) as password_buf: - res = self._lib.PKCS12_parse( - p12, password_buf, evp_pkey_ptr, x509_ptr, sk_x509_ptr - ) - if res == 0: - self._consume_errors() - raise ValueError("Invalid password or PKCS12 data") - - cert = None - key = None - additional_certificates = [] - - if evp_pkey_ptr[0] != self._ffi.NULL: - evp_pkey = self._ffi.gc(evp_pkey_ptr[0], self._lib.EVP_PKEY_free) - # We don't support turning off RSA key validation when loading - # PKCS12 keys - key = self._evp_pkey_to_private_key( - evp_pkey, unsafe_skip_rsa_key_validation=False - ) - - if x509_ptr[0] != self._ffi.NULL: - x509 = self._ffi.gc(x509_ptr[0], self._lib.X509_free) - cert_obj = self._ossl2cert(x509) - name = None - maybe_name = self._lib.X509_alias_get0(x509, self._ffi.NULL) - if maybe_name != self._ffi.NULL: - name = self._ffi.string(maybe_name) - cert = PKCS12Certificate(cert_obj, name) - - if sk_x509_ptr[0] != self._ffi.NULL: - sk_x509 = self._ffi.gc(sk_x509_ptr[0], self._lib.sk_X509_free) - num = self._lib.sk_X509_num(sk_x509_ptr[0]) - - # In OpenSSL < 3.0.0 PKCS12 parsing reverses the order of the - # certificates. - indices: typing.Iterable[int] - if ( - self._lib.CRYPTOGRAPHY_OPENSSL_300_OR_GREATER - or self._lib.CRYPTOGRAPHY_IS_BORINGSSL - ): - indices = range(num) - else: - indices = reversed(range(num)) - - for i in indices: - x509 = self._lib.sk_X509_value(sk_x509, i) - self.openssl_assert(x509 != self._ffi.NULL) - x509 = self._ffi.gc(x509, self._lib.X509_free) - addl_cert = self._ossl2cert(x509) - addl_name = None - maybe_name = self._lib.X509_alias_get0(x509, self._ffi.NULL) - if maybe_name != self._ffi.NULL: - addl_name = self._ffi.string(maybe_name) - additional_certificates.append( - PKCS12Certificate(addl_cert, addl_name) - ) - - return PKCS12KeyAndCertificates(key, cert, additional_certificates) - - def serialize_key_and_certificates_to_pkcs12( - self, - name: typing.Optional[bytes], - key: typing.Optional[PKCS12PrivateKeyTypes], - cert: typing.Optional[x509.Certificate], - cas: typing.Optional[typing.List[_PKCS12CATypes]], - encryption_algorithm: serialization.KeySerializationEncryption, - ) -> bytes: - password = None - if name is not None: - utils._check_bytes("name", name) - - if isinstance(encryption_algorithm, serialization.NoEncryption): - nid_cert = -1 - nid_key = -1 - pkcs12_iter = 0 - mac_iter = 0 - mac_alg = self._ffi.NULL - elif isinstance( - encryption_algorithm, serialization.BestAvailableEncryption - ): - # PKCS12 encryption is hopeless trash and can never be fixed. - # OpenSSL 3 supports PBESv2, but Libre and Boring do not, so - # we use PBESv1 with 3DES on the older paths. - if self._lib.CRYPTOGRAPHY_OPENSSL_300_OR_GREATER: - nid_cert = self._lib.NID_aes_256_cbc - nid_key = self._lib.NID_aes_256_cbc - else: - nid_cert = self._lib.NID_pbe_WithSHA1And3_Key_TripleDES_CBC - nid_key = self._lib.NID_pbe_WithSHA1And3_Key_TripleDES_CBC - # At least we can set this higher than OpenSSL's default - pkcs12_iter = 20000 - # mac_iter chosen for compatibility reasons, see: - # https://www.openssl.org/docs/man1.1.1/man3/PKCS12_create.html - # Did we mention how lousy PKCS12 encryption is? - mac_iter = 1 - # MAC algorithm can only be set on OpenSSL 3.0.0+ - mac_alg = self._ffi.NULL - password = encryption_algorithm.password - elif ( - isinstance( - encryption_algorithm, serialization._KeySerializationEncryption - ) - and encryption_algorithm._format - is serialization.PrivateFormat.PKCS12 - ): - # Default to OpenSSL's defaults. Behavior will vary based on the - # version of OpenSSL cryptography is compiled against. - nid_cert = 0 - nid_key = 0 - # Use the default iters we use in best available - pkcs12_iter = 20000 - # See the Best Available comment for why this is 1 - mac_iter = 1 - password = encryption_algorithm.password - keycertalg = encryption_algorithm._key_cert_algorithm - if keycertalg is PBES.PBESv1SHA1And3KeyTripleDESCBC: - nid_cert = self._lib.NID_pbe_WithSHA1And3_Key_TripleDES_CBC - nid_key = self._lib.NID_pbe_WithSHA1And3_Key_TripleDES_CBC - elif keycertalg is PBES.PBESv2SHA256AndAES256CBC: - if not self._lib.CRYPTOGRAPHY_OPENSSL_300_OR_GREATER: - raise UnsupportedAlgorithm( - "PBESv2 is not supported by this version of OpenSSL" - ) - nid_cert = self._lib.NID_aes_256_cbc - nid_key = self._lib.NID_aes_256_cbc - else: - assert keycertalg is None - # We use OpenSSL's defaults - - if encryption_algorithm._hmac_hash is not None: - if not self._lib.Cryptography_HAS_PKCS12_SET_MAC: - raise UnsupportedAlgorithm( - "Setting MAC algorithm is not supported by this " - "version of OpenSSL." - ) - mac_alg = self._evp_md_non_null_from_algorithm( - encryption_algorithm._hmac_hash - ) - self.openssl_assert(mac_alg != self._ffi.NULL) - else: - mac_alg = self._ffi.NULL - - if encryption_algorithm._kdf_rounds is not None: - pkcs12_iter = encryption_algorithm._kdf_rounds - - else: - raise ValueError("Unsupported key encryption type") - - if cas is None or len(cas) == 0: - sk_x509 = self._ffi.NULL - else: - sk_x509 = self._lib.sk_X509_new_null() - sk_x509 = self._ffi.gc(sk_x509, self._lib.sk_X509_free) - - # This list is to keep the x509 values alive until end of function - ossl_cas = [] - for ca in cas: - if isinstance(ca, PKCS12Certificate): - ca_alias = ca.friendly_name - ossl_ca = self._cert2ossl(ca.certificate) - if ca_alias is None: - res = self._lib.X509_alias_set1( - ossl_ca, self._ffi.NULL, -1 - ) - else: - res = self._lib.X509_alias_set1( - ossl_ca, ca_alias, len(ca_alias) - ) - self.openssl_assert(res == 1) - else: - ossl_ca = self._cert2ossl(ca) - ossl_cas.append(ossl_ca) - res = self._lib.sk_X509_push(sk_x509, ossl_ca) - backend.openssl_assert(res >= 1) - - with self._zeroed_null_terminated_buf(password) as password_buf: - with self._zeroed_null_terminated_buf(name) as name_buf: - ossl_cert = self._cert2ossl(cert) if cert else self._ffi.NULL - ossl_pkey = ( - self._key2ossl(key) if key is not None else self._ffi.NULL - ) - - p12 = self._lib.PKCS12_create( - password_buf, - name_buf, - ossl_pkey, - ossl_cert, - sk_x509, - nid_key, - nid_cert, - pkcs12_iter, - mac_iter, - 0, - ) - - if ( - self._lib.Cryptography_HAS_PKCS12_SET_MAC - and mac_alg != self._ffi.NULL - ): - self._lib.PKCS12_set_mac( - p12, - password_buf, - -1, - self._ffi.NULL, - 0, - mac_iter, - mac_alg, - ) - - self.openssl_assert(p12 != self._ffi.NULL) - p12 = self._ffi.gc(p12, self._lib.PKCS12_free) - - bio = self._create_mem_bio_gc() - res = self._lib.i2d_PKCS12_bio(bio, p12) - self.openssl_assert(res > 0) - return self._read_mem_bio(bio) - def poly1305_supported(self) -> bool: - if self._fips_enabled: - return False - return self._lib.Cryptography_HAS_POLY1305 == 1 + return not self._fips_enabled def pkcs7_supported(self) -> bool: - return not self._lib.CRYPTOGRAPHY_IS_BORINGSSL - - def load_pem_pkcs7_certificates( - self, data: bytes - ) -> typing.List[x509.Certificate]: - utils._check_bytes("data", data) - bio = self._bytes_to_bio(data) - p7 = self._lib.PEM_read_bio_PKCS7( - bio.bio, self._ffi.NULL, self._ffi.NULL, self._ffi.NULL + return ( + not rust_openssl.CRYPTOGRAPHY_IS_BORINGSSL + and not rust_openssl.CRYPTOGRAPHY_IS_AWSLC ) - if p7 == self._ffi.NULL: - self._consume_errors() - raise ValueError("Unable to parse PKCS7 data") - - p7 = self._ffi.gc(p7, self._lib.PKCS7_free) - return self._load_pkcs7_certificates(p7) - - def load_der_pkcs7_certificates( - self, data: bytes - ) -> typing.List[x509.Certificate]: - utils._check_bytes("data", data) - bio = self._bytes_to_bio(data) - p7 = self._lib.d2i_PKCS7_bio(bio.bio, self._ffi.NULL) - if p7 == self._ffi.NULL: - self._consume_errors() - raise ValueError("Unable to parse PKCS7 data") - - p7 = self._ffi.gc(p7, self._lib.PKCS7_free) - return self._load_pkcs7_certificates(p7) - - def _load_pkcs7_certificates(self, p7) -> typing.List[x509.Certificate]: - nid = self._lib.OBJ_obj2nid(p7.type) - self.openssl_assert(nid != self._lib.NID_undef) - if nid != self._lib.NID_pkcs7_signed: - raise UnsupportedAlgorithm( - "Only basic signed structures are currently supported. NID" - " for this data was {}".format(nid), - _Reasons.UNSUPPORTED_SERIALIZATION, - ) - - certs: list[x509.Certificate] = [] - if p7.d.sign == self._ffi.NULL: - return certs - - sk_x509 = p7.d.sign.cert - num = self._lib.sk_X509_num(sk_x509) - for i in range(num): - x509 = self._lib.sk_X509_value(sk_x509, i) - self.openssl_assert(x509 != self._ffi.NULL) - cert = self._ossl2cert(x509) - certs.append(cert) - - return certs - - -class GetCipherByName: - def __init__(self, fmt: str): - self._fmt = fmt - - def __call__(self, backend: Backend, cipher: CipherAlgorithm, mode: Mode): - cipher_name = self._fmt.format(cipher=cipher, mode=mode).lower() - evp_cipher = backend._lib.EVP_get_cipherbyname( - cipher_name.encode("ascii") - ) - - # try EVP_CIPHER_fetch if present - if ( - evp_cipher == backend._ffi.NULL - and backend._lib.Cryptography_HAS_300_EVP_CIPHER - ): - evp_cipher = backend._lib.EVP_CIPHER_fetch( - backend._ffi.NULL, - cipher_name.encode("ascii"), - backend._ffi.NULL, - ) - - backend._consume_errors() - return evp_cipher - - -def _get_xts_cipher(backend: Backend, cipher: AES, mode): - cipher_name = f"aes-{cipher.key_size // 2}-xts" - return backend._lib.EVP_get_cipherbyname(cipher_name.encode("ascii")) backend = Backend() diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/ciphers.py b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/ciphers.py deleted file mode 100644 index bc42adbd..00000000 --- a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/ciphers.py +++ /dev/null @@ -1,281 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import typing - -from cryptography.exceptions import InvalidTag, UnsupportedAlgorithm, _Reasons -from cryptography.hazmat.primitives import ciphers -from cryptography.hazmat.primitives.ciphers import algorithms, modes - -if typing.TYPE_CHECKING: - from cryptography.hazmat.backends.openssl.backend import Backend - - -class _CipherContext: - _ENCRYPT = 1 - _DECRYPT = 0 - _MAX_CHUNK_SIZE = 2**30 - 1 - - def __init__(self, backend: Backend, cipher, mode, operation: int) -> None: - self._backend = backend - self._cipher = cipher - self._mode = mode - self._operation = operation - self._tag: typing.Optional[bytes] = None - - if isinstance(self._cipher, ciphers.BlockCipherAlgorithm): - self._block_size_bytes = self._cipher.block_size // 8 - else: - self._block_size_bytes = 1 - - ctx = self._backend._lib.EVP_CIPHER_CTX_new() - ctx = self._backend._ffi.gc( - ctx, self._backend._lib.EVP_CIPHER_CTX_free - ) - - registry = self._backend._cipher_registry - try: - adapter = registry[type(cipher), type(mode)] - except KeyError: - raise UnsupportedAlgorithm( - "cipher {} in {} mode is not supported " - "by this backend.".format( - cipher.name, mode.name if mode else mode - ), - _Reasons.UNSUPPORTED_CIPHER, - ) - - evp_cipher = adapter(self._backend, cipher, mode) - if evp_cipher == self._backend._ffi.NULL: - msg = f"cipher {cipher.name} " - if mode is not None: - msg += f"in {mode.name} mode " - msg += ( - "is not supported by this backend (Your version of OpenSSL " - "may be too old. Current version: {}.)" - ).format(self._backend.openssl_version_text()) - raise UnsupportedAlgorithm(msg, _Reasons.UNSUPPORTED_CIPHER) - - if isinstance(mode, modes.ModeWithInitializationVector): - iv_nonce = self._backend._ffi.from_buffer( - mode.initialization_vector - ) - elif isinstance(mode, modes.ModeWithTweak): - iv_nonce = self._backend._ffi.from_buffer(mode.tweak) - elif isinstance(mode, modes.ModeWithNonce): - iv_nonce = self._backend._ffi.from_buffer(mode.nonce) - elif isinstance(cipher, algorithms.ChaCha20): - iv_nonce = self._backend._ffi.from_buffer(cipher.nonce) - else: - iv_nonce = self._backend._ffi.NULL - # begin init with cipher and operation type - res = self._backend._lib.EVP_CipherInit_ex( - ctx, - evp_cipher, - self._backend._ffi.NULL, - self._backend._ffi.NULL, - self._backend._ffi.NULL, - operation, - ) - self._backend.openssl_assert(res != 0) - # set the key length to handle variable key ciphers - res = self._backend._lib.EVP_CIPHER_CTX_set_key_length( - ctx, len(cipher.key) - ) - self._backend.openssl_assert(res != 0) - if isinstance(mode, modes.GCM): - res = self._backend._lib.EVP_CIPHER_CTX_ctrl( - ctx, - self._backend._lib.EVP_CTRL_AEAD_SET_IVLEN, - len(iv_nonce), - self._backend._ffi.NULL, - ) - self._backend.openssl_assert(res != 0) - if mode.tag is not None: - res = self._backend._lib.EVP_CIPHER_CTX_ctrl( - ctx, - self._backend._lib.EVP_CTRL_AEAD_SET_TAG, - len(mode.tag), - mode.tag, - ) - self._backend.openssl_assert(res != 0) - self._tag = mode.tag - - # pass key/iv - res = self._backend._lib.EVP_CipherInit_ex( - ctx, - self._backend._ffi.NULL, - self._backend._ffi.NULL, - self._backend._ffi.from_buffer(cipher.key), - iv_nonce, - operation, - ) - - # Check for XTS mode duplicate keys error - errors = self._backend._consume_errors() - lib = self._backend._lib - if res == 0 and ( - ( - not lib.CRYPTOGRAPHY_IS_LIBRESSL - and errors[0]._lib_reason_match( - lib.ERR_LIB_EVP, lib.EVP_R_XTS_DUPLICATED_KEYS - ) - ) - or ( - lib.Cryptography_HAS_PROVIDERS - and errors[0]._lib_reason_match( - lib.ERR_LIB_PROV, lib.PROV_R_XTS_DUPLICATED_KEYS - ) - ) - ): - raise ValueError("In XTS mode duplicated keys are not allowed") - - self._backend.openssl_assert(res != 0, errors=errors) - - # We purposely disable padding here as it's handled higher up in the - # API. - self._backend._lib.EVP_CIPHER_CTX_set_padding(ctx, 0) - self._ctx = ctx - - def update(self, data: bytes) -> bytes: - buf = bytearray(len(data) + self._block_size_bytes - 1) - n = self.update_into(data, buf) - return bytes(buf[:n]) - - def update_into(self, data: bytes, buf: bytes) -> int: - total_data_len = len(data) - if len(buf) < (total_data_len + self._block_size_bytes - 1): - raise ValueError( - "buffer must be at least {} bytes for this " - "payload".format(len(data) + self._block_size_bytes - 1) - ) - - data_processed = 0 - total_out = 0 - outlen = self._backend._ffi.new("int *") - baseoutbuf = self._backend._ffi.from_buffer(buf, require_writable=True) - baseinbuf = self._backend._ffi.from_buffer(data) - - while data_processed != total_data_len: - outbuf = baseoutbuf + total_out - inbuf = baseinbuf + data_processed - inlen = min(self._MAX_CHUNK_SIZE, total_data_len - data_processed) - - res = self._backend._lib.EVP_CipherUpdate( - self._ctx, outbuf, outlen, inbuf, inlen - ) - if res == 0 and isinstance(self._mode, modes.XTS): - self._backend._consume_errors() - raise ValueError( - "In XTS mode you must supply at least a full block in the " - "first update call. For AES this is 16 bytes." - ) - else: - self._backend.openssl_assert(res != 0) - data_processed += inlen - total_out += outlen[0] - - return total_out - - def finalize(self) -> bytes: - if ( - self._operation == self._DECRYPT - and isinstance(self._mode, modes.ModeWithAuthenticationTag) - and self.tag is None - ): - raise ValueError( - "Authentication tag must be provided when decrypting." - ) - - buf = self._backend._ffi.new("unsigned char[]", self._block_size_bytes) - outlen = self._backend._ffi.new("int *") - res = self._backend._lib.EVP_CipherFinal_ex(self._ctx, buf, outlen) - if res == 0: - errors = self._backend._consume_errors() - - if not errors and isinstance(self._mode, modes.GCM): - raise InvalidTag - - lib = self._backend._lib - self._backend.openssl_assert( - errors[0]._lib_reason_match( - lib.ERR_LIB_EVP, - lib.EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH, - ) - or ( - lib.Cryptography_HAS_PROVIDERS - and errors[0]._lib_reason_match( - lib.ERR_LIB_PROV, - lib.PROV_R_WRONG_FINAL_BLOCK_LENGTH, - ) - ) - or ( - lib.CRYPTOGRAPHY_IS_BORINGSSL - and errors[0].reason - == lib.CIPHER_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH - ), - errors=errors, - ) - raise ValueError( - "The length of the provided data is not a multiple of " - "the block length." - ) - - if ( - isinstance(self._mode, modes.GCM) - and self._operation == self._ENCRYPT - ): - tag_buf = self._backend._ffi.new( - "unsigned char[]", self._block_size_bytes - ) - res = self._backend._lib.EVP_CIPHER_CTX_ctrl( - self._ctx, - self._backend._lib.EVP_CTRL_AEAD_GET_TAG, - self._block_size_bytes, - tag_buf, - ) - self._backend.openssl_assert(res != 0) - self._tag = self._backend._ffi.buffer(tag_buf)[:] - - res = self._backend._lib.EVP_CIPHER_CTX_reset(self._ctx) - self._backend.openssl_assert(res == 1) - return self._backend._ffi.buffer(buf)[: outlen[0]] - - def finalize_with_tag(self, tag: bytes) -> bytes: - tag_len = len(tag) - if tag_len < self._mode._min_tag_length: - raise ValueError( - "Authentication tag must be {} bytes or longer.".format( - self._mode._min_tag_length - ) - ) - elif tag_len > self._block_size_bytes: - raise ValueError( - "Authentication tag cannot be more than {} bytes.".format( - self._block_size_bytes - ) - ) - res = self._backend._lib.EVP_CIPHER_CTX_ctrl( - self._ctx, self._backend._lib.EVP_CTRL_AEAD_SET_TAG, len(tag), tag - ) - self._backend.openssl_assert(res != 0) - self._tag = tag - return self.finalize() - - def authenticate_additional_data(self, data: bytes) -> None: - outlen = self._backend._ffi.new("int *") - res = self._backend._lib.EVP_CipherUpdate( - self._ctx, - self._backend._ffi.NULL, - outlen, - self._backend._ffi.from_buffer(data), - len(data), - ) - self._backend.openssl_assert(res != 0) - - @property - def tag(self) -> typing.Optional[bytes]: - return self._tag diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/cmac.py b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/cmac.py deleted file mode 100644 index bdd7fec6..00000000 --- a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/cmac.py +++ /dev/null @@ -1,89 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import typing - -from cryptography.exceptions import ( - InvalidSignature, - UnsupportedAlgorithm, - _Reasons, -) -from cryptography.hazmat.primitives import constant_time -from cryptography.hazmat.primitives.ciphers.modes import CBC - -if typing.TYPE_CHECKING: - from cryptography.hazmat.backends.openssl.backend import Backend - from cryptography.hazmat.primitives import ciphers - - -class _CMACContext: - def __init__( - self, - backend: Backend, - algorithm: ciphers.BlockCipherAlgorithm, - ctx=None, - ) -> None: - if not backend.cmac_algorithm_supported(algorithm): - raise UnsupportedAlgorithm( - "This backend does not support CMAC.", - _Reasons.UNSUPPORTED_CIPHER, - ) - - self._backend = backend - self._key = algorithm.key - self._algorithm = algorithm - self._output_length = algorithm.block_size // 8 - - if ctx is None: - registry = self._backend._cipher_registry - adapter = registry[type(algorithm), CBC] - - evp_cipher = adapter(self._backend, algorithm, CBC) - - ctx = self._backend._lib.CMAC_CTX_new() - - self._backend.openssl_assert(ctx != self._backend._ffi.NULL) - ctx = self._backend._ffi.gc(ctx, self._backend._lib.CMAC_CTX_free) - - key_ptr = self._backend._ffi.from_buffer(self._key) - res = self._backend._lib.CMAC_Init( - ctx, - key_ptr, - len(self._key), - evp_cipher, - self._backend._ffi.NULL, - ) - self._backend.openssl_assert(res == 1) - - self._ctx = ctx - - def update(self, data: bytes) -> None: - res = self._backend._lib.CMAC_Update(self._ctx, data, len(data)) - self._backend.openssl_assert(res == 1) - - def finalize(self) -> bytes: - buf = self._backend._ffi.new("unsigned char[]", self._output_length) - length = self._backend._ffi.new("size_t *", self._output_length) - res = self._backend._lib.CMAC_Final(self._ctx, buf, length) - self._backend.openssl_assert(res == 1) - - self._ctx = None - - return self._backend._ffi.buffer(buf)[:] - - def copy(self) -> _CMACContext: - copied_ctx = self._backend._lib.CMAC_CTX_new() - copied_ctx = self._backend._ffi.gc( - copied_ctx, self._backend._lib.CMAC_CTX_free - ) - res = self._backend._lib.CMAC_CTX_copy(copied_ctx, self._ctx) - self._backend.openssl_assert(res == 1) - return _CMACContext(self._backend, self._algorithm, ctx=copied_ctx) - - def verify(self, signature: bytes) -> None: - digest = self.finalize() - if not constant_time.bytes_eq(digest, signature): - raise InvalidSignature("Signature did not match digest.") diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/decode_asn1.py b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/decode_asn1.py deleted file mode 100644 index bf123b62..00000000 --- a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/decode_asn1.py +++ /dev/null @@ -1,32 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -from cryptography import x509 - -# CRLReason ::= ENUMERATED { -# unspecified (0), -# keyCompromise (1), -# cACompromise (2), -# affiliationChanged (3), -# superseded (4), -# cessationOfOperation (5), -# certificateHold (6), -# -- value 7 is not used -# removeFromCRL (8), -# privilegeWithdrawn (9), -# aACompromise (10) } -_CRL_ENTRY_REASON_ENUM_TO_CODE = { - x509.ReasonFlags.unspecified: 0, - x509.ReasonFlags.key_compromise: 1, - x509.ReasonFlags.ca_compromise: 2, - x509.ReasonFlags.affiliation_changed: 3, - x509.ReasonFlags.superseded: 4, - x509.ReasonFlags.cessation_of_operation: 5, - x509.ReasonFlags.certificate_hold: 6, - x509.ReasonFlags.remove_from_crl: 8, - x509.ReasonFlags.privilege_withdrawn: 9, - x509.ReasonFlags.aa_compromise: 10, -} diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/ec.py b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/ec.py deleted file mode 100644 index 9821bd19..00000000 --- a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/ec.py +++ /dev/null @@ -1,328 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import typing - -from cryptography.exceptions import ( - InvalidSignature, - UnsupportedAlgorithm, - _Reasons, -) -from cryptography.hazmat.backends.openssl.utils import ( - _calculate_digest_and_algorithm, - _evp_pkey_derive, -) -from cryptography.hazmat.primitives import serialization -from cryptography.hazmat.primitives.asymmetric import ec - -if typing.TYPE_CHECKING: - from cryptography.hazmat.backends.openssl.backend import Backend - - -def _check_signature_algorithm( - signature_algorithm: ec.EllipticCurveSignatureAlgorithm, -) -> None: - if not isinstance(signature_algorithm, ec.ECDSA): - raise UnsupportedAlgorithm( - "Unsupported elliptic curve signature algorithm.", - _Reasons.UNSUPPORTED_PUBLIC_KEY_ALGORITHM, - ) - - -def _ec_key_curve_sn(backend: Backend, ec_key) -> str: - group = backend._lib.EC_KEY_get0_group(ec_key) - backend.openssl_assert(group != backend._ffi.NULL) - - nid = backend._lib.EC_GROUP_get_curve_name(group) - # The following check is to find EC keys with unnamed curves and raise - # an error for now. - if nid == backend._lib.NID_undef: - raise ValueError( - "ECDSA keys with explicit parameters are unsupported at this time" - ) - - # This is like the above check, but it also catches the case where you - # explicitly encoded a curve with the same parameters as a named curve. - # Don't do that. - if ( - not backend._lib.CRYPTOGRAPHY_IS_LIBRESSL - and backend._lib.EC_GROUP_get_asn1_flag(group) == 0 - ): - raise ValueError( - "ECDSA keys with explicit parameters are unsupported at this time" - ) - - curve_name = backend._lib.OBJ_nid2sn(nid) - backend.openssl_assert(curve_name != backend._ffi.NULL) - - sn = backend._ffi.string(curve_name).decode("ascii") - return sn - - -def _mark_asn1_named_ec_curve(backend: Backend, ec_cdata): - """ - Set the named curve flag on the EC_KEY. This causes OpenSSL to - serialize EC keys along with their curve OID which makes - deserialization easier. - """ - - backend._lib.EC_KEY_set_asn1_flag( - ec_cdata, backend._lib.OPENSSL_EC_NAMED_CURVE - ) - - -def _check_key_infinity(backend: Backend, ec_cdata) -> None: - point = backend._lib.EC_KEY_get0_public_key(ec_cdata) - backend.openssl_assert(point != backend._ffi.NULL) - group = backend._lib.EC_KEY_get0_group(ec_cdata) - backend.openssl_assert(group != backend._ffi.NULL) - if backend._lib.EC_POINT_is_at_infinity(group, point): - raise ValueError( - "Cannot load an EC public key where the point is at infinity" - ) - - -def _sn_to_elliptic_curve(backend: Backend, sn: str) -> ec.EllipticCurve: - try: - return ec._CURVE_TYPES[sn]() - except KeyError: - raise UnsupportedAlgorithm( - f"{sn} is not a supported elliptic curve", - _Reasons.UNSUPPORTED_ELLIPTIC_CURVE, - ) - - -def _ecdsa_sig_sign( - backend: Backend, private_key: _EllipticCurvePrivateKey, data: bytes -) -> bytes: - max_size = backend._lib.ECDSA_size(private_key._ec_key) - backend.openssl_assert(max_size > 0) - - sigbuf = backend._ffi.new("unsigned char[]", max_size) - siglen_ptr = backend._ffi.new("unsigned int[]", 1) - res = backend._lib.ECDSA_sign( - 0, data, len(data), sigbuf, siglen_ptr, private_key._ec_key - ) - backend.openssl_assert(res == 1) - return backend._ffi.buffer(sigbuf)[: siglen_ptr[0]] - - -def _ecdsa_sig_verify( - backend: Backend, - public_key: _EllipticCurvePublicKey, - signature: bytes, - data: bytes, -) -> None: - res = backend._lib.ECDSA_verify( - 0, data, len(data), signature, len(signature), public_key._ec_key - ) - if res != 1: - backend._consume_errors() - raise InvalidSignature - - -class _EllipticCurvePrivateKey(ec.EllipticCurvePrivateKey): - def __init__(self, backend: Backend, ec_key_cdata, evp_pkey): - self._backend = backend - self._ec_key = ec_key_cdata - self._evp_pkey = evp_pkey - - sn = _ec_key_curve_sn(backend, ec_key_cdata) - self._curve = _sn_to_elliptic_curve(backend, sn) - _mark_asn1_named_ec_curve(backend, ec_key_cdata) - _check_key_infinity(backend, ec_key_cdata) - - @property - def curve(self) -> ec.EllipticCurve: - return self._curve - - @property - def key_size(self) -> int: - return self.curve.key_size - - def exchange( - self, algorithm: ec.ECDH, peer_public_key: ec.EllipticCurvePublicKey - ) -> bytes: - if not ( - self._backend.elliptic_curve_exchange_algorithm_supported( - algorithm, self.curve - ) - ): - raise UnsupportedAlgorithm( - "This backend does not support the ECDH algorithm.", - _Reasons.UNSUPPORTED_EXCHANGE_ALGORITHM, - ) - - if peer_public_key.curve.name != self.curve.name: - raise ValueError( - "peer_public_key and self are not on the same curve" - ) - - return _evp_pkey_derive(self._backend, self._evp_pkey, peer_public_key) - - def public_key(self) -> ec.EllipticCurvePublicKey: - group = self._backend._lib.EC_KEY_get0_group(self._ec_key) - self._backend.openssl_assert(group != self._backend._ffi.NULL) - - curve_nid = self._backend._lib.EC_GROUP_get_curve_name(group) - public_ec_key = self._backend._ec_key_new_by_curve_nid(curve_nid) - - point = self._backend._lib.EC_KEY_get0_public_key(self._ec_key) - self._backend.openssl_assert(point != self._backend._ffi.NULL) - - res = self._backend._lib.EC_KEY_set_public_key(public_ec_key, point) - self._backend.openssl_assert(res == 1) - - evp_pkey = self._backend._ec_cdata_to_evp_pkey(public_ec_key) - - return _EllipticCurvePublicKey(self._backend, public_ec_key, evp_pkey) - - def private_numbers(self) -> ec.EllipticCurvePrivateNumbers: - bn = self._backend._lib.EC_KEY_get0_private_key(self._ec_key) - private_value = self._backend._bn_to_int(bn) - return ec.EllipticCurvePrivateNumbers( - private_value=private_value, - public_numbers=self.public_key().public_numbers(), - ) - - def private_bytes( - self, - encoding: serialization.Encoding, - format: serialization.PrivateFormat, - encryption_algorithm: serialization.KeySerializationEncryption, - ) -> bytes: - return self._backend._private_key_bytes( - encoding, - format, - encryption_algorithm, - self, - self._evp_pkey, - self._ec_key, - ) - - def sign( - self, - data: bytes, - signature_algorithm: ec.EllipticCurveSignatureAlgorithm, - ) -> bytes: - _check_signature_algorithm(signature_algorithm) - data, _ = _calculate_digest_and_algorithm( - data, - signature_algorithm.algorithm, - ) - return _ecdsa_sig_sign(self._backend, self, data) - - -class _EllipticCurvePublicKey(ec.EllipticCurvePublicKey): - def __init__(self, backend: Backend, ec_key_cdata, evp_pkey): - self._backend = backend - self._ec_key = ec_key_cdata - self._evp_pkey = evp_pkey - - sn = _ec_key_curve_sn(backend, ec_key_cdata) - self._curve = _sn_to_elliptic_curve(backend, sn) - _mark_asn1_named_ec_curve(backend, ec_key_cdata) - _check_key_infinity(backend, ec_key_cdata) - - @property - def curve(self) -> ec.EllipticCurve: - return self._curve - - @property - def key_size(self) -> int: - return self.curve.key_size - - def __eq__(self, other: object) -> bool: - if not isinstance(other, _EllipticCurvePublicKey): - return NotImplemented - - return ( - self._backend._lib.EVP_PKEY_cmp(self._evp_pkey, other._evp_pkey) - == 1 - ) - - def public_numbers(self) -> ec.EllipticCurvePublicNumbers: - group = self._backend._lib.EC_KEY_get0_group(self._ec_key) - self._backend.openssl_assert(group != self._backend._ffi.NULL) - - point = self._backend._lib.EC_KEY_get0_public_key(self._ec_key) - self._backend.openssl_assert(point != self._backend._ffi.NULL) - - with self._backend._tmp_bn_ctx() as bn_ctx: - bn_x = self._backend._lib.BN_CTX_get(bn_ctx) - bn_y = self._backend._lib.BN_CTX_get(bn_ctx) - - res = self._backend._lib.EC_POINT_get_affine_coordinates( - group, point, bn_x, bn_y, bn_ctx - ) - self._backend.openssl_assert(res == 1) - - x = self._backend._bn_to_int(bn_x) - y = self._backend._bn_to_int(bn_y) - - return ec.EllipticCurvePublicNumbers(x=x, y=y, curve=self._curve) - - def _encode_point(self, format: serialization.PublicFormat) -> bytes: - if format is serialization.PublicFormat.CompressedPoint: - conversion = self._backend._lib.POINT_CONVERSION_COMPRESSED - else: - assert format is serialization.PublicFormat.UncompressedPoint - conversion = self._backend._lib.POINT_CONVERSION_UNCOMPRESSED - - group = self._backend._lib.EC_KEY_get0_group(self._ec_key) - self._backend.openssl_assert(group != self._backend._ffi.NULL) - point = self._backend._lib.EC_KEY_get0_public_key(self._ec_key) - self._backend.openssl_assert(point != self._backend._ffi.NULL) - with self._backend._tmp_bn_ctx() as bn_ctx: - buflen = self._backend._lib.EC_POINT_point2oct( - group, point, conversion, self._backend._ffi.NULL, 0, bn_ctx - ) - self._backend.openssl_assert(buflen > 0) - buf = self._backend._ffi.new("char[]", buflen) - res = self._backend._lib.EC_POINT_point2oct( - group, point, conversion, buf, buflen, bn_ctx - ) - self._backend.openssl_assert(buflen == res) - - return self._backend._ffi.buffer(buf)[:] - - def public_bytes( - self, - encoding: serialization.Encoding, - format: serialization.PublicFormat, - ) -> bytes: - if ( - encoding is serialization.Encoding.X962 - or format is serialization.PublicFormat.CompressedPoint - or format is serialization.PublicFormat.UncompressedPoint - ): - if encoding is not serialization.Encoding.X962 or format not in ( - serialization.PublicFormat.CompressedPoint, - serialization.PublicFormat.UncompressedPoint, - ): - raise ValueError( - "X962 encoding must be used with CompressedPoint or " - "UncompressedPoint format" - ) - - return self._encode_point(format) - else: - return self._backend._public_key_bytes( - encoding, format, self, self._evp_pkey, None - ) - - def verify( - self, - signature: bytes, - data: bytes, - signature_algorithm: ec.EllipticCurveSignatureAlgorithm, - ) -> None: - _check_signature_algorithm(signature_algorithm) - data, _ = _calculate_digest_and_algorithm( - data, - signature_algorithm.algorithm, - ) - _ecdsa_sig_verify(self._backend, self, signature, data) diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/rsa.py b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/rsa.py deleted file mode 100644 index ef27d4ea..00000000 --- a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/rsa.py +++ /dev/null @@ -1,599 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import threading -import typing - -from cryptography.exceptions import ( - InvalidSignature, - UnsupportedAlgorithm, - _Reasons, -) -from cryptography.hazmat.backends.openssl.utils import ( - _calculate_digest_and_algorithm, -) -from cryptography.hazmat.primitives import hashes, serialization -from cryptography.hazmat.primitives.asymmetric import utils as asym_utils -from cryptography.hazmat.primitives.asymmetric.padding import ( - MGF1, - OAEP, - PSS, - AsymmetricPadding, - PKCS1v15, - _Auto, - _DigestLength, - _MaxLength, - calculate_max_pss_salt_length, -) -from cryptography.hazmat.primitives.asymmetric.rsa import ( - RSAPrivateKey, - RSAPrivateNumbers, - RSAPublicKey, - RSAPublicNumbers, -) - -if typing.TYPE_CHECKING: - from cryptography.hazmat.backends.openssl.backend import Backend - - -def _get_rsa_pss_salt_length( - backend: Backend, - pss: PSS, - key: typing.Union[RSAPrivateKey, RSAPublicKey], - hash_algorithm: hashes.HashAlgorithm, -) -> int: - salt = pss._salt_length - - if isinstance(salt, _MaxLength): - return calculate_max_pss_salt_length(key, hash_algorithm) - elif isinstance(salt, _DigestLength): - return hash_algorithm.digest_size - elif isinstance(salt, _Auto): - if isinstance(key, RSAPrivateKey): - raise ValueError( - "PSS salt length can only be set to AUTO when verifying" - ) - return backend._lib.RSA_PSS_SALTLEN_AUTO - else: - return salt - - -def _enc_dec_rsa( - backend: Backend, - key: typing.Union[_RSAPrivateKey, _RSAPublicKey], - data: bytes, - padding: AsymmetricPadding, -) -> bytes: - if not isinstance(padding, AsymmetricPadding): - raise TypeError("Padding must be an instance of AsymmetricPadding.") - - if isinstance(padding, PKCS1v15): - padding_enum = backend._lib.RSA_PKCS1_PADDING - elif isinstance(padding, OAEP): - padding_enum = backend._lib.RSA_PKCS1_OAEP_PADDING - - if not isinstance(padding._mgf, MGF1): - raise UnsupportedAlgorithm( - "Only MGF1 is supported by this backend.", - _Reasons.UNSUPPORTED_MGF, - ) - - if not backend.rsa_padding_supported(padding): - raise UnsupportedAlgorithm( - "This combination of padding and hash algorithm is not " - "supported by this backend.", - _Reasons.UNSUPPORTED_PADDING, - ) - - else: - raise UnsupportedAlgorithm( - f"{padding.name} is not supported by this backend.", - _Reasons.UNSUPPORTED_PADDING, - ) - - return _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum, padding) - - -def _enc_dec_rsa_pkey_ctx( - backend: Backend, - key: typing.Union[_RSAPrivateKey, _RSAPublicKey], - data: bytes, - padding_enum: int, - padding: AsymmetricPadding, -) -> bytes: - init: typing.Callable[[typing.Any], int] - crypt: typing.Callable[[typing.Any, typing.Any, int, bytes, int], int] - if isinstance(key, _RSAPublicKey): - init = backend._lib.EVP_PKEY_encrypt_init - crypt = backend._lib.EVP_PKEY_encrypt - else: - init = backend._lib.EVP_PKEY_decrypt_init - crypt = backend._lib.EVP_PKEY_decrypt - - pkey_ctx = backend._lib.EVP_PKEY_CTX_new(key._evp_pkey, backend._ffi.NULL) - backend.openssl_assert(pkey_ctx != backend._ffi.NULL) - pkey_ctx = backend._ffi.gc(pkey_ctx, backend._lib.EVP_PKEY_CTX_free) - res = init(pkey_ctx) - backend.openssl_assert(res == 1) - res = backend._lib.EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, padding_enum) - backend.openssl_assert(res > 0) - buf_size = backend._lib.EVP_PKEY_size(key._evp_pkey) - backend.openssl_assert(buf_size > 0) - if isinstance(padding, OAEP): - mgf1_md = backend._evp_md_non_null_from_algorithm( - padding._mgf._algorithm - ) - res = backend._lib.EVP_PKEY_CTX_set_rsa_mgf1_md(pkey_ctx, mgf1_md) - backend.openssl_assert(res > 0) - oaep_md = backend._evp_md_non_null_from_algorithm(padding._algorithm) - res = backend._lib.EVP_PKEY_CTX_set_rsa_oaep_md(pkey_ctx, oaep_md) - backend.openssl_assert(res > 0) - - if ( - isinstance(padding, OAEP) - and padding._label is not None - and len(padding._label) > 0 - ): - # set0_rsa_oaep_label takes ownership of the char * so we need to - # copy it into some new memory - labelptr = backend._lib.OPENSSL_malloc(len(padding._label)) - backend.openssl_assert(labelptr != backend._ffi.NULL) - backend._ffi.memmove(labelptr, padding._label, len(padding._label)) - res = backend._lib.EVP_PKEY_CTX_set0_rsa_oaep_label( - pkey_ctx, labelptr, len(padding._label) - ) - backend.openssl_assert(res == 1) - - outlen = backend._ffi.new("size_t *", buf_size) - buf = backend._ffi.new("unsigned char[]", buf_size) - # Everything from this line onwards is written with the goal of being as - # constant-time as is practical given the constraints of Python and our - # API. See Bleichenbacher's '98 attack on RSA, and its many many variants. - # As such, you should not attempt to change this (particularly to "clean it - # up") without understanding why it was written this way (see - # Chesterton's Fence), and without measuring to verify you have not - # introduced observable time differences. - res = crypt(pkey_ctx, buf, outlen, data, len(data)) - resbuf = backend._ffi.buffer(buf)[: outlen[0]] - backend._lib.ERR_clear_error() - if res <= 0: - raise ValueError("Encryption/decryption failed.") - return resbuf - - -def _rsa_sig_determine_padding( - backend: Backend, - key: typing.Union[_RSAPrivateKey, _RSAPublicKey], - padding: AsymmetricPadding, - algorithm: typing.Optional[hashes.HashAlgorithm], -) -> int: - if not isinstance(padding, AsymmetricPadding): - raise TypeError("Expected provider of AsymmetricPadding.") - - pkey_size = backend._lib.EVP_PKEY_size(key._evp_pkey) - backend.openssl_assert(pkey_size > 0) - - if isinstance(padding, PKCS1v15): - # Hash algorithm is ignored for PKCS1v15-padding, may be None. - padding_enum = backend._lib.RSA_PKCS1_PADDING - elif isinstance(padding, PSS): - if not isinstance(padding._mgf, MGF1): - raise UnsupportedAlgorithm( - "Only MGF1 is supported by this backend.", - _Reasons.UNSUPPORTED_MGF, - ) - - # PSS padding requires a hash algorithm - if not isinstance(algorithm, hashes.HashAlgorithm): - raise TypeError("Expected instance of hashes.HashAlgorithm.") - - # Size of key in bytes - 2 is the maximum - # PSS signature length (salt length is checked later) - if pkey_size - algorithm.digest_size - 2 < 0: - raise ValueError( - "Digest too large for key size. Use a larger " - "key or different digest." - ) - - padding_enum = backend._lib.RSA_PKCS1_PSS_PADDING - else: - raise UnsupportedAlgorithm( - f"{padding.name} is not supported by this backend.", - _Reasons.UNSUPPORTED_PADDING, - ) - - return padding_enum - - -# Hash algorithm can be absent (None) to initialize the context without setting -# any message digest algorithm. This is currently only valid for the PKCS1v15 -# padding type, where it means that the signature data is encoded/decoded -# as provided, without being wrapped in a DigestInfo structure. -def _rsa_sig_setup( - backend: Backend, - padding: AsymmetricPadding, - algorithm: typing.Optional[hashes.HashAlgorithm], - key: typing.Union[_RSAPublicKey, _RSAPrivateKey], - init_func: typing.Callable[[typing.Any], int], -): - padding_enum = _rsa_sig_determine_padding(backend, key, padding, algorithm) - pkey_ctx = backend._lib.EVP_PKEY_CTX_new(key._evp_pkey, backend._ffi.NULL) - backend.openssl_assert(pkey_ctx != backend._ffi.NULL) - pkey_ctx = backend._ffi.gc(pkey_ctx, backend._lib.EVP_PKEY_CTX_free) - res = init_func(pkey_ctx) - if res != 1: - errors = backend._consume_errors() - raise ValueError("Unable to sign/verify with this key", errors) - - if algorithm is not None: - evp_md = backend._evp_md_non_null_from_algorithm(algorithm) - res = backend._lib.EVP_PKEY_CTX_set_signature_md(pkey_ctx, evp_md) - if res <= 0: - backend._consume_errors() - raise UnsupportedAlgorithm( - "{} is not supported by this backend for RSA signing.".format( - algorithm.name - ), - _Reasons.UNSUPPORTED_HASH, - ) - res = backend._lib.EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, padding_enum) - if res <= 0: - backend._consume_errors() - raise UnsupportedAlgorithm( - "{} is not supported for the RSA signature operation.".format( - padding.name - ), - _Reasons.UNSUPPORTED_PADDING, - ) - if isinstance(padding, PSS): - assert isinstance(algorithm, hashes.HashAlgorithm) - res = backend._lib.EVP_PKEY_CTX_set_rsa_pss_saltlen( - pkey_ctx, - _get_rsa_pss_salt_length(backend, padding, key, algorithm), - ) - backend.openssl_assert(res > 0) - - mgf1_md = backend._evp_md_non_null_from_algorithm( - padding._mgf._algorithm - ) - res = backend._lib.EVP_PKEY_CTX_set_rsa_mgf1_md(pkey_ctx, mgf1_md) - backend.openssl_assert(res > 0) - - return pkey_ctx - - -def _rsa_sig_sign( - backend: Backend, - padding: AsymmetricPadding, - algorithm: hashes.HashAlgorithm, - private_key: _RSAPrivateKey, - data: bytes, -) -> bytes: - pkey_ctx = _rsa_sig_setup( - backend, - padding, - algorithm, - private_key, - backend._lib.EVP_PKEY_sign_init, - ) - buflen = backend._ffi.new("size_t *") - res = backend._lib.EVP_PKEY_sign( - pkey_ctx, backend._ffi.NULL, buflen, data, len(data) - ) - backend.openssl_assert(res == 1) - buf = backend._ffi.new("unsigned char[]", buflen[0]) - res = backend._lib.EVP_PKEY_sign(pkey_ctx, buf, buflen, data, len(data)) - if res != 1: - errors = backend._consume_errors() - raise ValueError( - "Digest or salt length too long for key size. Use a larger key " - "or shorter salt length if you are specifying a PSS salt", - errors, - ) - - return backend._ffi.buffer(buf)[:] - - -def _rsa_sig_verify( - backend: Backend, - padding: AsymmetricPadding, - algorithm: hashes.HashAlgorithm, - public_key: _RSAPublicKey, - signature: bytes, - data: bytes, -) -> None: - pkey_ctx = _rsa_sig_setup( - backend, - padding, - algorithm, - public_key, - backend._lib.EVP_PKEY_verify_init, - ) - res = backend._lib.EVP_PKEY_verify( - pkey_ctx, signature, len(signature), data, len(data) - ) - # The previous call can return negative numbers in the event of an - # error. This is not a signature failure but we need to fail if it - # occurs. - backend.openssl_assert(res >= 0) - if res == 0: - backend._consume_errors() - raise InvalidSignature - - -def _rsa_sig_recover( - backend: Backend, - padding: AsymmetricPadding, - algorithm: typing.Optional[hashes.HashAlgorithm], - public_key: _RSAPublicKey, - signature: bytes, -) -> bytes: - pkey_ctx = _rsa_sig_setup( - backend, - padding, - algorithm, - public_key, - backend._lib.EVP_PKEY_verify_recover_init, - ) - - # Attempt to keep the rest of the code in this function as constant/time - # as possible. See the comment in _enc_dec_rsa_pkey_ctx. Note that the - # buflen parameter is used even though its value may be undefined in the - # error case. Due to the tolerant nature of Python slicing this does not - # trigger any exceptions. - maxlen = backend._lib.EVP_PKEY_size(public_key._evp_pkey) - backend.openssl_assert(maxlen > 0) - buf = backend._ffi.new("unsigned char[]", maxlen) - buflen = backend._ffi.new("size_t *", maxlen) - res = backend._lib.EVP_PKEY_verify_recover( - pkey_ctx, buf, buflen, signature, len(signature) - ) - resbuf = backend._ffi.buffer(buf)[: buflen[0]] - backend._lib.ERR_clear_error() - # Assume that all parameter errors are handled during the setup phase and - # any error here is due to invalid signature. - if res != 1: - raise InvalidSignature - return resbuf - - -class _RSAPrivateKey(RSAPrivateKey): - _evp_pkey: object - _rsa_cdata: object - _key_size: int - - def __init__( - self, - backend: Backend, - rsa_cdata, - evp_pkey, - *, - unsafe_skip_rsa_key_validation: bool, - ): - res: int - # RSA_check_key is slower in OpenSSL 3.0.0 due to improved - # primality checking. In normal use this is unlikely to be a problem - # since users don't load new keys constantly, but for TESTING we've - # added an init arg that allows skipping the checks. You should not - # use this in production code unless you understand the consequences. - if not unsafe_skip_rsa_key_validation: - res = backend._lib.RSA_check_key(rsa_cdata) - if res != 1: - errors = backend._consume_errors() - raise ValueError("Invalid private key", errors) - # 2 is prime and passes an RSA key check, so we also check - # if p and q are odd just to be safe. - p = backend._ffi.new("BIGNUM **") - q = backend._ffi.new("BIGNUM **") - backend._lib.RSA_get0_factors(rsa_cdata, p, q) - backend.openssl_assert(p[0] != backend._ffi.NULL) - backend.openssl_assert(q[0] != backend._ffi.NULL) - p_odd = backend._lib.BN_is_odd(p[0]) - q_odd = backend._lib.BN_is_odd(q[0]) - if p_odd != 1 or q_odd != 1: - errors = backend._consume_errors() - raise ValueError("Invalid private key", errors) - - self._backend = backend - self._rsa_cdata = rsa_cdata - self._evp_pkey = evp_pkey - # Used for lazy blinding - self._blinded = False - self._blinding_lock = threading.Lock() - - n = self._backend._ffi.new("BIGNUM **") - self._backend._lib.RSA_get0_key( - self._rsa_cdata, - n, - self._backend._ffi.NULL, - self._backend._ffi.NULL, - ) - self._backend.openssl_assert(n[0] != self._backend._ffi.NULL) - self._key_size = self._backend._lib.BN_num_bits(n[0]) - - def _enable_blinding(self) -> None: - # If you call blind on an already blinded RSA key OpenSSL will turn - # it off and back on, which is a performance hit we want to avoid. - if not self._blinded: - with self._blinding_lock: - self._non_threadsafe_enable_blinding() - - def _non_threadsafe_enable_blinding(self) -> None: - # This is only a separate function to allow for testing to cover both - # branches. It should never be invoked except through _enable_blinding. - # Check if it's not True again in case another thread raced past the - # first non-locked check. - if not self._blinded: - res = self._backend._lib.RSA_blinding_on( - self._rsa_cdata, self._backend._ffi.NULL - ) - self._backend.openssl_assert(res == 1) - self._blinded = True - - @property - def key_size(self) -> int: - return self._key_size - - def decrypt(self, ciphertext: bytes, padding: AsymmetricPadding) -> bytes: - self._enable_blinding() - key_size_bytes = (self.key_size + 7) // 8 - if key_size_bytes != len(ciphertext): - raise ValueError("Ciphertext length must be equal to key size.") - - return _enc_dec_rsa(self._backend, self, ciphertext, padding) - - def public_key(self) -> RSAPublicKey: - ctx = self._backend._lib.RSAPublicKey_dup(self._rsa_cdata) - self._backend.openssl_assert(ctx != self._backend._ffi.NULL) - ctx = self._backend._ffi.gc(ctx, self._backend._lib.RSA_free) - evp_pkey = self._backend._rsa_cdata_to_evp_pkey(ctx) - return _RSAPublicKey(self._backend, ctx, evp_pkey) - - def private_numbers(self) -> RSAPrivateNumbers: - n = self._backend._ffi.new("BIGNUM **") - e = self._backend._ffi.new("BIGNUM **") - d = self._backend._ffi.new("BIGNUM **") - p = self._backend._ffi.new("BIGNUM **") - q = self._backend._ffi.new("BIGNUM **") - dmp1 = self._backend._ffi.new("BIGNUM **") - dmq1 = self._backend._ffi.new("BIGNUM **") - iqmp = self._backend._ffi.new("BIGNUM **") - self._backend._lib.RSA_get0_key(self._rsa_cdata, n, e, d) - self._backend.openssl_assert(n[0] != self._backend._ffi.NULL) - self._backend.openssl_assert(e[0] != self._backend._ffi.NULL) - self._backend.openssl_assert(d[0] != self._backend._ffi.NULL) - self._backend._lib.RSA_get0_factors(self._rsa_cdata, p, q) - self._backend.openssl_assert(p[0] != self._backend._ffi.NULL) - self._backend.openssl_assert(q[0] != self._backend._ffi.NULL) - self._backend._lib.RSA_get0_crt_params( - self._rsa_cdata, dmp1, dmq1, iqmp - ) - self._backend.openssl_assert(dmp1[0] != self._backend._ffi.NULL) - self._backend.openssl_assert(dmq1[0] != self._backend._ffi.NULL) - self._backend.openssl_assert(iqmp[0] != self._backend._ffi.NULL) - return RSAPrivateNumbers( - p=self._backend._bn_to_int(p[0]), - q=self._backend._bn_to_int(q[0]), - d=self._backend._bn_to_int(d[0]), - dmp1=self._backend._bn_to_int(dmp1[0]), - dmq1=self._backend._bn_to_int(dmq1[0]), - iqmp=self._backend._bn_to_int(iqmp[0]), - public_numbers=RSAPublicNumbers( - e=self._backend._bn_to_int(e[0]), - n=self._backend._bn_to_int(n[0]), - ), - ) - - def private_bytes( - self, - encoding: serialization.Encoding, - format: serialization.PrivateFormat, - encryption_algorithm: serialization.KeySerializationEncryption, - ) -> bytes: - return self._backend._private_key_bytes( - encoding, - format, - encryption_algorithm, - self, - self._evp_pkey, - self._rsa_cdata, - ) - - def sign( - self, - data: bytes, - padding: AsymmetricPadding, - algorithm: typing.Union[asym_utils.Prehashed, hashes.HashAlgorithm], - ) -> bytes: - self._enable_blinding() - data, algorithm = _calculate_digest_and_algorithm(data, algorithm) - return _rsa_sig_sign(self._backend, padding, algorithm, self, data) - - -class _RSAPublicKey(RSAPublicKey): - _evp_pkey: object - _rsa_cdata: object - _key_size: int - - def __init__(self, backend: Backend, rsa_cdata, evp_pkey): - self._backend = backend - self._rsa_cdata = rsa_cdata - self._evp_pkey = evp_pkey - - n = self._backend._ffi.new("BIGNUM **") - self._backend._lib.RSA_get0_key( - self._rsa_cdata, - n, - self._backend._ffi.NULL, - self._backend._ffi.NULL, - ) - self._backend.openssl_assert(n[0] != self._backend._ffi.NULL) - self._key_size = self._backend._lib.BN_num_bits(n[0]) - - @property - def key_size(self) -> int: - return self._key_size - - def __eq__(self, other: object) -> bool: - if not isinstance(other, _RSAPublicKey): - return NotImplemented - - return ( - self._backend._lib.EVP_PKEY_cmp(self._evp_pkey, other._evp_pkey) - == 1 - ) - - def encrypt(self, plaintext: bytes, padding: AsymmetricPadding) -> bytes: - return _enc_dec_rsa(self._backend, self, plaintext, padding) - - def public_numbers(self) -> RSAPublicNumbers: - n = self._backend._ffi.new("BIGNUM **") - e = self._backend._ffi.new("BIGNUM **") - self._backend._lib.RSA_get0_key( - self._rsa_cdata, n, e, self._backend._ffi.NULL - ) - self._backend.openssl_assert(n[0] != self._backend._ffi.NULL) - self._backend.openssl_assert(e[0] != self._backend._ffi.NULL) - return RSAPublicNumbers( - e=self._backend._bn_to_int(e[0]), - n=self._backend._bn_to_int(n[0]), - ) - - def public_bytes( - self, - encoding: serialization.Encoding, - format: serialization.PublicFormat, - ) -> bytes: - return self._backend._public_key_bytes( - encoding, format, self, self._evp_pkey, self._rsa_cdata - ) - - def verify( - self, - signature: bytes, - data: bytes, - padding: AsymmetricPadding, - algorithm: typing.Union[asym_utils.Prehashed, hashes.HashAlgorithm], - ) -> None: - data, algorithm = _calculate_digest_and_algorithm(data, algorithm) - _rsa_sig_verify( - self._backend, padding, algorithm, self, signature, data - ) - - def recover_data_from_signature( - self, - signature: bytes, - padding: AsymmetricPadding, - algorithm: typing.Optional[hashes.HashAlgorithm], - ) -> bytes: - if isinstance(algorithm, asym_utils.Prehashed): - raise TypeError( - "Prehashed is only supported in the sign and verify methods. " - "It cannot be used with recover_data_from_signature." - ) - return _rsa_sig_recover( - self._backend, padding, algorithm, self, signature - ) diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/utils.py b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/utils.py deleted file mode 100644 index 5b404def..00000000 --- a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/backends/openssl/utils.py +++ /dev/null @@ -1,63 +0,0 @@ -# This file is dual licensed under the terms of the Apache License, Version -# 2.0, and the BSD License. See the LICENSE file in the root of this repository -# for complete details. - -from __future__ import annotations - -import typing - -from cryptography.hazmat.primitives import hashes -from cryptography.hazmat.primitives.asymmetric.utils import Prehashed - -if typing.TYPE_CHECKING: - from cryptography.hazmat.backends.openssl.backend import Backend - - -def _evp_pkey_derive(backend: Backend, evp_pkey, peer_public_key) -> bytes: - ctx = backend._lib.EVP_PKEY_CTX_new(evp_pkey, backend._ffi.NULL) - backend.openssl_assert(ctx != backend._ffi.NULL) - ctx = backend._ffi.gc(ctx, backend._lib.EVP_PKEY_CTX_free) - res = backend._lib.EVP_PKEY_derive_init(ctx) - backend.openssl_assert(res == 1) - - if backend._lib.Cryptography_HAS_EVP_PKEY_SET_PEER_EX: - res = backend._lib.EVP_PKEY_derive_set_peer_ex( - ctx, peer_public_key._evp_pkey, 0 - ) - else: - res = backend._lib.EVP_PKEY_derive_set_peer( - ctx, peer_public_key._evp_pkey - ) - backend.openssl_assert(res == 1) - - keylen = backend._ffi.new("size_t *") - res = backend._lib.EVP_PKEY_derive(ctx, backend._ffi.NULL, keylen) - backend.openssl_assert(res == 1) - backend.openssl_assert(keylen[0] > 0) - buf = backend._ffi.new("unsigned char[]", keylen[0]) - res = backend._lib.EVP_PKEY_derive(ctx, buf, keylen) - if res != 1: - errors = backend._consume_errors() - raise ValueError("Error computing shared key.", errors) - - return backend._ffi.buffer(buf, keylen[0])[:] - - -def _calculate_digest_and_algorithm( - data: bytes, - algorithm: typing.Union[Prehashed, hashes.HashAlgorithm], -) -> typing.Tuple[bytes, hashes.HashAlgorithm]: - if not isinstance(algorithm, Prehashed): - hash_ctx = hashes.Hash(algorithm) - hash_ctx.update(data) - data = hash_ctx.finalize() - else: - algorithm = algorithm._algorithm - - if len(data) != algorithm.digest_size: - raise ValueError( - "The provided data must be the same length as the hash " - "algorithm's digest size." - ) - - return (data, algorithm) diff --git a/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc b/Backend/venv/lib/python3.12/site-packages/cryptography/hazmat/bindings/__pycache__/__init__.cpython-312.pyc index b018cd61ebdd1f6c982f5e713262cc582f2262ae..af2393f6d5c9f6ff452bfa81b986470b72bcf4db 100644 GIT binary patch delta 19 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

i+$R`~DrC&vl%_W7P@a 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

gZ{=JN~#< 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�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� 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

Agqfpyi*$TFG4BXE)# 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

7_ya5%Dsiia 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 z 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≧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

_-cOwWS9DDxL#M!@Ino>@joA}7Bis8F5 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

qN^nkxg#tet~sn%mC{I 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

Bo?DSXYeA8Le6 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≦%DYc_|uWhvVyT&Pe9*>e%7TQv3=hd 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 h5c`;)gQ&!GgR9C!3(+R}`gLL8u(TCvGU6!*B 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

QOR?wfWK>q;!>S+1?TOLdLSD@dE{&EHS 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 + {/* Logout Button */} +
+ +
+ {/* Luxury Sidebar Footer */}
{(!isCollapsed || isMobile) ? ( diff --git a/Frontend/src/components/payments/PayPalPaymentWrapper.tsx b/Frontend/src/components/payments/PayPalPaymentWrapper.tsx new file mode 100644 index 00000000..696d29ac --- /dev/null +++ b/Frontend/src/components/payments/PayPalPaymentWrapper.tsx @@ -0,0 +1,161 @@ +import React, { useState, useEffect } from 'react'; +import { createPayPalOrder } from '../../services/api/paymentService'; +import { Loader2, AlertCircle } from 'lucide-react'; + +interface PayPalPaymentWrapperProps { + bookingId: number; + amount: number; + currency?: string; + onError?: (error: string) => void; +} + +const PayPalPaymentWrapper: React.FC = ({ + bookingId, + amount, + currency = 'USD', + onError, +}) => { + const [loading, setLoading] = useState(true); + const [error, setError] = useState(null); + const [approvalUrl, setApprovalUrl] = useState(null); + + // Initialize PayPal order + useEffect(() => { + const initializePayPal = async () => { + try { + setLoading(true); + setError(null); + + // Get current URL for return/cancel URLs + const currentUrl = window.location.origin; + const returnUrl = `${currentUrl}/payment/paypal/return?bookingId=${bookingId}`; + const cancelUrl = `${currentUrl}/payment/paypal/cancel?bookingId=${bookingId}`; + + const response = await createPayPalOrder( + bookingId, + amount, + currency, + returnUrl, + cancelUrl + ); + + if (response.success && response.data) { + const { approval_url } = response.data; + + if (!approval_url) { + throw new Error('Approval URL not received from server'); + } + + setApprovalUrl(approval_url); + } else { + throw new Error(response.message || 'Failed to initialize PayPal payment'); + } + } catch (err: any) { + console.error('Error initializing PayPal:', err); + const errorMessage = err.response?.data?.message || err.message || 'Failed to initialize PayPal payment'; + setError(errorMessage); + if (onError) { + onError(errorMessage); + } + } finally { + setLoading(false); + } + }; + + initializePayPal(); + }, [bookingId, amount, currency, onError]); + + const handlePayPalClick = () => { + if (approvalUrl) { + // Redirect to PayPal approval page + window.location.href = approvalUrl; + } + }; + + if (loading) { + return ( +
+ + Initializing PayPal payment... +
+ ); + } + + if (error) { + return ( +
+
+ +
+

+ Payment Initialization Failed +

+

+ {error || 'Unable to initialize PayPal payment. Please try again.'} +

+
+
+
+ ); + } + + if (!approvalUrl) { + return ( +
+ + Loading PayPal... +
+ ); + } + + return ( +
+
+
+ + + +
+

+ Complete Payment with PayPal +

+

+ You will be redirected to PayPal to securely complete your payment of{' '} + + {new Intl.NumberFormat('en-US', { + style: 'currency', + currency: currency, + }).format(amount)} + +

+ +

+ Secure payment powered by PayPal +

+
+
+ ); +}; + +export default PayPalPaymentWrapper; + diff --git a/Frontend/src/components/payments/StripePaymentWrapper.tsx b/Frontend/src/components/payments/StripePaymentWrapper.tsx index 997e1a29..81715540 100644 --- a/Frontend/src/components/payments/StripePaymentWrapper.tsx +++ b/Frontend/src/components/payments/StripePaymentWrapper.tsx @@ -4,7 +4,6 @@ import { Elements } from '@stripe/react-stripe-js'; import StripePaymentForm from './StripePaymentForm'; import { createStripePaymentIntent, confirmStripePayment } from '../../services/api/paymentService'; import { Loader2, AlertCircle } from 'lucide-react'; -import Loading from '../common/Loading'; interface StripePaymentWrapperProps { bookingId: number; diff --git a/Frontend/src/pages/admin/BusinessDashboardPage.tsx b/Frontend/src/pages/admin/BusinessDashboardPage.tsx index 337158a1..b5ca3cad 100644 --- a/Frontend/src/pages/admin/BusinessDashboardPage.tsx +++ b/Frontend/src/pages/admin/BusinessDashboardPage.tsx @@ -199,6 +199,7 @@ const BusinessDashboardPage: React.FC = () => { cash: { bg: 'bg-gradient-to-r from-emerald-50 to-green-50', text: 'text-emerald-800', label: 'Cash', border: 'border-emerald-200' }, bank_transfer: { bg: 'bg-gradient-to-r from-blue-50 to-indigo-50', text: 'text-blue-800', label: 'Bank transfer', border: 'border-blue-200' }, stripe: { bg: 'bg-gradient-to-r from-indigo-50 to-purple-50', text: 'text-indigo-800', label: 'Stripe', border: 'border-indigo-200' }, + paypal: { bg: 'bg-gradient-to-r from-blue-50 to-cyan-50', text: 'text-blue-800', label: 'PayPal', border: 'border-blue-200' }, credit_card: { bg: 'bg-gradient-to-r from-purple-50 to-pink-50', text: 'text-purple-800', label: 'Credit card', border: 'border-purple-200' }, }; const badge = badges[method] || badges.cash; diff --git a/Frontend/src/pages/admin/DashboardPage.tsx b/Frontend/src/pages/admin/DashboardPage.tsx index aeac6fca..a38ca780 100644 --- a/Frontend/src/pages/admin/DashboardPage.tsx +++ b/Frontend/src/pages/admin/DashboardPage.tsx @@ -7,7 +7,8 @@ import { TrendingUp, RefreshCw, TrendingDown, - CreditCard + CreditCard, + LogOut } from 'lucide-react'; import { reportService, ReportData, paymentService, Payment } from '../../services/api'; import { toast } from 'react-toastify'; @@ -17,16 +18,27 @@ import { formatDate } from '../../utils/format'; import { useFormatCurrency } from '../../hooks/useFormatCurrency'; import { useAsync } from '../../hooks/useAsync'; import { useNavigate } from 'react-router-dom'; +import useAuthStore from '../../store/useAuthStore'; const DashboardPage: React.FC = () => { const { formatCurrency } = useFormatCurrency(); const navigate = useNavigate(); + const { logout } = useAuthStore(); const [dateRange, setDateRange] = useState({ from: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString().split('T')[0], to: new Date().toISOString().split('T')[0], }); const [recentPayments, setRecentPayments] = useState([]); const [loadingPayments, setLoadingPayments] = useState(false); + + const handleLogout = async () => { + try { + await logout(); + navigate('/login'); + } catch (error) { + console.error('Logout error:', error); + } + }; const fetchDashboardData = async () => { const response = await reportService.getReports({ @@ -91,6 +103,8 @@ const DashboardPage: React.FC = () => { case 'stripe': case 'credit_card': return 'Card'; + case 'paypal': + return 'PayPal'; case 'bank_transfer': return 'Bank Transfer'; case 'cash': @@ -133,7 +147,7 @@ const DashboardPage: React.FC = () => {

Hotel operations overview and analytics

- {/* Date Range Filter */} + {/* Date Range Filter & Actions */}
{ className="px-4 py-2.5 bg-white border-2 border-slate-200 rounded-xl focus:border-amber-400 focus:ring-4 focus:ring-amber-100 transition-all duration-200 text-slate-700 font-medium shadow-sm hover:shadow-md" />
- +
+ + +
diff --git a/Frontend/src/pages/admin/PaymentManagementPage.tsx b/Frontend/src/pages/admin/PaymentManagementPage.tsx index b4f7cea7..fcba12e7 100644 --- a/Frontend/src/pages/admin/PaymentManagementPage.tsx +++ b/Frontend/src/pages/admin/PaymentManagementPage.tsx @@ -70,6 +70,12 @@ const PaymentManagementPage: React.FC = () => { label: 'Stripe', border: 'border-indigo-200' }, + paypal: { + bg: 'bg-gradient-to-r from-blue-50 to-cyan-50', + text: 'text-blue-800', + label: 'PayPal', + border: 'border-blue-200' + }, credit_card: { bg: 'bg-gradient-to-r from-purple-50 to-pink-50', text: 'text-purple-800', diff --git a/Frontend/src/pages/admin/SettingsPage.tsx b/Frontend/src/pages/admin/SettingsPage.tsx index 0c051c7d..81d7ac15 100644 --- a/Frontend/src/pages/admin/SettingsPage.tsx +++ b/Frontend/src/pages/admin/SettingsPage.tsx @@ -29,6 +29,8 @@ import adminPrivacyService, { import systemSettingsService, { StripeSettingsResponse, UpdateStripeSettingsRequest, + PayPalSettingsResponse, + UpdatePayPalSettingsRequest, SmtpSettingsResponse, UpdateSmtpSettingsRequest, CompanySettingsResponse, @@ -71,6 +73,15 @@ const SettingsPage: React.FC = () => { const [showSecretKey, setShowSecretKey] = useState(false); const [showWebhookSecret, setShowWebhookSecret] = useState(false); + // PayPal Settings State + const [paypalSettings, setPaypalSettings] = useState(null); + const [paypalFormData, setPaypalFormData] = useState({ + paypal_client_id: '', + paypal_client_secret: '', + paypal_mode: 'sandbox', + }); + const [showPayPalSecret, setShowPayPalSecret] = useState(false); + // SMTP Settings State const [smtpSettings, setSmtpSettings] = useState(null); const [smtpFormData, setSmtpFormData] = useState({ @@ -144,11 +155,12 @@ const SettingsPage: React.FC = () => { const loadAllSettings = async () => { try { setLoading(true); - const [policyRes, integrationRes, currencyRes, stripeRes] = await Promise.all([ + const [policyRes, integrationRes, currencyRes, stripeRes, paypalRes] = await Promise.all([ adminPrivacyService.getCookiePolicy(), adminPrivacyService.getIntegrations(), systemSettingsService.getPlatformCurrency(), systemSettingsService.getStripeSettings(), + systemSettingsService.getPayPalSettings(), ]); setPolicy(policyRes.data); @@ -166,6 +178,12 @@ const SettingsPage: React.FC = () => { stripe_publishable_key: stripeRes.data.stripe_publishable_key || '', stripe_webhook_secret: '', }); + setPaypalSettings(paypalRes.data); + setPaypalFormData({ + paypal_client_id: '', + paypal_client_secret: '', + paypal_mode: paypalRes.data.paypal_mode || 'sandbox', + }); } catch (error: any) { toast.error(error.message || 'Failed to load settings'); } finally { @@ -307,6 +325,45 @@ const SettingsPage: React.FC = () => { } }; + // PayPal Settings Handlers + const handleSavePayPal = async () => { + try { + setSaving(true); + const updateData: UpdatePayPalSettingsRequest = {}; + + if (paypalFormData.paypal_client_id && paypalFormData.paypal_client_id.trim()) { + updateData.paypal_client_id = paypalFormData.paypal_client_id.trim(); + } + + if (paypalFormData.paypal_client_secret && paypalFormData.paypal_client_secret.trim()) { + updateData.paypal_client_secret = paypalFormData.paypal_client_secret.trim(); + } + + if (paypalFormData.paypal_mode) { + updateData.paypal_mode = paypalFormData.paypal_mode; + } + + await systemSettingsService.updatePayPalSettings(updateData); + await loadAllSettings(); + + setPaypalFormData({ + ...paypalFormData, + paypal_client_id: '', + paypal_client_secret: '', + }); + + toast.success('PayPal settings updated successfully'); + } catch (error: any) { + toast.error( + error.response?.data?.message || + error.response?.data?.detail || + 'Failed to update PayPal settings' + ); + } finally { + setSaving(false); + } + }; + // SMTP Settings Handlers const handleSaveSmtp = async () => { try { @@ -1305,6 +1362,180 @@ const SettingsPage: React.FC = () => { + + {/* PayPal Payment Settings Section */} + )} diff --git a/Frontend/src/pages/auth/ForgotPasswordPage.tsx b/Frontend/src/pages/auth/ForgotPasswordPage.tsx index 714e1d0f..6d71370f 100644 --- a/Frontend/src/pages/auth/ForgotPasswordPage.tsx +++ b/Frontend/src/pages/auth/ForgotPasswordPage.tsx @@ -9,6 +9,7 @@ import { Loader2, CheckCircle, Hotel, + Home, } from 'lucide-react'; import useAuthStore from '../../store/useAuthStore'; import { @@ -29,6 +30,12 @@ const ForgotPasswordPage: React.FC = () => { const supportEmail = settings.company_email || 'support@hotel.com'; const supportPhone = settings.company_phone || '1900-xxxx'; + // Update page title + useEffect(() => { + const companyName = settings.company_name || 'Luxury Hotel'; + document.title = `Forgot Password - ${companyName}`; + }, [settings.company_name]); + // React Hook Form setup const { register, @@ -60,65 +67,82 @@ const ForgotPasswordPage: React.FC = () => {
-
+
{/* Header */}
-
-
- -
+
+ {settings.company_logo_url ? ( + {settings.company_name + ) : ( +
+ +
+ )}
-

+ {settings.company_tagline && ( +

+ {settings.company_tagline} +

+ )} +

Forgot Password?

-

- Enter your email to receive a password reset link +

+ Enter your email to receive a password reset link for {settings.company_name || 'Luxury Hotel'}

{/* Form Container */} -
+
{isSuccess ? ( // Success State -
+
-
+

Email Sent!

-

+

We have sent a password reset link to

-

+

{submittedEmail}

-

+

Note:

  • Link is valid for 1 hour
  • @@ -129,32 +153,32 @@ const ForgotPasswordPage: React.FC = () => {
-
+
Back to Login
+ + {/* Back to Home Button */} +
+ + + + Back to Homepage + +
) : ( // Form State
{/* Error Message */} {error && (
{error}
@@ -189,8 +225,8 @@ const ForgotPasswordPage: React.FC = () => {
@@ -201,7 +237,7 @@ const ForgotPasswordPage: React.FC = () => { pointer-events-none" >
{ type="email" autoComplete="email" autoFocus - className={`block w-full pl-10 pr-3 - py-3 border rounded-lg + className={`block w-full pl-9 sm:pl-10 pr-3 + py-2.5 sm:py-3 border rounded-lg focus:outline-none focus:ring-2 - transition-colors + transition-colors text-sm sm:text-base ${ errors.email ? 'border-red-300 ' + @@ -225,7 +261,7 @@ const ForgotPasswordPage: React.FC = () => { />
{errors.email && ( -

+

{errors.email.message}

)} @@ -236,9 +272,9 @@ const ForgotPasswordPage: React.FC = () => { type="submit" disabled={isLoading} className="w-full flex items-center - justify-center py-3 px-4 border + justify-center py-2.5 sm:py-3 px-4 border border-transparent rounded-lg - shadow-sm text-sm font-medium + shadow-sm text-xs sm:text-sm font-medium text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 @@ -251,13 +287,13 @@ const ForgotPasswordPage: React.FC = () => { <> Processing... ) : ( <> - + Send Reset Link )} @@ -268,22 +304,34 @@ const ForgotPasswordPage: React.FC = () => { Back to Login
+ + {/* Back to Home Button */} +
+ + + + Back to Homepage + +
)}
{/* Footer Info */} {!isSuccess && ( -
+

Don't have an account?{' '} { {/* Help Section */}

Need Help?

-

+

If you're having trouble resetting your password, please contact our support team via email{' '} {supportEmail} diff --git a/Frontend/src/pages/auth/LoginPage.tsx b/Frontend/src/pages/auth/LoginPage.tsx index add1648c..9640205f 100644 --- a/Frontend/src/pages/auth/LoginPage.tsx +++ b/Frontend/src/pages/auth/LoginPage.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { useForm } from 'react-hook-form'; import { yupResolver } from '@hookform/resolvers/yup'; import { Link, useNavigate, useLocation } from 'react-router-dom'; @@ -9,21 +9,56 @@ import { Loader2, Mail, Lock, - Hotel + Hotel, + Home, + Shield, + ArrowLeft } from 'lucide-react'; import useAuthStore from '../../store/useAuthStore'; import { loginSchema, LoginFormData } from '../../utils/validationSchemas'; +import { useCompanySettings } from '../../contexts/CompanySettingsContext'; +import * as yup from 'yup'; + +const mfaTokenSchema = yup.object().shape({ + mfaToken: yup + .string() + .required('MFA token is required') + .min(6, 'MFA token must be 6 digits') + .max(8, 'MFA token must be 6-8 characters') + .matches(/^\d+$|^[A-Z0-9]{8}$/, 'Invalid token format'), +}); + +type MFATokenFormData = yup.InferType; const LoginPage: React.FC = () => { const navigate = useNavigate(); const location = useLocation(); - const { login, isLoading, error, clearError } = + const { login, verifyMFA, isLoading, error, clearError, requiresMFA, clearMFA } = useAuthStore(); + const { settings } = useCompanySettings(); const [showPassword, setShowPassword] = useState(false); + + // MFA form setup + const { + register: registerMFA, + handleSubmit: handleSubmitMFA, + formState: { errors: mfaErrors }, + } = useForm({ + resolver: yupResolver(mfaTokenSchema), + defaultValues: { + mfaToken: '', + }, + }); + + // Update page title + useEffect(() => { + const companyName = settings.company_name || 'Luxury Hotel'; + document.title = requiresMFA ? `Verify Identity - ${companyName}` : `Login - ${companyName}`; + }, [settings.company_name, requiresMFA]); // React Hook Form setup const { @@ -49,231 +84,384 @@ const LoginPage: React.FC = () => { rememberMe: data.rememberMe, }); - // Redirect to previous page or dashboard - const from = location.state?.from?.pathname || - '/dashboard'; - navigate(from, { replace: true }); + // If MFA is required, don't redirect yet + if (!requiresMFA) { + // Redirect to previous page or dashboard + const from = location.state?.from?.pathname || + '/dashboard'; + navigate(from, { replace: true }); + } } catch (error) { // Error has been handled in store console.error('Login error:', error); } }; + // Handle MFA verification + const onSubmitMFA = async (data: MFATokenFormData) => { + try { + clearError(); + await verifyMFA(data.mfaToken); + + // Redirect to previous page or dashboard + const from = location.state?.from?.pathname || + '/dashboard'; + navigate(from, { replace: true }); + } catch (error) { + // Error has been handled in store + console.error('MFA verification error:', error); + } + }; + + // Handle back to login + const handleBackToLogin = () => { + clearMFA(); + clearError(); + }; + return (

{/* Luxury background pattern */}
-
+
{/* Header */}
-
-
- -
-
-
-

- Welcome Back -

-

- Sign in to Luxury Hotel -

-
- - {/* Login Form */} -
-
- {/* Error Message */} - {error && ( -
- {error} +
+ {settings.company_logo_url ? ( + {settings.company_name + ) : ( +
+ +
)} - - {/* Email Field */} -
- -
-
- -
- -
- {errors.email && ( -

- {errors.email.message} -

- )} -
- - {/* Password Field */} -
- -
-
- -
- - -
- {errors.password && ( -

- {errors.password.message} -

- )} -
- - {/* Remember Me & Forgot Password */} -
-
- - -
- - - Forgot password? - -
- - {/* Submit Button */} - - - - {/* Register Link */} -
-

- Don't have an account?{' '} - - Register now - -

-
- - {/* Footer Info */} -
-

- By logging in, you agree to our{' '} - - Terms of Service - {' '} - and{' '} - - Privacy Policy - + {settings.company_tagline && ( +

+ {settings.company_tagline} +

+ )} +

+ {requiresMFA ? 'Verify Your Identity' : 'Welcome Back'} +

+

+ {requiresMFA + ? 'Enter the 6-digit code from your authenticator app' + : `Sign in to ${settings.company_name || 'Luxury Hotel'}`}

+ + {requiresMFA ? ( + /* MFA Verification Form */ +
+
+ {/* Error Message */} + {error && ( +
+ {error} +
+ )} + + {/* MFA Token Field */} +
+ +
+
+ +
+ +
+ {mfaErrors.mfaToken && ( +

+ {mfaErrors.mfaToken.message} +

+ )} +

+ Enter the 6-digit code from your authenticator app or an 8-character backup code +

+
+ + {/* Submit Button */} + + + {/* Back to Login Link */} +
+ +
+
+
+ ) : ( + /* Login Form */ + <> +
+
+ {/* Error Message */} + {error && ( +
+ {error} +
+ )} + + {/* Email Field */} +
+ +
+
+ +
+ +
+ {errors.email && ( +

+ {errors.email.message} +

+ )} +
+ + {/* Password Field */} +
+ +
+
+ +
+ + +
+ {errors.password && ( +

+ {errors.password.message} +

+ )} +
+ + {/* Remember Me & Forgot Password */} +
+
+ + +
+ + + Forgot password? + +
+ + {/* Submit Button */} + + + {/* Back to Home Button */} +
+ + + + Back to Homepage + +
+
+ + {/* Register Link */} +
+

+ Don't have an account?{' '} + + Register now + +

+
+
+ + {/* Footer Info */} +
+

+ By logging in, you agree to our{' '} + + Terms of Service + {' '} + and{' '} + + Privacy Policy + +

+
+ + )}
); diff --git a/Frontend/src/pages/auth/RegisterPage.tsx b/Frontend/src/pages/auth/RegisterPage.tsx index 114bc1f4..4bb2d45e 100644 --- a/Frontend/src/pages/auth/RegisterPage.tsx +++ b/Frontend/src/pages/auth/RegisterPage.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useState, useEffect } from 'react'; import { useForm } from 'react-hook-form'; import { yupResolver } from '@hookform/resolvers/yup'; import { Link, useNavigate } from 'react-router-dom'; @@ -14,22 +14,31 @@ import { Hotel, CheckCircle2, XCircle, + Home, } from 'lucide-react'; import useAuthStore from '../../store/useAuthStore'; import { registerSchema, RegisterFormData, } from '../../utils/validationSchemas'; +import { useCompanySettings } from '../../contexts/CompanySettingsContext'; const RegisterPage: React.FC = () => { const navigate = useNavigate(); const { register: registerUser, isLoading, error, clearError } = useAuthStore(); + const { settings } = useCompanySettings(); const [showPassword, setShowPassword] = useState(false); const [showConfirmPassword, setShowConfirmPassword] = useState(false); + // Update page title + useEffect(() => { + const companyName = settings.company_name || 'Luxury Hotel'; + document.title = `Register - ${companyName}`; + }, [settings.company_name]); + // React Hook Form setup const { register, @@ -97,35 +106,52 @@ const RegisterPage: React.FC = () => {
{/* Luxury background pattern */}
-
+
{/* Header */}
-
-
- -
-
+
+ {settings.company_logo_url ? ( + {settings.company_name + ) : ( +
+ +
+
+ )}
-

+ {settings.company_tagline && ( +

+ {settings.company_tagline} +

+ )} +

Create Account

-

- Join Luxury Hotel for exclusive benefits +

+ Join {settings.company_name || 'Luxury Hotel'} for exclusive benefits

{/* Register Form */} -
+
{/* Error Message */} {error && ( @@ -142,8 +168,8 @@ const RegisterPage: React.FC = () => {
@@ -153,14 +179,14 @@ const RegisterPage: React.FC = () => { pl-3 flex items-center pointer-events-none" > - +
{ />
{errors.name && ( -

+

{errors.name.message}

)} @@ -179,8 +205,8 @@ const RegisterPage: React.FC = () => {
@@ -190,14 +216,14 @@ const RegisterPage: React.FC = () => { pl-3 flex items-center pointer-events-none" > - +
{ />
{errors.email && ( -

+

{errors.email.message}

)} @@ -216,8 +242,8 @@ const RegisterPage: React.FC = () => {
@@ -227,14 +253,14 @@ const RegisterPage: React.FC = () => { pl-3 flex items-center pointer-events-none" > - +
{ />
{errors.phone && ( -

+

{errors.phone.message}

)} @@ -253,8 +279,8 @@ const RegisterPage: React.FC = () => {
@@ -264,14 +290,14 @@ const RegisterPage: React.FC = () => { pl-3 flex items-center pointer-events-none" > - +
{ > {showPassword ? ( ) : ( )}
{errors.password && ( -

+

{errors.password.message}

)} @@ -325,7 +351,7 @@ const RegisterPage: React.FC = () => { }} />
- {passwordStrength.label} @@ -363,8 +389,8 @@ const RegisterPage: React.FC = () => {
@@ -374,7 +400,7 @@ const RegisterPage: React.FC = () => { pl-3 flex items-center pointer-events-none" > - +
{ showConfirmPassword ? 'text' : 'password' } autoComplete="new-password" - className={`luxury-input pl-10 pr-10 ${ + className={`luxury-input pl-9 sm:pl-10 pr-9 sm:pr-10 py-2.5 sm:py-3 text-sm sm:text-base ${ errors.confirmPassword ? 'border-red-300 focus:ring-red-500 focus:border-red-500' : '' @@ -401,17 +427,17 @@ const RegisterPage: React.FC = () => { > {showConfirmPassword ? ( ) : ( )}
{errors.confirmPassword && ( -

+

{errors.confirmPassword.message}

)} @@ -422,18 +448,18 @@ const RegisterPage: React.FC = () => { type="submit" disabled={isLoading} className="btn-luxury-primary w-full flex items-center - justify-center py-3 px-4 text-sm relative" + justify-center py-2.5 sm:py-3 px-4 text-xs sm:text-sm relative" > {isLoading ? ( <> Processing... ) : ( <> - + Register )} @@ -441,8 +467,8 @@ const RegisterPage: React.FC = () => { {/* Login Link */} -
-

+

+

Already have an account?{' '} {

+ + {/* Back to Home Button */} +
+ + + + Back to Homepage + +
{/* Footer Info */} -
+

By registering, you agree to our{' '} = ({ met, text }) => ( -

+
{met ? ( - + ) : ( - + )} {text} diff --git a/Frontend/src/pages/auth/ResetPasswordPage.tsx b/Frontend/src/pages/auth/ResetPasswordPage.tsx index 92ed7b87..f63315c0 100644 --- a/Frontend/src/pages/auth/ResetPasswordPage.tsx +++ b/Frontend/src/pages/auth/ResetPasswordPage.tsx @@ -12,24 +12,33 @@ import { AlertCircle, KeyRound, Hotel, + Home, } from 'lucide-react'; import useAuthStore from '../../store/useAuthStore'; import { resetPasswordSchema, ResetPasswordFormData, } from '../../utils/validationSchemas'; +import { useCompanySettings } from '../../contexts/CompanySettingsContext'; const ResetPasswordPage: React.FC = () => { const navigate = useNavigate(); const { token } = useParams<{ token: string }>(); const { resetPassword, isLoading, error, clearError } = useAuthStore(); + const { settings } = useCompanySettings(); const [showPassword, setShowPassword] = useState(false); const [showConfirmPassword, setShowConfirmPassword] = useState(false); const [isSuccess, setIsSuccess] = useState(false); + // Update page title + useEffect(() => { + const companyName = settings.company_name || 'Luxury Hotel'; + document.title = `Reset Password - ${companyName}`; + }, [settings.company_name]); + // React Hook Form setup const { register, @@ -118,68 +127,85 @@ const ResetPasswordPage: React.FC = () => {
-
+
{/* Header */}
-
-
- -
+
+ {settings.company_logo_url ? ( + {settings.company_name + ) : ( +
+ +
+ )}
-

+ {settings.company_tagline && ( +

+ {settings.company_tagline} +

+ )} +

{isSuccess ? 'Complete!' : 'Reset Password'}

-

+

{isSuccess ? 'Password has been reset successfully' - : 'Enter a new password for your account'} + : `Enter a new password for your ${settings.company_name || 'Luxury Hotel'} account`}

{/* Form Container */} -
+
{isSuccess ? ( // Success State -
+
-
+

Password reset successful!

-

+

Your password has been updated.

-

+

You can now login with your new password.

-

+

Redirecting to login page...

@@ -188,30 +214,42 @@ const ResetPasswordPage: React.FC = () => { - + Login Now + + {/* Back to Home Button */} +
+ + + + Back to Homepage + +
) : ( // Form State
{/* Error Message */} {error && (
{ 'text-red-700' }`} > - +

{isReuseError @@ -230,7 +268,7 @@ const ResetPasswordPage: React.FC = () => { {isTokenError && ( @@ -245,8 +283,8 @@ const ResetPasswordPage: React.FC = () => {

@@ -257,7 +295,7 @@ const ResetPasswordPage: React.FC = () => { pointer-events-none" >
{ type={showPassword ? 'text' : 'password'} autoComplete="new-password" autoFocus - className={`block w-full pl-10 pr-10 - py-3 border rounded-lg + className={`block w-full pl-9 sm:pl-10 pr-9 sm:pr-10 + py-2.5 sm:py-3 border rounded-lg focus:outline-none focus:ring-2 - transition-colors + transition-colors text-sm sm:text-base ${ errors.password ? 'border-red-300 ' + @@ -289,19 +327,19 @@ const ResetPasswordPage: React.FC = () => { > {showPassword ? ( ) : ( )}
{errors.password && ( -

+

{errors.password.message}

)} @@ -327,7 +365,7 @@ const ResetPasswordPage: React.FC = () => { />
{passwordStrength.label} @@ -365,8 +403,8 @@ const ResetPasswordPage: React.FC = () => {
@@ -377,7 +415,7 @@ const ResetPasswordPage: React.FC = () => { pointer-events-none" >
{ showConfirmPassword ? 'text' : 'password' } autoComplete="new-password" - className={`block w-full pl-10 pr-10 - py-3 border rounded-lg + className={`block w-full pl-9 sm:pl-10 pr-9 sm:pr-10 + py-2.5 sm:py-3 border rounded-lg focus:outline-none focus:ring-2 - transition-colors + transition-colors text-sm sm:text-base ${ errors.confirmPassword ? 'border-red-300 ' + @@ -412,19 +450,19 @@ const ResetPasswordPage: React.FC = () => { > {showConfirmPassword ? ( ) : ( )}
{errors.confirmPassword && ( -

+

{errors.confirmPassword.message}

)} @@ -435,9 +473,9 @@ const ResetPasswordPage: React.FC = () => { type="submit" disabled={isLoading} className="w-full flex items-center - justify-center py-3 px-4 border + justify-center py-2.5 sm:py-3 px-4 border border-transparent rounded-lg - shadow-sm text-sm font-medium + shadow-sm text-xs sm:text-sm font-medium text-white bg-indigo-600 hover:bg-indigo-700 focus:outline-none focus:ring-2 @@ -451,14 +489,14 @@ const ResetPasswordPage: React.FC = () => { <> Processing... ) : ( <> Reset Password @@ -469,13 +507,25 @@ const ResetPasswordPage: React.FC = () => {
Back to Login
+ + {/* Back to Home Button */} +
+ + + + Back to Homepage + +
)}
@@ -484,18 +534,18 @@ const ResetPasswordPage: React.FC = () => { {!isSuccess && (

- + Security

  • Reset link is valid for 1 hour only
  • @@ -516,11 +566,11 @@ const PasswordRequirement: React.FC<{ met: boolean; text: string; }> = ({ met, text }) => ( -
    +
    {met ? ( - + ) : ( - + )} {text} diff --git a/Frontend/src/pages/customer/BookingDetailPage.tsx b/Frontend/src/pages/customer/BookingDetailPage.tsx index 7dad735c..3381cb3c 100644 --- a/Frontend/src/pages/customer/BookingDetailPage.tsx +++ b/Frontend/src/pages/customer/BookingDetailPage.tsx @@ -514,6 +514,8 @@ const BookingDetailPage: React.FC = () => { ? '💵 Pay at hotel' : booking.payment_method === 'stripe' ? '💳 Pay with Card (Stripe)' + : booking.payment_method === 'paypal' + ? '💳 PayPal' : booking.payment_method || 'N/A'}

    diff --git a/Frontend/src/pages/customer/BookingPage.tsx b/Frontend/src/pages/customer/BookingPage.tsx index 5737313b..bba97562 100644 --- a/Frontend/src/pages/customer/BookingPage.tsx +++ b/Frontend/src/pages/customer/BookingPage.tsx @@ -34,6 +34,7 @@ import { type BookingData, } from '../../services/api/bookingService'; import { serviceService, Service } from '../../services/api'; +import { createPayPalOrder } from '../../services/api/paymentService'; import useAuthStore from '../../store/useAuthStore'; import { bookingValidationSchema, @@ -306,6 +307,43 @@ const BookingPage: React.FC = () => { ) { const bookingId = response.data.booking.id; + // If PayPal payment, redirect to PayPal payment flow + if (paymentMethod === 'paypal') { + try { + // Get current URL for return/cancel URLs + const currentUrl = window.location.origin; + const returnUrl = `${currentUrl}/payment/paypal/return?bookingId=${bookingId}`; + const cancelUrl = `${currentUrl}/payment/paypal/cancel?bookingId=${bookingId}`; + + const paypalResponse = await createPayPalOrder( + bookingId, + totalPrice, + 'USD', + returnUrl, + cancelUrl + ); + + if (paypalResponse.success && paypalResponse.data?.approval_url) { + // Redirect to PayPal for payment + window.location.href = paypalResponse.data.approval_url; + return; // Don't navigate to success page + } else { + throw new Error(paypalResponse.message || 'Failed to initialize PayPal payment'); + } + } catch (paypalError: any) { + console.error('Error initializing PayPal payment:', paypalError); + toast.error( + paypalError.response?.data?.message || + paypalError.message || + 'Failed to initialize PayPal payment. Please try again or contact support.' + ); + // Still navigate to booking success page so user can see their booking + navigate(`/booking-success/${bookingId}`); + return; + } + } + + // For other payment methods, navigate to success page toast.success( '🎉 Booking successful!', { icon: } @@ -1077,6 +1115,49 @@ const BookingPage: React.FC = () => {

    )} + {/* PayPal Payment */} + + {/* Stripe Payment Info */} {paymentMethod === 'stripe' && (
    {

    )} + + {/* PayPal Payment Info */} + {paymentMethod === 'paypal' && ( +
    +
    + +

    + Secure PayPal Payment +

    +
    +

    + You will be redirected to PayPal to securely complete your payment. +

    +
    + )}
    diff --git a/Frontend/src/pages/customer/DashboardPage.tsx b/Frontend/src/pages/customer/DashboardPage.tsx index c66d4a7f..42d3d438 100644 --- a/Frontend/src/pages/customer/DashboardPage.tsx +++ b/Frontend/src/pages/customer/DashboardPage.tsx @@ -80,6 +80,8 @@ const DashboardPage: React.FC = () => { case 'stripe': case 'credit_card': return 'Card'; + case 'paypal': + return 'PayPal'; case 'bank_transfer': return 'Bank Transfer'; case 'cash': diff --git a/Frontend/src/pages/customer/DepositPaymentPage.tsx b/Frontend/src/pages/customer/DepositPaymentPage.tsx index 9c2af784..fcd28649 100644 --- a/Frontend/src/pages/customer/DepositPaymentPage.tsx +++ b/Frontend/src/pages/customer/DepositPaymentPage.tsx @@ -16,6 +16,7 @@ import { import Loading from '../../components/common/Loading'; import { useFormatCurrency } from '../../hooks/useFormatCurrency'; import StripePaymentWrapper from '../../components/payments/StripePaymentWrapper'; +import PayPalPaymentWrapper from '../../components/payments/PayPalPaymentWrapper'; const DepositPaymentPage: React.FC = () => { const { bookingId } = useParams<{ bookingId: string }>(); @@ -294,7 +295,22 @@ const DepositPaymentPage: React.FC = () => {
    )} - {/* VNPay removed */} + {/* PayPal Payment Panel */} + {!paymentSuccess && booking && depositPayment && ( +
    +

    + + PayPal Payment +

    + { + toast.error(error || 'Payment failed'); + }} + /> +
    + )}
diff --git a/Frontend/src/pages/customer/PayPalCancelPage.tsx b/Frontend/src/pages/customer/PayPalCancelPage.tsx new file mode 100644 index 00000000..674335bc --- /dev/null +++ b/Frontend/src/pages/customer/PayPalCancelPage.tsx @@ -0,0 +1,43 @@ +import React from 'react'; +import { useSearchParams, useNavigate } from 'react-router-dom'; +import { XCircle, ArrowLeft } from 'lucide-react'; + +const PayPalCancelPage: React.FC = () => { + const [searchParams] = useSearchParams(); + const navigate = useNavigate(); + const bookingId = searchParams.get('bookingId'); + + return ( +
+
+ +

+ Payment Cancelled +

+

+ You cancelled the PayPal payment. No charges were made. +

+
+ {bookingId && ( + + )} + +
+
+
+ ); +}; + +export default PayPalCancelPage; + diff --git a/Frontend/src/pages/customer/PayPalReturnPage.tsx b/Frontend/src/pages/customer/PayPalReturnPage.tsx new file mode 100644 index 00000000..eec773fb --- /dev/null +++ b/Frontend/src/pages/customer/PayPalReturnPage.tsx @@ -0,0 +1,116 @@ +import React, { useEffect, useState } from 'react'; +import { useSearchParams, useNavigate } from 'react-router-dom'; +import { capturePayPalPayment } from '../../services/api/paymentService'; +import { toast } from 'react-toastify'; +import { CheckCircle, XCircle, Loader2 } from 'lucide-react'; +import Loading from '../../components/common/Loading'; + +const PayPalReturnPage: React.FC = () => { + const [searchParams] = useSearchParams(); + const navigate = useNavigate(); + const [loading, setLoading] = useState(true); + const [success, setSuccess] = useState(false); + const [error, setError] = useState(null); + + const orderId = searchParams.get('token'); + const bookingId = searchParams.get('bookingId'); + + useEffect(() => { + const capturePayment = async () => { + if (!orderId || !bookingId) { + setError('Missing payment information'); + setLoading(false); + return; + } + + try { + setLoading(true); + const response = await capturePayPalPayment(orderId, Number(bookingId)); + + if (response.success) { + setSuccess(true); + toast.success('Payment confirmed successfully!'); + // Redirect to booking details after a short delay + setTimeout(() => { + navigate(`/bookings/${bookingId}`); + }, 2000); + } else { + setError(response.message || 'Payment capture failed'); + toast.error(response.message || 'Payment capture failed'); + } + } catch (err: any) { + const errorMessage = err.response?.data?.message || err.message || 'Failed to capture payment'; + setError(errorMessage); + toast.error(errorMessage); + } finally { + setLoading(false); + } + }; + + capturePayment(); + }, [orderId, bookingId, navigate]); + + if (loading) { + return ( +
+
+ +

Processing your payment...

+
+
+ ); + } + + if (success) { + return ( +
+
+ +

+ Payment Successful! +

+

+ Your payment has been confirmed. Redirecting to booking details... +

+ +
+
+ ); + } + + return ( +
+
+ +

+ Payment Failed +

+

+ {error || 'Unable to process your payment. Please try again.'} +

+
+ + +
+
+
+ ); +}; + +export default PayPalReturnPage; + diff --git a/Frontend/src/pages/customer/ProfilePage.tsx b/Frontend/src/pages/customer/ProfilePage.tsx index 58879cb1..9d767a1c 100644 --- a/Frontend/src/pages/customer/ProfilePage.tsx +++ b/Frontend/src/pages/customer/ProfilePage.tsx @@ -11,7 +11,15 @@ import { CheckCircle, AlertCircle, Lock, - Camera + Camera, + Shield, + ShieldCheck, + ShieldOff, + Copy, + Eye, + EyeOff, + RefreshCw, + KeyRound } from 'lucide-react'; import { toast } from 'react-toastify'; import authService from '../../services/api/authService'; @@ -19,6 +27,7 @@ import useAuthStore from '../../store/useAuthStore'; import { Loading, EmptyState } from '../../components/common'; import { useAsync } from '../../hooks/useAsync'; import { useGlobalLoading } from '../../contexts/GlobalLoadingContext'; +import { normalizeImageUrl } from '../../utils/imageUtils'; // Validation schema const profileValidationSchema = yup.object().shape({ @@ -60,8 +69,25 @@ type PasswordFormData = yup.InferType; const ProfilePage: React.FC = () => { const { userInfo, setUser } = useAuthStore(); const { setLoading } = useGlobalLoading(); - const [activeTab, setActiveTab] = useState<'profile' | 'password'>('profile'); + const [activeTab, setActiveTab] = useState<'profile' | 'password' | 'mfa'>('profile'); const [avatarPreview, setAvatarPreview] = useState(null); + const [showPassword, setShowPassword] = useState<{ + current: boolean; + new: boolean; + confirm: boolean; + }>({ + current: false, + new: false, + confirm: false, + }); + + // MFA state + const [mfaStatus, setMfaStatus] = useState<{mfa_enabled: boolean; backup_codes_count: number} | null>(null); + const [mfaSecret, setMfaSecret] = useState(null); + const [mfaQrCode, setMfaQrCode] = useState(null); + const [mfaVerificationToken, setMfaVerificationToken] = useState(''); + const [showBackupCodes, setShowBackupCodes] = useState(null); + const [showMfaSecret, setShowMfaSecret] = useState(false); // Fetch profile data const fetchProfile = async () => { @@ -113,6 +139,22 @@ const ProfilePage: React.FC = () => { resolver: yupResolver(passwordValidationSchema), }); + // Fetch MFA status + const fetchMFAStatus = async () => { + try { + const response = await authService.getMFAStatus(); + // Response is now directly the status data, not wrapped in data + if (response) { + setMfaStatus({ + mfa_enabled: response.mfa_enabled || false, + backup_codes_count: response.backup_codes_count || 0, + }); + } + } catch (error) { + console.error('Failed to fetch MFA status:', error); + } + }; + // Update form when profile data loads useEffect(() => { if (profileData || userInfo) { @@ -123,17 +165,27 @@ const ProfilePage: React.FC = () => { phone: data?.phone || '', }); if (data?.avatar) { - setAvatarPreview(data.avatar); + // Normalize avatar URL when loading + setAvatarPreview(normalizeImageUrl(data.avatar)); + } else { + setAvatarPreview(null); } } }, [profileData, userInfo, resetProfile]); + // Fetch MFA status when MFA tab is active + useEffect(() => { + if (activeTab === 'mfa') { + fetchMFAStatus(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [activeTab]); + // Handle profile update const onSubmitProfile = async (data: ProfileFormData) => { try { setLoading(true, 'Updating profile...'); - // Check if updateProfile exists in authService, otherwise use userService if ('updateProfile' in authService) { const response = await (authService as any).updateProfile({ full_name: data.name, @@ -150,7 +202,6 @@ const ProfilePage: React.FC = () => { } } } else { - // Fallback: use userService if updateProfile doesn't exist const { updateUser } = await import('../../services/api/userService'); const response = await updateUser(userInfo!.id, { full_name: data.name, @@ -190,7 +241,6 @@ const ProfilePage: React.FC = () => { try { setLoading(true, 'Changing password...'); - // Use updateProfile with password fields if available if ('updateProfile' in authService) { const response = await (authService as any).updateProfile({ currentPassword: data.currentPassword, @@ -202,7 +252,6 @@ const ProfilePage: React.FC = () => { resetPassword(); } } else { - // Fallback: use userService const { updateUser } = await import('../../services/api/userService'); const response = await updateUser(userInfo!.id, { password: data.newPassword, @@ -224,31 +273,63 @@ const ProfilePage: React.FC = () => { } }; - // Handle avatar upload (placeholder - would need backend support) - const handleAvatarChange = (e: React.ChangeEvent) => { + // Handle avatar upload + const handleAvatarChange = async (e: React.ChangeEvent) => { const file = e.target.files?.[0]; - if (file) { - // Validate file type - if (!file.type.startsWith('image/')) { - toast.error('Please select an image file'); - return; + if (!file) return; + + // Validate file type + if (!file.type.startsWith('image/')) { + toast.error('Please select an image file'); + return; + } + + // Validate file size (max 2MB) + if (file.size > 2 * 1024 * 1024) { + toast.error('Image size must be less than 2MB'); + return; + } + + // Create preview + const reader = new FileReader(); + reader.onloadend = () => { + setAvatarPreview(reader.result as string); + }; + reader.readAsDataURL(file); + + // Upload to backend + try { + setLoading(true, 'Uploading avatar...'); + const response = await authService.uploadAvatar(file); + + if (response.status === 'success' && response.data?.user) { + const updatedUser = response.data.user; + // Use full_url if available, otherwise normalize the avatar URL + const avatarUrl = response.data.full_url || normalizeImageUrl(updatedUser.avatar); + setUser({ + id: updatedUser.id, + name: updatedUser.name, + email: updatedUser.email, + phone: updatedUser.phone, + avatar: avatarUrl, + role: updatedUser.role, + }); + setAvatarPreview(avatarUrl || null); + toast.success('Avatar uploaded successfully!'); + refetchProfile(); } - - // Validate file size (max 2MB) - if (file.size > 2 * 1024 * 1024) { - toast.error('Image size must be less than 2MB'); - return; - } - - // Create preview - const reader = new FileReader(); - reader.onloadend = () => { - setAvatarPreview(reader.result as string); - }; - reader.readAsDataURL(file); - - // TODO: Upload to backend - toast.info('Avatar upload feature coming soon'); + } catch (error: any) { + const errorMessage = + error.response?.data?.detail || + error.message || + 'Failed to upload avatar'; + toast.error(errorMessage); + // Reset preview on error + setAvatarPreview(userInfo?.avatar ? normalizeImageUrl(userInfo.avatar) : null); + } finally { + setLoading(false); + // Reset file input + e.target.value = ''; } }; @@ -258,7 +339,7 @@ const ProfilePage: React.FC = () => { if (profileError && !userInfo) { return ( -
+
{ } return ( -
-
-

- Profile Settings -

-

- Manage your account information and preferences -

-
- - {/* Tabs */} -
-
- - +
+
+ {/* Header */} +
+

+ Profile Settings +

+

+ Manage your account information and security preferences +

-
- {/* Profile Tab */} - {activeTab === 'profile' && ( -
-
- {/* Avatar Section */} -
-
- {avatarPreview || userInfo?.avatar ? ( - Profile - ) : ( -
- -
- )} - -
-
-

- {userInfo?.name || 'User'} -

-

{userInfo?.email}

-

- {userInfo?.role?.charAt(0).toUpperCase() + userInfo?.role?.slice(1)} -

-
-
- - {/* Full Name */} -
- - - {profileErrors.name && ( -

- - {profileErrors.name.message} -

- )} -
- - {/* Email */} -
- - - {profileErrors.email && ( -

- - {profileErrors.email.message} -

- )} -
- - {/* Phone */} -
- - - {profileErrors.phone && ( -

- - {profileErrors.phone.message} -

- )} -
- - {/* Submit Button */} -
- -
-
+ {/* Tabs */} +
+
+ + + +
- )} - {/* Password Tab */} - {activeTab === 'password' && ( -
-
-
-
- -
-

- Password Requirements -

-
    -
  • • At least 6 characters long
  • -
  • • Use a combination of letters and numbers for better security
  • -
+ {/* Profile Tab */} + {activeTab === 'profile' && ( +
+ + {/* Avatar Section */} +
+
+ {avatarPreview || userInfo?.avatar ? ( + Profile + ) : ( +
+ +
+ )} + +
+
+

+ {userInfo?.name || 'User'} +

+

{userInfo?.email}

+

+ {userInfo?.role?.charAt(0).toUpperCase() + userInfo?.role?.slice(1)} +

-
- {/* Current Password */} + {/* Full Name */} +
+ + + {profileErrors.name && ( +

+ + {profileErrors.name.message} +

+ )} +
+ + {/* Email */} +
+ + + {profileErrors.email && ( +

+ + {profileErrors.email.message} +

+ )} +
+ + {/* Phone */} +
+ + + {profileErrors.phone && ( +

+ + {profileErrors.phone.message} +

+ )} +
+ + {/* Submit Button */} +
+ +
+ +
+ )} + + {/* Password Tab */} + {activeTab === 'password' && ( +
+
+ {/* Info Banner */} +
+
+
+ +
+
+

+ Password Requirements +

+
    +
  • + + At least 6 characters long +
  • +
  • + + Use a combination of letters and numbers for better security +
  • +
+
+
+
+ + {/* Current Password */} +
+ +
+ + +
+ {passwordErrors.currentPassword && ( +

+ + {passwordErrors.currentPassword.message} +

+ )} +
+ + {/* New Password */} +
+ +
+ + +
+ {passwordErrors.newPassword && ( +

+ + {passwordErrors.newPassword.message} +

+ )} +
+ + {/* Confirm Password */} +
+ +
+ + +
+ {passwordErrors.confirmPassword && ( +

+ + {passwordErrors.confirmPassword.message} +

+ )} +
+ + {/* Submit Button */} +
+ +
+
+
+ )} + + {/* MFA Tab */} + {activeTab === 'mfa' && ( +
+ {/* Header */}
- - - {passwordErrors.currentPassword && ( -

- - {passwordErrors.currentPassword.message} -

- )} +

+ + Two-Factor Authentication +

+

+ Add an extra layer of security to your account by requiring a verification code in addition to your password. +

- {/* New Password */} -
- - - {passwordErrors.newPassword && ( -

- - {passwordErrors.newPassword.message} -

- )} -
+ {mfaStatus?.mfa_enabled ? ( + /* MFA Enabled State */ +
+ {/* Status Card */} +
+
+
+ +
+
+

MFA is Enabled

+

+ Your account is protected with two-factor authentication. +

+

+ Remaining backup codes: {mfaStatus.backup_codes_count} +

+
+
+
- {/* Confirm Password */} -
- - - {passwordErrors.confirmPassword && ( -

- - {passwordErrors.confirmPassword.message} -

- )} -
+ {/* Backup Codes */} + {showBackupCodes && ( +
+
+

+ + Save Your Backup Codes +

+

+ Store these codes in a safe place. Each code can only be used once. +

+
+
+ {showBackupCodes.map((code, index) => ( +
+ {code} + +
+ ))} +
+ +
+ )} - {/* Submit Button */} -
- -
- -
- )} + {/* Regenerate Backup Codes */} +
+

+ + Backup Codes +

+

+ If you lose access to your authenticator app, you can use backup codes to access your account. +

+ +
+ + {/* Disable MFA */} +
+

+ + Disable MFA +

+

+ Disabling MFA will reduce the security of your account. We recommend keeping it enabled. +

+ +
+
+ ) : ( + /* MFA Setup Flow */ +
+ {!mfaSecret ? ( + /* Step 1: Initialize MFA */ +
+ +
+ ) : ( + /* Step 2: Verify and Enable */ +
+ {/* QR Code Section */} +
+

+ + Step 1: Scan QR Code +

+

+ Use your authenticator app (Google Authenticator, Authy, etc.) to scan this QR code. +

+ {mfaQrCode && ( +
+ MFA QR Code +
+ )} +
+
+ Manual Entry Key: + +
+
+ + {showMfaSecret ? mfaSecret : '••••••••••••••••'} + + +
+
+
+ + {/* Verification Section */} +
+

+ + Step 2: Verify Setup +

+

+ Enter the 6-digit code from your authenticator app to complete the setup. +

+
+
+ + setMfaVerificationToken(e.target.value.replace(/\D/g, '').slice(0, 6))} + placeholder="000000" + maxLength={6} + className="luxury-input text-center text-lg sm:text-xl tracking-widest font-mono" + /> +
+
+ + +
+
+
+
+ )} +
+ )} +
+ )} +
); }; export default ProfilePage; - diff --git a/Frontend/src/services/api/authService.ts b/Frontend/src/services/api/authService.ts index b3250182..7d96ae8e 100644 --- a/Frontend/src/services/api/authService.ts +++ b/Frontend/src/services/api/authService.ts @@ -5,6 +5,7 @@ export interface LoginCredentials { email: string; password: string; rememberMe?: boolean; + mfaToken?: string; } export interface RegisterData { @@ -19,6 +20,8 @@ export interface AuthResponse { status?: string; success?: boolean; message?: string; + requires_mfa?: boolean; + user_id?: number; data?: { token?: string; refreshToken?: string; @@ -32,6 +35,11 @@ export interface AuthResponse { role: string; createdAt?: string; }; + secret?: string; + qr_code?: string; + backup_codes?: string[]; + mfa_enabled?: boolean; + backup_codes_count?: number; }; } @@ -153,6 +161,68 @@ const authService = { ); return response.data; }, + + /** + * MFA - Initialize MFA setup + */ + initMFA: async (): Promise => { + const response = await apiClient.get('/api/auth/mfa/init'); + return response.data; + }, + + /** + * MFA - Enable MFA + */ + enableMFA: async (secret: string, verificationToken: string): Promise => { + const response = await apiClient.post('/api/auth/mfa/enable', { + secret, + verification_token: verificationToken + }); + return response.data; + }, + + /** + * MFA - Disable MFA + */ + disableMFA: async (): Promise => { + const response = await apiClient.post('/api/auth/mfa/disable'); + return response.data; + }, + + /** + * MFA - Get MFA status + */ + getMFAStatus: async (): Promise<{ mfa_enabled: boolean; backup_codes_count: number }> => { + const response = await apiClient.get<{ mfa_enabled: boolean; backup_codes_count: number }>('/api/auth/mfa/status'); + return response.data; + }, + + /** + * MFA - Regenerate backup codes + */ + regenerateBackupCodes: async (): Promise => { + const response = await apiClient.post('/api/auth/mfa/regenerate-backup-codes'); + return response.data; + }, + + /** + * Upload avatar + */ + uploadAvatar: async (file: File): Promise => { + const formData = new FormData(); + formData.append('image', file); + + const response = await apiClient.post( + '/api/auth/avatar/upload', + formData, + { + headers: { + 'Content-Type': 'multipart/form-data', + }, + } + ); + return response.data; + }, }; export default authService; diff --git a/Frontend/src/services/api/bookingService.ts b/Frontend/src/services/api/bookingService.ts index f553bd87..48e5f2dc 100644 --- a/Frontend/src/services/api/bookingService.ts +++ b/Frontend/src/services/api/bookingService.ts @@ -7,7 +7,7 @@ export interface BookingData { check_out_date: string; // YYYY-MM-DD guest_count: number; notes?: string; - payment_method: 'cash' | 'stripe'; + payment_method: 'cash' | 'stripe' | 'paypal'; total_price: number; guest_info: { full_name: string; @@ -35,7 +35,7 @@ export interface Booking { | 'cancelled' | 'checked_in' | 'checked_out'; - payment_method: 'cash' | 'stripe'; + payment_method: 'cash' | 'stripe' | 'paypal'; payment_status: | 'unpaid' | 'paid' @@ -233,16 +233,27 @@ export const checkRoomAvailability = async ( }, } ); + + // Handle new response format when roomId is provided + if (response.data?.data?.available !== undefined) { + return { + available: response.data.data.available, + message: response.data.data.message, + }; + } + + // Fallback for old format return { available: true, - message: response.data.message, + message: response.data?.message || 'Room is available', }; } catch (error: any) { - if (error.response?.status === 409) { + if (error.response?.status === 409 || error.response?.status === 404) { return { available: false, message: - error.response.data.message || + error.response.data?.message || + error.response.data?.detail || 'Room already booked during this time', }; } diff --git a/Frontend/src/services/api/paymentService.ts b/Frontend/src/services/api/paymentService.ts index 31146587..9f39a98a 100644 --- a/Frontend/src/services/api/paymentService.ts +++ b/Frontend/src/services/api/paymentService.ts @@ -4,7 +4,7 @@ import apiClient from './apiClient'; export interface PaymentData { booking_id: number; amount: number; - payment_method: 'cash' | 'bank_transfer' | 'stripe'; + payment_method: 'cash' | 'bank_transfer' | 'stripe' | 'paypal'; transaction_id?: string; notes?: string; } @@ -13,7 +13,7 @@ export interface Payment { id: number; booking_id: number; amount: number; - payment_method: 'cash' | 'bank_transfer' | 'credit_card' | 'debit_card' | 'e_wallet' | 'stripe'; + payment_method: 'cash' | 'bank_transfer' | 'credit_card' | 'debit_card' | 'e_wallet' | 'stripe' | 'paypal'; payment_type: 'full' | 'deposit' | 'remaining'; deposit_percentage?: number; payment_status: 'pending' | 'completed' | 'failed' | 'refunded'; @@ -22,6 +22,14 @@ export interface Payment { notes?: string; createdAt: string; updatedAt: string; + booking?: { + id: number; + booking_number: string; + user?: { + name: string; + email?: string; + }; + }; } export interface BankInfo { @@ -284,6 +292,79 @@ export const confirmStripePayment = async ( }; }; +/** + * Create PayPal order + * POST /api/payments/paypal/create-order + */ +export const createPayPalOrder = async ( + bookingId: number, + amount: number, + currency: string = 'USD', + returnUrl?: string, + cancelUrl?: string +): Promise<{ + success: boolean; + data: { + order_id: string; + approval_url: string; + status: string; + }; + message?: string; +}> => { + const response = await apiClient.post( + '/payments/paypal/create-order', + { + booking_id: bookingId, + amount, + currency, + return_url: returnUrl, + cancel_url: cancelUrl, + } + ); + // Map backend response format (status: "success") to frontend format (success: true) + const data = response.data; + return { + success: data.status === "success" || data.success === true, + data: data.data || {}, + message: data.message, + }; +}; + +/** + * Capture PayPal payment + * POST /api/payments/paypal/capture + */ +export const capturePayPalPayment = async ( + orderId: string, + bookingId: number +): Promise<{ + success: boolean; + data: { + payment: Payment; + booking: { + id: number; + booking_number: string; + status: string; + }; + }; + message?: string; +}> => { + const response = await apiClient.post( + '/payments/paypal/capture', + { + order_id: orderId, + booking_id: bookingId, + } + ); + // Map backend response format (status: "success") to frontend format (success: true) + const data = response.data; + return { + success: data.status === "success" || data.success === true, + data: data.data || {}, + message: data.message, + }; +}; + export default { createPayment, getPayments, @@ -295,4 +376,6 @@ export default { getPaymentsByBookingId, createStripePaymentIntent, confirmStripePayment, + createPayPalOrder, + capturePayPalPayment, }; diff --git a/Frontend/src/services/api/systemSettingsService.ts b/Frontend/src/services/api/systemSettingsService.ts index 68d6c30a..7ccd2ad1 100644 --- a/Frontend/src/services/api/systemSettingsService.ts +++ b/Frontend/src/services/api/systemSettingsService.ts @@ -36,6 +36,24 @@ export interface UpdateStripeSettingsRequest { stripe_webhook_secret?: string; } +export interface PayPalSettingsResponse { + status: string; + data: { + paypal_client_id: string; + paypal_client_secret: string; + paypal_mode: string; + paypal_client_secret_masked: string; + has_client_id: boolean; + has_client_secret: boolean; + }; +} + +export interface UpdatePayPalSettingsRequest { + paypal_client_id?: string; + paypal_client_secret?: string; + paypal_mode?: string; +} + export interface SmtpSettingsResponse { status: string; data: { @@ -168,6 +186,29 @@ const systemSettingsService = { return response.data; }, + /** + * Get PayPal settings (Admin only) + */ + getPayPalSettings: async (): Promise => { + const response = await apiClient.get( + '/api/admin/system-settings/paypal' + ); + return response.data; + }, + + /** + * Update PayPal settings (Admin only) + */ + updatePayPalSettings: async ( + settings: UpdatePayPalSettingsRequest + ): Promise => { + const response = await apiClient.put( + '/api/admin/system-settings/paypal', + settings + ); + return response.data; + }, + /** * Get SMTP settings (Admin only) */ @@ -277,6 +318,8 @@ export type { UpdateCurrencyRequest, StripeSettingsResponse, UpdateStripeSettingsRequest, + PayPalSettingsResponse, + UpdatePayPalSettingsRequest, SmtpSettingsResponse, UpdateSmtpSettingsRequest, TestSmtpEmailRequest, diff --git a/Frontend/src/store/useAuthStore.ts b/Frontend/src/store/useAuthStore.ts index 659cc740..3b4bb405 100644 --- a/Frontend/src/store/useAuthStore.ts +++ b/Frontend/src/store/useAuthStore.ts @@ -25,9 +25,13 @@ interface AuthState { isAuthenticated: boolean; isLoading: boolean; error: string | null; + requiresMFA: boolean; + mfaUserId: number | null; + pendingCredentials: LoginCredentials | null; // Actions login: (credentials: LoginCredentials) => Promise; + verifyMFA: (mfaToken: string) => Promise; register: (data: RegisterData) => Promise; logout: () => Promise; setUser: (user: UserInfo) => void; @@ -40,6 +44,7 @@ interface AuthState { ) => Promise; initializeAuth: () => void; clearError: () => void; + clearMFA: () => void; } /** @@ -55,6 +60,9 @@ const useAuthStore = create((set, get) => ({ isAuthenticated: !!localStorage.getItem('token'), isLoading: false, error: null, + requiresMFA: false, + mfaUserId: null, + pendingCredentials: null, /** * Login - User login @@ -64,6 +72,18 @@ const useAuthStore = create((set, get) => ({ try { const response = await authService.login(credentials); + // Check if MFA is required + if (response.requires_mfa) { + set({ + isLoading: false, + requiresMFA: true, + mfaUserId: response.user_id || null, + pendingCredentials: credentials, + error: null, + }); + return; // Stop here, waiting for MFA verification + } + // Accept either boolean `success` (client) or `status: 'success'` (server) if (response.success || response.status === 'success') { const token = response.data?.token; @@ -85,6 +105,9 @@ const useAuthStore = create((set, get) => ({ isAuthenticated: true, isLoading: false, error: null, + requiresMFA: false, + mfaUserId: null, + pendingCredentials: null, }); toast.success('Login successful!'); @@ -97,7 +120,10 @@ const useAuthStore = create((set, get) => ({ set({ isLoading: false, error: errorMessage, - isAuthenticated: false + isAuthenticated: false, + requiresMFA: false, + mfaUserId: null, + pendingCredentials: null, }); toast.error(errorMessage); @@ -105,6 +131,76 @@ const useAuthStore = create((set, get) => ({ } }, + /** + * Verify MFA - Complete login with MFA token + */ + verifyMFA: async (mfaToken: string) => { + const state = get(); + if (!state.pendingCredentials) { + throw new Error('No pending login credentials'); + } + + set({ isLoading: true, error: null }); + try { + const credentials = { + ...state.pendingCredentials, + mfaToken, + }; + + const response = await authService.login(credentials); + + if (response.success || response.status === 'success') { + const token = response.data?.token; + const user = response.data?.user ?? null; + + if (!token || !user) { + throw new Error(response.message || 'MFA verification failed.'); + } + + // Save to localStorage + localStorage.setItem('token', token); + localStorage.setItem('userInfo', JSON.stringify(user)); + + // Update state + set({ + token, + userInfo: user, + isAuthenticated: true, + isLoading: false, + error: null, + requiresMFA: false, + mfaUserId: null, + pendingCredentials: null, + }); + + toast.success('Login successful!'); + } + } catch (error: any) { + const errorMessage = + error.response?.data?.message || + 'MFA verification failed. Please try again.'; + + set({ + isLoading: false, + error: errorMessage, + }); + + toast.error(errorMessage); + throw error; + } + }, + + /** + * Clear MFA - Clear MFA state + */ + clearMFA: () => { + set({ + requiresMFA: false, + mfaUserId: null, + pendingCredentials: null, + }); + }, + /** * Register - Register new account */ diff --git a/Frontend/src/utils/imageUtils.ts b/Frontend/src/utils/imageUtils.ts new file mode 100644 index 00000000..cd997fa6 --- /dev/null +++ b/Frontend/src/utils/imageUtils.ts @@ -0,0 +1,27 @@ +/** + * Utility functions for image URL normalization + */ + +/** + * Normalize image URL to absolute URL + * @param imageUrl - The image URL (can be relative or absolute) + * @returns Normalized absolute URL + */ +export const normalizeImageUrl = (imageUrl: string | null | undefined): string => { + if (!imageUrl) { + return ''; + } + + // If already a full URL, return as-is + if (imageUrl.startsWith('http://') || imageUrl.startsWith('https://')) { + return imageUrl; + } + + // Get API base URL from environment or default + const apiBaseUrl = import.meta.env.VITE_API_URL?.replace('/api', '') || 'http://localhost:8000'; + + // Normalize relative paths + const cleanPath = imageUrl.startsWith('/') ? imageUrl : `/${imageUrl}`; + return `${apiBaseUrl}${cleanPath}`; +}; + diff --git a/Frontend/src/validators/bookingValidator.ts b/Frontend/src/validators/bookingValidator.ts index eb216132..945ac5d9 100644 --- a/Frontend/src/validators/bookingValidator.ts +++ b/Frontend/src/validators/bookingValidator.ts @@ -33,10 +33,10 @@ export const bookingValidationSchema = yup.object().shape({ .optional(), paymentMethod: yup - .mixed<'cash' | 'stripe'>() + .mixed<'cash' | 'stripe' | 'paypal'>() .required('Please select payment method') .oneOf( - ['cash', 'stripe'], + ['cash', 'stripe', 'paypal'], 'Invalid payment method' ),
+
+
+
+
+ +
+

PayPal Payment Settings

+
+

+ Configure your PayPal account credentials to enable PayPal payments. All PayPal payments will be processed through your PayPal account. +

+
+ +
+ + {/* Info Card */} +
+
+
+
+
+ +
+
+
+

+ How PayPal payments work +

+

+ PayPal handles all PayPal payments securely. You need to provide your PayPal API credentials from your PayPal Developer Dashboard. The client ID and client secret are used to process payments. You can use sandbox mode for testing or live mode for production. +

+
+

+ Note: Leave fields empty to keep existing values. Only enter new values when you want to update them. +

+
+
+
+
+ + {/* PayPal Settings Form */} +
+ + +
+ {/* Client ID */} +
+ + + setPaypalFormData({ ...paypalFormData, paypal_client_id: e.target.value }) + } + placeholder={ + paypalSettings?.has_client_id + ? `Current: ${paypalSettings.paypal_client_id || '****'}` + : 'Client ID from PayPal Dashboard' + } + className="w-full px-4 py-3.5 bg-white border border-gray-300 rounded-xl shadow-sm focus:ring-2 focus:ring-amber-500/50 focus:border-amber-500 transition-all duration-200 text-sm" + /> +
+ {paypalSettings?.has_client_id && ( + + + Currently configured + + )} +
+
+ + {/* Client Secret */} +
+ +
+ + setPaypalFormData({ ...paypalFormData, paypal_client_secret: e.target.value }) + } + placeholder={ + paypalSettings?.has_client_secret + ? `Current: ${paypalSettings.paypal_client_secret_masked || '****'}` + : 'Client Secret from PayPal Dashboard' + } + className="w-full px-4 py-3.5 pr-12 bg-white border border-gray-300 rounded-xl shadow-sm focus:ring-2 focus:ring-amber-500/50 focus:border-amber-500 transition-all duration-200 text-sm font-mono" + /> + +
+
+ {paypalSettings?.has_client_secret && ( + + + Currently configured + + )} +
+
+ + {/* Mode */} +
+ + +
+

Use sandbox mode for testing with test credentials, or live mode for production payments.

+
+
+
+
+

46S`+vM%dHMuTv3=Ki z@kOpUCg2=uKi#(`CX#bSy;{DQ?4A_s|@rt=B9 zL5Sga0JRGib8|B8t~6Q9EX4jZ{PjEd%V1H_LT8%)_GAV#-mK}%EY#F%{uT1Y_wh6E zmD9=?Poh9FW4+^3!|0ymw)uxztYuINYcU-6At@FNcv$IlD6fJP*_A-~`9i^>hR>#E zL*Zzoaf3wprExX|6;onPiLM~?3IAG0LT1>GiW1$BoYEM1I5Ua64dhT3s+;pq9n>92 z$x#=?C0Hr3qF?`j*fA z{XCR!IBJkEWxz^()FXd5{X9sOl-nfIQ&m!p$Ryi!ib^UVM)CaFY}r#pY!VMnsH8eG zB%2kuf$pNWO6pG{evf|J=W&K7_`4We)u+=%jWB^#*u9st{bPxuBDy}rLE_kOOo>ho zqCvf&!XPSRb&ESzqFJIhae+>B96YCX%K)U5-4ai(Q?JS9u029Te~c7Fw8ZaeVJ-Vs z#GXkFhCs?Gh#iVXK-Y&R9MideIz3|VPXBJi){6K&`T)S1LJm@%g@W=_7UkMC8+2${Cy(GXfJvvrH7N5O=%qLi{g`X zeEyGK$=f`_zm}$Vd-Mk2Ceb2*7nc(rPD^4lsX`QzVLuV^#P0cM4*7$GiVeI405GP% zXy_F{fo!PMCmn?_aiTAUiT*@gr1UU6$rXPoD@M#t8Dlv1nRTr_Ea)FTmMF^;@(JY7 z(S~CzNiVptAkBY)xPyRTPGDGg>`NqQx$KgHi!t&K#{ATEb5bJ1@d#qsh-y@6_EUWR zl}in*E*9A-0aus{#OcTq8z|T;y||zV;_umU@fRqG&lSeVo^R%#vgG(Sc*@MB z&nD#Q1;=ub@SOSy%IOUH~iaiN;iYrN`rc%hjEK%a;OVU)Ah&e%Q^QzL+>EZL)6 zY>Qq^sCc`+wmR1egZ_LI3brTp530!bMrMKG8Ty1dgF(i7Vh7FQ2c;BmIOd~3oc`0V zjFALy0vaU!g@=>mM_~Fs{Vw%-+-xUPU6Pz+U3QYAyA^GL+juLS9;;nCPz>Gq!q1JU6!MSO5S zg(Mbpu)1$65-ZI=M&-$ZwziYS&iQnPYWv!&9f&@JYE6B+sh+~xQc*3%E4%y{Ws-kd`Y-G<&xYLNeF;le z{x$IwGYkU!F0>EVN~u7UxFl)@EEcZKB)dL9^Fvi%^Si-mzH%fEoFVM8aF7;Pgy0f8 zT=(YFE|2|~mYWEP-$a-{&58Tr>`H!yj~0itBer{uP2jW`|G}?p{(N6#5q62T>UZCQ zqBSEH6;kRRROfU0nu{C0jK zx3~&@IP+kwPl@pbw4B|Bv_y0R?^SCvJ%z-28Bb{AlA4*k8}bQxHze+VT){LrsJ&Et zn_W%#5}_onq9h}9?JbY7OSN^}1L^AkujV?w*n;+YMiLb(6d5i{Q4I=0yk2D3qYv3HXiR|U#~B=esz0_5qaSSIYg~5> z`!N7x$rAz}T&s(N4JUDwAwjbUdDp~PI3JkFL0gB%Up4V z4=>Kk$8B<~Nu&o1-~>3v0DTl10VV@af5S08jx06>ax{>IS?B|#A=Usj=@ZrzhGPfA zP@a@Nc^?oUWUOMB*W2+<$s_a^P3Pr;KHe*U@e+H)aQxOPPgL5~4cR6`l#k(MI9f#P z9)0;oMDj+&Zrw_1lQj{wU4u_W?S;rCPz#NC7}o$m1&)P3X4DdKWh4&S;65OLV<1>w z3&k6eh<5^R;hkSLK;qp;ye~2F4onI>{{VQtNZ^@>ElkC88S$)|sQq_fGmhGQUs`m? zb_lB!(1XCYKx`Lk7Kpu%VF0m51el0rEJ4{VzRSdoq`eWV8IDS;Jb~D`s4^L`mx|au z`UG6=4ZS~N;Oz%S~7=JEdwzv%3M>;uh`U>hAouxxk^n#P%X@un1}@s#L- zRHpG8hW$^N#zUZ2t2}}2N54qL_B0W@N56Rwu^mBdoVMv8eUlk+wu)r6*iS|ELA2r& z`d(OoTPvM$9#Rt)ZC*eg;=_Cm2GWE=$v|3IIOtt|B}3tWUBP%Tzu9Wox~da*K=UF& z|BUW-o4+{0NyI!U*$Ehnn{!kn!z@l+2MFT?{^;ix(%CGNom?S$LZEy#;US;CkYPZ% zE&@z;!dODbVL(1D*h()x4R+EEG@5)FlY$oiQ|}ar>ezPH*`KO7j*7^SoX(Tm<<) z#9PV6h~L2b-tc1!;8n+pPvBKG{6ZuA-tde37>>_BW5fHqVDs}|-pGrjO*QfYKl(QX z?5zGS9RK)*H(ZG_D$@c>xICR(6TTG}=iiEp^X~((G0fbo%<2>7Q|%M^vXYpNCShbj9L*Yv7gG5O3rGoDT}*=<81>0!@H;{T0IbQ9>TG z03Mwh6XLHD8fAv@Hs~=S{wkp%W>}jDCAt{wksO5eC#b zfjXz|TtPJ$dsAuNBqL@cVz$03-pxw$(~Jne*o5pL6!8feN^=u}@ zFG{{LspO+r@!*)3IYdIdj1ctbrX->)+o*mJ)k)YK35KU~jF)GK1UnO*_sQ$4s z1OXfTD50wn29y@V0|fH}JLy9S-0)Ba9y^fFBEYUVuEa@j3%PzJk8T1(k`i<{YpIuy zN+_YfA`DFXK6qhn=?&wWU97Hip~v}jJ}sdRNS~`IA+5an<-@a z9}ynD4JLNRu)l#Q5%C649h;z%AM&q>{1%wX%Izm-2$gG_I^I0Nbu`w@wAsP!^@d|0 zia?RT8dxMJzb3d$%`@`Y;Um=NxmZvpFKIb4gsW{XJR+qtRq9I}q3(Y8gjeWY|+E^9lmRu-{H z(2>Y%p-l;G#t@6Xf*&w;fr9PC4c0V8yOZ=+l3^c_3*JcHFzofJT7O>NaiT9_&C39S zKp6zu14wR3EhGjId83`UNr8X5Qj9Ii1{u7Fn!Ux#~hugwWe zuyo4dD}>5%g5kL2AUilv2<;3W>X=p#fK}l<+|>3URtW<|9PG6%-4|w(lDJ1%m0e%n zCvXvTM(JhM>49_M$SAAM2n>NEv#dHZV22~CtQu=|fRa6?DqHzw+t9edBy@FrAmYM0 zs{1)pq2(=TISy=={DZjo&{UOSb+iyxCZ^&*q}N4vTiI070*CxP{t?x5|l2<>Z}m z`8Qw<8rK*}O-}w{e!nt7^*wex@&t@<}n(EwA`Qe=up*7^hufec1LsR`gwP+BU!*6SPM zuDs+Sh_xk% z_Sq)BfFEBRAF0Bn#`ap=acuuZ3#!HUx627Klu1oy4l%D$aU}duBr#|B89Tj&nJ%gf z>`Eb9RVdm=fKXABD8_nk#KZt}3~rV!ngCCorL{7N!)!cOFT0VQxBd|d7}x*fllf_D zi7HsSlc6@QW&L17@M}*?H<>Cs7)0_TlS$Pq7X;a;h|M8NIuVkAqJPT_R#bu?cVl|Ja5V0)%G^K z+TQN;m2}nE-bP?P?#Zta;SQgMJSAOTM5`J~!2uj!$#zv!d_@~Q+ICOyLmVjB*Mqjs zyMy-iC>YgXWptfAem-Jycxbj4+D_XxZ~MkPRPQa>h+6EjYNroi+IAx<-&^tu!X1Rg zThgJH0C8e zNdN2#W!2yu>r5h0)OQClSyA3KZ;;p4Hc@FEEs?42{DjXo5PJe^asH>Q>Qg^9J1`Cc zt+J{*y?$&}dH@Gmsx!w_Wd_cNBWp}mR$!PpRRjjZ(PvCmpFlr2a>i7}&kb1xs^zaK zp*83*xdxg(jY19gWPXP*u@b^Q_{iFi=BK?#sbnbxt?CJ5CQVR6kH9OoJ|NLx0p~H^ zzzi5b{M2hAo^P6P0ex$mGI6ugI_;XsJ>N8)NQdD?w=(fdciE9Z?YNA4hLp6GZ4Xq1 zr__1Mr`83=v*hVxCQT2Nc*EDJm_^mV1(-##u7?XlP7)yqNQo1GD0XKi_ApwTotV8Y8D6l@Kn(yh?R? zByWN!N=O&;Q8+@r&SD*4MCQ#~Ic9dp^B*&NZ|Q>PA51A?rYS`T5#kD(Wjpi_g%nX1 zmm;v5w4{iwG7e@(*A@adg}4y|X3&r@oX~TNIDa0-tk{vf5%L8lzz2(w1jfv~V;oy@ zA0lfRvX%vQ!M;is_i8K)QGqQ;>_$QgDZn`Ue_4ADZa3>u`yN4H({Y>sNo1G3vfOZ7 zC9)^UG!{7}+IIunXX=~7I?>ATM!t79W8Kyg^-dC?UfP~;tCO07&r%U zPQ;;o+eBPaZ7C8|ylUZ)_B6pmjY2}W7CDn8gmd5*v+WMiPeMw-6quv$2XS*MXt3mj z8J3)&N;!e*eh3Os{Nu$E3JOr5_7W6^x^VyVp41Be3O_}X01i^2L6E3f+kC4wuU0*q zQ#bGRuNGnn@Aa>CGpu)gh?rH3pX;3XnTjKr`F$Xq;Hn>VdZU!*lO>d~`v3{aQEU<8 zK6CiRD`$x6PNf^Hkflq5+;FGqNSK;xZ;!-IXsWCyMSj)q{V7%0a8u|v$Z2QE^HFKo}p z$i&=Zs@ymMfxCo_PV+6lHGmLYa2alHD#8C}Z5-5MRE4WCMyd*VPUJesJC?c97Qi;h zzk)FT#c8$d`aWq1`IOTe>MjUe1(y>pXJ9m35+1x=XEx4hj()aL;BFDtf%^MwkiTz9 zTg+L~=CXAttr?!~Y@4589K_Cd=GaM@Xm2ciw9Tv>iQ=dfj(80f$^1nk(r`R1Y6y^v z0JdpP!9{RX;z7K@cZaM!KaLBOeF_x&lAzc<+7^35S@j5op!%^7^AlK z7s!10PawoGLH-72sgZdN-pGRuW;cHEo*4P6HzE$6sgb{}L^7REF(G#ejFNaa4{mwq zC(VB$0*A6l8oZ4O^7q>~LmW#I<-@id%%4_x)~HT3^9R_m>av!+pQ~f1=v9 z8y|vdW<%7#7_Gv>fg`jE>jsX`Y)G$IHC*dd>^EY)Fbn^$!!9$9m}6K5c_G@3=)UZh zK3l499c2Xw;)A_2?Jn^ynKmtF%cNV2tynAhg}nnVw*u7QRk-wi7R+VMl74%XCGCmU zBFM^qzLnYvfL&55Jm>TdpjDoL7{Crna_3uat0Y8&V%AM`W=bcKzp3fBbCpc^e19Ip)Y zmrv4yL91-SxO6@@TKgl`Jxq|Py%vicQ{$qns;&QSnoU4L^3I=H$Ghrq0r7P|YN@`p zUYlBPRb(L#8oX5Gk<+Ji62vtb066WI+sfXzcYvdJ01Ww4%j?%W04Ly5Q=Hd3U`X$P z(Y*t%=pAr|6#%Gt6P?X}oI#!c&e z5DUA6sRc-JX(B}`x3brxhmn%ZicE{l>o(FC9!Ha{!5pBGya2Tfh)*)YeuwYVa+8EF zz+(U6t@-k~3veRbYXKi6o+5FZ6)vwsli$HRFuSZo>_VI=xrj%$J zA~AJC8bLRPj$rb^Rhdd?Dcn(B1Ea6`2Na({xOfPL7Mf81N9ctRf0rJHt$eIO zUj~!f*iHIhF#*JWsAn^9n*N_Km5=$v3ax5Fz#}GD7_Lk@pp=^YEoSV6Fm!o!|&t3iKlAbTNsK!YOULXH1nna2|yI90>h6fgx1eg~vj_ z_J)a5Nhn;=SgxeP;Y`}PTYP8+dQ3hA>kD6j7m|gzjm1SZ2#S0ZN5*hRAh#p}Vy_a) z_)iQ+i4`j@h7=nXq2B@DJh2CrYE&(1R~`Y|}R35q$$+^Zt&*B}x6Z+v1(&!2dhmWZ6f+%Yf zoW0;ia(34ODh`Wah2{`J$w4Q5tK(R%sbXwmbg1<_wz zds#)%lhVS7@7U%~nGJn%9hQsWy1-QaJh0q3b|oKVZ`$){!6xKVwWnL~@o9e}FYsyW z*hruD^a^~UpJLGb??S!+kT(Ewtb}jCB6uMdyz>eHIr{u&^nXTlI`?KG~%Y5Tqh)n_xz&|J*hJk(apFvIX$pj!_Xry znK8M%VoX=ydS3=_&O|`5x4e2UwuxYeR}3lrWdZ7}-JTcisF*gV#k8lz*84@=dcO#} z?xW!FjY`uO91;w10G^W++wJd0c?wtXg@^~QfOauAgb0ACh5<0S7?!pI5CDf33$qQ; zG`vg-s%k=&;#E*KS_yrHo-&`a>;O(eClTtk_3$Z6FmHQw1A7vCfdvRhK9s?M&hlmB zzr_4F^ujo1@lIz?C1)iuNlEMhBCqy7pXBURZMu3M4Ni~kR_E-NHU-UrZ-g*=LCJ&{UM zpYG8%^DRS_BK_PU6Qj{T z0t}}|wSA_JIF=w}CG>k#x*BXCO&BDQZ}}uGiw9_TVZ`EPuO6%!u!^u(>s&!#8DX#9 zO_!Ul<@lMp546pWkH5whh@AS`U%eX+RFGe-hMx+owPGuOR$8V7F2a>cTX!tBr^k@JA=1i^N9V9{p@w_Qg@r zv5M2$;a3t%5g~Y{j1NxGQn>X+7CBLm{^D18X(oGl6P@P^_Y<-$P64$aDo4e4Z%Uou zQ2m1wO1kAJ7=PepjDnZd5!=K7uq88GIRJi(3Q6H0^XY=jL4@v>`(4lk3oCPTTw*3A zi{$`#729X(i0x|ohuJ<}JpY<|%!39D*@Ii!%*~r)Ft^v*pS9u1=w<~lCs8^XPa%f^ zMiht~8#t^AM2|U?6Ai0lcS<%L_$lsRfsv0*kT#y6_74Mwqh!G&-ZV)Yp@AXdtP#li zWz}{>aOU6^do&wez|JTlF;Pwf&1U022^DHK{6No!;{;8JqB%*UFjf@HYe9Bu5nk1d zRD$fbRkpZ_DqC)`*;NB~y|nK~%ex>cs>j|3pjd5-#>~bqO2Mxz6UbUrQ3RS;G~)<< z>h|JC-3Fd?%6k>8|~5SK?hi0Nq~2p3NXre z7iIXbAa!FO_Y_e3nxOh|*6IfG>~}rdyMgU-d(9IG_?)N0x1%z&BXF%p9IGO1J8EpN zO4!=%(YpbgFMRV6UwBTBPg{6|;{&tXq#ht28;HwaC(HQr7HB%e+OzZ#5%4PnL?1zm zmDX{^?q);Lo`eUT1&)D9BTnZeXs5gBfDPl!@D`!-N!=jo2SL=kTKX5a_{zXZDb*bN zK%Mg%B&+G1^`__O=uV`>FG>L2`f_&Tw<4ztlO-O1B;7Dsk7qpv7RU*_BR)K*KUS5GZNTmq1D z`Y7S}$zx$aE;y;1wAQI+us23*6Dxru3%rrh(3fp#f!52by`fLTxqPs$(9cn3il_<_ z;XxqumZ)PNa3ngaj*Juoks^br2-1Q(@EDABQ|xtvcv%4PcK?~^3CauSqBq)nwjM$P z`T;BUV<I!+ zm2O2=7gh}!_&>#tpJ|}Wxi=JpEN5n|#_#m3l_b=x4p)5dpb)hZn7aDV3gvhOvP?|4EWNw}T{?G=F0o z$crgady`iOqr)*qu$uCb>>$!&aDJvgNKP!}+07uln((EtO+dO1wLM087W6c`?F*%` z4L~$@rCAes);Sw7ksCl52xsohtQ6AQTN(OTX?|Yd8{8k79xwF!P!yR5AaMvu5FxNC zC=*KxQX+&)%;|N!!nzO1ajQA8AA8#u8SR}C_J65YjH#UvI9p8XVgUNI%^qW$SJNrP zhEO37pOPc)_2A_f@Gh(*c|;HrtDQ^&^~#l`kZL7eqFT^p9iT+Lfrpo>phrQ9oZm@` zn8byEfe{2^7Np2Y-W?~!~pE5iHcnv_V<5_v{!^R&PY9Y3T+%9d}dkxZCqO4)L=?$z$xe56M6Z|)I_L#XI` z6B4Klug`br7cIz!NVS_;G5I2Y^bB(fk5g8c1S7ft+%JWGW>f&fWLa+smSs^9mJK*d z`|~y^9W_W-Z$g~JFV#{wjtM$59B+X>xOjD9iZ8GQYN-~4UdcK;37Pjg3gc5D_CV|J z?d+2Qgw<$sX_0%`%Xfi=^PUG*5Gg$ueo#5|nD9r1qS&els?R%76T8~1sqVj36Qq0A z)YWCyv}=Q?X*K+!rcU_9;YJz`%)+vFz8%2f66b1XeWi9=VZBG2dm*6C0@Ns{$tvfk zEQeDA0_PwQb|?%9ZkmzQKj8I<_E~k^fE2OoWZ;!nK~)UIWm-&mu9dQcfw;J%Ggio- zQW>3LtFT03j6XTc2k9UigywfAOInw68*Y zwG!gJ_NvK3PWr-^;qdG-k(07@O_*5xjE7p$FAYL5d9VWZ)0(b710KfSX<)ZNqQwM5 zC0`TDrN_zhlTvR*m2$8rD=?k=MKF5=wK9d9LPH&kC?*e?P5N@nGvNZy$WOJV9>Vn= z>QkuA@b^_U7y$W5Jm%Te`K(iCo%uo$N$+mqh58b1E^}yGx>9_X$zz80C*+}={2OLV z_2v{X{Yk}QmV>fa95*!K%%1|CA&$yo%R9VYz=Qh&h<#y>P9!FEKbdPh)gMKwJ^B@Y zw(KHLkN-{x4hj5U2)oU}FS6%=^|xxmE*At3VZSNx|0!03720v){}OQ|;Ge<&)$9_X zDgOR`5TstRL(jp6P73m0C!v|hzx{s?`KLp73O-c|S7c_ek>Pw8&U!KXK8#PO&YM@D zn=n%DX8`E9QH?AUx^MjiZono1LIrZCYXOPW{~+6Rgw&ECsJ+4~32K{k&t|eV>8^u# zAPFB1N%U~Q_!rS|$YbP?6>f0jXBy>*DUc`@Va+EuB%%($j<@dK%L07itdZYvDCeCo zK8_3c37)_Pz;-ZFoNzctgk$83h6t8Cg#?2!vj8l)(H0onF42eu8WVF5fa6Nlnq8Nn38+@+pn(I5WC8~qe`srk zYao7oF3h@%rn@fVc%O*HM;W}+3h^_g06*eHx&+6-`Q>#S1(+)ygF}!b-o2w!kOI3q zY2@Lp?p)ZX-r~Ba{zV(IA^(j`3*a$jO#`VYLe4)2Jg-ed39%sE*$dF=h=U4h|V z+v_!BtG5Nt@H8#r3i(ntuX5~EtdLn*W#mSqzH-FTO6`Ndy41z+07SzcnVJx>0-gsh z{XGL{1+fc`{4BnLMB1d|39;=2GPq$jsRHu2#g$FWgE60q^Ca5Aw$7VkPQtucvLkk{ zg&ioRPQ}hntd;$j5+m;JnU&K}wmSk3QNTPnwb4bAI8hPf=5U{{<+*rx}hcmM&vh!D}1DeBTOz;tJU1 z;fqKyB7Cb6HpEPdVKEMVt}&MVo??YOs8q->PQQj@m>C^Fbno@<;zJx1LiK||#Jl|= z#LYxqUfQmMVewgr2Y?<(#F90tkl&%|lcUS0$*UQ7VniJCq`d;~X%O(bU$AjCdI(`P z;q$Q#VHb}kj)Z^8=^stxAx13TmC!0cg-z`ae7HXbVGXMfQ*fL8U-v-_@m-PZq37x>|jhk&XW6u{LhS!-O?)%$(2r>b6HJRW@fExzpVLi11z6dUSJo%tGZRJ^8qf8egEk&E#fZtpiA z{|rWjBi-W7M?6bW1>PWt`j%wck$Py(&gPSk#rg;5#EJSgQ?xaS`VxT?zPfrAaE-17 zZ8u`W&v3l*9M~u~1e5CdzQJ>Eq8{oAljt;M@F=K2h#&Q+gT*Hg9*#+;px-ofGMUu` z6lIQ^#~y`Fs)Jb2_9qhVLKiaO8AyoY?0Cxao*Rf79L(v&T}FqaU$NEL$u0&>^U=z~ zYrvKx=FLWt>11YL0(`XcqyGXU=cAR6BZ=X7k6u2KHcxm*(#uCHmkI9{c=<@0+#@m^ zRcH@~$8UdQtxE)R$4`npEd@Is$Av_VOV;>W(%EPOcF>@jYZJXXTaC=bsxUn23)E4+ zRHQLbyjqU2uZSxIXi`vs?e@1wPH3EyjiaMMIKty_=#%0)+UHcYw+%-p@_V!`RQt?k z9?Cwd(WNvE!jL4sa3<;&BL4txdph`^^V6WCzqt~67I3+Jun z;~|l(r|}`zeTXpdlrwIK$0_FlIA@Lqu*we^!yRWott|FoU5yAdp#iLR9pYeI;Eh0$ z!vRKM05gV&=w;@aq3?!Ni9ydPw9t4H;}dpAO6Vsdt0D9$ypt@t9V0#7*MQ7(fR7ll zyhv6au6m%m(6c(v1Se9u0l(}34g%xuu`*c7`LdW5T? zA%Iek8UpN`3A~gRyagO_;H@QEAos8U()p8OyYqu*Nav<>QwaGVv;pMD`oz*>Bcuov zZ?$aiIHUk5`m)CfwTXla%)mtmv<8OxO&K38qFI?Pd;~q4?F6P661)lo^Apl9CUa;h zB^Sg}1Ll~xcVt2AV(d3o<{Ycc0U3h_@M&K29bmh6&X@8H27#ta{{kRI*X8{&k7g7~ z^LAEAM5s8Q8Oi(dg}c)9XJ<%bF@eW2tWrP^+n5eUH-*rE-ki9-556PfnfVH3BDCsv zx}d3RWkGc_Xl9zZSX|iWSv9m$`$w!I>HP-JszI?!lKd68PTmtVhATl~*r&A4o9=1* zB-_*Wah7<`!n5ieT(4JI^0Cy?j=dOHCFGEdFm@xQRhZmxuIjJg;72(cC@*kafjanr zF%HS*+aL!J&%J2TjUWyN*J~g1toSGtL?!}B3GxZ~V+U{+s|ID95VOR4Ps5AYth1RC zbmk__as?@Rt}afQu#5s=S)x2lBZgzLMN_fC!sJ8}5>dt*I`O7CMtQuu3`g+KXFuMtL7S5+I0+e>)@?@ft=Q&i<#1wmK)K&yArEbAt{Ht)^E8vDSTGHmza2AP& zE_OrTsPcG*H*&9&Bp?`PADsHpUyt>ddd+T-lgdg~ z4^QFLmI|br$HVV}U(hQp!hBkzo2Z9)4eWXG0|hzOux0gNpgCUjJ17^{kYU(J;;xNA z?n@N7qZ!D`8+@vm*Us7s*33WzEhdhA2ra3yv`t+Dp3A>Q-tyO#U*hnee-t(_B95&; z<5P&R^3DMIqdaXRwxL;>EUKhC`X4Ba(pxh(IcqSpK=1tCN*INcD1;dINBG2HG_=M4 z6iyc788|_#{+mi*Y}TE0KVtbVe~mXXZm=(0U5EYAeDE_KNT|qn;}J*khNB%e>vr0# z&&$L?~Vq(J7764cHR|ld{ zA;>ot__PM6sx=gXNF<9zPi`tq9yXEj-J3bywxKl`7$tAe(*X}yW+d+m#6h)6exki% zIR3_-(>jiLjRAonB(nm&@h^kPY{4bTc=UGg783OJkFlH}$^nlw?cH(1h}4*zgjIjA zr=Jq!ZvL7@eZc>JkLOcYvUQQXPxoTjZKoB6p)=z*(2CV z8NO&AlOsgCBa?$l8`!@Dc!q+tf(csE zl!{~owE(cp5U@;g%I+`hoK(hk#0Ik^raD4Mvnu;vO!Dj_QiwdpP^v@`5y{haemG}A zBFoh8J0Q7=6I`VLQ`$Y?)C4GL!{;>UBfpCMN}k|k`*5$Aq%>0z(Sha*Xx73(G8*_O zF)1|=e>B6s`MC%aVpW`>&Ndn9kUz+bZzEBBmQK)L84!*Wz)cU@uTer9vvB9kgZaah z5RKrK*4lx=zm~$10%~ z>A5PmcDxc=C_V1nS{$G!@&L}n+**$kx=DH}a%(3kq3P07m0Me>gsP=S&8@9gLSv+7 za&D~`msLrRFSm9IWK`*?&8@9bLWAIGdT?rn66y;VS1n*8FqxpPLP)sU7Jc8}2V#IM z6aKKgJ5uV%*B}ctwM)gofRypPaOyu6uSH;LfiwixcpNI+w}4$t_JyC2kPhgLm_xXZ z$O(?ac5P@oPH>XWG5R27a|Y#}=C%B(<;EsXJauMsgh7>palR)SBzJ4Am9$fb7A(j#dnU3w(#d5;VauJlOSc};pG?X*je zq@CxbN7Bxpq({=u5;V4PkJQne1idvW=q=nTzVw!d@MbZc6PxdY3EhAI5U{EL*t+=`pKIH zfoyPN7kV~_8h$}f5I2;NKyqQ?o)|$vARlr`(nsAhc#@XXBkAL7_DL#zKtTe+IL+QS zx0$0p38thEu?J_-$9XbF(#ILnBk7~B^ho;n3V;9ul0L*l)>tZ8kE9PC*g-N$9~6qq;A}Y9-+_T}u&)Ds;b1@G zfM}qIdtPIHHtqBatNCAPj+4}(;@9Wj`Bc3J0=-u-W4Y1m1cD1oUK?Yu; zyf+zOD@UY2$`wq><%`K!qQ4?pq%f8e&@C8?feRx@IA>x5mG%abaGLj_f&?dnsrDDT z;}`wXqC1g`8z+T`hj0r@dbkO7F=!})$a4Jj^fx`X&_kMF%yfFzi{wjO6k90TyeGa- zxDLrgH&!6!wWIM<>tde4U|@*BAmJ1Cwe~3QE+k1Wkc9k56C&wvK=hEFduM|%@&i*x_NMk zMa^Pu*RkZOWlV?l$uiLmUJWv|*+q=bpRH6b#%EB_-3k3Sk3yFO+FlJ@1?Aj| znU7l$gr-e=arc$@;w~(FQFaPG=d}A-4LyLV*U7Q zn&b$vG58zGk3G?2nATZ4NSQoA$o#j7xFgYb5r;b&HC&YsivZ}GYDL5W{f{lsTFD4p zkBW#=Ga|wWkkKX)I@}DMk5E&>H1A))vNxR7kimNs14R(MuYuDS#aAwKzaFa9IzF3Z$(+}n^-w&%fWG+g zJ;7r*zDvLTX~wr(VSLHk3gg?~jc@urHolsY@ws4%U!ZfJd3@vi_*@llf`JW;uO-Pz zpv>ea&=G^xH|BE3JwO~jiibcTxJJF~b#SG8`ZAHtkdRu$u^6(M!t9Xwg&ld7ddn`F zmc%nVvQ>Qz|AmN2>Zm+H1%terO`Zp!l#%qcHz=RuHqq7mQIly<$iAwaC1~^ z%eQk%<8^jX-QqJ8_|gg2=H8AWg;K{ucM?SobvS?^=D#}ZZ=AK>pdfI z8N?ILW{$txx1glq)#V)>0wgPU7uXY7igYUk_G~pDH1kHI+Ivq|U@RzWICA9oc zvueYx^sHd!l{R9lZKIF6cW)I>vq`eGjosR0hr!~gx`4mgtC?X#T3bKKBq+4I+L{!0u#ciN}L;3AR3e*uGK-bNw}?*GdI z23LJ#7`*hShQZo(Lov7`J^0KR{OHtD48CxkVQ|9jUf_Nb2J3$1F?f`XeGmq_L0-16 z1cQpk)2i*UOytf-GyqQ`sB*&Ik1bF9OsiVjkQrOW5dxDJ$f&ZWUc`TZYg2f7+QzJK7-u8H80@WqD8JVr^8Q z^>eG{cT@E|*LQ_n-zKiNA;{az_k8Yhb=E}yQ{|PU)X#_S^9ajCHonDCjb_Mie_&KI z^(Ld5_ut`-`cO1O2G`mQ(&}f(wvh3WKqZXN{t{N;=r~Qnbq}4Q@r5(wK%Zp$j{ zcM-#e@LfY6abgHTd=i}!)5`sTt{VMUJ(t3M$$jn&h&5YDrC}^cD4b1)Z~XmB&c19iYiKZD`@fd zBf0e0Y^B4+gQ=-;ZzRp0g(75>ZDlf%COoJ_?jrqpH#_Rntg{0b%fP}bZZzuq%G-ML zYRRl~&NrOQ@*ByYe&(5eQmNb;M@6DR^pRduz1_UYDv70+;&c$^VU-3t&d078=ZzV# zgStBQL9vE&vb#&FXfF0mUu81;nA{#RkuksYJoZUKG5!k`Vp=jys- zSx6gNocVzl$wSl?>Me5~H!QJRHQjPA1wDi2Q&)tvwfq{%rZcMXWJ0;)Tmc2-9uOz6 zKR?C9?~uO5_Qmo}%VeFeGI@s-GI`e}0@U!;KQ?fjR-^=5I*x^uV3Q{_8nCj~0!dh7 z@Lydn1hEUD`xpS{I;+ox@|6f(M=k;ru@$kXY43fjNr)*BVjVpwFzdSeo_Ai-0W zSN`KpdnK<%PoO=&-uT6J`Sr%HKsA-Ff4%WdmOJ{)s*3B$s`^*!jW@5&uQ!fz)f1mN z^?|n6Ph<>WpDk{;xy1Nr;c4O{XC|-ti2yOdM(MN>O&{S@`SpLgsZs|GkwBM`ED|5R zvUK6sL386DmI`ds>Skn?(osF1_8jZzC?Ua})Y4BIgDp}A;8UCdaInTcKb3!4JYd_$B* zi$zxooJFf^v6XoRr1euNAh#W((S%nD>~0;GkSr3dFQJQ!e^^nQ4h3~vmadr`MQuPo z8AG3?pL7Y3=u;X(zG68)Eu8Q4lRp82ynf;)l2AiAoGziMCfNeC3qt^2QbHNnD(Dav zGd$>-{ZUcy*TI*|)GHGuJ2^4QkrRX=0*wbmBnZ$Ul+`6S z?-dF@<@CNQ2X2a{_kmf()RWh4rW`Gh`yfVMyK!W6t2@*X0$_pla9&zavr#(&vL&qu z$SA2rl;qigE{h!yg==^ks@skVmy?;u7nT%AYsY^WX?@%KpbG_##^|JgY>~OW#|KBXn`c)17TAL&;^Pd zTk;DeH#41Nx}0GF*)Ri0xmqO_aLafrnD*hOhRZ5|Sy|p;a~)XBTcC^l0bGrCsqR)K z^IVS(_+qTcO#Vfk=7xkux?X$FL2CcA%ijwY6b6pO2&IwaKh&9C`6{l-3YsFRZEx~~9tDX6LUu@mxa z`@<&FCVYZ=L{&X|%kc=4%<)v^mOLBlpy~MjlBKWk=*0s)HC4Z#EY*!#nb&yX#ihzd z)n9DCp$v1X{=IiOUR=PtyCVF_#eR0RIt$pdSHX}1!@pbkS;dt*1M8QlJo|msYpT$7 z6Z}}u?*(kz5|^4^_i9?kL-a_?;{MkQr5qeh$|kJ;D!&|<$@9w+psog-dxGguLL>5>RZrBc90Ah79=-aAOTaEP+*^s5*mf(k#Rw{o$Qlmf<; zt}YWNr2>j-oadbrC!4ZNtprh}nsbly>~mAO{dM!X#e-ifGZP99Zg`X5VR*LH@!FN% zBMP0Y9iTQ({FwXQs8=&Xm6th@W7Z+=ZebF~@y>l9sz0(4p zgCY3Y(-L;)xuyO}^GVw*t=(j4TFihlt;%(iiVLp4R=-<&-(+Wvm^953IP_EUE4hJ_ zbx(EJtqRvI9pJ%MwpTR*$WHH=tqf1NPirfK_Cs4)PieIIDq6_Je%F(C9A1y><}KYK z=jVe9&d=`yg(!l4XAHLQr=T2^tiuHn2Xr&mnbs~9l04K`ugNF!h)U+cZz^nUu=Hz2 z&NDFgKLPNI=wa?_<`)k=Xx(lw3W0`x`h)xw%9bnnJ@h^)_I^ zSLO6OnfBNDBVs-@WNZGYW?e$Hno5U2q3jW znq8@S=?n>X=haJ=d2Zu``|V*RL9JMBVA6?O*XO%K+sp$A(gHJB>;-~q$<{k{|Gd>r z0{XyD0zVRW3dGrOBdkS0|CjVyHa}0VyTUO>ug+ioD4C>dZ70o0R!oO<@O+-B``q_M zvUgW6qU$oIRRs&*gk)VtdFTGgG)s34)pS3sDLmWxQTxRwK)*#|I;58OwC-j6K-txW zzbicpD<=381w=1u*g^#O3N>Lz6(T^tAYnE3Gez&JRC$n4X20{R*O0%~y@r-=tqw@b zNkREs5>2dzzy)qU$O-4xlYQFUA7QN}N>{bHC% zp~OZQBlL!4L2vaIKGCWcbjOxB{`|(C9IjIb>nj{GR;xobz(v1wsM~(MGajF*L+aRK z<=ZL{re{4Ur;i$(K4dDJqPj-UuRg+l7gp=YbaeFf)feg41OU!CY(0!R%5Tkyql{V^xoq^JgT~b9TOWH zd>y%XI%JqjRXHG9s>(_ClTPB4D7w_C@l|?%`+P@Ew=b+#a8;<~5q_A^E2DSZTKyQ$ z+4ohR#%csz8gGXf?hp?{VuFFZ%rV7i2tTl06d;V9`bD@WG*oNfW8)>d>X-hn+FM|xQ3&*!TrBQI*_mq zh6Mg|G85e^wrS{oa2riEaS1>y+a7O#)Id#I_|v#<5{ObBZ&YJ-Z_Q;&dbwDIcxena z1o`u;jR6^h*fi|6fD!^}w8rN9mhbr4+sG>FkR3`6ZUF(kE3Ge~e~f2K_*)noY?T-K zCBmYhUt9?K#e^aHbvAA$iLK1tpAcARdwZ{UHuAHOdL*)*pOgQR-)E>VDBX zrd4k>Gd1-9H%Ce8dQX8oO+pia-gHK)E?ZjH9?vh2CVbE^w0#4B6 z!O-Mjsh8cvZU><$Vo=FvJC+2mHQs0Y%u84xxGU&A>P~0}b?8=Go~d=gV zlJi#e^s))Pv@GTf|dMs?8#c}I=#${YPTQr zYhPHsn3ur~%M|DuZzpSlN>$c$QUKgD%VDXqKFQ8o%uy;c=+YCF1?Kh1IeOviz3dKpB?n*OAU?8YNR zhN>*3U@!O+d>OD^MBn<9P1UE=;hkjNXjyOthx<#?*9{ zKb@Scy}U~83Ypojqehl||G)lwPOjOx%=-vZb>Y^@)K+*n;#>*QU;^~O#}sCFYWzNQEiQ?7X{>E`_T#Eu^120xd)mub(FT=w2(+ADs2^Zs>H6X!qSIhq#J&} z`dDR^aS2qq?j4b|uFKQE?qrTT(!A?@>hWZHgi6O%I(?~mEX+_bsrjvB+C!V=An|YF zA@}4>*dhN{uksNbEIz^;7pu<-nGNl<6@^H+N@dIMk6x+yp(#^6qG{rbP0@p2Z0z}P zgx&Sn6rHk~ljG5Omue&gVjDibpA#$$vQ_E^908?Cz5;z{+oWZPJ6J{1sVcZ`b)|GX z;gkODWiW9l(nqasBM-I8#t?f!tdv?QOZ0E1SCkjCj?X^+x zy}nRL_*#K13`g)IWx{f8Mt!!pXmA|{pEH7Azg5YV&d%d9+V>6Wv~9_zNo+23N#c1=l{g$B*yN%4MGWv}iyFl{eViQ6;^783`qE*_NDiVsUR@wVkg9RYrUQA-;9q z@NJX12NZv!Ez$dWX9sbrlOE!-Cji!qU_60!fmLc`vZ`s^>gbgx311N6VgYiZTRug5 zpP<9pEsbhUHCXzH=91zag9=)n=8J7)6fWUP)!)@{fTg( zLpHo7#=*w`CM*zM5ek1BY8C6C*EC6ict+#IzjR&((QZGKS|63d*7xjCYUSkZzoORc zUyG?#amOWKp4RA#s1-mqP5c{&fMj(OB|#+@Tq-Jg_(F_vuXrP0t8t0ov7vSeKFAGU>5QY~(5W+CWCQO*k;JT9FvLjra z(Qhf!q=QJfXnSVj3cO@^DUi3C476KL4)wg?#b7~(OxuE`A1RX#0%z91z(>3(214NOK9g(mw0t zhGq-sHb2r}uc*3U{tVOfEeAt$u_^Y%+JRcxr)^h0+b6+AGwjrV@cwyhy)+y2H!x`r zTp@`tW5|KKo6bYepbvaYojcHfYg+V&jx^A$@vK)17}&+EL3u?7mP67`2NF(52QxR% z59BhVEDhvRdkP2gjSDmo=DMbID>K=QN{*E`W%ihM6sBkFp>!=eb{bSO@$HW2q3Qkq z*_b2D*BeAF9C*z>W4luW+9G-1E5q#40h`#Ln59}>C_vN!?kZ|RG4H2;9ed>AGRCY#VA0Lm|`m zdLF{j-bFCC(JH!bNUqykqi<%vBF1NiuA)DR81m~*nNn_bb5h3XxyJ9>wf_ZRvY;WC zQz{p`MM(t>ImVKUlvFT^mdN35F;UQms9Ogmeg%IgV&On&SZtsw=a{hligJ0VPW42eI(4=;zvVTt8O= z{9y4ppd#Pt7af9v{pfTqb_N|I9tD5Hm5uxTzqH4-chR4o<+2}NOJ}UXlJ!)Tre5!l z<>oo9yv5(LrbrRgKiTP=*s0r*{V|EJcvHsNR)g0#a>%j*_f<13V+(h?vo$jPx|PoQ z40C580>o)*%UGw{0O`yu)Zz80~psX`O=0+yF+yeS3yIi;ZVn=2{ z*NQ5@`Dx7~?HzTRQ*BcB9qiJwcbS-sic zz>c8rdUXP?DRr}FHGmNE9WgVPJU)W2S@=prtJOwaJza{UJi2Su*kjRvlCr3*rXF<_ z;5o~gOcVXeq;gS~+_r3Sf;M7$0Vrr={@?w3&f=@G-ox)!x~Yos$0$DD4qE#ehl~=d z?AKjvUjPaQB=QY=L+z->F4>XjV^(wqS@!!sd z!C6Zz;~gmf5t)*9O6FqQ=p_uVRPlsx#Y{A^%P30!pqE}VDq8=27`7ZcRoqZvhjMT}r~8-Tbl!G#Z&_MZ$$E2zd^K41tF~&n58l zo#3;Y-w=drRF|i#zg%BLS2|dS9$`a;t_BELMGGAa(Op=>+!Ln=L*cpQT=Et45-(cur2qByo53I=*enI6{<6bGQ+gr`;O9DfL3oMQD6T zKxHGH1oo(Vm1?d2^UsvdIB;SUv^x*>5Dlx?UFx!x=%9p=GEqW;=f`b~P{1xGxR{l5 z0fm*Q7hx>+iKG%sNi5@k`p=DZ7u&9sl?E_Y5WuKR@vc->5t;;jBuTgjriKcl*dyKK zfS^i4{c6J_{^@TQAs&c<_|pZ#yd2HmCjFO9|MgIP>U5Pv)y&0S(Wo)%9dJ0u=~~Pa zz@z3Xr)$pjIkogZc&51sb0_Kb&cz=bsvN4^Z$gPK z`uwL|^jSd%?`@+^??ArlGHJAFITh z`xt|~{+i|GvVV0$_q`fXS?6vKvb9{Um`ToO_%2mrJ_n1bqPS?s69kXC`mcO6k5BgJ z0I9B5k&qII_{yI9{j+8UO=_%nPA&B%NRT#sxZp$B*Y&Bn6L@>cXwamio(EO(rpP0d z+$y{YP@@m3^#?(-CkQscNU&*4T{Vv%?VBv-SLM2t5L}gLQ=;1^W=H@fv>V-`jj2{` zOz9Br$+FoVBNN`2WWqZL+o=RFfIFXE_L-I0EQw?W5QuIPSR8*3&FVSHX7Jv9s7|2D zhzQX1QyB6z&^*nr{^{d{3faIZw2DlF9|)@n5rH2*fQsHe3*QsiphgM~8pbU7yYAWw zNaK9vN&NLwJV@QSllrDqD@smVWnx~Nx-S+7niXmzgsNake}C93UHc$8X=t!D4G$eu zui`jE1!sN0FL&5rFJwjZp3sJbWi-VSHZwWFkaMxq=+eL!n&2OesyHCb4CrW}(&fZ? zM_fX3wB&ejV5)+CI5M3J+YX$ai|s^3dW9j?Ud4m&fz*M+ND{rNu$s51Kp&ng(7zho z{XRu@&&6H>5EO)dgP$l1C#A<-7JAh8+T^5!zx*!@T;agt3=AP2bTw%lKj7W}?f!ZH zEF_`R*I#C=rmu(oye&XCRMin9(#ef_GIjg)Kv+Nuk4Y#tIAPVlDfC1|q;Rbyx4KonK_C>aB9? z4mXLL==L+XS{Uk1LSut`TLwFl2)pZZB#~f%7q1AM?zdV=#6rNY)H1CL)+mo&!n3#9 z;(&9n!T^26kwh>6v=Smp;DqKU84?L4;u<l?@fGE$rYsI`M%-=m;G(YN~DJamH$maheDxk*=ced~;c35%qMC7L$ zr|(knt*<=c{BIoRkA9Lc(pcojlh7WZy)@rh4)Ys=# z9V1N?sT@h=c#DG!f!x@8 zx9#GYc?!K~hNRmPt6%C|4dn^&=pt=4W^A&Z{38ktY+D>ppW9iv|MYj!-k)k{Tu-IC z|IV_`Z9d9=^cQi(QVkW0L%;ochceK;T4`J??9k_E)*Lh|7mUDuS?=q1eISB&7x=P^ z?KfNwT<^pgDmx%@%Y8ApAOh|?oBeIyy>79MQF`l=yI5@={LQiAb#Fuzunb6on83)r z47{hZ4o5WWj-xd4T}^=1s~M8`#kwcqVBM31lyvY37A0_$PheSv2#nISIaC>3HP#9A zwzZHM>~gI^%_OZ~7Q!)(Qx@6+Sqqw0)i%z}A5I9LF5xb{M6yx6D+u?$XoMnd3HO6{ zaKb&LXg>!zqV9DS(_OR;YoMK)hDv$=QH}2i%QKZLUY@y?sDx0lo|Km?UcEP_DmC6X zs@E7R{TR#mRritlbuY|zvRZjwR{sKw6l6vAaqp7BtgJ%8vD|}aUKj-&?gM3O#WsIx zxRP@AN$)?MOmE_1etsVqG^O{|I*b*>?MIiYn{!B`!FTY!)^KVO^3#W4J|~{%a5msZ z5y`Xj^U3rf5Wp15BrBq$*}Lv>j?dVhkDM!IYmZ}KG?pHbS-6F$rqcL|H5EdI+=r1e zfZ!OF5;$_P?=TP-0+@7V@RvC#dz_SVfh;#wp^D(g#}O!(!G3Rw+IpByyTS7J6XvJ! zBY`7lki@fPdc! z69!99@bO=Y-h+?&B7bh;zi1ve0u1pQ&tu&v!LSY`FewK+o@_m`_%E(fcm7fOQF#9G ztzWyNc#7->fj>*K=qMiXJx1^)JhYD@#G7MBI_dal#Q6U44`&tQ3nq&8=`wlV*TZmK zm+<0;yeQg7O%2z<#l0?+>L@CeL10^oh;bjiZ z`AjKgbRS--JM}KQnTh@VO6G>lsK?~(oIiT6f#EN4q&s^5nF79yYM1y_z!z7^|56Dp zzul^qfgwGsu%QWnMRG@?_c<%X!f{svp}?F!RY{Cbw&t>5`zn4m+(UxGZN7$QJioHSph&9j!_l;p+ zWNDs`RMA@{&kBXD;eM)XF067x!K81I!>ZtmidyQg?RGZ~$;qH*Hu(G1E3+XuIrTE-RB(}a$9lWA5bTxk+4 z{sFUrIx8LXV))ZkGH0Xcogk2gBXNkta{5lWF~P0cD*%aGAibq^VIG&B0-)OwrT^3jYW6^a#n z3^rP-=pRh;ogOibn`}w;;=-lmJbPPr`L9giZTuAzcz^%7lT(=X+_I-(nUi`O(=#LS zsKrZ==)IIBEb5wQoH@nfDTR4Ap?VuVKshIp% zp68riE_Pv~tprS<7Q}G0uao&RJIC!~SqJM672@3h2arAw3VF5}=3cyUhQHZ7Vujm}qV;2b~$Sfh;SZ+SCVUQSH zSZ4ke?65ok3Kr8%3cqla;=&isr-lZ%tKg_~VOD8^%Hkh__n1d*SH|kC%2-D-IPMxkV{&gS8{I z(Rs7CJNB9aCBj=kQOyC;6_sAhugQM#49xGgJ+mj72xCJ-!X{x&%Pvq8{ATnfjDRL> zyTcig?z7efGkNhXG1Sb`9W2koto4^Q`j3)?=k;kQus;=bsM1Hpvwp+!*g0Zt1hSmU#O5OBS zFRcmEj?dk0wv0}T{riM{>_r6STS(JFC4=7*aBW6Q2s@WABb3w>rR_V?Ru5_G1O|>u z)mL-9Yqw^JAMO&@K1Qu>eUB47@{;b$Lxc?|8z?d&IZxxn1CkzWhD}i8J<)@^n3jIJ z>3>2?vT!&*Puv!mhjXzPrwK=pHT!4>BO$a6XyX{PuMT;xQa*56ZNHrA<2RJ`O({(b zz6>z2GQdP-G*^_K6cy(e%?XgOZXnTFmMtMF*ldX%CKA2Zn84X;`XyzQs-)DGl-i6^ zsL)HQ`vIwh@k;%sZuY;mbh$=7kO)%@~(1>bL$>aBi(WNLo(OZ+(bl6u9cUCzMR zWmnQ^V}V@kTsXhT_f*W5{ZEOW@C7> zO}a#(vyw(_75@nZ6^-N)+Xzh2!Ehwe-tQ2^#746boy}%QiNU*#3PQ7QuQvr2Hcwjp zd*f8fxA=57oi~A4sSH>*Zodm1Yhf==SV1yJgJN95R6UiP z@SBdKto+}B*gzxu;I4fB?HBFsZ}oP!Tx{B)+HT#K+P36AHp>s^Gqr~{fJ5?b-Xbq2 zIn7gnL)>kQ~;OoF*7h|PzMy<@W<)YQmqS~Ff`KWrlFx{e{4u=rb zL38>H2G)XYSW0`Vo8rQ4v2h$gvtUw+FE!NiPOOQVCT$|ASdr)*IHPzT$CQ(a#7}n9 z_z-iL4phh%wnXq&Z;Xo>n47+x&L4Mu^Aoq%wVYK$5Ojtt$K)i9{x5O#FFvRFZ=UDq ze~~5YuK6*ILI3TJ{=cuXm^a)69#a2y^vD9v81ZAGaB6-(RTP7nt+A!bg7_EPuUmD% zWxJo`h+lp1#Q&Jl3e!UYv(dhtW$@T-kio;z$0DRoNFNjEw5%KlkjId=*BJ6fFNG3o zq;k>64`@&H@tf5=B!@|dbjnijJhH z8olsbH=9*}yYp@|3R!!eQOGmq@5@E577)xW1wQ~Z2*+==;5{FK0Q60Ia#9@S^kIg&~b5|9!@>GKo2MVPy>&>a<0+C zBj2SEU?`@C0YLNb(8ILN|3Ec`Q>^USs&h=&lYw$yZ|YRYN}C&eA~jahWA^)zmnj2*;x)z+N`+s`-Z5==NO`P zl0)^N&59}X$K*PEYm!)U-JC&6m=i(h|yjw!r`7mB5#0@4H!imd#k2_P^PG?H&b0CGo?tW|o3Pivx7y3MBzX{5V+ zS||~gSK2R!EP~5EjF>4yIr?&ye#asId0uVLP>2$1d?LP#y2=LjbhZX`siY}p+XGpA zf(z>ta&7(igD=`SL3w3g#tLwQGt0%LGYe{Y(tRt83x#PScGXUHtkkFF$5I|&2ih{F@_oCx79VrjQF0B>etUQQl0%RM`86v zbIf)1CR0A!l_R$uWi;<6m=meO1Y?2DqJ0Vgnf)$*P*R5idSV@)pvAtobFsck{KJN$ z8!VuZV$ir4hz3s^Wg(`}i>JVi2*(QfMJ9u(+;fJ8NuW0~q$NT_8nn<<*eR=F*SQ3``VrP;F4tMJ!< zkFu!i(N^?GK0Yevb+!r~k;ZoTVS)c#uM2A1CF-G}0JZJKbrGY03Qdi8w|UkifnMTy zlLX#wjyFpcIA6L3Lkm4rl(04WEt(jdZY7$?8(JPHWkJRi8GD3dK?`qCA+gVdU?kQnjM%Yoz~w?)q}LUc1;k>5~#pb ze&FG*x)#rOFBuAAH#VGCb}zUI{ledw5ZcD6n#tJ+Ioh|k7;=BdkVc4O^f^4(Iad9L zNpl^$hUYoW&wAl_?dU+VZ}06&9_mV3-t#_hU-JBlbEy9K;pz)pYxGJ=JPj zY8P^Ae4RV;ACA071?Ot>Ee}H{K?x=^kDlv zigu@3Lv<^6og?us5o{(BkSrzft?89WToD&JH}d(*DPTSTFO$LM=Z<7FrVq@;KH3wL zY5G93qQmXM@V^OoceOEsT&$mNx;VKvs3Gj?zzo9(C8Sz#FOo)@i!Ju$Iy-IIBup*i zh2%2Axha3k!a}bjyVxV4dS?4Wky^J`I?ujym<|bfvGNc{M#xKj!f9FAzmW`icxKOU z{y-8>2N~NqR<}TvN|tQHD3fVc*}2&DdodIKjQ2wb{OG0)68K7$7lA*?*CKFbh``tA z*Aw_^_Z(NgI6`xY>;x*{{WhQLL4(~v5 zZU!yVTfFTj+@g_hF#V9*v-*=gg3gK3TS$lixAB`<37&_Y;AW;IJ;*Io4`TC9GR~ZJ zjpt0eQp;HzG7Q)jE$rv!S@K^kT7Gtj*bu;Z9&Di!M{G>>{nn+)ds~@NC)L^B@Ku}} z3<2P`hkp$!@#|!5U1GHA$L5@UScYe3=Y(X=-a`OgJ zpO(K<-SRhoAC?r;kOJE2oG4&NCytL(UrQ+9YVaxw_*k$@M;2W|0Taj9Q48Yu8Zt~A zpFhrvV{d23)V*m31 zK_(^4tdFR-W@d%ef*(TP$+YVieohpF923l^-?2gQy=up>prx@lnj*2K2O+zi-Z60L z5UKn8K^vqr5spz>D~ooyuoRFt7{ zGT6exFWjS+>eiy!HJN?dgr<|Ej7+lP`BOCb(0?Yf@@NsfGg{F6eb=b@*da5F=Jzx& zR?};``8rhWo1hpc$os6$yb%2?jyuOs7aKU-dYSrR%}|;8{4^CCHKNvJ>LF}i4w9*7 zfvEM!)DI+6hr3lkfrPf81&P&jw#+N@=sQE@>lT1P+_j~XuOEDk&kEcn`yUly|LYn; zv|Yh(_7>4P0JB){D(8Y|M3N@4PnMpxSVVdjVmNPzZq_3`HxrypRhO|OG|SksxL-(; zCNcl>8peNFdS0WQ85&MNTbJR}6iUxaGDb;d#~3BObhS#Ay1ho|&S#dMyG#{56z1WT zpVOEINzW4{Jx}%0GsLf0JCvRi=$!C-io@^r>T3bN+W(NlnYJCco3k`O=ADG)zX()2kKd-O;nnp^rDu3H9gCq7zjGeL{r zOrH^27W%2B#Imr#{lvc{RCUR!Y7Ui(lBlh)Kza)alKp@`#S5eof4CWtkRvONRPfWk zB7e9!CbQ&0%ciK_2VeQdzjeI%U7SYJkxRbnNY`Ti0Z)>J4$IW=H7HA@tM~=-hf|X- z`2GHjPzR!!KsgnP`bRXa_MM~$ifSY`cxf-P~3LMx918)?6(W$zS+J>j*Ya@!4t; z>VX9qS)~O2tIYbn&a;HyT99DkGyB6~j9?jM^sigPV9Pf0`T>qzY?SekU1~(&ShL{X zTWfrqOfBV&VXtSy#~2hStCS9Q;Ak4kRiQhagY<2@;FRda-LLeDo)}LhugidmBXUFoYo_%i%tu$ z4CMIlEYXvRqh5Ec)ia~)w@IqZ#U2D9ioE!c2Knv^cre#-ql|Zp8_#`rh7W&76rU%@ zpgqnn#@gZ8SQ3hl11;!f?*N2pF%sN&g+OBce6`xF_tIt5J<1W=T26ldtoyCgV~ zBG!O5!=;}KWqG)^MqqM%aF@braL+MS8dYUq(fTg@s+*TXT9W=&FoX7d1k`j7Rj5l4 z$fDj+8LZW+SwaClj!_toFDVi)F-1~)nm4-R3w^hkc7*G`t*oN(%7(g&J|{n@ULa>? zefa>!frm6lA|tGoj}j=fi6oe_c2mcx#+n^d)o&QqF`Y()Oeo?_S!?oK>r@)no0GdB zZxcAV9oTx3isQDPTs3|!V(!b^F;Jp?R584T-Q*-uo41Q&ZYZ5uHnxo^KkH^9Zyr)I zvjn{$A``o?*=ClbuMnn0r5;_OYJ1_1HnT_sT_@OO#9W`*TV>9Es=j1)iBmCN-E$8X z;I{+@b~5yc-JHVYEcp!2*f}n~_9sJ;QFZ&Pl;h*MRO7T=x>cB_HkLbh)VYKEl2HIY zFpc<#+tYCBfq{uKE~t{=@-1-7iVP@Mos@tH?wrc@A%U@V#5CH8|G5)WLBm*y5I2(G zsLi29wCCL`G>BuUI2UW-Z|Qu<%o5Ir0FTOxC&S05yP?G04H*~Bx0&#>M&3&zlhTp% zdfZHSm?Tstatz4=Of(br0%pyGF1pd=zU|E9!Etumj3VkAk50MM#_*h0j3BE8jFD4w zxzvi@{*JROGF&s?3373qvxENIMwE5)jJfP1%Ho`jx2qUnoLC|uCL%FW33&o2(Wpc# z2{FqI35^R#*m)6~p9V%*a5#IOKK><`akpYJXiaBC0i~)-|VoAH;7S;ov4m{)Xtn z<@^r2XbOKi_9ln>Q~0VT_{slnX~k-g#_X)7@euV93;KNk*623ytDWtx2|gGhv9Co1 zvUqd9SB0`Ru(eTeE_TSa#Kuz?@4kOBFG34HF^a+LyqIdn_vaTCZqAecyA7NzM~zv? zEcNZ40T~Svt^I&O|DdIx**=WhHYB-FObmXO+1t9z6~aMm>!gX+_b+v#6%KcJ4@K+N z^qDCn?v-}ryW0+2O)Z0z_EpMa#_hM?u-&>Jyy(QLsLPuS9v1$g7iud=!;Q4|-z>DJ z>LoxQvp%4II|k70DhF2Tm1P|hLRcI0bFnY;-mIj52CNc&-dMx^4D!}m3 z^7|KZ$$QdfPx$-$XL{r)DrHtqr!^dAR%!T9_U8rGsLs7U@c@ z(v{lfAJa{7w{KD!`9%`9vO&8Hy)m_vo}2@7x!6CplKVUnN?uhi?NkLHZw&VCR5E_M?&kAF5h0sTxpVOAg3l_Ub~5>{^h{Ts4~XtL~#K`6zo2BBOZ9&`K{8d1Sl@Q&3|; z(W;rk0^cVyo*raWFv2@X)aI!JkO`N2Q!VGmw-gyZA54x&dX3ppZ5>ZrOr*Pz-dO3= zMTbZ~e7&y%^<=+`Ov`G|zA zL$pt^?`QTACGL)^WrDUhdWiP@(muHT>fe$QeDxdc`;O23ozK;8w6D+SKIU`v8|}Nm z=lNnb_Bd)@m2uAf9;q*--bh;} znb>dl=ak`S%H?ABft>8NR3a?K$%51(ulb!7C_D1B?FUP%&D8zrQZSH-oixP+cSDCN z6Q^U}stl!eD@cX%#q!H(xrDD0#e7w2|DpCv_j2`BdQrV2HD%|h4(8N(>KV)s&dsd4 z33Dtl(j}8Z8O1aKtf82AXSEFkvZ3A^4pzO+DqvT{Ay{*i3&K{wcacMIp=`yh#io-5)T=>U7Yb5r2mQJodP8svX$pI#9c zLB)gX?)wlSsp)uLD;&9yt|dB_0I>h7~?Vd zR?I)u{P}ubYiUYUUyw71tA%ckZ5Fo!O#Bl$Br9l&Pakfo6B9B%wpW z{rdCh%;>C@97@IyGTW_Yq>|`gw_9puA`gvopm3(q&3L7GAG3oSg}06#F2v#ot%2Fu zz83c|-!E+4=|Bs8P-)G@Re$Y3^GwduTXxI%XNj+AklIJofB;ZWtr%eloL>tM&dTWO zaP>{^&B@x;(lJ?)1luiU0gYV1UIPVstGnql56!rl0cq2g3hin=7HF7Fhvl7cF-_zK9Aku}${3S@WZF{47^k?g)mt z*ym}~RK|{@G-;yP6_z_dP*4m{wYW%nHiUk@wLwYPG1-l)QT1*?eV42F$<0C`PMrlI zJ`6fJ`2*3{Y~DWjN>=o>hVe zt{LD#6tGCYNaY2tr}L}3-297(uiJEOK8YNvlt{bRLxTc;0u8$M0Pv%c3lD+{dG|LbCV^#_OA0ubeb+jDf z{>sxF?zeEbKbK^oV&VQL)CBim;?1{lf(0>U$$9ORM>nUe0}{&9|0DN{8+R6jHGZu@ zwqPid7c5tN1Od5UjMC`oS-*k!zvR5uvcGFsLTmpCjsU=DUC>Hnnb=M{7y;aKW}X1> zpjG#fml00@X!&^p(57wafy-7gIGe3n-DK+S*~#HOahI#4kxGW({UqW2H2!!V59Pbm zln}#<=^s+K&(^A3Gp_FDNk=-?L&L2=?|XC>|Fx%ED4=Cn-`A-H|Fz$fVg75s*l4i- z+BL6WGeZo`vT>dd*q#5{2^*=Z5|83i|FuJX(a-3=cK0wu&2Ek9*(l@>P7oO;f?)Gv z*R^j`!ldbc>bf>LzCk*ZlrT4+8)-~*rVPzKYxMgm9foU6V1Ei1Bsb{@qj}f0y2EHU zGir1F6uGW_+)(1Wrbsc8gOytG$F<_eR3_^oHaTP1CZ3?gucR_@} zB(j@8Q{XP-=h@VT{JglBXuE=8qyGPJT|0Zs25GuKr0K`YG=l%K?A&T!*D!)DQf6T$ zq^xA>Za%>%>E*4BlIAMzM&5PJq5BZJ^O;@O=I$V}K{$BXIm*T~XwH<^T6ShZb{6m} zb`GWIY4lL|J<{R#P<6Njzp318;rGjpnb}xK4?-y}^;yHM=d<{%#m#4J+DEhh6Q8xY z+dFVO3$p;JIkHV4VWKpjwZDHnn}Nt+4lgB~&@x-P^k{5ygOq3|gq(VGGFAxGQPtKG zoHOaa>9h7)@t#d4^28UM+*u^z%+$>}&Zy;%t&CcZJlP?+$Y;%w%r*>-Dd0cwS!>u% zReP@jSLq{QMDUV1&##T5eIHAH3@aj`lKpv3FqTbA{jOQIrr$TF{v<+x8a`-B?{UTl z)RuaxA@>Ap3;T<{{Dhj6oOhA)n^OM>M$R5#7d@Xz?*0v(CyFs^MTrRG11BA&XrS`mY_lYEl3Gr#&C-%g9w zi*D}I37=kU>Ck0qq3_4_t{;_4+&1XAC9c1O>UaHG==+6PL*L&qzj~(C$2hd#MgQaW zdwsPcI7RtBVZXiAE&8qT{a_AgC9V6n)K6W^d>-j}z15xk%uLO%o~_qfS~4tqm{H*$ zT3wD)55s3o;jTb&$UU~ST>*F{{5)wn>Bvd~6eQE59=4y@Bl+k867>m!fs_{pGtGHWB}Jf=l+;Xv(2v`r||2Eku|42GN(5U zzFR0)c)z+21z-lI47LQKy-Vn(Kt7KgbGkdz%6d&AJxb^Jlj+zF_ER@TKbgpm`sw)? zjral4SlSF9Vmqxx`{@^U)c0mHeCO{GqS9^Mx*KwK11{bn^cY&S^)bA!RWh`*Vn1v3 zLHntDNI#j#O8r=?JsWDZk5)qh(weAdtrG|AUAEIobBY*te+%hO+sgCr-8@fe(Ov-| znQ`85cfu4h0VMbGYJGcxg4grWVDi#zYEz$ud3M+Lljr#j_R0b0PnP)y4m{4 zL@v>f0bIL1>qYZc>k0rbp!r1+70lY|NwJemi^ovK#97V||?{0okc0u>bE`FM!~%M0OC=64iARDajfCl?fNVQor?;@XJ?G z|CL?`|EsSKF8<1HZs)5-1}(zO+UO_0x36nUuY<4Xt1FpM3BPEpf#H;VJz@=7#iRb| z`Dva(uRX8!`O(VAudTLO8r{u~{&1kRex@V0=$$QWKa8rwksm3eh?}8pcFSwmt_R0` z2hhfbBy(}h^t`N`TG4Pv`OA$066`Uyn^Ns}F(AtfZ3RJ+* zT9w7nTI|=c{)UF;>kj8c?DKC4U(C5~W{h2DX+Jy0QcB5%s@rFap>nZ{NHyH*2~;9B zY0g0{UWO!eeLylZX3MA0z|(syU!&=5@^n5L*lFg>J)>iLjnqsNPCb`c$IP#+T$iHl}+*1R8)dYp#L8N{kxNazSj#svEXUiz#&KhM5;m)tqg~1bT=YAW) z%?7vy&SdP_Jz+-))G}ks$h~{7w`0qcZ5>szS{uD z7575|Src4a(6gXOg*{yq?|9Eqe80%Ll$n<*3yRk)psp@ZRqJ1!s73L*MtttyKh9-O zB(Wa7rMN0p*)OK0iB8jq zl4tT=d%-MTm0;x)e7lAj{iv`rbB{qB-$7|m~*CtKFz+7rP)zhzmbtp zdpk9(J!nmN#~KV=G~3_tD$OR(UE|IMsp%&*$d>#dXE4Z({U8@p8*cR-m&n0VtMW|p zqy2|PZ-02%0rW09^}hZ0?5L04-ruuskB*&s*6rH)B|$+VPUmA9fPJvy<&Sf}k+L$t z-sj!+E_fWo4eX+#wG>sU+$)r7qfUQf37l2aHvR{)#N>Tw6g^||)bGlP<{e&VZ!_g= z^0&5D&fk>tLvo;jWr!IgYU%Y%T=(wb<_ArnV%2Vb*)Lh9Y?~jZTTPK$lrdy}`18Pe z=7*ET1(G&m)wunJe&g#^4K;f8CivkqjwAb(IOZ=<-K{o5NKOU^0j}(RX4bYnM86`2 z3yW4H>^}v6eVGxk0MSB_<&2ie<(-#@8xbmsI z(#jj$eik?(R0i#YVm7$_0m0SJZD?J!3LA&;!K|BnNF~b}ZY$3|sG%TyH1p~7s>o3G zAz5~8`SpZJBT}Zpky_%cJgHZ)RZ>G!YX53Z<@7p>A(UyINWFoZIHxumQ_nS~{v14W zu?1_@tMX2wla(q4hL%#rz%a&O+dU>)t(&r4tzSFPP@YxSp<@jtPd4EK+G*9|9IMLD zMR%g?<6`DxYrg>3*NCv|mtSzwoU6Uhj>R*Hvd@BC`?#a(ZF4&R3~xnr6p8oQr)!0t;4D8a-j86@&crOZRkmM3kY|5=!G5TH!*5O8o+ietk!| zxKFS0=~~jFv(=>4yM)pVMszFh$s2wR9WEoGf8C-Vy=k1dJlgjS9*PN4pNU3-<6rzZ zHys-dX~8Hs8^}jc114N-1k!cMsaLzxFG!WMLJhBjw_$s;5e?JsOn=!c+9ge%`S5$&Pw;wmiwct zWfjnni(;_uZ`35yTkwWG-EC4mIGhAW5UQY>P0bToyE8Wf&Flwm#H&76G~zACGU6Lh z!vMuo#V_99krz9@%?sqJFrt4Ab6?Iex5>z4dNQvx8|$Bn)fPP`{WICE{_#P`UXL{O zOLMXt_3}8|s6Bso7MBFBQZs&|R{S{dIZB@9JEh4sI8&Yai5teBH`hEp37DDt>-g6V zy;)J78M6O{ZVLetL)%Ue{u=&U+~ahNq|qLwULmhR+e5G6!}EVAs^RO!HS|$~ zKHF%}XJY%Ht+?a~lpL5Cc2iYbnQ6sk_Eni!aT)7oT#dMe@V6OI_&%E{O8EDE!d~hD zpSsee)R-ho@D%EY5?1T+zGY+H3@{QCte=0ce%|r#Hu_ln8;s#&Lnr(@P!T>Q)24{` zgC{*!=3=+`N3`&t@;I=0_G`sGRDEKX;CCQ@8aIk<>#*unNLDrv3{n$6dXB2u@xSM{ zvqIvr{@er8LXGb9?kZ;8;Mq+^m1VD?G2-XZeO_g6^59?!6f zK_3|SazpBQm7hf%yhcWl}coBhWFT(YvE6~mGAbb9JlY3~Cq z_&w8y0qZh3dHc_50V;3*QOfK;KHJ-WNP$mnMwu-6fnNtnLkuD$@CEL$Ly|4Q%;!GN zNrSh;%9TRYOHw}p*!)N3M1DJ+at=tJa6j$g1}0hkGG_XdTEY|9U~^4RaMv_>K4CD` z6Yc@hS9rpHjrJbAQE!{{iQEVXNe$zw+Z75GGMXPP9kuO_-l4OOUioK{^OO2n10ib>Qe zu{d9QaYQEnh13?_YqL=0s`mF^X$TL_H~HBQjj81-B!D`rJa%$kesh{o(R}{kdy)Ddy>*X0fW<2pdbU4YGpZZkm%y|r-#HB7 z==@ZbZsp??0-NdY{<(eEr12vF>`qR63=xE>WanhMtHM+p&do5Kfzir9?tKlvxLmAE zxE6orVke1JdrFU7H7XC0e&-5_^uO^vJu32N>3I$P)H=o@5}vLQ5%5rzZIVbY zGhvdc`}HP5=^h?Dp!BQjX<)W*;FSk7no0_PLjU8||4nSqCKCMWnS9r4*HiNjzUKK> z^X&l8LFg0u-=aw)y-X`sNb-Y?)&KK6woZm!Dr1Avy0=a^t{&AaJLb8&lOr!DUyh;56B!GH-Yp}aBpN3 zIS(f93nnJhdneN;RJcoNTl?RNw)Z16+n;8rb5=H|H)&Yg&#_*@6|y&Wu&Fl{NHP}- zpqb;<#`g+}l&47i{%K4qe?pGurXM%;;17D)>0q;k43GC^l?TBzZhh zhp+arpy7$Pqjv{Qo0G$&WHB>TBqt@S zIwy-)e=QlTYXd6mK4Na49=onFz0X+AdXM3uX-rwLa*Ynvc5Kekx~j(9Z#$pO{@g&# znfy#cZstxa6>6-^!zxXWrC)j_H2Qgx~{JT*>fcMM4QcJYP z^2ekTCwuOz%)W&a09Q#LMYavW2E&2PiVcHmTJ))4I%jDw6mUdq5-0OwY}nwo}lMT45tiGDbJNa8R_s zpyHj^7Y|5ls^S4PF<|R^|M-57=8-}(5a{?LPgN;n&8ho9;5MC` zCd=PX_I#P^-1f>G4&Wb2J)ZASb82O$2xcWUJ>2(j=h(*b2OTW?D+d-BHKa#YgXr=# zD52%+no_IbwzeW+Y7AT?@8`a@h!G@HZwvAjGg*@F^(V>lWN^p5v&y==u-f%$#g|MY zyjz%NE-X)`&^aPEl_QT)!Q-eRku(Y5FF-@LP%PdsO=6aFD+YF(xqvQKG^VGoX-d6^ zi&&&71#PBItibW>AsuJbU4<2u&8f@RHBNjZ+Ixrb&yG#$)2R(zVaGqPhFMEXMb`dW?+xfcxpOYUL&1N<)Ih~*HYM- zW~Fk-g6kT=%A~E&u3%k`b%{t@yFM+>&Fp41M_p~nbO#FsHUpT68&m5VcUmL<9=_2` zh;`-kzK8KhQ%lpMcR$=*eqZBG?;RAqefXx+IqshNB`=z^U}&;Un)}|E*qpg^P2*0v zDf9N(bjrMr{VE&Z{d42F|EO>1UR};<_I1f|U4rt2m0Z&?VO3LR_X$m@qb5Avlsa+3 zYG&#Q0TpV>p0LKm8V~C%Czq&dPG7#RdD7)UwC^1Ft}%0YfQ;Ux3@HAz0iU6x$!xew zqN2HcRpU=^=5$06iGUw~yixMI#0221)5mucmbV$ z?9O^^=N(y0^{XiC$Ls)Jn2)t?YfSIil(}tb1V+i+Z0oZoR&x5RG4;~G<}(+Bh2PfK zChj$vUaOAgR$6sPdzq@Ia%CP1Z+(iJ=NBo^5Urf9Kg~pjsXQ9Dp30M0t)9r-#nI@5 zj%txa_Goc`%6@%s(uvLmcO9sPpd9QuTpk?xoz4buhd3PI5t&_KUBU4|zo~RLKf>h# z{f?g6UWC_H!6~7Yd5aG3kUUX`cTT`h;K&54i(1OZ<=)iKx2!s<@-WklM5$o|N91Bt ze+!Ln&3jLyn~^pey+Q3&MmjbYVR9eP1s(C37j&L~2E4d=5kczHkRa`OFqH`DMckUq zXs0IQ%nf&mpiEL|Qf5gX1yS6x$w5fL}B+5#{leTD+2;62M8AocX2f zQH`0D{C1M5k<}PJFjG#xm;fkE8PxNp%pSi1EXm9s3CkLDqou}dL5jKhZ?QxLmq#z7L-_a(z)!1`io9kMv%KC94Q)6b#Tf<(;u@rxq+UU$K*0oX3kZC5ghGjA$ zsWV439C^;hM>ZUji@m?nTC5k*7Fb#qhID=Qm1 zT5n3dAMCwPrHoT(s{4vZ&@t(@j$g_FHW&K~%-EP(juo(|vuLy|j7I<{IOu@FMyfjB zmQ2|x5|)u`3B;gvmbd(je~{tLT`pi1VN)RtJJ@tM5&d=U2i?59xYL$>Qd+B;C%zW# z`!N7IBs2Ux-a!it+g85}do}xJUEOjI?c0Yk*dH7C@n5s!*gWyWXy1K&b!cYzfkVEG z&YQyQ2jn`B0BEP#bTAndG^8F<+hBnXG)|=QA5bfxFLdA@VVDjCYJ1)Xatl`{c5|ID zb;IU#p}>x^egX;FGdB2j@2>T24G#5U1jy##AC6p%!2 z8x0Wew4z|WVF9HzK`IKtB+9z3(u!4Es}F zlT}^`O1tnZ?Fmoouh$LF;azzCdvzMm1$$RFrdHcieTjDUWrjvNn6oW5eJi+faE3-# z%6}+}M(M6<8uE_S{qP4F8qK2aQPHh^+QgY<3wjMQ>mGQrht&H0#whl{G`T)DZsw(6 zUwV1dpdfVV43WsMx*|hXhB{3OQaScI@guC*I*Y}Vv0-ETr#mlqTzHh@!d4xh=zJ$%0_2d^#=VJwrs!KH34*~j8PX0` z89kFW)M+>Qi;>{NQ{UHGWv^9iP;*ZyDkO|9benh_lq8XrHE=WieI^7tP6JciV5%H!kick+0*-~LzfIL0t4Adjc0hX2#@c=tiRHwx&-jHUwe zI03p}L_h9--~avccmQqsKQ50K?w=VDpC^x3zm<`57m1uE=L+b@$f7)X{4Dzh|6_R^ z?3cmw^W^b>ELvf=zPAD{K?B&WiMQ@D1%+7rd0OSN%5PIr+Hc{tSG z$_EQcR+zkcR@x9<(a^TGZPbEZyJYMhFiA%*pyJJ`w*RoMIaj~?Jj+6$sO_WrP8zQp9w}SVC6InTZlFbN5$(uYiQfrJ9K%HFP1+tM+5ke#%B_v7Bp4v-1Z+JWsHvR zVM+0$gRazF$XeXe8b5kN+eafpm)~kx({=1RtXIpo<43QvqJ-I8o->}{-{iA=4Jd<27sWLQ-SCej_G<@Zf<&pMxi@!fUGUU+< z&V|CI3-+$TrqGv5wAhJbv0imIozcFk%sh>B%xBW;Vvx=1qxkUk_VKd&xWYdEUWqDfDz$A`Ca@dWyYYK&p2V$1XER0vnt zW9su1AAJO)r)#fv!s4|*H(UWNbD%-+bJ1WozTEv)?QfTh2RRRaPgl9m+{FZ|+lyqE zVy|N-+jr6Jj)O9_K-qGc>s&oU()HX*R!|Dste)TU)zze&_QXntXVrMR%VsV4lgOCY zlILGjN6?ZnzJ`6QhDcTo-O7KR0hOjyaaQ>!_E`Rf>GI$Bqiex~OGK%FuXGF2}rLnUJ2Z-9ypS9_!0q(2B^eXuvtY1|ab|25N}7pg|jCp#9z>st;lnaXqe^IWhp zYOkX%_2<%?M2#2t>Z-9Dy-Tuc{GrQc{rS2zs5@u&PS-HY*D&5{n4MLF?9HKNV=w99 zh~O|>s>=N_!Aczy+>3Fd6M`Wj`~DtmER-Yjl2tUzZH2fnQC=ov<%RUumf&A(H|6+# zd*D>nf0kMw6m$`P!P3_UKe;ix2ONLI2I>gqA)#d>&*}m3{XNoQAw`zJJEX?q0;?;Zs7E zva_WOC53*QNQRNhUJ;44FM-S|;ZTD+5W*`aC{rQ(WTo$B>3!1an|OFAw5(lQ$l0ZB z%_~hY!6QIhY3cN?(k%TKuC!7*I=i%HzH@O?Owf`pEuG#~nx&uMN|Wi zT#+sm%&e+KAJAO65%6N9N@fcSmli(r!bT`DR!yWi@QV3hkUiUxJ= zx9AZZsNeHfsx=ZE1NhWP3I9YRWyI}SBgG9FHxO#oYS?|O4TSxzDf=>xBZ;P^YNd-$ z4+F&?M!W`<_+Cx$lB0KE9bvs8rRDe>baZPs+xy^XJ4=-_6;1CWMH@9-68kUi;*~ z)ZF^pBm`|!=4Z$NIw9xDh^XSA(MQ({_-g>uo z%BJ{~(&U~w@0m8Dk~F5CYS~|ocy`mkJ9vv%X094YJ)8Vj_WP%lD<0S8U0JB(JnfM@ zykW;k{IGgAJCZl`Y~m!vQy_bdCQ`l@Id_v#P0yfo1&ZyYhEsJw;nY;sySG~RWW}W? zoI?C$j2e5$x;=^e3dH-7zx;^^v#s{l17SyZ*r>YlUurvOpxJUq4owEII+t&5SVo7 z6Pdq8AHkg8Az<7f-70?U*67z1N25=;R*jxZYg|3)zlG|npzN;4WA^N-2z8D=BEbhwhGU z-dmFsmu$=_gPYWL<0h|+-9}mVQ;Q`JyJvS;{FMNcJRc3FRwGrl7UQ}ymW{X-Ex6Ck zE6c+0B*4>@a$!bZE8{Mi4y9HWc$0Cxo>#8nHX8Qf|1l5YqxBg*}dTXHXJ@Maa6su~Oy5dCcD&(85m z-iNwV8Ps)66xSHtnB@KvUtG9bahwCV*>%d&ABlZl$Z3?*_uEGlwY0(z#z2sF2r~G9 z=LEeNXzS*9?UyVf<|4`?fE@+cj>LK%nMo2lKc=Enki0vp!*PI4rJjz&c=#GR?-q$2 zkB>;o!%qaS3{RzDMtPW2c!)>)qaU(zME}@B`iF|={Liz(ttbl>3|zIdE%q&+?Gdu2 z!f*4H&0%mNFJto5hmG>DphJ|Usz$&?G`*ZM4pSLbzb2QHkX`c$Dv?+ap>;loT-CSk zJ{kJAe^dONh&uP(zUtgJlL;@OD!qhSQK)ZE{H2MMtp0}6*W}DcPqggT7-uh@a)YZV zzmb!~>GJpNUOw|6C5katE>!d1;VZlOUHXt@!1>)q)e&AOKlBSmRX@jX+b5657$OC1}lU>S1&iwwr zMbEELcu(|1-#s3znqniw1rLZs($|dvH5kLMEYVHevk?4Sf*ZRfZ}B7ZL109ftejYP zZ?)LIbZgt2M~e!=v7}o;JL86IW^P zm@~BiZQP4eh;T_ypBdVws+N)`5C3h?Ps2S6w34;^{ABvzHt|OZG>n#PL&5oqLn=!? zwU6LB;8!3hqzx9KsIvyuIOuU)#qV24k{?=o%aF4-EF+rlA--v4dhtUm_znI^n@7&X zimu*DRyW0L=_jz$aD&Wd64;>qMhFaa%PGLMk)bK}y9EU1!Ik2CjGGT{(F7)u8Qa~7 z%s1$U+3GauvYF|SN^)n|RMl6hAU94bi66uImBqB+^Zw7&1DZcVnm=5-gI`fQ$G>KZ zNe6KaM{)x1Us5n2-Nq~PZMYF%d^h2~8T@lMCxSEh=FGP?!rG`(qo6(}?*A^urnx73 zJsSOZ^H{tmd*t^cg|xq~?7!pp4;G7BLyKAtXo}A2Y7r zu_1BnH&om)NqTRPeiidjXP41Y2i>}{Lhw^)F@NQ)qyTTCj&o_+Eb7iQ4+80oj2ZAi z_YMm0??%#~Ui}V$9`L^S`@vF^+=W%4j?19G@5W==w;s%cxayGDDHT1Nn?oH%VBs=^I^F`7zUMJt zBCY=uc%+8aH?g6dl<1Lbj`!6yh-=Q0;0lu~c}gVq6=&d~2d*)9S7%bz`7Wbh;$flY zReU|6rMx#tUJM);I|m}Z8Jr?oXNep(nA&cb)t&Wb5T*09JvXssh(~aLA$W|M)e=xi zgMJ;L>exSXw)D3V#>qVuznh_vj{iIH*=Qj7KDs^|4YFi4BvtiKQjpT&%jPn+ZW6T!#!L%wwIi> z;ZG?zqa)<%vsy^Cuc-(skaS-}9z-b8%Y)UMoILonquT)Mn(wtumT%ws14ME5t^fR3 zWGrOgx&pXy(>|PfRNKYhK#>j1vUOxp%X+u>XNE0PW{=DmwsPj9FJRA-Dr5GnmP>Q# z>1*{N+!Jb>AtG~2}D#wF{Ku@vM# zq|MeIi2vTd#8Tru zPiVLE+06Q~DzC#FdTDz{s%p`qG|K5XEnu7CRll2~ODv?~anRlsuWRI>>u>BxQ4FoD!S%>=#4+dWGAjHg71Fw-5Q+_$4x^xWFXX9r zv>xi^q5A)t7qaH(HhE-VeMA%gR$NGq}j1a)SnG z@Mv#r-kV!`yY16wmB7GFwd~F{50!a|EtPAVhP-?6-OBO@!9MNtC2#h#RBksX-g;ZM zb+;tUwcpU{T-a3AwLi>biLA+rpE{4diN2KvW-% z_87NRV(jkBz0D>PX&gVH;~)a zVmrI7W^p)BZvyY9k>M_tvmL1DOR4ae6_>d*iqeFwQuA({$~}IZjHbeGzy?;HJ-b{+ zmB}6bHy7uKU!?(UxJ1Kd7gD=ujy?{>#dYqzGl+iPWBEisiy}mHx|CZfX(q2b|7Ib@ zrcdj0{gxUwPF0Bt<|#E+Ur-0_)}L>NXk3k?lhf69hI&zDn_39nXX-5V6y=@5JNMwI zlPr?k$%U!#PSyfkXRP8HD$Z`-CL{6spvc;H0I6N=qiXr>)Lzz~{d;CkT^_eQivm9V ztV>AeniEUEK0p1$i%5Ukr_b&oeLm@OnpOD|^V4fPNnhyG>+;jXmyAF zpT0G#g&zOTi%GBX>Fe^-pB4UPK7Dz9`k$1(3EfioU!R|TqVRv(r_at$FH!wVefq@w z^w;N*zR;)F<)>H8BYmb%FV9b3J(u)mpT70#t{(R7Z@rZC8lS!{Km9D#U*^-7=ciw* z`ZsYZ%i5ox-m3JcefsSD^b=M8QlCDthx8wizR;)F<)@Ff_WShm{Pbr<-)5h_^{Tw~ zf2jO5K7Cz&`ma=fnNMGypMIA0KL!D7e}4Mt3(5bqPoJHiUZVU9a^L^Xbd; z)BmLOP1riD{rTzFD*b7nK080XRq0E8`o#S7KWTg{^yzi^>8nNGnLfQdKi&AR*{5%f z<+b1OzfWJ6pWbTn-={CnPydtXy9o<{wLd@oL#03M(`VE-$9&zk)A>07VJYkyesvBsyb%TMpTfb=q-zC1tOjek^NYkz)vmG!?*pPirH zD*j#S(92pE^qD@rJU`v=Z}#b1qj~NBmGam4^mX~^wW3d%PhXy& zKHB%rxek8)`L6t1 zJp6=0@Z%l)Mz~V=Tw9_f3=5y z6U%_wdvziBs~r4#W_{s*w}+ox2>vt&e~5>_+`}JI2>xIX@A=_m51;BN(B98r6xut_ z({q0h|5PFPCmsBRnGXLg?|J?&1b?H0zxq4}zsAF#UkLs@2R|99A^KeB;YSpLKhl@) z`S~0VA1Vaj&%vksct66!uWv6vpO;`P=yNr*fbqYFzq1hh9S;7c84mt=tjos#h2ZBp z_zBFCD*qM_KcNu(cn81H^V@|UeqbT^eH?ts!;kgw8!s);-gjXv@xSk{y*&Iwh2S4_ z@DF)@dy|JSjQ=?Pkq-oPB{EZGiEl<{X`11?FpO;(ybsm01A^0O5{Q7ep zea`Xlp+fNe9Q@VO9sCg%CcU_VVx#6@q`z!B6(( zzlllH_`eYRRStfh@2|T({NzILr#bkCrh5MO@P`zFKiI*q_xPXe;Zt)9wD&U@h4yar z^Y8v1{;5LnPdfMszQ4BM6QK6qR0#e?2YHvpWxx2f6McKA^5otexQfH z#luf11V7%vU!CTE4?nOF{5}qTqaTlBJ^aRt3$*uL7>o8E;`?_m5C2dh_y-;Q2;aYN zvfFR`UkLsx2cPE8yFL8mLhz?~e7wB6+`}JI2>xIPf0LiTPWJGrIR)DL8H^(S_x!NG zhkvRN{F4rTU|RpddBFI;5d4iE-j~0|!=GOW{yYbNi06mvJp714@JBlM^n7}bhYuBk z@8{st^5h5)zy6{E^mz%!5`DZr)7!(}SqT0P2fsco|KIfdUkHA#gHN61#@8(#enKJm z@eY2(nGXI!4?nOF{5}r;q3<~Ou^xWo4+^yRT^Nh@u0O-U@8#hiDg^(agTLC#pEuv| z{9g$Es@(GL_VAMn!Jp>geS0tW@Q38Xd;h4W*sKbUwzl?eiq-xGDDAt1YcA9eT*KGs zHbpc|9pJ?kI{W^_uKes8y8P#+^K--D=jPY?m@DfWQsFI&f*>Wocc7uPx^A zD8rR~eAiajenFz`zvm0;-c1Q&gG|H`L*t4oy3up_<#@Z zcvY952DF1C5&NnA@xCt-S@81HPerfxRdu<87oKK6Yf~hOFGakz!AdRp4)=;gqA%ae z5phB~@gDMiEA7Suc>9Rr)-dq>zxJ}b`c+U>?N$RWPn_PirxQTw2rH_O3V;80L-L>> z3v=#lyqB}xMGbb-p;hu)iy>H^t|vXF&0pvQ@mO_Z^aBZt=$64;biD{(>|8N-LW3^N zc zBgN@Dumd}macS$`(c|~l<*j=}qQ~?9$Wpyq?PbVFpJ$it&to1A3^Tj3``w}9<%VM{#^CM8KCcVYZFhf3QT+${)i|v=| zP}=v7b6v%YWzY)pZRYu>KQ}CA!nILmSZDeQvNIn~*&qX@__Jeadmw~gW<$op2xYNW3gk zZ%03zlt%4~^~2=z^84Xy#92Q~-&Q}AfL-B!cvCVYuOH&WAO4MmN4SE!NFHpUX{qpu z$WVKY)6?X3%eg+7af-U=I&kq_Wb>nxfNOw&h`VLoYRq$9%)ZQ2cuh6As-<$|{B!!v zrbaGJichGIL=k3oPj>h*t`bShE!{($foJmf@$p%M9RHS(Ac)OTm#dK9>f@gq)UAx}m^0xt5 zY;R(dC#1r+04T?0U4zgw-Y;5F;5`gnlRS*_XmU3J&tIt)$XV%Y)*z&Rkob}F?cMiV z;-zEAi5%pw@r64t92P4^VP0f9n1On;((u1MMWqWZd|qjJF()FJGBnFlvfb zUHM%|wX5F0S;P6JCtJSEvru^Dt!R0-F*YJ|W~3qY_vDM|R_$f2%J#5^4irQG*9EJX zBLJ-6jg-vc<~h}wf>PnH0LcNTaR{~^4mceO?*x#;`_cCGZi2K3#>$d38c}|Vz%FX9cO*r@b<@WGrwK!M& zS(D?W%sprnNKZ@&DwpX{T)i8lb~;LfwCi+KDtr;3(EA|9e*t>0-4?yy|4SFW_vd~k zW6;3U`;Eu)=)J2jLnh=hsJm9La!oTT-!H@u0}Gp-X58@vM$oT zVr-;+!=?y#BebvVFRyftpATAN6FOUNtY6QPCL>K+??IG;w@rExYrr|IEQWFS$ocMR z$`MWWH036;aM^ng?@{WJlOCU=eD+N7vrTqimV~n@FyqPZRn*ep(JSdU-nh7t8i+&} zdHfi;_t)pthm!8!r_9vH7}D>Y*C|i$s`J+xzVz*$$Ei>2DINWnzg>NrC%;xhfF8!v zAsUqhh1ahUSdO8;61;#6wZYUzNs{(AApX1Y_=9JN76`91(!%STS;A`xsmYMPkKw!mt07-^`ob8q}j%d{uqVQdA#krRaWR8rC$o#yBH zZ`aX4XXqP@eQ*+zOq0%7D`HJ5e7uQ69#B~`cr)*J`g)mBVQQ}mQE`ERIt$d`yhe9hJ0@DX~-rY|iul%JJx(9_Yjkzbc_|Z}MG$}lA zXpbx}s@%X=LVvWvWZCWBEz{c-<$Ac=idoZPrS}pP2+q`NS*kABSXF|zKc@-g3vd4a zZA9y%KJ!A@Agjo|nQiYXVjpBVbu%=xHz}L#DasoD@;qnq9Oj8Bxu&{Z_!i|Z#vpXk zPkS=ek?;hUf#|*G^rO$y*V+p{Ja78+a;Q}__|KWtb!UgBuY;6YRPj>cDfR|3FOk_R zN!7f6d_1q?=JpM_#*1*3SfzHHH=xieTZHdWR9?Qe%8vZ_$w_=5+V~g9a$@ep+P6+EC{TGU)II&$vm{ z>d-+{Cro6aT2ERe#+s5Wtb2N`;D0W$y_a7qu6Jlq?t`a zctG(r3gP{)({jmv4c}JBS7=336s3Bm7|@oYy!$7j^5&mRst{l#SF4n~M<4LBLho?* zA6dO-WSxK$YP1?xFMe964{Ho3QD)1;Kx?jahg-lC*3uys2>ROG-HQ@>>|KwgRCJ*q zJVt^+**orla{rA`jX@l^WRk2?rCzIB;YH$8r!w}B5)!;T=xPgtm>=^9QyjjJxGtfeu}LKcC`HK zgI$l2$fyNn6B%9St2ov&6*bO@4ATWb%anqOQvajcVqzt!N7dlIMQaq)7At7~jF-*s zMm*3FTP>Mi_uI?wSk<}Km3NsmkPr9=1#BX3Ay_2X?R6#ZLVS}kmg-6e(!aj#m(-Qry=ute_I_-&xI+L|Rg+)&&ZSH!< za8zl%__i&f)j)l@2Hs97YTy)Ntbx@^q7Npf`+zf^x?Xx>aFeHn$j=qYJ-iNSvfE=i$YVOl zVX6$g8tLYM#@M)K4b&B?T<85dUp6%Ke(cccjP1@>Ijp0RQqMYMAlJeKuRI2B6EtnXmzJ|)HxYYk{5`(GRrRDle$TPywOD77%XuSU0 zKHGErP#h!wF~xZy(K1Ts!Ylk@y^)N`@^0&|?XnM`j7YX);m~?1*P`_P$y9A}S<*8j zmrrGWeiKmp|NO`rrVzcN zYph15@r1Nv1Ld2-J>Vy~erLQrA}ONRe8}GcdSWI0Tzf;Vy=9s9e%ZCRcUF6i&<~QWtF@tyehdVP zx%vhXYU>X53lQbpKpC&SL^0^?7U&gBc)TL${o`G!b$aE@&7au@#a zUTCwRW0#;Ny?cUw$@rm{-l7{*;puRkJ*~c2ZH(6*m@au7Zz5m)8!6P3YyBVU_=I6B zy0X?z=RYu=e-3Hn-#eXOAZ5Y0ZYA8S5;B=Lp6DwdZA3(ZEErYU+xSnN=1#0zLF^ZO zOQ_R6Lr7E!b>6IOWhF%qiYVGtrc0f!)nPLLB>dn3(hRt)w-78z649jN;kEzxzIL%7 z;=L3@yWR`tUEhbaGc)boodi>iviWE?Awq4{5T$}kzF4z?1po1T`5-s5XqGP%?+`Av zkeSEm%h7Vers&4t_|yBqQ@lUQPAa06TM8Q=ew)Qbzy@TE8ltHz6@Hu^OWedy`lBg& zvzy3-v?Q16NQLK{OhEH+qx8T?jAw&cuCRb~Sd}$bbbGRzZQ#0uUi?af49Yxa4a&_P zWs{dwqi>ER2~#oqwZa;f0%sb-Zv@Jk1L`QH>KS?Kz-aDyD3aM(8 z06kg6m?`C>jTos+3l;W1p>ixbZ{-o9^!|xS9B$R~o;fn_Y|STKyxRFbRXg^$va+7v z>FzfUSyWl0sBSzgR_Q_RneaH|IGA&Ho3uw&^7edFfyok{-@*= z*%X}?(a`3BlabAC1XL^-IVn1A;;02@oGMaiESw!3c^X<4Oho@|K^6J^u^CmQ6jdZ~ zBhx-?__uppn|qQ5k1DN;4PG;uRkEB|#|Cp_-PvIJq8yRXsi|OlnNw;?;sa^Ptjk%P zyUPwDvAb+x7>WLIff35D7yFN7G2LMrD0IeJVhGe?i;@fC@d>`|UCo@V+kZzGgQ(YMC>U6VA{@zueDtXc!qiz+i=yd+@F z9tStm1$XV3z?x4k)Z1)9nGnZkn6Gv2{|@7sTD@!njQ10E6KwtyZWS6Sh)-E*;=@n7 zTUBG72@bqs*P_J!9Q;hPdN=l#h+gPvu*B0q-=e|NQ@UtypbcLqu8jr>YceYS0pQYb z*A8hxnE1CeNKMO9JvAFCrN}78qQ|Nj{?anxcb6px(I_Z>%Gt~Ujrpqqt1*)Wxst}v z#G#ocHY)bFR_pN9*#*}qVQ#BNQ~T}j?dJWw52?A z0T+IdN5hz}TPNRUHOkx);XC;~xBubf+_c9~V-~r|9DBzUEmg%Lh;nEAkigSNeP$6` z?G~@He;BIOiz_!6P!IMGXgx{ZbsNnMY%mO}wXe`{CXWI7g;;GSG?RxV*#PpCb2f9m zC|n(UBq<5BC?}&wsB9by{SzxfWvA9S+ceq()>NzqA*4Msm9ulSIe1c>oiY*|H$}^@ zCB!3yv3cy^@vs<1Ng3a2@IvJzmyv|;Hver@!5RcrR3lf&KsnWjiDiSqc;Ya~SNJ@_ zTD?@A3b!32LO_|wQ1*R8ow{#D0t;QFwikED1oM_-V)-_)HhCXw;8H8q-w4)n34TmW zw%XS``X4n>zuSlhCL%*g9##5(n`!nqRxC%C149dT@PxP! zF103}rynsyi!6{Gdm|B~{+7E7@e*SNg#nK(wSz+gJE)4`r}rK{40UYMR_?SHr#7@* zytnSdYbt)#HUQV-gu>*51v9-9I9x1W(-fawn(gnxeRw_iyKvpvOS$*Sdgm7*S(kSo zo(v?B7f$d(OQW{0_%=G6&6jaP@c5lB z|6SzIlRp#bv`F-c#^|&7zM6~mQ{3AG4Xxag<-Zqy^}WY}@VyFbmHSJC6WZqQEgs^$ z8Hv7|3jc*VWzH#WA68l1da&ayR4B&P3D{Ob{ZG=L@fG|TQ`Wd}M+cDx)i=o9V#DwVeS!1@`CZ8h6F1Vj%`Iy6B)kV=Bf)&n^|;3ox57 zi7LoLOFq0J-I5)%TXLCLdC04wj@yJrtYkA_qE)D)zXn{q_H{+X`#z{3t2K9AmPM~n zhgK$u+sM%vn^D#{bVd>H8N_Q}-ik9I>cYeKg-94(nq^yUidL>oql-9SE8BEqbOtY# zyZ}#h1E#%eH>pvj4UdkQv18&GPddp4PdfeNUh$)aES429*$cQZIYix5$ZY z1mY5qPmAKl==eHnI;omJjYsEdhRSvhtg}nKmu`d+>Zt`G{oJK+iqIlyrlEJ2eXHMpb6g*^k})_j zo>Zou+rbv3o{eN&l*TWL1e0Iagu`6W7$4(?Jz2&ESWep69QUY|EO(SV-+G z;So>Q>t|*59JTsj4E^Uek~M}p2k>A3^6foEu(0>??Jd=T*#08&tuZ>QH1Tbd=Whn5 z_hw0K9Daw@sBPD1N98S0RDFunXu{--uw;f?RC%4EvDsa2VMpbKg!D>XVh_z~NT9r7 zbUH$zYZ!Ihqvb@bVDGQ+z5lfDeSNFx18zQ`56$fbmd-Dy-Bj_R`0#L|-g zLSvI}l)fXe`yIFbemu(`=1(WO9}Rx^)BaMR^+~7qHqi79gUkbHYDb!-6ph~M0a-7y(DkdH^0+tN;t-7IWEQq)v#=>$!#zH?O+gLb2 zDnh)ZL=mx8{?~X2_B>OX)%3K)9iCB z*FWRK-?&v|xXY4*zh1;*@$0Nc8>5^&agq0CB>(S@6sY59RujQBP`JCMD`Qc;Xu*i6 z7vcPxM6B5+c=%+Yg^P@T#79f{wsAd-+q{~h2XdGx&7yCl!mT4kcgMi$FUcy;v&@vs z_)3qUX6pk`LXdj%mqW!V;X#FGY<~z55Lahoa<)8Ie&F<&-et5 zs9>%VR>AMdLHKncUfKT~j-r03yu9MIw@{{ygu^LTez8XqngbYKE585`Wj^>%wRoJ& z%yU-}XY*XAPkfQY91DZa4@|+ANVmOKFp^JbP!5@r;w7c$YYoBTMV=0I;Aa+wWk%l&Bz+M7&)_Q$|?S&q6)_kl*TzX8BMqHVZ+iAT_9BJstQ4Pd-m-#p?nXXWOmb}Z{qb{Cw<>u@=izs+J`hi-@W(@7 zr4+~2yy*x6Ry4(iH_?+g=}M-kSpB4*Cz@epow$pxoan47KNd9^`curL(yrl%yizU} zg`fOVu;EWFsQpYqydqW4IC(eqtTe`KLWMfcq&QN8rqB8owR!UKGz77s zvK>QZ$G}R*SA@z=!6Nf{b7kL!4woM~Tz=$mxh8|l&${E%(G8cG)-(nH2#Mk0dU@EP z*j5CObJdW@4rbA?X&QQeHZe8_13@ee&nCih|QGKsY|XeHk85h8kr!G;Pkhv`!r8 z2DC{vjXgtekYpL7dLotCI9Frr$5e}f#j7LduCQ@ay!O#imCbOr+dvYBi%}z-gl>*R z7aKh^Ba1#VJBaRsH%FrX2)=VpFYRzOLylv${bt9OtB>U9@DnP#eIn?=M*kkYt zb9WP0vX_!^J&|{30ZUwBGRS;EffPX?CBCFaK-t;Wn2yTcz8n!oM!ks^E;7FpEmgKa z6V3l`TG&zfJfZNy9Eid0Se7%580;GGDKaZz;vT^j6qJSAGvDW1>hV}X7>Vsc`*UoI zZV)-!Vue7xZP5)M*%m)<`1ELJtib>LaCNGaoT+dzUuJFFN?*(FQ!ka6+v-36CC!?p@}!0l9l#is_*8-bkH|k6`Z?!Obj824QAjRIkGEGNcXwz}GvTGcq@U!jg)lhSzZ z+se|=cK;#2BINztrs7W{?U(RY%eqKxG~+A1_&#-_-r+%ya1l-MnWdTc2Olkuq#o1z zxnt7j36IQpo2ex)=FpdNb*4f13%O9oG_Ag~UBc9X*9$F7t>cwQrAzphCc|6nu9-Z~ zA=JG~+ns|&kzSQ@`esthGAr2psCJlqK!`|wF6V!nE1e{{-$}!`lQ8~d`M-mI-x!kO zAc0ccGEZ2nvusSbvQi^Bq_v%kxzGu!hrOWcs>_Psri^;8sF|Ul52T9zIHF;@gG1PHiJ5VpwItj{5_7EG=%c` z`wXk(pv55jzr^1!AEH)GLJii5FipKOTUR^IUZun|XZK?~d45jO@Bjbc=SI7mfUaok zpm{NVsB@>9nrHobkNUE~m^3)(&Jgy`t)b43nTN;W7YtpdYCCCS>uyZ!cT7fOkDCkN z8O94R=cB#Kiy|r8lCwf9q%utmu6cV`aZ~3XY(giCE{=Tg!cP+JWGC9X2^RG#h6Jz1_ zQ%A%I0yZ2R=RC!GGEX4LscpKi?G~=U@MM^z64&)<)7(Dgs0F&T#|HDSxliC&{LZRZ4F)eRcY2NwwfD-<*wWygwSx7lth|}v zZVy)xoVePRSwWd>mT7ZdVy&#jvKNu)G6K_A0IYD zX^rivo$WT4rqEGa^?uBPMoc`s0o2-S@QNgIoBGpoxG8#Dz8p3JOOunp<@{8{%j4j? zH+0G2P{;e$v>aIsI>rxr7rry38ABt2(XnunOaezAg!N%7?bPa0(}4ap#Y_H1Y9#L1 zT?>llbd5UhRYj)c*U^M8wlen7=iYptXrJdmcXLvhWuK*_`t`6hTY8mal~6x-lG^3# zl3eS9zm#j0ZA`DVGx8mL1fM;}zj%P-fQsO;HZUjKHR){IVw_+5Y^A}OKgOuhq8I8` zCjPDpv|;JgNp_)JWeACxe z7gS&CXkHq;>wi@Qdw8_}wU=)#LymKSBHUnV=7j12{bw+4o(OdeqVlxD<&UVc~QIrGL6H!>@CVc`GxBF6vI|?++5G-C8L) zb)KVk6=>6bhXcr7QfA1ulyyTix$S|xr_2jfeoW;@bN9m8A(@zeXp9~DX;6eaFsS1n6srD35q=T77+5j9ZG%|&)%WD3sBFJb zw)lX*%%I(|q4e+m(w)B1M4C!lrMUG_wS751wccB6;Uaeotbb2L8(o_06N!#y9vWSwiO7b~%hl9{|L^=&0a4jX zbA0%z{}gA2z!UGQ5gM>^FTK-ptPgtcVT0OCoY$lhYDy@_ZZnJOC_>Evp=FCJM-ig4*RfW29-pG66loa+Z86H(!V114 z@llmSLj5OZ?}Vm1Ny=4Su-`7b(8cZ@uXGZAcHmg{J*c!rp`#uK z=}nA`mrr{&b@Um%ejh1byI^tU64Fu|8t&$DnUXuFi5mtiRbab4og^mi=1)eSZ@8O# zElMtPfR}r~)+q^bmd^i2*R9yF)2L{o^x@F5hui*KL7g8pY+hA7Dl}?qLpw8l`^CLQ ztCEqfh*9Yx1|*MD{)W5vA#p#KxW7+qIl?p<26taeI6+SIeP8}AHlVl9(zqVw&WV*W zxFK)nBI}Mx$Qq4@e^k<(7$Xh4E-%6|+fJsNby1sVe9;uOi6f8WNswrY4L@u@Zx`({ zD3x|mdVnl3F{V(nm-fBs)C@&a8x&uG2aJ|4`2M}B(HNhu4HM>-zI$9PWWr$!YWGwS zFWF0h*-5pFgsbko&PyB3vG%da+W-1TuySgjBD0iqldo2^s!Y5_7c7LvJBAjmXxRMs zhKf}fQkM`}q==4HZuqCsONATLm?i!wn1O8qO(%QotI{wI`&m~R_7_@EJ6l1#&;#m!`mScz1lpTp>vyXfy! z_-w#Dh8Nn@wAi^a$4XXBwQ^SzXlS&2-Llu-u5Tt7@#B1c2b0cl9yRHPj$!OM*Q4XU z3dS-Thz}(!G)(nD+aZjYn3-S{?aOA%rs!MJ6D2W&nPYc`h&P)dri&L3F+@d5^_@7< zP;1e}0I#INu`03jn?yTeb{>eHocN|P8Q#psu%->5Ce=Oskt>zq-QaJh?y9*W@sLzm zq)G2I@njoaYPfSuP+@%dc=Du)8Qeg|#1Xda+jcI!la$GIhH^cmT(OeN&v8@^b=+!r z*3MEyyzc}H?lRK19C~oI^oLJAv_=;sFcJ?Lu$d4E<8BCWFzVCIjAuCak-Wuq={k) z#oD+^eBaZ?CiCsWPDkdez|GK1=#ooehuh}j$~Jv?O{HF%3Tls>R(m){c8b;eISt8a zf=8akXyQ@pz^=?J#0yXX=BME{6gV{TyjI`zpoUsb+1#g5F{{XG;NVfBrCa$uQaPsp zNRGaeE+erw1u%0ycc#e1oO9Mb`tcQsymGIEeN!Zq64nl^T@z|Id2m_e+OLs<8jT>} zR@)bXx&_j}7?L((TWi$Rh^R}WwRsT3i-ZOhF!SRD>H)GX0lfAdeJt@$vZcah19Go! zShu&w%=GGb-`{*I<8o1_df1-zTz@uKW~?|nbivkAyPBh-!C5ck!>gL77x^PoZWJW< z9Q+P@n1la0dN4P8a$^ZgtPMsK*Bhzu-}sWBb44_0+BxXL`AZ<$6#X6xjYgIUKd6v> zLnDqIgKF&{MAkGk^I5c}VXA^h=c{v}7pi_Le2J>CQ%KsB$kH*huU*&#kS(X*d|F!P z4FjchCiGHvB)Zx<_HZj^V{p~Z(k(f^h9>z{i=)@Sv$3MAb+g{KK^Qs^a%$}EB%9_8Mj}~9RSaNiJCMt|K1-|;(d2KIWqui z#1-4T#^liP;t@`Wn-@do8k6sqA;@F%O?n}R4C#Q0)5La%8-nj$ES<|y z8+E}``!EpDWVV!sX_8xEp+8rUf7DOsLTugjwXZNcUCSlS<6=i}i#e)w$&}N4k9FR# ziyBdNG7(PMISY!)&l;#pJAjJyZMPuYp}@SxS3w}O$2mmU;WURKjm8+)6nz=}1BJI3 z-uR#MTk4Y@_^rcyQylaGrXf-y7Hd7LO7Kc`gl1LE+F;Fx!%BEk4Jw=iHhXQJr~ zN*A5#QR^rYm&I#0P9h@ScdZ54BWT$~jUWzP`w{fKsVpcMIo5{!5j3rIT=c_)Sg4B& z-csqdTHI1<1bLYVN07;TWe9Trr9j2{K43xE-lH*slskg_iTEA~@;GPI@|pN-*y0N_ zF*DF<^ibkyMjX`oP8#oy!4g3DV;hwHBN#YB9ffYUyT=gq@*>ixz79bQy%& z?9&;9W~L27C`8U6lucg@Ld`uGgf!r+=U-JVmEelt;563tbP>NQLY-fO{Ec`KU>n3z z5efYz5?af>(~&J)+w**6%kxd42i7#SZyIsWJaCDG9(c0-y%FsX*YhNLLumBc_amYE zH$7BOl79WCeGLgKLZd$`erkTIjo47<+0+!31D7135UoXtUs9t9fqm#uNO$+ezRNov zbfo*WBI14LS&&V-aVO=H?poltM^w)#O&knUGrZ3DcAA^|haERD*^F(r1A3Zqu882)$c8$9N!!0L!k?L%G6yOp-Z9a1&=yY4H`>Jr&+aY^ zXB2r9@1Q}3;vpIfQby9c=&&plWyFZS75wIso=}v}`WHlzb!jU6PotFyw~jHO$pl%( ze8NU=s-<>Z{5&R>gC^{TYSS+?aFkenHC_=<>Hgr+>HYpoiZUDi+V8hTwdgJRle4vN z1lfVY691BDQuULl9##%|u?3N+W@*dZyXgla6a9E6p!8!`7ilgEqC5A{{*F_XH=0Vk z#FDjvf!Hgw_MQr8!i}G6qmOL)+wu`2&;yUOZyH$qaQjCUt-G={c|;u zaeQ0H91Uq0Q6G=bXd(zo^I4J~to|Nxj2;1Y8$;J3r9n+zQAb z&puO}2086DaTJMgP(P|L4w^v|nYtVQ%E)mF+^dYdE(NZZFC)Qf7&2!OxRP-z#uFh~ z2WsHeTqMT3zp{-e1esEbTkC|Q2qzq`w{VfWwW$D(uzliM;|G=vHU=h&$zmmqa}@MF z+Jf*g3T#ULgABCslA|mhtvgLQ7UHS!2jorD4V>zPQ>b&I;qk?27m3+2<}oN{D@XG- zp!4az9YdEs%#@=a9WjcQlGAY~G17v{gIj;&HlNFllGiDoveFklt?*7dyYyq+Uu2nT zmmM$S_PyGI?D^^T31WjYGgJGKysVr24!m=7tL3=Fg6te~y5%V5V0*HL9Iv=K?#rvA zv0IJ};JI^Zc`tX1>SUds@>y#Mkk8gM;PNT%6Jq2Yqe zNVHhVO~`e93QEoZ5hce;7KB{1TBYkG!7`It#a>FEE`_3>~8YUBOden1$-6&Evb=(FEZ!=dINV?`Yk<@j2 z@YWO^`Mb-I?;3F-a(q!~B{zwViDdNex*(vq1nZSu7$=frqR?`}QIK|T*HI9E39Z(L zIbOR(BbF(3%L<=j2jHLfA5)aF!GCaYJ-yTAjjntbQH3x!#hLFiRn0!fP@R3)0@+gG zBX&h*KKyz`(~ev+K=L^4rX2KhM?JQIO>_{B?szTKxkmPEZ9k<4imnmL>1ilA+bVI> zlQubjby+VXd>iqIebld! zQr#xM)*dgWwam9h!n>!f$$p5S}lN={T7=uKbz%K zhu{<)uN|x$v}g&R+!smHZKa+zOPODTv@i^BST)%dx&8vx#NJ|X*(f$Q_S`6n_+1D& zLF53(GQi&w@JrhSo|^$aP{5DqP(r5UbPectG$?bhAU=Gm<+{rm(cT|P#=W@;#nGnR z8ui@HDBj-$^(XF=yqX88%q!_Z`<$syc_rOxpQr0nSEnqo&*S*?UP*LA;#jMDC8I(H zPPd=GzLXr;cUMZ;@1G-uCha7NXc|f?6{UOqyI?b(~FuHQ)> zVQHec)c->TK@r^*fnthQVGqAQt!R`UN?Hl$oq1>x7&~wUyrQb)jn4AjNSp!@_i(P*1ixU_HB>znTJ9rc@am?}Y z&k%35L(X%2+(Rxd!fav!kp~o!9P5Ky6puX6!1S)ZkN0xLUzsT;`0MEo+NYwiev9-ynog?J!b4w9ixUH?Ey3a#R};o)w0I5 z%54q?0<>7dNb7dRSC#gFZP2o_pLZD3g*TosW=Bypy*h@bTeA3t6|u`yP20lX|@5@?|`v6{ZpFZgEZmZZx?u zk!ap`fYbaX*bwS|@txKD2hV}KY=Xhbi4+h*KlRb?Z!|8<;lHUns)}cH&}c2S=>`+l zh86s@b#k?2x?*Z92A-?qAWkYAnCv;zJ14Z*RV7*bZ92AE!ykWDiLU72EGX0{N-XTF z3KzSJrd6JN8Dzou5Hd7Hb5W0TUf-_5-z0-9KGKd=6snKahWnMu_J=>(4PP7H7@#S%2 z#LmL;5# zK&R32yV=6U?v{#J-^Zt`^zaiF)IO;oUh!tHj8i<($~+OZUXe`OB))>k8wlyx_0xoYc!LGC zFDr(C^3*&bIj?y_Qu1Hv^m4?8V-6Gp?mlA+o7v_LLDRFEV|{cO4luYZ*_J4#?|>-SLg3CbzbG_ z%&-M_-aVJnl@JUNKhEYF(@)B)_YUf1$~LwLbsT15ApNWWD=-d@!=y8<4?6tOQ+EM? zm{yLtS~SagIZh*P+|Xf_t-N2$VcpupmeLu|&(KXp2rVA9j6D2uiReGY_q>&wzDl3t zA>*Qy5b7v}B`r(i!*7<1kDXb!;po`(y5PU%8L6~2I;K+LZmJi*+)x9GAAq7J8nITU9w3Qh`=D@$()dY7r zF~nqP;t0#eI*p}h=2Y&)bC7wD9l<)GN~a)@R}L^8=4BYG3_nqZHp}3|nKUs`Un`NR z7Wy;r@!^M)LFFnrI9(Z?-`MA79G;!AS{YBV8$P-+-YV{-#-$eGsirVK{I#=PjYGCF#ChjI_^{5S^SjhpO!ESuo zphJ&3Q1%G$l!7X1n5H_B&@#J`2j3{U*^-%QokiAW+M!z|dKX)i%!O^x9KXFStvOe8 zyt5f7t)}+3{$dM8!y>%}!*8}=Ok?cg^qdQJe)aX9FW5;d#3zB7D5_DS#%)!RP*sf- zRRastFUBmY46I57iG|GOgs%P`c=_AiXs$8BLGrF!G<1E2oPyUBi9pV+Ik%gv?7ZQ5 zTBfh$dZDI+MrM%z?th_88V}fo^3J~tPxSXjEkhorucWcF`|ph-$Zb=lM|`NhWuD4t z_KChi3dv*K6Kg=kV^Jk8OA1MAZc|jZxwH^{eIME~uGZtC+2S&AWZ(7!IH`=E{<4=} z@@<^7kvJ6OB)nm4|TyND{J zoJpCXkH%N?xZ-nT>ay|rnfTWz5&n_?i8gvUKTU+swKy%uITUBd7qg#;-TJ=3bQzo$ ziaBf9;d|UF&GS(jl^o18QDUEW>+`GG2C_dDg3~N5;am) zg6Q7(^!$WK&ZALa;sKW~Cy$Q1_-z)KbXT7Mj)@x`gqfOtN8jrmx;0{pv01Rm!;+(k zPByE~t6Yv`lVXnJ59K9?DC8V{+S0bgmL~uHw_`Kyv#aa~P+~jl_u<5to$9a*%Y_H| zpAdQbqhRMrqIeF;$qbBCOufWl++4Xu7kAR&lGw z$E?qeK1xdN)*V{Mv(Y-558G(%1)bQcZwTFu4QJV`9U5ZecSO}IfB22E$j*;Oc7D>7RY_+E6|Cg#tD1S#*&e;G-Pj;ypzm4>7+zY6g@PNtk-cx#vQSc|qG!jb zrYO%xySt4zj3!$jHGKqX)E*qWo@S-r_iKL}I{OwyRG)cFY4p;n5ky$44u&FfK=Ai8 zX*qfV8sk`pXNAX;1ra9>g7*$}dzWRK(R7PjIHDzSh?am|=LF8QWjXU@JtzZ;$qD$? zd|a1jEBr?Z)c`ZUDG>_FIWK~v>!OgX5>l2mN|*$U98`$}-fRvhfq z(IwVqQ8%J-<>@<_I-qZz1z7kT-a`y;$ZdFsI(EPiwoTl-XuLR0<7*+5X#CELX5}2G z&2~sX*GE4`v@=oW*oS22uxoAYyhTa1{N-YO2U!q4z`W;lWaMC5kCg0d@wNfJfX1uc z^{Mdts)BiTAyF)0lv3P!xaPR)`KdYXRtw$Ph#sbzvm0bQN*to4(a-_6QC!PKGzIxj zKhX0BjBwo1GKZcYppSUp%||M5waL&g1t55@M*Z(DhuiEti;G*vZ6_v8(T@}7nFVtA zAW&dG!)izMaIfgahyRv3jVW)~*vgL(sO=@!xLCN{g4!=Bu+``9jbPz2MP#sqTET-m z?Mw!@*OwvIA=`-}eVuqr+d8nJ3^n(hqT2i3YeD!v1?I1CnkX4B`GdvhbQdeqQ8X)$ zNaME?16@b#y35Zw`)s0%h7Q<55bB(PDx0`~KiYV79HN)6SkCB!b7w%o;*sK(Cefgc zNX^pK%x+?LEVZ2M*HFcbyQs2U(OjA%)kBK#R=T(+g??`6?&+0BLyo`TeFi!7einW5 zxB??bvE$yA7T=v5wcw<+v$!|IGeftV9A{^fBcW$_wAtE2+aG|ZF!Du;S|((--T7_i zwf!XD_A$QghZFYD_QW+{9a=W3vT?zv%7NVA`sTMVbFg8c;h=r}GD6X=oDd4FBiYH> z{Tz!tr3gLElI}0|=2GE(;qNq)eqow`W)4k`0ClIv)73o?=4SY@2g2N}mgh6YA|uF^ zl^qs#RJIWIL>S$SkS5GN5awMR|9T+En?yT;9Bd2Ml9v>bN0732{}&0O=Ride(@=XL z$Te_e4+MFoXM+6A6XX$3kUtb4$kkZ{82~{(#eCZXK{k7%Z>aNd#xX+V9Yy33B=vSa zK|&pI)v>*DKZi?F;b)U75nBUxa{rU{^h5l#>2#U>U_!fHi9-im1_CX+Dg!gn4VEZ1 zR`Xf58Vi}LC1QFY^MNqAkvY_1saXQ4f>L_mJ$d0tAW4VSpxRV`)TR*Inr_-EE7~-FBFHclmC6=xgkML?6Mbn%E=Vc~LI1 zTy_HDcv(~BK3I=ORSw{9Qzd=^_gmrG3mQXPng3N6`jr++YOXj0{C5z-ia{j=;d_I8 zggxTC$Y>3zBV?S|U%Wq_WrUnbGeey(V1Q3-Fxz~Z5exR%PmXsCX+8G(SLv}Q+`}+G z&rWz;32WU|uD50<{80%j%*;9b&g_JrC}Fu-BZoV`!@JBqESRr^k+L>=6(KzwZ1>a_ zdndgC+r@{sRM_rmDVKtE(K1D2C%1;UjUicgP zrK6HimebMFoRA6?$%fpB>g3Seh?-<=ZbV)35Gz4ehwy&B8rb$L{%1Ak2>nllSc(6M z5c>~pNbX{V$+MFEK-LGZyU4E!Z|i4i>rbn-LkIkZysf(m^?{)7E2TldCt0yO6Pxij zaO=bQZ)=#l_2GZMk(Lkk@^rlRJt7)oM{?fqH7#roM~3Wln1g9K5uN%YWr+9vn+1N= z*E{$nB1x#ZLmn;P(DA*fT9zbu5*|`mVMh z{HOxc(jF21@$dtRz?j->t17+A7W=rA4BViFVYRuqb&&9wB0Ofw8M%#Y*$cY}zF&rl zP6FaDgNvmtgj!#RwB{2g{4xvPCl9rz-(o?g>9-=T%qWDms`GR@@x9IFr|bNgE$H$c zpVl|48kDObKF}maqFhT2?+fz}C}c=J%@1K+{WKiAM>_dlAG;f|>E+(9ecWeHWwCtqkxHHkJA1Dk3D6|c<)YyI+Nr(v0YM30&dZ7h@!>JM!)E~4So@EU%zs-F zto=wj&gLQ+O~%kZi~&rW#jT^=tv$WC1zFvziYO3ujQ219zN_r_H8g$z3D)F$H@G(8 zSK}~OmQ%o3wrB+g&2f3~lXbCZs%plUA>)BUZJ$Q5T63qjb(c zY{<1wkK@~{ivJ&b?*eD{aR2}BN{%eD&IX4?!cmKjQX8x$2)h!TC0G^2rL21hwPcqd zSaz4JlS5RZp=m9pO;s!I5hU(d**X4yGew$zyJ6D zc>MBU=gfTOGxMJJyl?ZK_smEBGC55VU%EzGwg4+L8>K8Wn#y_YpAbeGPs9Z zAgk_^>YO}N;p5)+=9BXN%ES^MN7c4Os9F+?{G+4XtbYsPl{#`Y%jekwAUa|m9?RjH zFAmm6zH=lDlq}uDl30}zlNz$MxE*R2D~~MSS>^bMn$p|R2=D#*2z&1}OJa+a*n7Wp z@BPWjBeTQz_D{dh1KxYfy|=`@w>0~n+=}$)+KaUK_gpwRLhn)v%tdesqr`6|p~tDT zEsggXbtd*KvuwQno+dWW_hz3i9__Rfbmamj52fR7_NdqRaAQ5(b}bKg7sw`Yw%v9U zr$Zty?c~rCZ97`hCsp00f>h~kmU!tG4emum4#WoiHttW`^AhvY z!w7GEoYF+H`d$+Asz)2T{t<2LBGb5lx2~FW@DR@EU-I&(9hR~gH*mwVqZdAXcC=~U z*(0N`1qaLPe7$B}kx885cVC7}bPOa`iL0w9nNiWjb6oOs`4ZIpMDe^)JG`A(`Ip4F z^n^re?>!(~Y302(T+LOE&8OC;4$hoCa)+Q+huBw1bJ6OBVXN#r(=cWT4PWvy4_xET zcZTtO0QUOX(bxWf+!fk~Oga~h8JfaSCB$xaQfmls6*Hc4VWl|Ver>a%lygxW| z4lDWcIw_;TeXJ&t>|62A=+$n&i5~^mwx?H8)tdc_lVMG}=tjo;I~bCK-ufTc^&%O& zC7DI(?HRI!4A#``dJSwLkSmLuza`tP$~IGnN)EDLEVs#Ec7<&xwW0gOOzhA%3io89 zd)5JQqWFG2|*voz9nqeM}4CW+#rA&|khgY5*{qqPm zQ&DYY8jS{G9KHd$v`)3bXg`>r;?(S#;~ z;`|-GynFG}{{+D>#e)~pXvgZ{pzHdDT=OVJSpUDr@HfDoVq&Ft;#m!Z(vKA1#IYet z@&81oMV;2FlxC_5wN`>2=t4FE_40ON^Js{fTKKwD*YE#QsJebgUfWKmDWXoshBTKE zQwtgJm_=*$3-ZK#S-lZB)g#|BkVeEcOVl0_-XzfbzO;PpQvnMUZb)rLiRmLl#rcqg zP0tyk4dl}k&*jXjqkP#f!ZIdxKfREh)ZKlJc2^?-x3mak)Ew80I5(Qtbhj^d9h^wj zthxRITRCGAW(y;4Af(ZlUJhm* zf_!LwX3W#*8K%TKEs(cE#a-A#KD?j)m;=5Hr zBtws_yN9p9TU!t-Ypr!GPG{snA{KP1_2NVbKk3nJ4V3ubohsy?#=wx=cV*;ZFc1b_ z4h<8z#Sll@8USDp$q$bl+-5EZZR%FhwKjQcNN1a^6Z(GegLJA3-5~H+kl+qf@$n~G zlKY`jhH#Z8qDBlL(10^E5BXtsRqcvri<@dCh)e`A6aDM>UpM5(87d~7S^!ebC%?w{ zAvtL|WJPethJA~;5>%2b?;UH8x9jzwM(yyTZ=#`R6X*BqYo5)xt_?OnN$%Qe-K#(K z&rlumk+qhQR`ybhJBU0k0wTZL1Ci1Q?D83CYeV1e%z(e} zJ6?F#p;_m%vmFHdoy8<7Zq}9eoY@fE2_tP3_C`JqCZH9MJt2^qx z|4NbF&(3-6HQvwuS~quHiuRC{d)r0J3euWnZ7aMq|7LdlM(RID%*_M4&+!xDot(L6 zO-D$TPp2V3D8o42ms2TNOWoGQpz|4PcwacD1~@WAwRj@)$EH|a&-?H*i@M*Dq%$Fo zq}wWiq*Kdzm*U^INRW9bV7r;nki31fNEI}wrI=zFj7JGH6^}*F%1Rai6GbD{m(#nc&hI{tXwv#HC4t3F5DH)m*O1LmoC~*qz)grIEO?BKLh#=ZwNob zOiT^YEwS=%FTar6QhMCpT_JxP^0ZvHcbC{*;pq*W+=l~xYO@HRa#whzzqz}-`%2TC zm-DO^`&WRkxx1p?-8~}Tqq<9EySqHs-5xYKvSXFIExe4&!Yy!_+6T8~qU|?mlpV{| z7b+2U4DM+E(ymKC)mjxC9m_`z4x-o2)+{4m;<_-r?JcIkR@gLveHE7A^cskYpS@juS)D4E~hAnHpdQ@t+3slbK|Jh5r1I4>cnkK)fzoffB)Sh3F zCu&W)hVs^KKm`8arQ!La_HeaSC~E26a6f7oYHu4Y9z-Q*`jtgmxIgd`gYRQ&icrK$ zJm>Wrc4_$XBL1`Bgo1t-$>m$vuPk6k-m8tkCefXB%{c)2G&~>lT;D3LpT=wJ$;nUg z+*UWm6U~!sw)BeNN4U$R@6NHlc)?gGVVntCTN0TCb;IUI+fL(o&c}Kg)Ww3Q_u0Cl zKZR1fX*a=D6>NE)J3((^SgWR9lJ|udc?XRr85q1~)z>W$f6NQ8?93`Q|~x&3L)Ayncmg}%>gv7i`6&-l!M~JM6#DyjtOk6+*hA4 zD_6J}V)iLsXvBW^cHI$L@n3OYlg4}Hj~X`|7`(Hq2*_igeHa1luzTbY?>&#nJ?Z0XNvOrFF`xn&q@`o;$T#)(e?YTVL_uxK`MC(T(8p?xx z4m86TfAd~BrREG@qIeZhOPB(owY>~q`!R~D$P0qkBx?Dj6-@{8ipmgo&b|}@k*p?216){<|tQ&!niN2VNKj- zy4KxG*nO1duwK5C&u=c(#%Dd3AY4Ohf|Vhe^0US!YC(PB$chQP>GmA|p@qLJlIUQ} zDr>MtLS(MU-SUI!&`Ba0!Q$7v{J;`@bgHvHK!rh~P>}?6?c=bR4fpFEn$UedGAHI+{^5$( zNGDCLSVA%?^|0Yj0TR{)Yj8kZsk>dD+ti&l5`KkGp<7`gLb6y)iXHvT#R_k$27Vn* z8(pJTWaHR;B_robwgHn~WJM(p zRU}xX?76q__l2wLy~&$vqg}mWoyZmm1DEwG{$YzbWl53qZphgY?{R5mRrb=##jD2^ zrN3oP2zLd5Fu71|L0SS;`7WQ=h?Jk@^Ns{LJEwAXW`3~j&|EF zgbmlI305osi;k3!0qw}^;k@I0s#E=aJkFRDbxo&Lr1x_3=0J&LgC`=|#l#@V_d@)X z#!Qq;;2x7FaM}OJb-7e?h!7q6s0n8e$nSmWw_GXqUp8Qs(Qq3?ZLWo%`noF~34IKT z6^$p7+pFDKyGTf%jF|+f=|GQL({|}c@`>3>Qq^aCDhd9o+C)TP1Mc|(KU<%Pv&Vsc zab?@7j23UCpG<5vl|zq47|(glhhxBoZpZBS9J^{h)T(}baP)QLjatvbPLdN6JMxI5;rloG-DN@k8b`!8N3w)+ZnZ-U+ zql|b+)$m%dgz%XLWlDfrPa2hRG~^u}*fgRdakOaG87jRHS(kiLFo4KyRtYzgHByJP zG?T+l8XNo~SbfrijR1G`@EpBk8ls8%YC2xm`s5@ESyJDk$R?;H|hD}{vX1&W``OziFFF;*I+M}@~kN2|uEHC&6*0V5_zN8m~w zF;+hs_`!FakyBD9=#J9#PefboL;mJrjRY`e?5D^k__1u++~214-Ttd`pGzk!E)p%o_BAKotS$&9_*^c z4!pP7gBs5MJPLVF>3`FnYS=StPc?%@>sHa|*L;|DBqCQp8#v5*5pVfSNW(giB~=o9 zSZ$V6S#fifbUIEXXGRqUW;3COmouqh@OajYD$)1)GO@SlUVC=j`>2B+#yOik17pk6M6D4rMWFjzsU zSU(LWL~M!OeY^~cnKZ3d)ax84Ch!^G@w7k_4uEUpNjg-;3QLWadnts2SHBQJ@>xm# zxJEY^@_eFW6J3EI7U1?9^$81zJ#Z`N0^eisQ!dVW7EXCOAz7k-EgD-3KOpuC?4CUD zj)7|h8gZ~7%K3x@9jkcfz2^JH!llOV1`e(QDl1bZ#I5p~8f7Fg)zeZ6#T|y#RP`0_ zyo2I&UXnSuexcQb$e4Lh4T;x`O91O$kO*TX3Wty=PhbSi^esjZgVmjIeX7biin_S|1+S0-J{4R zl2!IC$zdy-Hs(9zypIQOue#(V5I&*a;_=3}v>YWyQEO68-mMJ2vz>$~|8d#C>);$` z!Ug&BXYTz-zb`-~gGfkk*Kb0f(hz18Ej0jWKNH(VLKg+ak_49M?9yUKWykzsU?YDZ*&&OTgV16$9 zG=F{`ripdUPr-iEsyr6j5$ME1{aomIe*v4F;-*cpJ84-_N_WUagpDLyM90D4H(=9b z=YQ-sbi&YvbHvHLE;Og=_{;{en2a&q`}Bx{NhxHOCr zNbInX)$hQ5y<-IAjg&Dxlm)QuE|_?Cb|ytL%;Ri90uYjm6VTNwJG|sW1?oEfl_>rw z=>NX+Z?Ut+H;D>D1v*~WRROerA?+g~5{M20K*KJ4xWE)%Z2nO$OrW_eKSW@EJTLU0 ziM^nCa)eFixk$UdVN7&n#@}TXN$wy35}+Pkj$R@Knf@gn*Q<04T~nG{ts;e9 znY*Ud>XT0tu2!!jZ?@@c+7w*JYSpbT*S%mZtNpD2;mlTst8mPH3wb;g^W@Rygmm>? zDoB;;{$G<*TGjOnUid=ak^s$ef+tomaJH#t(VUc>#S?&X7Np9K)fPY(&+vfA2{9O> zAZ?!B0+lNwMN}TWLVV(v|EOH)NhiC#{{Uf`kjhp4OzfoJdPY*)Qtt>!XZ<3z1xgQv zIET3zmD>H4Ekwu$KMtb0;*Z>Y#t{&F1UDO7=m&afIUGdH$C1p=8e=|&)4S2h$$tJO z0aPyLLwZ9dgN6(~?yl%mhC);29xLW!5+=+g6xU7Y3Q4eL|N5j&c++lnHgcyGfJZsI zOd@J-7keek-P>-J;X@1QSzybiDHFSscd^52iktVaNpk3Lko24xi~W$RimB;7FB3cX z@xnz>DS0EjM$iW}9Q!X#5>`e{iB9GE2#~Kwb$9+v<~lqU*QhieGu}57jl&$8-r(RZ zky#LdGFqm{O=NBhtUByCM;$sVBps}^P#2X{9=E)#&&}K1W|^=~A!3Oy@VFmSZJUge z8GfIv&D3qPhBxAJ3#^W4x%pr+|!0;%T+M~uNaSIWTx%7tpatmBtvWX32X zN-&?GqM_UZN`N3YaP?h*rRwWfx;T$$<6JFIcfmS&G|2L@#Y zCW!}lupfX&0LID0e?Twv)506xLU~Xml^VX^DBvON<`1X$D@y->fcOIc4|NLHijyf} zt%x)i8RRryw0#5KO>e><7K27s&(G%NLFBs2yXoTT?&|Q#{XEGL+?}fDZV&9~BHHfJ zJX(BwbG5xBcym8G-_!8vBX#PPX2yV*m4Hc_~DJLyKG zD{2wdw2+Fea`Zv7;c_OJ&Mn7kI3#Ca2;dwjl) zo+Z$RImaQ=b?27!)yCnMVcqYS}g9BuUx$T>q0TYWIivX;7>h>5bg)FmuaM^!}Se%0*P zC68m*7uBZ#8w-Pq>lbT4PaPdv2HM8TOjU1vE^eWb?>%H^ANZt?-=8o+%yi>s8m(1s zPF8iFnLpjKeNvI8k2G+I$gCqb%l@O;z-NB@8y<1ro;-3@KIQp#KXGasN$3JWI62#n+flV-n>`WiC>)Vhw18LjKW zZ{-x_mUb@ENwHX+bRX&tJ;WsGcQMs%ZIAtVOgXh|d7?Yih_^Y60t*H|_W>Uaj)!mAgZv)$MNLMA?7#8!RIHs;%73;6cfrzKWYYoD@U#_xTX(<6MQ zSSu*-5$yYsE;lwS#cf;d4%FTmFxl)6o!6G#VfI5MKSUuzNhJ>J6_ry%hB((Y3)it` zL#J2p?PeEFQ{vEz>g*J>M)71!f|G$(osnadnq@*?yVC1qEQc<=oyU!iPc->iSH*0q z=wFLp;6(oXH^-fL$njx?+zCJBmMS@)n?qf z-8*;elF>D4;LP&grhJeJ{0{7PUGy5gp1Hkobo)Hx=q)#M9Bo|D5VCUsrCHxP{sm8j z>@4Q&VHUNh2xm>B0HUwzacME~#EJ&b#dnK}OQ`i^8GkY{$czmbNf`X-<61zf5Ezau+Wrwajjq#DFE<#C8x>{^ zqbM9rc+1|yZluVz3DilyWUh$F_^l1;O_s!(l^D_oAx1#@`Bq-$!4|lNcMmh)|A2U9 zWZ6T-1-K-j zaTLrPuYI@}Ts~X6seNNRMk6hs*GAjl<%c34+z5QsdUDVw_i~C)e6LH67HMWg1-|5? z%%X>i)4zfy1dn?&JUrs2F4%o<1y0SVXz>G{q!dXX=OxXO5kGm|pR4>#|Gb8L$S~42 z^~$%u5p8=P4Cz4^6(!yY^>VkQs!*+{wxPAs_d@Fi8qX8{xdx>A)++T43VOF|38~-0 za}(vK{7OVR!$+gKhP2K|fCM#QUIQ8!L%!ECmxjtTpIAF_Qn_B@wU00>?}ZdjwBRz+ z8$sk^);gG|!cUHtBgmVq@KsZJZgQXy1&C2auA-Vrf(o;1y3#y`t$j?SkiL%AdQLIX z$eaC=DV}B{{+KVoMjyM+4$2G0<>1Rd`iMu9W>mC8Z)bPhSHb5XiX4F@BNs`7B}*^1 zBsN}&amaqKJREYKmG=}&Z$enYVE%xc|4p&vFp}BV2qzC^@Q;wwpeSA`2^jA0*sh%o{9N^EL}!V1kg6c1y4K^ zyNvRY9p_h+x4qFElkad0oYuT+_e5XV)SXBU8cikDZ$Ju=R4Q>bn?}o6sjq9D&(79P z|C-E(Lvr_felD@M`_8=8y&YHlekVM?R>!9>wY~K!^$92cL(`UZ$$pr%P46#HWJ;RT zxXL&k-2JxLBB5h5M7`2_UL^VH_Xv`cD<%LXKH74{))SOQd-|5eNS=0Yp4VUNe2cHA zn@d-zJshG3TEGoXMs+h1vxx4ot!Si2IQ`1In~V6&fqJWI8Y*%vf?ia8OM`Z&M2c82 zir9Dm1^t4(xppBDM!~oLEN{wB1gs8rZo%_}D2rR@2bd}1=Sw;F#am^#enb`NBy*dtob}T%C z!;)?9!aAx^V>PFG5kA>Ov^G(6Fkr|V;ovhw+|(nfX({N~a#N=6nX>4kGwf>yrZ2U{ zFbYgH@R}y61|>igkRH$3J)&~kT03#rheR_3&;P}h&V_FP*<1b{YH z^%8#QUjlVfCMYQ@Csi@^;!0IksUP~y0M#7QBe-sf)~t8?{8Edyyhe2d2KDV-PshRY zd|F2@3%+2+Ml3aMRvfr52`3NPQKA7kO{j0=tVI**EKCng$gB=|BmH--Ly%<*0j%ZE8A$z-G#cGM`!7zKI)86Gr#vDyY! zL%Yg1kmmr&z(f+c4l#Bz9w)8~rFNATXo=wMO@x<;6=OLsZ5?p%n;02&B6bP}&|LaJ zE3pISQysA*p`%QuL!?;9oZzTuT#g;#pj_v%6t3y#%Wx2|LuvaW`ovUpr526hCk(M?R1 z$tWmGPqSIz7rOW0j*q})S{DTI)1GT$w)GL2E)e7IKZO@d!skLy3#1lYyxL*k$m-yJ zQsC(FPtt$kVYV_eQIm;nbtf(CWzAcq&(-Ox)U%?Fz~=MK+K%T&a?9Ya^5557Fx()< zT)6hTCn_M;!dc2N>hxJrYekdJ)eHBDiuhR;Y%p1_JjN-_EKNIr?;^(`$Y8-H3c3HF z`)`S)Q?k*v7B$0b`HJ?_p8z#`W@*MB4(Q;v6-|72z>#6_@u#aHOkW}@4E~1_NYJj{ ziWC10G<_8*eIENxZ2N?ssI)G|*0A z2Btk`_xyO%*C@^IUBL6Uc18itrd+O&xU}N}pJC_r|4O{621ux-;78=&%MBWt*g%aG zG~?g842-*Y)29K9cvFijtxaAhwb8n2!%M2t_F-%|xswWW96H#?Ts{M1j%8&$S2ucn z9WOop1C8)!^P;V`r;hN|i##wvJk$RUqeC;X`9EeF$|?5Ka1(i(h8uWCOM9U)3{vmp zw=OYJtecB(m8(3AaoyM62z~nhosdyu(e|$9(`s7}*r4g#wJlHTxc)}XJJh9~G>t`2 z?;G!A=IG0{nb@ujMkMtK-sw#2&D#sTw|A4bp+2r5rb=hNE|+A<h+F<;@}`%@I1owsIGV+D{R3>k>{9ue#RZ*vM1xAgLrT+?-AU!ilJmZ zrm5loG6P`+y>{=a*cr`4{*L8`&_LmiqW zG_mrP@vP&xZA-)R@vH+k`9|@qgP9F&>iBrpO~I{?XC0&`iY7SdHgU2GU{wIqW@u&> z6y-dRG>n_?-B#OL{l698no{&3L!G3dBA2F+t|PwnBjHx#cl#3HD&Pg@X(zMFXKI8+@tc}n zN}=Y%u$rp=@ndp)7sR)Y6$N9htA^%fq0+Az-|BAn#>@3xZJi&v61x{k%tl6Ei>#LW zwWLt)KR93fQt>1D)^0?rfM|WD+;$P+L_6<7S@(cUENYb$RS=BqM#W-7zR;?-SKJzE z)phXOfN?^^$ZsBB8^`P6`K=m?ar|cYnY%l>!f1oB{oH<=uDeCJ9Zfd3d!YTct$16a zcOp}xU15A?Wv#tpxX|I)+G-G6D96LWxu1?K2WxRAK-`WxEg&x zfbR^l1Q)Z`xGu9dHN3NjlL;>TBHBKc&cqS*+9GXmAs7X*y4@4<_r)FJK*|w+5_St& zkqrxkS}xQa$DG3s_s&ClV#W0ggXpd}cnB$ z{l7V}G3{zW_0$hTv0=QdKe_lJ$<2_XZ{;&*Fl>8&$I(}l&2=q~J{WQqN9#0)`}pu?i~A5UE}$vg6!wkGYVfNdUGQXhfjsrt?!(#v*zgt{L>2Q^@=0Aq zEaB6OE@LELec-N)#z zV$^mNCvp1&t#py;AmB2U=5*lYH}C&$TPP=tyqJGtfuk(O z$jpWu!@6m%b42R&&6_uY6=0Xn$l28HY*MAl{OK8)-~49VHG4Lx`^=ea@yh+3Xnn3y zt%`So-<<&=(4sPu5w?QV2XIGZIX{tPd`ZTq%bC#K4B1XP(l{L)&iIdsbAzppHxgf^ zBRV1sS#|<(62E1*v@lfVCs=+Yu^D8>`V5NOZ&&IfBxP&_>_JzmMz4d}CyQe(8cK0d zyaOP8?K7B3U>T1VAEy3Si z&xyaCWb`b)f%u_>$6oC!4~S;`96Nh{7Da~qe8U&UuI=^#@Kj_x**tzG-f>t;6`GnuJ=i*QgXTmgcKHp3e0&gj zAQiVbwV7;FiGP}PN+;I8}YFho&(|G`MhsDd?aJC6OTIO+{4H5&Rk6p zJ`P!ZTp%%jgtqS~5?=^vTk$Y^_59Y1)_O%*!|zXC)XO8aBV7H!XF!{ZJ=kf~cap`5 zL4E8Lhotvf(vcn?=SXGA&Vnr=yWFugw20#2P$hIxee5$LHSB6nXSdTxKAkDwi)1#1 zb<&&jCnOn*KhkkS(O^h2#{;pdv)Mx-%y(1N{A#Fbt1rY7Ooz&&Mrg9v&K7sDf8nb( z@2XJ^6?P{`_p{O$hVGRv&Kk)U1bbTIq zqw76vw52shfCY3-V`Igq2|=PCZpwiGgCX+x95>euJeVL7(I!ocQk|*3qQgyttv8rF z7YuF&L7BkEKESN<@sR%H?b?)u zB*S{JOTKN!N2EA2k&M*++0Awnr`oIcS0+^&Q=&O@0hGaC=Q~5KL=v^>yBa8?&4s?& ziDKDB(h~AGBoZEJ>F1$NEa>i6y#;;mb!I{HHLOD$__Wxir`INrI-~H@V&VcW;}0%; zc@vO7yab{%oB6e{(deV+!)=+@YPdm>4+TkoKtqWk&!;EpcdB|CH*_!z-ItR;jO}a~ zxF4Nj7>up;RYPItE8Sm>Vya95q521rRLs{r`E^t(@+w|PWhJ5L{>ByRK6cX#6A?q- zS6x$3Ej$mU!~+njgX2f`R#sAcodYG?cS&kE`t*Y1G}?8HgdXd%riWkql&Y2LUJuOC ztDgi~KebPOn;Ptsfa5}c?XGHujhP-w>QA^4(~Gss=k3t*n9p!tSa&LirTXwiLI~vL zKx2QzKlm{ZLSaSf{H3daArw~ke&U3cUBQ!z+(NccSe-yi5?0zc%d=OTPtU||Z7q}q zr;s;U;1-Uhd(YEMtWg#eh=51!t`yc5p$IUU)x8}CT0=tA8MNK(X>Nr(^7o|hjHIiV z%o`(9tRazPuT*z4H|pl+_(*noRS}maIl7yA35I>1 z6zG}^U@A01yVSSz=<)5sl|TH200?*x3Wmk*w+RMGk{*JgyE=PQz}L4bHGNKd7Vt=s zG+K^F9>CF<$0O(c6JS%Zakm+dZ1Jw@_TrILo7beLj5eEPnn5B<*c9W})ScTA#I$lb(^# zvjwr8;G9m*_QMOcnS;p-Koua1AnKs(|ww{kXC2$TmJxTv`L0=uOkw9*3s%rds_YE za$riup1Rd&b?j2n6k0?}j!tTX5`D=vP^+-qWaP?<%*6&Sq)tBKiL~lc5$g?sp!G&4 zDT3K_MR7h)#N}VZkm zy|EatFVerx3Qy3&yG50fcRMl{uhJ*SsOOlf@ znsFW9oo(sEMhS|CUO?Vm(!!ct6vF`-zaFL2u|TBA?+KQ=*xhK^42#{>B0kXD40n~K zQ*8;VYtqWCJ`gCSUL~pLHaGlWPOaNtfZx3Jie=~5VvJJk=J?P~MOPJCwlV|PeCX}6 zd<~ZM{WNOV3zZ-w$f6PwoD^_~5NM6z%w%HMK~JLfMnN>)hUQj3FVf^yZLzF7RtML{_op`g$QpY?7 zjbj{+?~6Mf`GdupaY54uAi9o|8tfGY=^G4^g(ZK1LTWK>8Ot^er_M$+#~TQ|JE<`7Nk%X zESvB5e<)%9XM$Q~kzjr7;A>yTv#izS>@7`qsK{-r@EmUN~Xh%9n#)@O% znlkyoMrLA{0A;>@I)J7vhOdwOk?%38Hp(33az8*?l%(A z8)Rz~id5?9<~k9XrH*R=VpH>xv66<^e*XcTrDA_b89g_>rdow=uH{Uh`2)U=o9hP; z&=9l`y15>rk$f6fULqgAQO>;C1s+US@h5M8P?{{HiA#W0#!Vk2A;UOTpl4r~akCSx ziYE9nw5JK%<7gg{iJjhDNE5q~H<~!y8Y?Y&NFy(#i8k}bn;G7{v)H@^#0FD-ttew} zFmx=pDC3Rk(5p;mFiR#&dr@xkc?zliNh@j&0e|RB5skA6bxO$g6wuw8Zm%hiG+NSKQs6|IY@7vj7Yo9-(@6!1+68R6i5@ z;1V}i<_l|dl*po)AEuZwy$cj`_pzZFrQIA29NUZYugnd5r}-C?B2&1Sbmn-Sf6d+s zvNkW8)Au5W?0%z`$TY7ZU12P3ELQcn@M;T@>JQ%o^i*uw4MyF!z9OP@)0nqiA7y;V z>K0lmmM_;M#>?ue9P+E1}ONhjV7X_FUQ-DYIK1wVoVEsS!#H>$)<=sM2s3vg}g(5Hg-jku!;Z( z_r%!ydQaT9 zfK)34p(4Slnn{G9i*C#011Y!dB=SqNUM>qhw}U?}L*_}?M99gyg0vo4PXk{aLuWVr%1IE7K@vn` z2qnm3t70pCH*>^Iil~^nwJ!GEqNGrcIEELo=Nb5#XLV+)NlD?Q%1{_sp(7+N-g2P~ z-Bq&lb4#B3P;TeQCGU;tz6mW$6UqH6xSx?(WQB*BnO*0l<55Jzcz1U?~2OE)YH{XF`8UA{sHgu9vYGxmOKiba`X( zFxtzPLCVYcN=0Vg<@AlZ(wwOeMw*?!5`O!bAUB28*Xa%9WfxC~&!r`2Qab2zdiz#6 zi|^o%77n7n;f*pAZ5c5Tf9H}+?Aw&!+z(n$a^I#^*;c;nLdvq1p!?zM!RZ_11l{FJ zoS=J^G6r)7*+M}#nARk>UIAEV4?5j{ZYFm21%)#1JLFBqRZGUDO8Xi$7l=0;W|f-d z5{IEs(J;@QZV_{nv0W&V|C1a|wv-Mctt_S>t}2HCg3;d=PhLvD(| z(y2ZYc1G465m;N{=XfUj&+{Pq)J_(>ym7O?cfJUOqhYE7UpHDh)jT0+*kGHzbQIbh zW(x+f+f=*axndCPN5*uz4-9D-iE+!_r(-j*!^b(})rSWlgTkFkHge_3$0g6rFZvbN zuX_FB7>z!|#jh&;YT(CE(y^rblb+wxIYL8Bfa>$oXzFvYI61N6d~X=h@ZmIhOjXDD zp&eK3@8p_j+iY}!#9_u+Vo9Ci(my8m-upDU{%C0`a+3E4lu!fVvc;Pskyz|n6E06` z3tPk|Po-!nT!mIcNh`E-;XIWL(|IbZs8e9pOtmwI@>B{0c`DTm9sT?sHSK9wB$kN< z%v8RFQCJq5^v- zUkr?Y!-;_d?VxJpWU{$#W$%0oXe0&{6`U^yPR_(mJ-1K{>_Xnez*W{*>6bqj$_vB* zh!BsMl>@%pXW&P$P}thvitRBE(i@22Kz>8;*!5Db=T|hyr^uF26I()%!35E03$+tT z9D1bUpeageUEGL|z0(&f_QGv8w^clBzonU}|BTPXm63>(0>m_Jt9Z|6YG9gw@teIS zA|by-#5_UUvaQsI`Z8`W42G@b2(vx1S;v!UsXNja9X!KdnE(Z;QVS0mR6Sfeg`fId zQR|nHXxoKkji?h0p7g%E)fdmj0A6ED0uPm%(aHC%S>#R$csL$FZ!IKrhT|e zi~DV}+30>32;RdflN21P6nqcWIB8>*#*g4F(K|$Cm0LQ)pXDGmd{AyF^(=LQTehZP zk(5=RvSBrLNg2VT>C*5u41+Z!9q_9>)7D8MQO6tq;-~D!8lnF^%M`5KjI!`dzoJJt z=AW^2a>c`zwpH9sDyvvCqV=MhmLqT`X)qi?p-q2%3VfM91^!9ir@$wiB~9V{Q7?ew zJTtZc0<6ixtIwUtJ-PP#wJs)t$twe&3^=m?FEpdJeEhrla@_Lq*NTrw#eOr<#O(1F zB?hPGtsNJgV-mKZxM@@(C5l*|RpZf}>MdL~PN#`{d8)kRDQ)HC>5ek7cH@tin?hT# z;5V4XCxs&%GEC;<4S!&w(0Xwj0UMcg|j`{M`P`Lizc@8N4i6>*eQf@BAwH zdGL?cB|k5{_W#Mx|E2PC;x7M5`FZqD)<=FeLT>+0ey*?ll!TW2oG!ueC4ynC@^ffI zPJT`X$NvfW`Gv8*$$qiC8jVH`+>fbkt*FvoA0ue^5o|&r+)+aIpD|n z@^cJL77ET^p5_Fn)L{RnbeX7m!CC{}4jEexcmWpL_u3%~i#eoJ5LpLDn=0Lb3H zS@_4xOqSZSNNj~_7aXA4WfBDauhb&-VSg(PQRf;J8cAj;`}?PctJJ&HHZM6l;eG#n z1+b?NR(E-(QJZfpGX6G=#4Tn7uWS)#BeA+uKeX3r?YjQi|AivO=_-|#BmY8ZDX9m3 z$5lSl{VuSSjuRNXyVOR|W|ocWc9NH+G|SSd6^uRAqJNcPio@xkr%hUT##!=_c z8)@#ZacFi~4xXmd)|x802ZVh?y}1V_d>?Glow|^RVCfD{HY;xlm&aw}1rvbhgC&i_{;yArkXwx?YA zo0JnT&FrkrAN98voIH5J<|wj=Y@s~3jcHnoKkCmX7RrL3k~dkfo0A1i(>2h7h3LBd zQOiD_Xr z5_uqBZ7c?ib@`)OR1aovv~;rFSfh1Iy-gktPPLamZuU)>6LI`(9w8_NncPsVU{h2r zsDoP{&38jtBcU5g(C6{_Gh?9o+$j~T`x3c}7~KCxHB{cdikI5k2y)NjD$3YLmJ-B2cb^CA@qn5*G6xuFDt zd=6@cj<&x=O*=PI82>CLDgnwTC6+R=)5Js|w!jS~4^;Z99P?{7gQsRWCSN%+%luY; z{S&Ty3FVxZW6H8#X`NTqaSLgg&>{#HI0?{X-lND%WD6z0k4|tBV4TK~j08WWf`!_R zhRq4JTS9?_+FfdS>5kJ7G`uI7PhOKLR$ zfF2lDZQfmcGKoUtNbRqTQ6xWmA@&K{(fZ~+o=!!EmUsI@ME*eF0koBg4LPn*NPT)N z;7g#LZ{scflcuDXkQyr9FBdTS5hpbODj}srhZ9m&JkXV!3ANNm_8O%Bw7$ z>YYeFco36ll?`~Rm&lW|9|;boSE2%qa`Kh8oOf02u&M|=X&VsCw?aA8GCTi zFTb??kTH&g+aI*vZEEu`rYA1BMif~kij2#XXeXD;Xt5|QRl@@5t#7Vo+)jGa~i ztelNEg>bg?ZDC9sh@X2*7^empYB9L?5iT9#mZ3d`TetUMZ$d^7(X)k>+g%O7OVDayqK3GK=^D&QX4o11w)c#s5!e{CWh3#bWCTzzzi}3Ut zHMw8IB76g+N=oD`!lw=CvIwIWI=NIM!Pj$#a+{-_Tw3Q2|5)VD;gv34(p&&AYY@v`i9g2~V zxCkQ1b0amM!ujb@g+k&S@+Ks%pfS6aB(m=ficIfUH~-Mwu?xg9ZCN-pUxND`SF-pm z%(*hch=;z_WDL7@!6)ZA6~n&enYmLDiR67|Ny@z_2azJPr<2O2=v0bG@1hH~H)r|c zue*1trnGq}ORpZ?+Lz|E^NzjDM&`Rb;m}-v?f9u9Q#DF^#4WMsRHJ7NR)>p7Ek(0i z>b|w;&R$TdlS0V00rH&1&-B$I$^r@2$OQfTIw!#+zp{0J$?o z$Ha@;C^aR`%C?cb&IbqUA@JkZ(3xNmo zHwK&CC3EpiZJjq&OyFWlHkf~=S`b|esfbXx7ZHjWg=iy2rc`te{%2B*(&?{9_o)hx z8hE6-bZOY$=F?=rur5%=W+WG=a#uon_lrn#KR#>tHtj&0{dK1+$4Wtj=B|ZO zDIgm@c^iJ-Caur_a2md*)P`K?xuDW>0ekB5?xYxF=#AjXv zU~XNRinMn)?ks~-hj||u@mbZM%!U(Fu@$G7X1POgQX;N`z`LyvGquuaUPwhNco$?% zflldpHsjW7U0Y$e-5bn%z8+CtdW7b3=IPEdPxo-m5gPOXo_~X`x-e~W6pLedvhybkt*^2hq1bh#QYD3B5d$KoT>{w zk_TpDs}IqStpDMN=eX+ueAWBg9-abI-v99QSNI=hgjN52|HA_Z7izo9$eXsi#Q7hN zYSrBLG>O;Ye^@ZVnZ!N)4^uP&Oxb_W|8QE1Bhz*JA6g8K|DgY27p@kP6vesVzXLAQ z%=;hq1f7aR%=15FpPED)Abi8@QIs(Q2vQl-0F0!3?qsn>(g+uThTp*!GK>aT}8AaprM zex)U75jJJIu_aZSzClTTA3w4_CT2g$Hw8;_J^GN#;e1>U#L@rchhoeFxNl*E-KHTg z#41Ttybzy}VlaG8vSu$t`AyynaX(1XOiCdH@7!Tpsfyq0;fd&f5U(c96LBuBtZ<%) z7iAKQWAH@$O~0}F<6u?)ki;JwXZoF(RHT!edZqtmQ-H1$9uhRM6BW>&D(&+#Cr`~2 zp_vJ-{>xo=YxG3aP_IBr<26tbo(O><{jH|x?1PDFo(sIldQZe)8t&z{>XLXrQNA4Fog9Wevk7+%&eu*34SZD zygloQ_)=)c6LIW!gu2iZ@qsTrkkYItVr~0Vhdt=D!ygS1k-f+kYKKp0Z7tr2eQF9t z@9G12S#@`pm6|Gj<;pdQ-b!g^*{kOIEi+=k3_~ABju`JmZ_XQWJN3jZHNiEfI4M<= z^+v>b=B3nRAX!7abhd_J_Z%vzE%Qda+!t@e{%XCzmZ$Z|>z6w*oDiUe@zPxej(H`L-k`c_f|@Sapz30V@=ZhKd$|~z z5TEHQB}1JgkYyZfcdIi2kK5I;KkZui``$D>fbvXi?C{(M)tdIF5{zB;q2HexB2*OE zhbx)$Jo_-wMg_AE{r=Q}6qtSZ*8cjDwGW@)tk6EZ1MIEm{?x><>c4Lv-n?I-kUD|9 z2`RrnwZ~;5jIUuI&isKBQa$a%M)3UKwGV4A5vX6aKh|OEE5WCS|6lG;jRMGUf2zef0E?ToKecU# zpvPJZUb^u=wm-Eqd}12u*TeK9G!~@^)8@NnAErh9md>@r8;hp>&%6BJ-k;h)$i_14 zONwO}(L~I9yL{gJWr>ZROKkL_#%uditJ}O~IL*&tgQU)aY55-Mp%i6(6%u-R9_ba| z6-Ss=cnmEdIoD%<>MzERIB5h{Dssb>;x;zbEL%O|m%>YIP*+& z8m&TUz#hW7QANG?r(U|)32P(w{zmSb({N9#aBr(tI&-X9g_r57vqG!zDtM&ODtwcP zUxQWHYkz7W_1rxQaFEUa#;9uTPyJB1&9e$Oo07E(KNzYVAQc3h<7Gc+Ceb%-=wV=@n-ZfZ+l_Gi8 z%{82VH*)`9zdzN$oP_&R$hzeWpt#xgr~aX_U>iPqkl&xWk`bAp>TB<;X@6?Y&H2*6 zun~GLMX!0%AlNH39Zkml?=c-k{OjJII=ET$pWUBYVICsq1V=~Qf48V8HtR5xNhfH3 z9h&O3KeZ4XuE}_;qWd25$gNI$9kQ$aftoJZpK7JieB)91UdH1Z_owDzJj$7%h1Sc}i^?WDs$^pf2l?(SRRKClh< zER+r}4&h}N-l@MUC;Mqg z$5`P&P6l!^*)}q)-K((2()TMaND)vJX^sz-eq#jKf056dojfK?srs=yfjJeMeW=m> zX*Y{FWjTQS>{a@2fIHLsP2Urm%boX}{U@3(Ao|g|Dwmxk+u5V>W5>DX!mIRe7wwer z){|xY$;6a5Ydc4MxVUkLrLX5tsNmfG>S%@JbwXny5g!ZWB4WFhI2AcS11TWlzO*jF z)Q8&gcUL(iUb{yj5pP7^i1>Bq^jKo^T|mS{Dpd)gW$=tSJ<3TTKj;CJjyc_-w2~S% zv{95k$k;(f=j0=#;?9(TgMUyoBcW<4&OS6TmCo4>%F}X8l5=zVN(8xFCeObex|NR%r55&Aury5Dh?FLb{P{2m`s zrgu$Ez;M$|^!ZB}))8?wN%h!znqcW<`+}sloSaceM7`S0A2;`#e@Ck8ZgbBd7T~v$ z6}B=>)FqGPl(qK-1B6+y@JyE)VNcVHSjrRDsDe_+)GO2a=>|5Hl~7qz8!hX{|3~p@+Op&03Kb(*4Te+1S{Wa2?cM>=QY9%cMsD{pCS>l~ zU2EqJ)c_x6)JzMp!AUom8&`~{RIx&Go{DYXtyy0jjP<_-TU z+6X-~PsAPJ~u5Ik?5Ey3d%%^CgM(P+NxQC_2< z_1xy&e4V^pm^*o?DGN@%$tl_QzRerXTDS5u+nkb}QJ!avBed*$H^n3WaN+;P8=>G$3*Nw)<$-9Nn+Sa?GSzfT}d2n%1a{Igc*e&@2Yx{**BBm4{ACY zuzsZsH`Q7KJmQw+^b|ZePI~CfiZW)08&U1faQ8Vkg}zn_R*U3qcq_My&$3M+|#E+7{3c`=o;l<@34ZO+Mdcqbn^kDQEI| z4_@#$jyC2jj40OyHsr1;GDzwjB(-yeHMT_WKAAfU@8ox(6lJ)P8D}~vnt!J)A14t> zt-d39_C}MezD7fIb9XY`ItpcMFm+iU zW|OWRjln%#HV`zLSV`Uc8D*cJ%xs#20ocgD!oKF+MON06RV3zMsq(#c^u+<$9sQ?u zTLSV7Z^I4bW{cz2M6#D3gt}j_>mwEilnWra4g;vSAo$iGB@rW9Crx;2xmAl_{OL#^xh!Z?t%)rJl|%L$HA6ePR%LesV9NY1e{#~3vU zdK`R0&@rKvDl2XtnMgWiT_?!IOy!iDH_=j}-AVaS9iNckFZz(b45ZEr)AR(4E`0iEdEsKw1k3KL`X zyu+R8P^Ux53mG~}p-$zA5iYnV7Zt7^&EE4pVlK{vfYQTgJvpOdZz`JvxrM^^H<}LX z;6$Y4sNy%N!p~kn1&^I0SJVvmrER{avT||snod>Jz<8-B{i3~gU&SiTbuzN)Er#i+ zC9yIkhUvyl)Ow_!mFFeQ^nx{m%8VnP$~_7)=EY9r!R%NP%{ zSk^FqF^r|Ku6ah1AS>v<|1`$o!%oa3Bb&*RNS1DHNo)%xMjPWDZERxYIod$G4&`3E z3cXZF9nH4U5Vx_dHwzkNBv5oTIt6s4chK6HInzo6%AGpJpqpk%>{cZPUCKe1vho~s zqTC$>+Y`*A{j`duY%pfI;9GpK-QdWLFkK-gXC>i`#>1!*EsI=n6Ie)%tk_n_ z6a!=#A{n_*&oC$x2%8ekSNpuEh&OVI9wc+&F+T%e>hHGD=&gLv2;2j`r$aZ$RK>zxhm$KwWf zwCz2EC{lc*s;+rvK2bBwOtgLUmNp|Fs-V}58~`d3DAN2Hapt*DT$9*ucm*~1WD6M1 z#D)R@I2+QY#4A&-ovaB?9sebIq>ziF?KeYC-vDvO$?4x9XoNUA78N!dTGl+)bF*W; zXmcBD!y3o>Jwe}Ntj*s<+v~e8W74`btghoNP*hCA(YCh$G!u($Z%p(4WT9xy;J&VB zHZ?DAVc@=`f*w;ds^g!TSSO81#TCv@sZo(9^XlC)8MX$b2#T90D4I-_h4pQeA_7iS zW>=p%Pnmsv=JNdT^hto96&7bp&1U%vSkn6XLLxbQOCZX`suO`D2}q*gMqovpShoo)FkfwPbYb;I6@PV1^| zo8NTY$d3E0Et#u}c_j07DXFf(+6wnka?m>iZL$1uBJ*r!QQfd*&Hvy=<&jhq2u-oN zdGGg`12dp25Chzy{cz6pmUte(Ra9d4oG+M)?{LTq1oP)8}jKlq1^NoGeo^6F{>18IV%-6 znLQkS@$~{9?M3 z5abGrMm&{J$UtL-5J->XA#d;`t|!6$L~7*Iaieccb1k|aOFoCLY5r-#Kb0sJ`YH{L z*nmng#CuwF(6u!zVXfZOs))QH{kho^>n4x!?Rn&}`g@SaDIyOBW%Q&$K_Ad1wqWUaT9+a8sEh54I)mX`%@s4-^R_+gdw=Bot3x(%c^%=+*K(jkI- zByi^&(q>r!zm#Go)(!UoxC%LPt#zmR?lP+@xAvA5rh#-?%CR@4>sov7wv{L!WPzki zY&&u}bt1M;{{piOCfnc899jZY7LyGng~_V)%$RJ>018r(T~v@P>rH2FN?0-Fh%6Jk z#y|-99@@*z&j2GGJceIyezXLRJNs+4$pKGcse0U6p1@KG2cP0RdhvnO#Hf^8bPajK zjU%YNw6tiX!kF#>s@j&-wbAzNnetJdZ$cLds_?=sn!_!#l_=j7i*vs@wj#5r_L1VS z%k)n413;6RCD_Ss>`4x~Ertf>kUm=5&&wiSkkMU~-dzFQZggu|#vgv$03-CCYibjW zAvX@jUZ-nur*S3uPLHUNduNeHfk)fE4eo`tdXXGZF0e^=4JdDO!>KImfQD?2sXtQ< z^4x?4c{QlK69=ek@><*rP^teo=SabuIAEdZizd~S=xnj?QeCNuz(2P!R=S8;Yf99P z<1NkTt6q3RecPx%RHlyO_!T};n+-*-ng_l`4a?-;UgZg2MvNqk0 z)LPFHZ6>zk09?3BY0Q5wsk;o`)7Hr#En(RK>X@HsonIBM#pX;`zp+2^7F#mFr{jEk zvx~+IiT*l9*v-`@%Q{9>YU0&+qN8N;ci?2cCX(e+SfG7n!?f~_?RjEYdTlAf(u zqpT||W0Dh@*skiDc*8MDy!rqBSz37YSW%zwjdU+7YI!AgRp+VU)2>!8-gsC#3Msq$ zav2XeqxNJL62tt0zfEUC#aIbGDP7ijRU8=`6ScKIhdVm<^8<4};b8Ec18nFr|$G#XCBpnyO1Las3+lAVJcV(#RQ}zQ6R+f{a+q98o=&j zq%9K>UrpN>DxscWlX18M!K-*ESbg5=3^sNXE1N+F3GXx`_3C7cw64Sx`$Pa3Tywd5 zQ+9N4_XN3AQ2^|L#1HQHBz?y}r3V}nz_nGL)oMr`!H4W+Qj1bC*ih1kitTx2Cf2w) z5QsFdE_IIu<0#B7$KOOBQGFDMDJRWu&U|02R@n;Jf^QW$qA>=qgw|NT&KuS7a&YrC zz2vjLLAeI`{HIOVA)hg$SHeS?*Z}^zp*c*45T(Bmt)!}N9xvMR6kKseZwijK?Mq~c zs+df~;rY>C!m3ksIW6~NlP_Oi%bCF>Qa&dtFIXmBZGh!0A1`l~mj1i)W?**gN$oc$ z4`KWCkSfI|F=bCmGqGzW{sOM29>?b)PGPAhp#Q&%PY@N}0x}T&e zSPl)drBH!ni6E76BnWMP40K6tvz1h}Iq*l+&9C}=`DI1l4EZibJQ)zme3F=?t9-!eFB_9Up60 z!TyK?CnfeSaw~pG>`ZKLXkvw%h~lPFy{pj%!<$8*p{$8gsrJ$0k&*!>XQFK>&A%ub z77gw=dv(ShrZ2HD1Q%Chk0m>iyOJf^k(Yo;u$dOnc~DuB$>gZNUbDp`=OV5pIs}Km zFi+@qSsmd7N5`XVG}NmI-CkoU0!V33P3$iggZ%0NfMz{PR-B%PlEDZ?jZv`h{g3{* z9A1}`JvID;%QUNATReCO+TzL&c>q9?=%zKk*hKSYdZGqnvc7?R*s(pyU2W)%;5&$< zaF*4KaL>ramnfJ=NxsQ!LpDzB+JcF%M$r}D5d$&_fhrq|lQCI=-2-ofA$DF8J{OYm zA=7}w=`Im-CAv!~^*Vh$Q&#l6lzJM+q&G>7G9H*f^sqAT0p7#l4n5ntJCiZBu(yWi zxal}?GXO~j$|)`hBZ*N)3VsX`LJapmfdTh+dWmfL)bIy;bh0m<;E+u}Nk8&zUSNZr zT#@pFZP4I^XrHh5`9{klkCkWJ)gfbsLq^%%KI-UhhqS>n+*%jLl2NS*Gh_R)$rYDa zd*p##jOQ4R`j+Q?OIcAVm9b;*laiMYMQ{oSDe{Q=X(VT(CT`VZKf_u6cR^eY}tHKhJ)z55*=*p4V@Cxv51m`Lx zI{Ib}2~Tgy(jwK75QkK`fiPHlOFuv^l+n$Xg@G52_(1jgtqR<-I&EJ!P7VKlbB^T9 z%nC*v1Z`a_ag!SURNm8IS3Q^xF=Uy!%`}!VnK55viPc}THd>@-rj1sVXa*v`S3$B2 z`p-^Bk^rk<&s{YaJw|)nH<3@WOVYNEObs91HuLaL~BCMcU7b!Ng!DoF|uF%IhTT@t;`4?^+H3TALnHYHpBGvLzve6o{DwBr>ClK#p?Weh zEQN_Jg{etLrS8j$VdWFa-M7p%70pqbBC1yrFNYoQPDc2u(e#u>4)@u5mmTG^4K90x z&o+`BYVY$48yDeaA0eCtizQMxg%#oT`Kg(VHc?%K7tc{@nb_`MHW>)kWJ%bh zIuU^dJD>2C8ld}&rXtpCg{!^;z@KDw5sLY!EgmifoOi z^55jj7eYDN@>?mVrFfBfnij8iz4Y`n`A)PJRAU3iO3d=P09p$6W+^!;Is7N~>O_t- zWL^`XB>-waaUGJnKJqrMFYxt;suFEUpaiRqqT!@_BmMT`j26I1v**vxlV-0BMVfuG z!pyCO`467ZgXw5P_tGo*&+gE(lh_cUwLZgj)j=~@j&4%d@l5x(`J;JspCu3H@vP6A z?0b{X7%D{{`<-m4#is{}{19T|J*c@`jpWqmH0Ga;0$}Lgln1pP%epU7`baT$WcMlV zCr_38KDqP_t|ez>c3-Tb4p*c$nv}oW<+G5S_I-zc@qDnwv4HgmWa}r%$n2@(zLLz^ zK5No0zH=c|X(so@I>E?rB@(B>Duyg~_>CR_=2hkFlY>33_-5ctoq=)0F%Bl{zU4&C zW4KViR+aanGN)O1Lw>IdDN5gy8C3BpPW9ddgy$RJvTHZ`K{ zx{u~1mihxbp5|{{YmKxHLr_YU9uLyt*ap4Ml#BY}a$@kXInF z5u8IoPF(zwHq>HIaUo2ZV>$p+%9xMZwAZsi2l;L! zQZzLd5d##JMa^4x??in=`#`tnB5h|H=_Me`XqLX$Yx9S)+} zRy2?5K9*PIAL3{ePNMGplqG)GNd8?hX-W^BLY z272SzN$}2l=MmC=3<31lCT1w$FN6w2P zTc3%a#AcA)08iOKl@Y5ynN~BgM*+yf4lhcvCptdIsNH@~nZa!pEo$BywA=BU z`|*K{QT9(p_Bq#`=TUr?ULni*fkg5OJI}LmCbkn*IYO2gl^V}s3Sz$dQqa~V6xyVf zlI^}21<)Tz%pLTa`)id~{vY!G1y1U!{^Q44U|~`4v#6u%g z5>&jC7sNZt43Q=*?5;A7qf}Z}R+Ls&R#t|W%oagFEyeJH+BXm{%s85;g?OFc^YuQT z&s=sF#OmMw_jvqxJlOf1^Esb$-sk;(pZDcl-UqDMfS=Dp=H~(=uZ9JhNJ_JlA90Wh zqk>fa0^4->^mexjskSutU@Q>&8I`$<0&6)x>eWuuSu*{zju)$6;S#R;O&5 z(yd`i;|CK6l~bx^b8X=Rbz!6Zx-&F1)XOfzLY0#JpsVy|Ds{&~SRM<=>b3UAqscI9 z;BHq&9&ezN5G=cEF0?0~WI^C+@Sv`Pm0Cc+;>m@!CNX6&_)phN6Qy#Y+j)@--DH2)^Tu(vf8NbbyA5Ml zM-rcc_)$j+@rZa?bG44Qhw`Q4?bByE-hP7e6dp^`&c@6S&Zx&JOM*=zO&y~?jfgGxGC;il=;#+FE~cTL=j zEL^R(n8E3BUU%?KV4-#*~pnVy2otl#V}r3~ELm;TTvot3|ae2GWwg zO<4Q5&=A~6KKl;;1!Li}3qy9;e7$>Mp+JqmBis0;bq78VoX6oyag8`S^O6$&G!5Xh z(p~Z3daFA7Zj6gyj}7`_cjHDAAEux9zBU5+hy!5)marXV@nLFCm5UVxuK8Dfx`M`( zZX>M;%PN7Fa6`|X+>3aZKRMI8lu!W+kRiqc^Td%g_g5OZBSUK<&9Z@a3?cPiga z&7UBRDr3h>6b-gdHU^&vLP|2kttFgihYB(942gunxzGZ5MrzuLp5^aoRBl1^h~@oL zu`5KNChF2ZX!lQ(@{)Pn$9{~P#+ZjR=zgAwow~zJ?0on|i5(w#Db5cCV&?){WI1Ug zm6gQ+!(R#V&!{aW8}jPEKUvDCUP7kzy~#aT+jZLxcY zHVB-);yng~M)R*Il=YA&RFexW=C9R)9^0QcYOafmH|zSul1S-X1aN> z*?Ij!-6=*z(Gne!8EHaoJ)QJvS58xUtj>iVCztgD``d$TUte?kPxG5q;p73~)HQ?C z--~j3yIWao|8SBsw`klwP{Nf(2ezO22Nkj>p2MQunbibnWL|}h*ktoY(q=w*;e{)d zp!4aA-xU%#_L@=8npajS+-WIwU%hv)vF#e!t~+tTBs%PVs?ooua6*d)dhv+@Z?jHm*EifR@N%J5U|+X<#YTryklQU` z==fjpttr0!GerS0Xrk_nS~nEyA9R%@s6?g?pBIK5K4dO~Ngf2iaP$?*0{T99wxjRw zT_^4!S*RceeS1+a^xezRcV0a^aM&i41cMyQx~v%eGOJVND-Lz|uNVHq0sb*}a4W41 zJCXH-7~SU$Vfrp!1r)f=JsSm#SvUx6EMa6w?CMCMP6Q;VJpuq+Fe|m=De?c$9|Ex(J@xSuTe*^!g^)JSMf-1!S(C)MFe;e8( z&;P(C{MX53NR{6qQ1cZi);A!Zsx6!TH&k2Gfm9^^^hN8hsHB5xlUB>HVj8G6 zGq^0CfF?*ZDuW^Z{Hcz_?_<=_fi{vwBxZ;oLj4-zQ9f!+&aY(C{G34)vc=C!`HGP0 z7n5Oud3wE$=aM`|UQ-h|Mh~ogmbkX)flEo|LXSa!=8-jAQc~BA*M!7DBb(2$St3E- zG~7=^6#a=`G=7#z0%3Tb1{_f|h)SRv7i)DofDswhXk;YXe9PXO9XdF`Y!X9P_WA;Y z{a6_41<{fDDlIiMFR14Blvikzo_%Gg-?NtYm658OrHoXc2K^*}@fPEqbl*cR(5&ouAcwswLk^K0I-yW}~lFif5GsvelH3&6^SUVIIc_*@A3m7{%v z4xYLO-{r)0IlYm-wsV$1=@^r72 zDR!g-)one@DDsqkiYT(6ri3DwvrfDd6v;fTU9Py3^62!B zA@FFia!8fWt<{kBcjs}x)-*LAT3cqL`hl_js15?2IE!g_aNszj)#{W~`rI*3zSU0y z-EoXR)*pcy>QzPFpHGc?Wq%dxbLt)zP_$>!QBj4iS>Jsf@B}=f@B*% z{NF3$E!SQy^psM#LWe$eF~7v23SKPpU+l&U=f?$qJL-?Cr#j(M3kAXKc_d4P%VSg~ z;bQAO*bnSp?>c9q+qo_;>9n`CwB`f@CMYVM{4GFD+* z{(>9?19PX`xg^82D4I?uUQ-{T_%l??-a^ZNTeTeL>$G~1_mBPs)$;fkjR_~^2z!z0 zGqk~H!XmF}$)mnbYQaU$Wu{2AIC@Wqwt+Ia0k~u@tabFBBQOj0 z0?OnCXdrqYp^u<ph5&l>e?9}r3ImMmNL`7xkDkIaNbn)b`917Q+^RV7*nqQ`_3`toMLqWMqr39 z@8h_#6JKVn0cgJDf{l(Zl_fm5zR8Hqd-m0ORv+7G3@3d>-}a{Lk4#mW);jfI$Ch#> zkDhF7dGE)@mfvH`f?=u1l>K0XnX;eHmAt9S_}iC(4^xGhqQ1acUMu&T?`9#N}&p3N$Ey+Sfa%qmCezB;gihX;hxrRb!??jxvb2S-e@9gt`?d_e7e=fFn zUI6>f-r4=L?44zP(fBdO@;htq90~(vrT{C}i^WM3oGr$&#JxLQ1nJYPpCVm3wO@&@ z{H?LZPFpXz(C_GV=5OM$`}w1PP2q%b!z+6^p6tX3*Elg7<}JSdk8GG!-HRxH!~eHm z3e1!1RX-NWeUIxmdGix$u6>~Pdf6!_A8K~WKmN8OJ0*6SsIU`8Wd8E(?dg+_HjFC9 z6MmEtGeF^3QhmDWr-(qm-LHf|U)xDzCL*)4)R@^Oksf%usq&v4P-4t1nxy7K-9E4Z z`{r>r&I-}noH26(i29F>naB5}?owmsU(l|-F|(Hy>vO{{X3Si&Uk77m2F%lmF>`{9 znG=hQnMx`T=WUj*N@2{LzN(!ulX=m-Xy8R>{_jL5EVT56#Jz)Lk+6{eOU3xVv4_Qd zk#3p*k=gR2*R}iOe?7T7bC2x~zBY{pP43QChyUAV$~W?wi1^3-3TDc|5o51A*}V;u zr-u3LRb-}QUidf6l=-`hmkMUe-BhB{T4LVLkeR~n;3AFCsXll<>`2^A@)`e^WD$ww z|5Cg3!Q_HIn4>r-rVq5gLjErq&i{SBy*_y7?v3XE&VmB?zo6gggND!22S4$PeqR4~ zy+g)Mh_1|Hy42A0Cz%E~X1)tNx4+-Hzy-cQ8L2+U>!(OY?MB=VnLPid3w%;%F7Ta| z+vVWA`uG(n{&&@f)D-1;!P~rkV{~RvxCD3$kpyTT(zZ~k1?^0j52RQhT)kktS4fzsZco}4AuRfmdqhfs~ zbvN}fF4RGN90=t*Q6GCreH>7vKAwI?OcuDjE0jWg?AO*#ef->i(UljStqD#n|r%+XYa%c6h_Oe?z?-&|6GYP%n*C z(m}njtvZ*PSfXBv?k8uRw`X`n53luSqM-<^BPG$~m#d;9=2m&FUnljuG7C|mnU834 zL1i>Kvoeyx2$v-tNnOE?mA7WvzazW@S}4?|%UEyOxFe^GJ#O5%bq4%pfP5SRyC(H<=FGB=IfrOQ2K+4ThvP`eAJXd|FD?QIYh0g#(6 z##Y!g5EV{gTOpL@N{Rb<&00leS^PlJx{3`C%;air+Ln8`^`U!>1=|j1r{+QzKgmWX z^~T@mbQEb-J_F%1*F>fry%|Ia3)su5J?fqDa(^tFXbAs4=U$59<=iv5S&jQ5snaLp+RQsp8nvRa0Vvj{NlByNj|~dda96 zQw&>}ZTLHetyclIigvIG!;PuS>!ZV8Gx(mX^x^y0;|{)6-D}GTpcqbE!hLve8((xq zL|AN|+U6G3nA73563`~y! z=}$XMcPn6e^XiV6_O9E?=K;1qrDley;_N9GU8 zdH-2tzF~X^GB4*l@Gz#B%-`+fllehILFZ&%<;y%5o4_aYOM8ikmMj% z%oW+$fjsP}JcW<5FG~h8_x+lxL1=M+-f<>oz#f1qaLV~Yi`KC(cThTB^E)v3_J;eS zaUJ+T2B1V}*dOZO+SSL)vPYfxl&v{^aqn7Rgl2X%R_B$7mbL<45w?~PIhhX`nYmDIC8x|1k8ZE$i^q28 z`JebMns_7eY<<&TngS3B`c-!ev%It_+_TT>S5&MGA@ekT$1EOL>%-de*Z5h{#9M*b z{gW?tFQQhlim8;92ESCwaIA)6$a@R&Q+XXpT~_959*HG}IhS~=>BF+byRo0}6Yp8S ztc)r7eyOW+^-Z51;9Y+spEP~g%WIy?L#p?`AU4g(@>utF7)xO|Cd94eO-v2+jloZP z-H*`i686TVWne5`BN5yBmh~=-H9RAnaPtZ6lu@))Dch)Z)@$MoGhoxPBlA2w$C$$B z;cxa)Vd7AvI?Z?4(KJMKg+(h6~edwo_Rdrdn5ClO-SX{ z;*$mesq~ZW(bqLuon&gq~a0`CqTladE^nzMlkg?wxWJ9^l(-~rpfB? zTmLLW>W%c7LF=(|N+h?WPhw-@QSn>j@VBk?T3V-REVo=}oVC7DhBYiP5|(PXS1k2~ zaj6-(hNh3QI$2{cUn5GXif9n475Ga|#^_F9J+w`_n;pY{-@9?gaNEr&r8 z>C9gCp^dbw&K4MMlzA<8y`%X;{0-{}`?`DbC7UK^$=6^#7@vn~L$9?_Pf@W?)BwdO zflHDv_OObjMy=*;F0|Yweq@QeUE*3xy#J@X*X!=%ZGMxnY)2yOeVb4^xw7B+6D? zwO~kFWW@OD+51IO^Q&{AeGsuN7eMeFg?OmHPrNX zY|luE?w(xK*zUf6`y!J8m9`^_>5EZuW;=7CBPmxh8{n^h7taUSHVrvWvSUOvJ!oI9 zJycna=1R^(6w6#w_ro^Np#w{1w6*<_{-CK?YndkZ*`F(zJJ%)&BoW)2h=C8k4JMxV z<-i!@24fVMK=qlWXId%cKLEv^{m)9%CcoWqQZtGNkHpCP~bR`LPg9dPeOk}|UEFxHgKd1R@cNczs`)Z%mJmc4hw2qZIo13Y zQ$n-LPDpHyeXXG>S0;X#9cZxX6H*uY8tgrq;5|C*MVIad|1~- za`Ds$*{jk^*~q$KK+Sq>`PIA#dWe$ylk8&2s~;e# z6MY9-azEaByJnG$D>@e^2i*_<IIVq_-lCWcqvnqmc-M{MNkJCmHDYD(qgK%@E z%v+>|p+?R;MTal*w5Dm?;_kcT?QDimOLt18rsSGF#1p(o z&%K{T1$1fppx$fN6-trB`pCNUxW$;}BeA_7nRp)DlBiKn7EzV6ig54_qJJ`xm(6_Mnzcpq`*F*l@FeD7j*e=Ml*osc(wtr8p3cavT0(iwcw z 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