pycryptodome 4.2.0__tar.gz → 4.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/.github/workflows/codeql-analysis.yml +1 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/.github/workflows/integration.yml +30 -9
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/.github/workflows/wheels.yml +7 -3
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Changelog.rst +61 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/Makefile +1 -1
- pycryptodome-4.3.0/Doc/_static/scorer.js +29 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/conf.py +44 -1
- pycryptodome-4.3.0/Doc/index.rst +74 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/api.rst +4 -0
- pycryptodome-4.3.0/Doc/src/cipher/aes.rst +196 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/cipher.rst +11 -5
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/classic.rst +62 -17
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/modern.rst +98 -85
- pycryptodome-4.3.0/Doc/src/cipher/pkcs1_v1_5.rst +54 -0
- pycryptodome-4.3.0/Doc/src/examples.rst +32 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/features.rst +2 -1
- pycryptodome-4.3.0/Doc/src/guides/hashing.rst +118 -0
- pycryptodome-4.3.0/Doc/src/guides/index.rst +10 -0
- pycryptodome-4.3.0/Doc/src/guides/keys.rst +141 -0
- pycryptodome-4.3.0/Doc/src/guides/passwords.rst +169 -0
- pycryptodome-4.3.0/Doc/src/guides/public_key_encryption.rst +130 -0
- pycryptodome-4.3.0/Doc/src/guides/signatures.rst +125 -0
- pycryptodome-4.3.0/Doc/src/guides/symmetric.rst +203 -0
- pycryptodome-4.3.0/Doc/src/guides/tasks.rst.inc +34 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/turboshake.rst +2 -2
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/protocol/kdf.rst +2 -2
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/PKG-INFO +1 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/compiler_opt.py +153 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/AES.py +30 -17
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/ARC2.py +2 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/Blowfish.py +2 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/CAST.py +2 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/DES.py +2 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/DES3.py +2 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/PKCS1_v1_5.py +122 -29
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_mode_cbc.py +39 -41
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_mode_ccm.py +93 -93
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_mode_cfb.py +44 -46
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_mode_ctr.py +77 -79
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_mode_eax.py +86 -86
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_mode_ecb.py +28 -30
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_mode_gcm.py +107 -101
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_mode_kw.py +2 -2
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_mode_kwp.py +2 -2
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_mode_ocb.py +71 -71
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_mode_ofb.py +40 -42
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_mode_openpgp.py +26 -22
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_mode_siv.py +64 -64
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_pkcs1_oaep_decode.py +27 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/SHA224.py +6 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/SHA256.py +5 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/SHA384.py +13 -4
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/SHA512.py +13 -4
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Math/_IntegerBase.py +26 -4
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Math/_IntegerNat.py +70 -8
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/PublicKey/DSA.py +2 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/PublicKey/RSA.py +50 -6
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_AES.py +10 -4
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_ChaCha20.py +51 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_GCM.py +12 -6
- pycryptodome-4.3.0/lib/Crypto/SelfTest/Cipher/test_pkcs1_15.py +514 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/common.py +15 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_SHA224.py +9 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_SHA256.py +9 -0
- pycryptodome-4.3.0/lib/Crypto/SelfTest/Hash/test_SHA384.py +118 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_SHA512.py +69 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Math/test_Numbers.py +51 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_RSA.py +68 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Util/test_asn1.py +27 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Signature/DSS.py +1 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Signature/pkcs1_15.py +1 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Signature/pss.py +1 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Util/_cpu_features.py +42 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Util/asn1.py +11 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/__init__.py +1 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/pycryptodome.egg-info/PKG-INFO +1 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/pycryptodome.egg-info/SOURCES.txt +22 -0
- pycryptodome-4.3.0/requirements-test.txt +2 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/setup.py +33 -0
- pycryptodome-4.3.0/src/AES_armv8.c +344 -0
- pycryptodome-4.3.0/src/SHA224_armv8.c +17 -0
- pycryptodome-4.3.0/src/SHA256_armv8.c +17 -0
- pycryptodome-4.3.0/src/SHA384_armv8.c +17 -0
- pycryptodome-4.3.0/src/SHA512_armv8.c +17 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/Salsa20.c +3 -2
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/cpuid.c +119 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ec_common.c +8 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ed25519.c +5 -11
- pycryptodome-4.3.0/src/ghash_pmull.c +311 -0
- pycryptodome-4.3.0/src/hash_SHA2_compress_armv8.c +151 -0
- pycryptodome-4.3.0/src/hash_SHA2_compress_portable.c +172 -0
- pycryptodome-4.3.0/src/hash_SHA2_compress_shani.c +92 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/hash_SHA2_template.c +28 -290
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/k12.c +34 -10
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/keccak_x4_avx2.c +6 -0
- pycryptodome-4.3.0/src/keccak_x4_neon.c +299 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa_config.h +2 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa_fips202.h +18 -9
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem_config.h +2 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem_fips202.h +18 -9
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/nat.c +1 -4
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/nat.h +18 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/nat_ct.h +33 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/nat_mod.c +280 -64
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/pkcs1_decode.c +127 -17
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/pq_fips202.h +39 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/raw_ctr.c +66 -20
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/CMakeLists.txt +44 -1
- pycryptodome-4.3.0/src/test/test_aes_armv8.c +118 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_chacha20.c +1 -1
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_ec_common.c +3 -3
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_ghash.c +16 -2
- pycryptodome-4.3.0/src/test/test_keccak_x4.c +94 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_nat.c +107 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_nat_ct.c +23 -0
- pycryptodome-4.3.0/src/test/test_pkcs1.c +285 -0
- pycryptodome-4.3.0/src/test/test_pkcs1_ct.c +92 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_raw_ctr.c +8 -0
- pycryptodome-4.2.0/Doc/index.rst +0 -44
- pycryptodome-4.2.0/Doc/src/cipher/aes.rst +0 -42
- pycryptodome-4.2.0/Doc/src/cipher/pkcs1_v1_5.rst +0 -41
- pycryptodome-4.2.0/Doc/src/examples.rst +0 -241
- pycryptodome-4.2.0/lib/Crypto/SelfTest/Cipher/test_pkcs1_15.py +0 -259
- pycryptodome-4.2.0/lib/Crypto/SelfTest/Hash/test_SHA384.py +0 -58
- pycryptodome-4.2.0/requirements-test.txt +0 -2
- pycryptodome-4.2.0/src/test/test_pkcs1.c +0 -164
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/AUTHORS.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/Changelog.pycrypto +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/LEGAL/00INDEX +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/LEGAL/COPYRIGHT.pycrypto +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/LEGAL/copy/00INDEX +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/LEGAL/copy/LICENSE.orig +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/LEGAL/copy/LICENSE.python-2.2 +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/LEGAL/copy/stmts/Andrew_M_Kuchling.mbox +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/LEGAL/copy/stmts/Barry_A_Warsaw.mbox +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/LEGAL/copy/stmts/Jeethu_Rao.mbox +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/LEGAL/copy/stmts/Joris_Bontje.mbox +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/LEGAL/copy/stmts/Mark_Moraes.mbox +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/LEGAL/copy/stmts/Paul_Swartz.mbox +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/LEGAL/copy/stmts/Robey_Pointer.asc +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/LEGAL/copy/stmts/Wim_Lewis.asc +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/LEGAL/tsu-notify.mbox +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/_static/custom.css +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/_static/pycryptodome-favicon-32.png +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/_static/pycryptodome-favicon.svg +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/_static/pycryptodome-logo-dark.svg +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/_static/pycryptodome-logo-light.svg +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/_templates/base.html +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/make.bat +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/requirements-docs.txt +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/changelog.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/aead.png +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/aead.xml +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/arc2.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/arc4.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/blowfish.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/cast.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/chacha20.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/chacha20_poly1305.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/ctr_mode.png +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/ctr_mode.xml +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/des.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/des3.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/oaep.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/ocb_mode.png +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/ocb_mode.xml +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/salsa20.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/simple_mode.png +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/simple_mode.xml +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/siv.png +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/cipher/siv.xml +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/contribute_support.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/exceptions.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/faq.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/blake2b.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/blake2s.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/cmac.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/cshake128.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/cshake256.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/hash.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/hashing.png +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/hashing.xml +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/hmac.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/k12.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/keccak.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/kmac128.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/kmac256.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/md2.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/md4.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/md5.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/poly1305.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/ripemd160.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/sha1.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/sha224.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/sha256.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/sha384.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/sha3_224.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/sha3_256.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/sha3_384.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/sha3_512.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/sha512.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/shake128.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/shake256.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/tuplehash128.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/tuplehash256.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/xof.png +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/hash/xof.xml +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/installation.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/introduction.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/io/io.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/io/kdf_limits.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/io/pem.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/io/pkcs8.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/license.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/protocol/dh.png +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/protocol/dh.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/protocol/hpke.png +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/protocol/hpke.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/protocol/hpkeAUTH.png +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/protocol/hpkePSK.png +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/protocol/protocol.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/protocol/ss.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/public_key/dsa.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/public_key/ecc.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/public_key/elgamal.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/public_key/hybrid.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/public_key/mldsa.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/public_key/mlkem.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/public_key/public_key.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/public_key/rsa.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/random/random.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/signature/dsa.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/signature/eddsa.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/signature/mldsa.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/signature/pkcs1_pss.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/signature/pkcs1_v1_5.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/signature/signature.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/util/asn1.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/util/counter_be.png +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/util/counter_be.xml +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/util/counter_le.png +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/util/counter_le.xml +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/Doc/src/util/util.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/INSTALL.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/LICENSE.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/MANIFEST.in +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/README.rst +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/ARC4.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/ChaCha20.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/ChaCha20_Poly1305.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/PKCS1_OAEP.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/Salsa20.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_EKSBlowfish.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/_state_machine.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Cipher/oaep.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/BLAKE2b.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/BLAKE2s.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/CMAC.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/HMAC.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/KMAC128.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/KMAC256.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/KangarooTwelve.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/MD2.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/MD4.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/MD5.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/Poly1305.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/RIPEMD.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/RIPEMD160.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/SHA.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/SHA1.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/SHA3_224.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/SHA3_256.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/SHA3_384.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/SHA3_512.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/SHAKE128.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/SHAKE256.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/TupleHash128.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/TupleHash256.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/TurboSHAKE128.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/TurboSHAKE256.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/cSHAKE128.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/cSHAKE256.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Hash/keccak.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/IO/PEM.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/IO/PKCS8.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/IO/_PBES.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/IO/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Math/Numbers.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Math/Primality.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Math/_IntegerNative.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Math/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Protocol/DH.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Protocol/HPKE.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Protocol/KDF.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Protocol/SecretSharing.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Protocol/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/PublicKey/ECC.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/PublicKey/ElGamal.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/PublicKey/Hybrid.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/PublicKey/MLDSA.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/PublicKey/MLKEM.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/PublicKey/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/PublicKey/_curve.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/PublicKey/_ec_lib.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/PublicKey/_edwards.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/PublicKey/_montgomery.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/PublicKey/_nist_ecc.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/PublicKey/_openssh.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/PublicKey/_point.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Random/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Random/random.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/common.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_ARC2.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_ARC4.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_Blowfish.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_CAST.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_CBC.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_CCM.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_CFB.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_CTR.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_ChaCha20_Poly1305.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_DES.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_DES3.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_EAX.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_KW.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_OCB.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_OFB.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_OpenPGP.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_SIV.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_Salsa20.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_message_too_long.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_pkcs1_oaep.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Cipher/test_shared_objects.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_BLAKE2.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_CMAC.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_HMAC.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_KMAC.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_KangarooTwelve.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_MD2.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_MD4.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_MD5.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_Poly1305.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_RIPEMD160.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_SHA1.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_SHA3_224.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_SHA3_256.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_SHA3_384.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_SHA3_512.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_SHAKE.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_TupleHash.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_TurboSHAKE.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_cSHAKE.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_keccak.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_oneshot_digest.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Hash/test_shared_objects.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/IO/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/IO/test_PBES.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/IO/test_PKCS8.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Math/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Math/test_Primality.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Math/test_nat.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Protocol/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Protocol/test_HPKE.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Protocol/test_KDF.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Protocol/test_SecretSharing.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Protocol/test_ecdh.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Protocol/test_rfc1751.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_DSA.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_ECC_Curve25519.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_ECC_Curve448.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_ECC_Ed25519.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_ECC_Ed448.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_ECC_NIST.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_ElGamal.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_Hybrid.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_MLDSA.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_MLKEM.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_import_Curve25519.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_import_Curve448.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_import_DSA.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_import_ECC.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_import_MLDSA.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_import_MLKEM.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_import_RSA.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/PublicKey/test_import_passphrase.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Random/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Random/test_random.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Signature/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Signature/test_dss.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Signature/test_eddsa.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Signature/test_mldsa.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Signature/test_pkcs1_15.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Signature/test_pss.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Util/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Util/test_Counter.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Util/test_Padding.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Util/test_cpu_features.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Util/test_number.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Util/test_raw_api.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Util/test_rfc1751.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Util/test_strxor.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/Util/test_threads.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/__main__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/loader.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/plugin.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/SelfTest/st_common.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Signature/PKCS1_PSS.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Signature/PKCS1_v1_5.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Signature/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Signature/eddsa.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Signature/mldsa.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Util/Counter.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Util/Padding.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Util/RFC1751.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Util/__init__.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Util/_bytes.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Util/_file_system.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Util/_raw_api.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Util/_threads.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Util/number.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/Util/strxor.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/Crypto/py.typed +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/pycryptodome.egg-info/dependency_links.txt +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/pycryptodome.egg-info/requires.txt +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/lib/pycryptodome.egg-info/top_level.txt +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/pct-speedtest.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/pyproject.toml +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/setup.cfg +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/AES.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/AESNI.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ARC2.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ARC4.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/CAST.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/DES.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/DES3.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/MD2.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/MD4.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/MD5.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/RIPEMD160.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/SHA1.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/SHA224.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/SHA224_shani.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/SHA256.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/SHA256_shani.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/SHA384.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/SHA512.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/Salsa20_avx2_bmi2.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/blake2.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/blake2b.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/blake2s.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/block_base.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/block_common.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/blowfish.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/blowfish_eks.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/blowfish_init.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/cast5.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/chacha20.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/chacha20_avx2_bmi2.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/common.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/curve25519.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/curve25519.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/curve448.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/curve448.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/des_tables.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ec_common.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ec_field.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ec_nat.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ec_nat.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ec_nat_bmi2_adx.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ec_nat_module.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ec_special.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ed25519.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ed25519_perf.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ed25519_table.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ed448.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ed448.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/endianess.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/errors.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ghash_clmul.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/ghash_portable.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/k12_avx2_bmi2.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/keccak.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/keccak_avx2_bmi2.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/LICENSE +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/README.md +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/mldsa_native.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/mldsa_native.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/mldsa_native_config.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/cbmc.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/common.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/context.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/ct.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/ct.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/debug.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/debug.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/fips202/fips202.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/fips202/fips202.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/fips202/fips202x4.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/fips202/fips202x4.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/fips202/keccakf1600.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/fips202/keccakf1600.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/fips202/native/aarch64/src/keccakf1600_round_constants.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/fips202/native/armv81m/src/keccakf1600_round_constants.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/fips202/native/x86_64/src/keccakf1600_constants.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/packing.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/packing.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/params.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/poly.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/poly.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/poly_kl.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/poly_kl.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/polyvec.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/polyvec.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/polyvec_lazy.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/polyvec_lazy.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/randombytes.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/reduce.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/rounding.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/sign.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/sign.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/symmetric.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/sys.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa-native/src/zetas.inc +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mldsa_avx2_bmi2.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/LICENSE +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/README.md +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/mlkem_native.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/mlkem_native.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/mlkem_native_config.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/cbmc.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/common.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/compress.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/compress.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/context.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/debug.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/debug.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/fips202/fips202.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/fips202/fips202.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/fips202/fips202x4.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/fips202/fips202x4.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/fips202/keccakf1600.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/fips202/keccakf1600.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/fips202/native/aarch64/src/keccakf1600_round_constants.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/fips202/native/armv81m/src/keccak_f1600_x4_mve.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/fips202/native/armv81m/src/keccakf1600_round_constants.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/fips202/native/x86_64/src/keccakf1600_constants.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/indcpa.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/indcpa.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/kem.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/kem.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/params.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/poly.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/poly.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/poly_k.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/poly_k.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/randombytes.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/sampling.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/sampling.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/symmetric.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/sys.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/verify.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/verify.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem-native/src/zetas.inc +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mlkem_avx2_bmi2.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/mod25519.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/nat_bmi2_adx.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/nat_div.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/nat_gcd.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/nat_prime.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/nat_rows.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/poly1305.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/raw_cbc.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/raw_cfb.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/raw_ecb.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/raw_ocb.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/raw_ofb.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/salsa20_core.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/scrypt.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/siphash.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/sse2_unaligned.h +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/strxor.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/README.txt +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/common.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/ec_group_tests.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/make_tests_ladder_step.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/make_tests_mul_25519.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/make_tests_poly1305_accumulate.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/make_tests_poly1305_load_m.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/make_tests_poly1305_load_r.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/make_tests_poly1305_multiply.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/make_tests_poly1305_reduce.py +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_aesni.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_clmul.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_curve25519.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_curve25519_ct.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_curve448.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_des_ct.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_ec_nat.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_ec_nat_ct.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_ed25519.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_ed25519_ct.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_ed448.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_endianess.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_mod25519.c +0 -0
- {pycryptodome-4.2.0 → pycryptodome-4.3.0}/src/test/test_salsa20.c +0 -0
|
@@ -7,19 +7,19 @@ jobs:
|
|
|
7
7
|
runs-on: ${{ matrix.os }}
|
|
8
8
|
strategy:
|
|
9
9
|
matrix:
|
|
10
|
-
os: [ ubuntu-
|
|
10
|
+
os: [ ubuntu-24.04 ]
|
|
11
11
|
python-version: [ 3.9, "3.10", "3.11", "3.12", "3.13", "3.14", "3.15", "3.15t" ]
|
|
12
12
|
cffi: [ yes, no ]
|
|
13
13
|
include:
|
|
14
|
-
- os: ubuntu-
|
|
15
|
-
python-version: pypy3.9
|
|
16
|
-
cffi: yes
|
|
17
|
-
- os: ubuntu-latest
|
|
14
|
+
- os: ubuntu-24.04
|
|
18
15
|
python-version: pypy3.10
|
|
19
16
|
cffi: yes
|
|
20
|
-
- os: ubuntu-
|
|
17
|
+
- os: ubuntu-24.04
|
|
21
18
|
python-version: pypy3.11
|
|
22
19
|
cffi: yes
|
|
20
|
+
- os: ubuntu-24.04
|
|
21
|
+
python-version: pypy3.12
|
|
22
|
+
cffi: yes
|
|
23
23
|
env:
|
|
24
24
|
CFLAGS: "-Wconversion"
|
|
25
25
|
|
|
@@ -115,6 +115,9 @@ jobs:
|
|
|
115
115
|
PYCRYPTODOME_REQUIRE_SHA_NI: ${{ matrix.os == 'windows-latest' && '1' || '' }}
|
|
116
116
|
# Likewise for AVX2, BMI2 and ADX, when built with clang-cl
|
|
117
117
|
PYCRYPTODOME_REQUIRE_AVX2_BMI2: ${{ matrix.os == 'windows-latest' && '1' || '' }}
|
|
118
|
+
# The Windows ARM64 runners support the SHA-512 instructions of ARMv8.2:
|
|
119
|
+
# fail if they are not used (module not built, or CPU feature not detected)
|
|
120
|
+
PYCRYPTODOME_REQUIRE_SHA512_ARMV8: ${{ matrix.os == 'windows-11-arm' && '1' || '' }}
|
|
118
121
|
run: |
|
|
119
122
|
python -m Crypto.SelfTest
|
|
120
123
|
|
|
@@ -156,7 +159,7 @@ jobs:
|
|
|
156
159
|
python -m Crypto.SelfTest
|
|
157
160
|
|
|
158
161
|
ruff:
|
|
159
|
-
runs-on: ubuntu-
|
|
162
|
+
runs-on: ubuntu-24.04
|
|
160
163
|
steps:
|
|
161
164
|
- uses: actions/checkout@v7
|
|
162
165
|
- name: Set up Python
|
|
@@ -174,7 +177,7 @@ jobs:
|
|
|
174
177
|
ruff format --check .
|
|
175
178
|
|
|
176
179
|
mypy:
|
|
177
|
-
runs-on: ubuntu-
|
|
180
|
+
runs-on: ubuntu-24.04
|
|
178
181
|
steps:
|
|
179
182
|
- uses: actions/checkout@v7
|
|
180
183
|
- name: Set up Python
|
|
@@ -189,7 +192,7 @@ jobs:
|
|
|
189
192
|
mypy lib/
|
|
190
193
|
|
|
191
194
|
test_c_linux:
|
|
192
|
-
runs-on: ubuntu-
|
|
195
|
+
runs-on: ubuntu-24.04
|
|
193
196
|
strategy:
|
|
194
197
|
matrix:
|
|
195
198
|
sse: [0, 1]
|
|
@@ -218,6 +221,24 @@ jobs:
|
|
|
218
221
|
cmake -B build -DSSE=${{ matrix.sse }} $EXTRA
|
|
219
222
|
make -C build all test
|
|
220
223
|
|
|
224
|
+
test_c_linux_arm:
|
|
225
|
+
runs-on: ubuntu-24.04-arm
|
|
226
|
+
steps:
|
|
227
|
+
- uses: actions/checkout@v7
|
|
228
|
+
- name: Install dependencies
|
|
229
|
+
run: |
|
|
230
|
+
sudo apt-get update
|
|
231
|
+
# Valgrind: without it, the constant-time tests (*_ct) are skipped
|
|
232
|
+
sudo apt-get install libubsan1 valgrind
|
|
233
|
+
- name: Test Linux ARM64
|
|
234
|
+
env:
|
|
235
|
+
PYTHON: python3
|
|
236
|
+
run: |
|
|
237
|
+
cd src/test
|
|
238
|
+
mkdir build
|
|
239
|
+
cmake -B build
|
|
240
|
+
make -C build all test
|
|
241
|
+
|
|
221
242
|
test_c_windows:
|
|
222
243
|
runs-on: ${{ matrix.os }}
|
|
223
244
|
strategy:
|
|
@@ -8,7 +8,7 @@ on:
|
|
|
8
8
|
jobs:
|
|
9
9
|
build_source:
|
|
10
10
|
name: Build source package
|
|
11
|
-
runs-on: [ ubuntu-
|
|
11
|
+
runs-on: [ ubuntu-24.04 ]
|
|
12
12
|
steps:
|
|
13
13
|
- uses: actions/checkout@v7
|
|
14
14
|
|
|
@@ -44,12 +44,12 @@ jobs:
|
|
|
44
44
|
echo 'CIBW_ARCHS=x86_64 universal2' >> $GITHUB_ENV
|
|
45
45
|
if: runner.os == 'macOS'
|
|
46
46
|
|
|
47
|
-
- uses: pypa/cibuildwheel@v4.3.
|
|
47
|
+
- uses: pypa/cibuildwheel@v4.3.4
|
|
48
48
|
name: Build wheels
|
|
49
49
|
env:
|
|
50
50
|
# cibuildwheel will build wheel once and test it for each CPython version
|
|
51
51
|
# and for PyPy >= 3.10
|
|
52
|
-
CIBW_BUILD: "cp39-* cp314-* cp315-* cp315t-* pp310-* pp311-*"
|
|
52
|
+
CIBW_BUILD: "cp39-* cp314-* cp315-* cp315t-* pp310-* pp311-* pp312*"
|
|
53
53
|
# The manylinux images are set in pyproject.toml ([tool.cibuildwheel])
|
|
54
54
|
CIBW_ENABLE: "pypy pypy-eol"
|
|
55
55
|
|
|
@@ -66,6 +66,10 @@ jobs:
|
|
|
66
66
|
PYCRYPTODOME_CLANG_CL: ${{ matrix.os == 'windows-2025' && '1' || '' }}
|
|
67
67
|
PYCRYPTODOME_REQUIRE_AVX2_BMI2: ${{ matrix.os == 'windows-2025' && '1' || '' }}
|
|
68
68
|
|
|
69
|
+
# The Windows ARM64 runners support the SHA-512 instructions of ARMv8.2:
|
|
70
|
+
# fail if they are not used (module not built, or CPU feature not detected)
|
|
71
|
+
PYCRYPTODOME_REQUIRE_SHA512_ARMV8: ${{ matrix.os == 'windows-11-arm' && '1' || '' }}
|
|
72
|
+
|
|
69
73
|
- name: Delete manylinux1 wheels
|
|
70
74
|
if: runner.os == 'Linux'
|
|
71
75
|
run: |
|
|
@@ -1,6 +1,67 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
+
4.3.0 (2 November 2026)
|
|
5
|
+
++++++++++++++++++++++++++
|
|
6
|
+
|
|
7
|
+
New features
|
|
8
|
+
------------
|
|
9
|
+
* CTR mode is 2.5-3.5x faster on large data (and GCM about 2x),
|
|
10
|
+
on all platforms.
|
|
11
|
+
* On 64-bit ARM CPUs (Linux, macOS and Windows), AES and GHASH use the instructions
|
|
12
|
+
of the ARMv8 Cryptography Extensions (AES and PMULL), when available.
|
|
13
|
+
On a Graviton3, AES-ECB is about 35x faster, GCM 7x, OCB 10-12x,
|
|
14
|
+
and CTR, CBC, CFB and OFB 3-6x.
|
|
15
|
+
* ``Integer.random_range()`` is about 2x faster when the bounds are public,
|
|
16
|
+
with the same output: ECDSA signatures are about 13% faster (P-256),
|
|
17
|
+
DSA signatures about 4%, and ECC key generation about 35%.
|
|
18
|
+
The RSA modulus and the DSA subgroup order are now public ``Integer`` objects.
|
|
19
|
+
* Faster RSA: on x86-64, signatures and decryption are 35-40% faster
|
|
20
|
+
(RSA-2048 to RSA-4096), verification and encryption 2-2.7x.
|
|
21
|
+
Modular exponentiation with a public exponent (like the RSA public exponent)
|
|
22
|
+
no longer uses the slower constant-time algorithm, which is only needed for
|
|
23
|
+
secret exponents, and the Montgomery context of a modulus is kept with it.
|
|
24
|
+
The RSA blinding factor is squared between uses (a new one every 32 uses,
|
|
25
|
+
and after a fork).
|
|
26
|
+
* The Montgomery multiplication for x86-64 CPUs with BMI2 and ADX is about 20%
|
|
27
|
+
faster: DSA signatures and verification are about 25% faster.
|
|
28
|
+
* ECDSA signatures are 3-6% faster for P-256 and P-384: the field inversion
|
|
29
|
+
uses the faster power for public exponents (the exponent p - 2 is public).
|
|
30
|
+
* On 64-bit ARM CPUs, SHA-224 and SHA-256 use the SHA-256 instructions
|
|
31
|
+
of the ARMv8 Cryptography Extensions, and SHA-384 and SHA-512 the SHA-512
|
|
32
|
+
instructions of ARMv8.2, when available.
|
|
33
|
+
On a Graviton3, SHA-256 is about 3.8x faster, and SHA-512 2x.
|
|
34
|
+
* On 64-bit ARM CPUs, KangarooTwelve, ML-KEM and ML-DSA compute 4 Keccak states at once
|
|
35
|
+
(2 with scalar code and 2 with NEON).
|
|
36
|
+
On a Graviton3, KangarooTwelve is 1.9x faster, ML-DSA 7-20% and ML-KEM 7-8%.
|
|
37
|
+
* PKCS#1 v1.5 decryption (``Crypto.Cipher.PKCS1_v1_5``) performs implicit rejection,
|
|
38
|
+
as defined in section 7.2 of ``draft-irtf-cfrg-rsa-guidance``,
|
|
39
|
+
when ``decrypt()`` is called without a ``sentinel`` (which is now optional):
|
|
40
|
+
when the padding of a ciphertext is not correct, it returns a pseudo-random
|
|
41
|
+
message, which only depends on the private key and on the ciphertext.
|
|
42
|
+
With a ``sentinel``, ``decrypt()`` behaves as before.
|
|
43
|
+
|
|
44
|
+
Other changes
|
|
45
|
+
-------------
|
|
46
|
+
* Updated the Wycheproof test vectors (new Ed25519 tests and the new ``chacha20_counter_test.json``).
|
|
47
|
+
XChaCha20 keeps the construction of draft-irtf-cfrg-xchacha (HChaCha20 and the ChaCha20
|
|
48
|
+
of RFC 8439), with a 32-bit block counter: the key stream ends after 256 GiB,
|
|
49
|
+
whereas libsodium and Wycheproof use a 64-bit counter.
|
|
50
|
+
|
|
51
|
+
Resolved issues
|
|
52
|
+
---------------
|
|
53
|
+
* GH#481: PKCS#1 v1.5 decryption could be used as a Bleichenbacher oracle,
|
|
54
|
+
through the ``sentinel`` returned for ciphertexts with incorrect padding.
|
|
55
|
+
Calling ``decrypt()`` without ``sentinel`` (implicit rejection) is now
|
|
56
|
+
recommended. Thanks to tomato42 and eslerm.
|
|
57
|
+
* PKCS#1 v1.5 ``decrypt()`` never returned a ``sentinel`` that is not a byte string
|
|
58
|
+
(such as ``None``), and it returned an empty byte string instead.
|
|
59
|
+
* GH#954: ``Crypto.Util.asn1.DerObjectId`` accepted an ASN.1 OBJECT IDENTIFIER where an arc
|
|
60
|
+
is encoded with the initial octet 0x80 (invalid, as that would violate the minimal
|
|
61
|
+
encoding rule for BER) or where the last octet encoding the last arc has bit 7 set
|
|
62
|
+
(invalid, and that arc would also be dropped). In those cases, decoding now fails.
|
|
63
|
+
Thanks to Zulfareen Shaikh.
|
|
64
|
+
|
|
4
65
|
4.2.0 (24 October 2026)
|
|
5
66
|
++++++++++++++++++++++++++
|
|
6
67
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// Search scorer: the defaults of Sphinx, plus a boost for the guides,
|
|
2
|
+
// so that a search for a task ("encrypt", "sign", "password", ...)
|
|
3
|
+
// shows the guide before the many API methods with the same name.
|
|
4
|
+
var Scorer = {
|
|
5
|
+
score: (result) => {
|
|
6
|
+
const [docname, title, anchor, descr, score, filename, kind] = result;
|
|
7
|
+
return docname.startsWith("src/guides/") ? score + 8 : score;
|
|
8
|
+
},
|
|
9
|
+
|
|
10
|
+
// query matches the full name of an object
|
|
11
|
+
objNameMatch: 11,
|
|
12
|
+
// or matches in the last dotted part of the object name
|
|
13
|
+
objPartialMatch: 6,
|
|
14
|
+
// Additive scores depending on the priority of the object
|
|
15
|
+
objPrio: {
|
|
16
|
+
0: 15, // used to be importantResults
|
|
17
|
+
1: 5, // used to be objectResults
|
|
18
|
+
2: -5, // used to be unimportantResults
|
|
19
|
+
},
|
|
20
|
+
// Used when the priority is not in the mapping.
|
|
21
|
+
objPrioDefault: 0,
|
|
22
|
+
|
|
23
|
+
// query found in title
|
|
24
|
+
title: 15,
|
|
25
|
+
partialTitle: 7,
|
|
26
|
+
// query found in terms
|
|
27
|
+
term: 5,
|
|
28
|
+
partialTerm: 2,
|
|
29
|
+
};
|
|
@@ -27,6 +27,8 @@ class MockLib:
|
|
|
27
27
|
ghash_clmul = None
|
|
28
28
|
ghash_expand_clmul = None
|
|
29
29
|
ghash_destroy_clmul = None
|
|
30
|
+
AESNI_start_operation = None
|
|
31
|
+
AESNI_stop_operation = None
|
|
30
32
|
|
|
31
33
|
def have_aes_ni(self):
|
|
32
34
|
return True
|
|
@@ -41,6 +43,11 @@ class MockLib:
|
|
|
41
43
|
have_bmi2 = have_avx2
|
|
42
44
|
have_sha_ni = have_avx2
|
|
43
45
|
have_adx = have_avx2
|
|
46
|
+
have_aes_armv8 = have_avx2
|
|
47
|
+
have_pmull = have_avx2
|
|
48
|
+
have_sha256_armv8 = have_avx2
|
|
49
|
+
have_sha512_armv8 = have_avx2
|
|
50
|
+
have_sha3_armv8 = have_avx2
|
|
44
51
|
ec_nat_new_curve = lambda *x: 0
|
|
45
52
|
ec_nat_free_curve = lambda *x: None
|
|
46
53
|
ec_nat_new_point = lambda *x: 0
|
|
@@ -117,7 +124,7 @@ release = ".".join(str(x) for x in version_tuple)
|
|
|
117
124
|
exclude_patterns = ["_build"]
|
|
118
125
|
|
|
119
126
|
# The reST default role (used for this markup: `text`) to use for all documents.
|
|
120
|
-
|
|
127
|
+
default_role = "py:obj"
|
|
121
128
|
|
|
122
129
|
# If true, '()' will be appended to :func: etc. cross-reference text.
|
|
123
130
|
# add_function_parentheses = True
|
|
@@ -199,6 +206,9 @@ html_title = "PyCryptodome"
|
|
|
199
206
|
# relative to this directory. They are copied after the builtin static files,
|
|
200
207
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
|
201
208
|
html_static_path = ["_static"]
|
|
209
|
+
|
|
210
|
+
# Rank the guides first in the search results
|
|
211
|
+
html_search_scorer = "_static/scorer.js"
|
|
202
212
|
html_css_files = ["custom.css"]
|
|
203
213
|
|
|
204
214
|
|
|
@@ -320,3 +330,36 @@ texinfo_documents = [
|
|
|
320
330
|
|
|
321
331
|
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
|
322
332
|
# texinfo_show_urls = 'footnote'
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
def _hide_cipher_mode_signature(app, what, name, obj, options, signature, return_annotation):
|
|
336
|
+
"""The cipher objects of the modes of operation are created by the
|
|
337
|
+
``new()`` function of the cipher module, never directly by the user:
|
|
338
|
+
do not show the internal parameters of their constructor."""
|
|
339
|
+
|
|
340
|
+
if what == "class" and name.startswith("Crypto.Cipher._mode_"):
|
|
341
|
+
return "", None
|
|
342
|
+
return None
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
def _lower_search_priority_of_cipher_modes():
|
|
346
|
+
"""The methods of the cipher objects (like ``GcmMode.encrypt``) would
|
|
347
|
+
otherwise be the first results when searching for common words
|
|
348
|
+
like "encrypt", ahead of the guides."""
|
|
349
|
+
|
|
350
|
+
from sphinx.domains.python import PythonDomain
|
|
351
|
+
|
|
352
|
+
get_objects = PythonDomain.get_objects
|
|
353
|
+
|
|
354
|
+
def patched_get_objects(self):
|
|
355
|
+
for name, dispname, objtype, docname, anchor, prio in get_objects(self):
|
|
356
|
+
if name.startswith("Crypto.Cipher._mode_"):
|
|
357
|
+
prio = 2 # "unimportant"
|
|
358
|
+
yield name, dispname, objtype, docname, anchor, prio
|
|
359
|
+
|
|
360
|
+
PythonDomain.get_objects = patched_get_objects
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
def setup(app):
|
|
364
|
+
app.connect("autodoc-process-signature", _hide_cipher_mode_signature, priority=400)
|
|
365
|
+
_lower_search_priority_of_cipher_modes()
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
PyCryptodome
|
|
2
|
+
============
|
|
3
|
+
|
|
4
|
+
PyCryptodome is a self-contained Python package of low-level
|
|
5
|
+
cryptographic primitives, for Python 3.9 and newer.
|
|
6
|
+
It needs no system libraries: install it with ``pip install pycryptodome``.
|
|
7
|
+
|
|
8
|
+
What do you want to do?
|
|
9
|
+
-----------------------
|
|
10
|
+
|
|
11
|
+
.. include:: src/guides/tasks.rst.inc
|
|
12
|
+
|
|
13
|
+
For instance, this is how to encrypt and authenticate a message
|
|
14
|
+
with AES in GCM mode, and then decrypt it
|
|
15
|
+
(see :doc:`src/guides/symmetric` for the details):
|
|
16
|
+
|
|
17
|
+
.. code-block:: python
|
|
18
|
+
|
|
19
|
+
from Crypto.Cipher import AES
|
|
20
|
+
from Crypto.Random import get_random_bytes
|
|
21
|
+
|
|
22
|
+
key = get_random_bytes(32)
|
|
23
|
+
nonce = get_random_bytes(12)
|
|
24
|
+
cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
|
|
25
|
+
ciphertext, tag = cipher.encrypt_and_digest(b"Attack at dawn")
|
|
26
|
+
|
|
27
|
+
# The receiver needs the key, the nonce, the ciphertext and the tag
|
|
28
|
+
cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
|
|
29
|
+
plaintext = cipher.decrypt_and_verify(ciphertext, tag)
|
|
30
|
+
|
|
31
|
+
Where to go next
|
|
32
|
+
----------------
|
|
33
|
+
|
|
34
|
+
* :doc:`src/guides/index`, for the common tasks, step by step.
|
|
35
|
+
* :doc:`src/api`, for all the algorithms and their parameters, grouped by package.
|
|
36
|
+
* :doc:`src/installation`, for the details of the installation.
|
|
37
|
+
* :doc:`src/faq`, for the most frequent questions.
|
|
38
|
+
|
|
39
|
+
.. toctree::
|
|
40
|
+
:hidden:
|
|
41
|
+
:caption: Getting started
|
|
42
|
+
|
|
43
|
+
Home <self>
|
|
44
|
+
Introduction <src/introduction>
|
|
45
|
+
src/features
|
|
46
|
+
src/installation
|
|
47
|
+
|
|
48
|
+
.. toctree::
|
|
49
|
+
:hidden:
|
|
50
|
+
:caption: Guides
|
|
51
|
+
|
|
52
|
+
Overview <src/guides/index>
|
|
53
|
+
src/guides/symmetric
|
|
54
|
+
src/guides/passwords
|
|
55
|
+
src/guides/public_key_encryption
|
|
56
|
+
src/guides/signatures
|
|
57
|
+
src/guides/hashing
|
|
58
|
+
src/guides/keys
|
|
59
|
+
|
|
60
|
+
.. toctree::
|
|
61
|
+
:hidden:
|
|
62
|
+
:caption: Reference
|
|
63
|
+
|
|
64
|
+
src/api
|
|
65
|
+
src/exceptions
|
|
66
|
+
|
|
67
|
+
.. toctree::
|
|
68
|
+
:hidden:
|
|
69
|
+
:caption: Project
|
|
70
|
+
|
|
71
|
+
src/faq
|
|
72
|
+
src/contribute_support
|
|
73
|
+
src/changelog
|
|
74
|
+
src/license
|
|
@@ -16,6 +16,10 @@ API documentation
|
|
|
16
16
|
All cryptographic functionalities are organized in sub-packages;
|
|
17
17
|
each sub-package is dedicated to solving a specific class of problems.
|
|
18
18
|
|
|
19
|
+
This is the reference for all algorithms and their parameters.
|
|
20
|
+
If you are looking for how to accomplish a task, like encrypting or signing data,
|
|
21
|
+
start from the :doc:`guides <guides/index>`.
|
|
22
|
+
|
|
19
23
|
.. csv-table::
|
|
20
24
|
:header: Package, Description
|
|
21
25
|
:widths: 25, 75
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
AES
|
|
2
|
+
===
|
|
3
|
+
|
|
4
|
+
.. py:currentmodule:: Crypto.Cipher.AES
|
|
5
|
+
|
|
6
|
+
AES `(Advanced Encryption Standard)`__ is a symmetric block cipher standardized
|
|
7
|
+
by NIST_ . It has a fixed data block size of 16 bytes.
|
|
8
|
+
Its keys can be 128, 192, or 256 bits long.
|
|
9
|
+
|
|
10
|
+
AES is very fast and secure, and it is the de facto standard for symmetric
|
|
11
|
+
encryption.
|
|
12
|
+
|
|
13
|
+
On its own, a block cipher can only encrypt a single block of 16 bytes.
|
|
14
|
+
To protect messages of any length, you combine it with a *mode of operation*,
|
|
15
|
+
which you select with the ``mode`` parameter of :func:`new`.
|
|
16
|
+
The table in :ref:`aes_modes` lists the modes you can choose from.
|
|
17
|
+
|
|
18
|
+
.. tip::
|
|
19
|
+
|
|
20
|
+
For a step-by-step explanation of how to encrypt data with AES,
|
|
21
|
+
including large files, see the guide :doc:`../guides/symmetric`.
|
|
22
|
+
|
|
23
|
+
For instance, you can encrypt and authenticate a message with AES in GCM mode::
|
|
24
|
+
|
|
25
|
+
>>> from Crypto.Cipher import AES
|
|
26
|
+
>>> from Crypto.Random import get_random_bytes
|
|
27
|
+
>>>
|
|
28
|
+
>>> data = b'The secret message'
|
|
29
|
+
>>> key = get_random_bytes(16)
|
|
30
|
+
>>> nonce = get_random_bytes(12)
|
|
31
|
+
>>> cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
|
|
32
|
+
>>> ciphertext, tag = cipher.encrypt_and_digest(data)
|
|
33
|
+
|
|
34
|
+
You must deliver the triple ``(nonce, ciphertext, tag)`` to the recipient.
|
|
35
|
+
The nonce and the tag are not secret, but the key is.
|
|
36
|
+
With the same key, the recipient decrypts the message and checks that it is authentic::
|
|
37
|
+
|
|
38
|
+
>>> from Crypto.Cipher import AES
|
|
39
|
+
>>>
|
|
40
|
+
>>> cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
|
|
41
|
+
>>> try:
|
|
42
|
+
... plaintext = cipher.decrypt_and_verify(ciphertext, tag)
|
|
43
|
+
... print("The message is authentic:", plaintext)
|
|
44
|
+
... except ValueError:
|
|
45
|
+
... print("Key incorrect or message corrupted")
|
|
46
|
+
|
|
47
|
+
.. __: http://en.wikipedia.org/wiki/Advanced_Encryption_Standard
|
|
48
|
+
.. _NIST: http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
|
|
49
|
+
|
|
50
|
+
.. _aes_modes:
|
|
51
|
+
|
|
52
|
+
Modes of operation
|
|
53
|
+
------------------
|
|
54
|
+
|
|
55
|
+
The object returned by :func:`new` depends on the mode of operation:
|
|
56
|
+
follow the link in the last column for its methods and attributes.
|
|
57
|
+
|
|
58
|
+
.. list-table::
|
|
59
|
+
:header-rows: 1
|
|
60
|
+
:widths: 20 30 25 25
|
|
61
|
+
|
|
62
|
+
* - ``mode``
|
|
63
|
+
- Mode of operation
|
|
64
|
+
- Protects
|
|
65
|
+
- Cipher object
|
|
66
|
+
* - .. py:data:: MODE_GCM
|
|
67
|
+
:no-typesetting:
|
|
68
|
+
|
|
69
|
+
``MODE_GCM``
|
|
70
|
+
- :ref:`Galois/Counter Mode <gcm_mode>`
|
|
71
|
+
- confidentiality + authenticity
|
|
72
|
+
- :class:`~Crypto.Cipher._mode_gcm.GcmMode`
|
|
73
|
+
* - .. py:data:: MODE_EAX
|
|
74
|
+
:no-typesetting:
|
|
75
|
+
|
|
76
|
+
``MODE_EAX``
|
|
77
|
+
- :ref:`EAX mode <eax_mode>`
|
|
78
|
+
- confidentiality + authenticity
|
|
79
|
+
- :class:`~Crypto.Cipher._mode_eax.EaxMode`
|
|
80
|
+
* - .. py:data:: MODE_OCB
|
|
81
|
+
:no-typesetting:
|
|
82
|
+
|
|
83
|
+
``MODE_OCB``
|
|
84
|
+
- :ref:`Offset CodeBook <ocb_mode>`
|
|
85
|
+
- confidentiality + authenticity
|
|
86
|
+
- :class:`~Crypto.Cipher._mode_ocb.OcbMode`
|
|
87
|
+
* - .. py:data:: MODE_SIV
|
|
88
|
+
:no-typesetting:
|
|
89
|
+
|
|
90
|
+
``MODE_SIV``
|
|
91
|
+
- :ref:`Synthetic Initialization Vector <siv_mode>`
|
|
92
|
+
- confidentiality + authenticity
|
|
93
|
+
- :class:`~Crypto.Cipher._mode_siv.SivMode`
|
|
94
|
+
* - .. py:data:: MODE_CCM
|
|
95
|
+
:no-typesetting:
|
|
96
|
+
|
|
97
|
+
``MODE_CCM``
|
|
98
|
+
- :ref:`Counter with CBC-MAC <ccm_mode>`
|
|
99
|
+
- confidentiality + authenticity
|
|
100
|
+
- :class:`~Crypto.Cipher._mode_ccm.CcmMode`
|
|
101
|
+
* - .. py:data:: MODE_CTR
|
|
102
|
+
:no-typesetting:
|
|
103
|
+
|
|
104
|
+
``MODE_CTR``
|
|
105
|
+
- :ref:`Counter mode <ctr_mode>`
|
|
106
|
+
- confidentiality only
|
|
107
|
+
- :class:`~Crypto.Cipher._mode_ctr.CtrMode`
|
|
108
|
+
* - .. py:data:: MODE_CBC
|
|
109
|
+
:no-typesetting:
|
|
110
|
+
|
|
111
|
+
``MODE_CBC``
|
|
112
|
+
- :ref:`Cipher-Block Chaining <cbc_mode>`
|
|
113
|
+
- confidentiality only
|
|
114
|
+
- :class:`~Crypto.Cipher._mode_cbc.CbcMode`
|
|
115
|
+
* - .. py:data:: MODE_CFB
|
|
116
|
+
:no-typesetting:
|
|
117
|
+
|
|
118
|
+
``MODE_CFB``
|
|
119
|
+
- :ref:`Cipher FeedBack <cfb_mode>`
|
|
120
|
+
- confidentiality only
|
|
121
|
+
- :class:`~Crypto.Cipher._mode_cfb.CfbMode`
|
|
122
|
+
* - .. py:data:: MODE_OFB
|
|
123
|
+
:no-typesetting:
|
|
124
|
+
|
|
125
|
+
``MODE_OFB``
|
|
126
|
+
- :ref:`Output FeedBack <ofb_mode>`
|
|
127
|
+
- confidentiality only
|
|
128
|
+
- :class:`~Crypto.Cipher._mode_ofb.OfbMode`
|
|
129
|
+
* - .. py:data:: MODE_OPENPGP
|
|
130
|
+
:no-typesetting:
|
|
131
|
+
|
|
132
|
+
``MODE_OPENPGP``
|
|
133
|
+
- :ref:`OpenPGP mode <openpgp_mode>`
|
|
134
|
+
- confidentiality only
|
|
135
|
+
- :class:`~Crypto.Cipher._mode_openpgp.OpenPgpMode`
|
|
136
|
+
* - .. py:data:: MODE_ECB
|
|
137
|
+
:no-typesetting:
|
|
138
|
+
|
|
139
|
+
``MODE_ECB``
|
|
140
|
+
- :ref:`Electronic CodeBook <ecb_mode>`
|
|
141
|
+
- confidentiality only (weak)
|
|
142
|
+
- :class:`~Crypto.Cipher._mode_ecb.EcbMode`
|
|
143
|
+
* - .. py:data:: MODE_KW
|
|
144
|
+
:no-typesetting:
|
|
145
|
+
|
|
146
|
+
``MODE_KW``
|
|
147
|
+
- :ref:`Key Wrap <kw_mode>`
|
|
148
|
+
- keys (confidentiality + authenticity)
|
|
149
|
+
- :class:`~Crypto.Cipher._mode_kw.KWMode`
|
|
150
|
+
* - .. py:data:: MODE_KWP
|
|
151
|
+
:no-typesetting:
|
|
152
|
+
|
|
153
|
+
``MODE_KWP``
|
|
154
|
+
- :ref:`Key Wrap with Padding <kwp_mode>`
|
|
155
|
+
- keys (confidentiality + authenticity)
|
|
156
|
+
- :class:`~Crypto.Cipher._mode_kwp.KWPMode`
|
|
157
|
+
|
|
158
|
+
Which mode should I use?
|
|
159
|
+
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
160
|
+
|
|
161
|
+
* If in doubt, use **GCM**, with a random 12-byte nonce.
|
|
162
|
+
It is an *authenticated* mode (AEAD):
|
|
163
|
+
the recipient detects if the message was modified or encrypted with a different key.
|
|
164
|
+
It is also the most widely supported by other libraries.
|
|
165
|
+
The other authenticated modes (EAX, OCB, CCM) are equally secure.
|
|
166
|
+
* Use **SIV** if you cannot guarantee that a nonce is never reused with the same key.
|
|
167
|
+
* Use the *confidentiality only* modes, like CTR or CBC, only to interoperate with existing
|
|
168
|
+
protocols, and then combine them with a MAC (like :mod:`Crypto.Hash.HMAC`).
|
|
169
|
+
Never use ECB to encrypt more than one block.
|
|
170
|
+
* Use **KW** or **KWP** only to wrap other cryptographic keys.
|
|
171
|
+
|
|
172
|
+
Using the cipher object
|
|
173
|
+
-----------------------
|
|
174
|
+
|
|
175
|
+
* :meth:`encrypt` and :meth:`decrypt` process data.
|
|
176
|
+
You can call them several times, each with the next piece of the message.
|
|
177
|
+
* The authenticated modes also have :meth:`update` (for associated data, that is,
|
|
178
|
+
data that is authenticated but not encrypted, like a header),
|
|
179
|
+
:meth:`digest` and :meth:`verify` (to create and check the MAC tag),
|
|
180
|
+
and :meth:`encrypt_and_digest` and :meth:`decrypt_and_verify` (to do everything in one call).
|
|
181
|
+
See the :ref:`introduction to modern modes <modern_cipher_modes>`.
|
|
182
|
+
* KW and KWP only have :meth:`seal` and :meth:`unseal`.
|
|
183
|
+
* The object also holds the parameters you must deliver to the recipient,
|
|
184
|
+
such as :attr:`nonce` or :attr:`iv`, which :func:`new` generates if you don't pass them.
|
|
185
|
+
|
|
186
|
+
A cipher object is *stateful* and it can only process one message,
|
|
187
|
+
either for encryption or for decryption.
|
|
188
|
+
Create a new object (with a new nonce or IV) for each message.
|
|
189
|
+
|
|
190
|
+
API
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
.. automodule:: Crypto.Cipher.AES
|
|
194
|
+
:members:
|
|
195
|
+
:exclude-members: MODE_ECB, MODE_CBC, MODE_CFB, MODE_OFB, MODE_CTR, MODE_OPENPGP, MODE_CCM, MODE_EAX, MODE_SIV, MODE_GCM, MODE_OCB, MODE_KW, MODE_KWP
|
|
196
|
+
:member-order: bysource
|
|
@@ -4,14 +4,15 @@
|
|
|
4
4
|
Introduction
|
|
5
5
|
------------
|
|
6
6
|
|
|
7
|
-
.. toctree::
|
|
8
|
-
:hidden:
|
|
9
|
-
|
|
10
|
-
oaep
|
|
11
|
-
|
|
12
7
|
The :mod:`Crypto.Cipher` package contains algorithms for protecting the confidentiality
|
|
13
8
|
of data.
|
|
14
9
|
|
|
10
|
+
.. tip::
|
|
11
|
+
|
|
12
|
+
To learn how to encrypt data, start from the guides
|
|
13
|
+
:doc:`../guides/symmetric`, :doc:`../guides/passwords`,
|
|
14
|
+
and :doc:`../guides/public_key_encryption`.
|
|
15
|
+
|
|
15
16
|
There are three types of encryption algorithms:
|
|
16
17
|
|
|
17
18
|
1. **Symmetric ciphers**: all parties use the same key, for both
|
|
@@ -121,6 +122,11 @@ authentication (MAC). For instance:
|
|
|
121
122
|
salsa20
|
|
122
123
|
chacha20_poly1305
|
|
123
124
|
|
|
125
|
+
.. toctree::
|
|
126
|
+
:hidden:
|
|
127
|
+
|
|
128
|
+
oaep
|
|
129
|
+
|
|
124
130
|
Legacy ciphers
|
|
125
131
|
--------------
|
|
126
132
|
|