cryptography 45.0.2__tar.gz → 45.0.3__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.
Files changed (429) hide show
  1. {cryptography-45.0.2 → cryptography-45.0.3}/CHANGELOG.rst +28 -0
  2. {cryptography-45.0.2 → cryptography-45.0.3}/PKG-INFO +2 -2
  3. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/test-vectors.rst +5 -0
  4. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/decrepit/ciphers.rst +1 -1
  5. {cryptography-45.0.2 → cryptography-45.0.3}/pyproject.toml +2 -2
  6. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/__about__.py +1 -1
  7. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/decrepit/ciphers/algorithms.py +5 -0
  8. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-crypto/src/pbkdf1.rs +35 -1
  9. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-key-parsing/src/pkcs8.rs +41 -7
  10. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509/src/common.rs +15 -5
  11. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509/src/oid.rs +3 -2
  12. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/cipher_registry.rs +3 -0
  13. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/pkcs12.rs +7 -7
  14. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/types.rs +2 -0
  15. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_serialization.py +30 -2
  16. {cryptography-45.0.2 → cryptography-45.0.3}/.gitattributes +0 -0
  17. {cryptography-45.0.2 → cryptography-45.0.3}/.gitignore +0 -0
  18. {cryptography-45.0.2 → cryptography-45.0.3}/CONTRIBUTING.rst +0 -0
  19. {cryptography-45.0.2 → cryptography-45.0.3}/Cargo.lock +0 -0
  20. {cryptography-45.0.2 → cryptography-45.0.3}/Cargo.toml +0 -0
  21. {cryptography-45.0.2 → cryptography-45.0.3}/LICENSE +0 -0
  22. {cryptography-45.0.2 → cryptography-45.0.3}/LICENSE.APACHE +0 -0
  23. {cryptography-45.0.2 → cryptography-45.0.3}/LICENSE.BSD +0 -0
  24. {cryptography-45.0.2 → cryptography-45.0.3}/README.rst +0 -0
  25. {cryptography-45.0.2 → cryptography-45.0.3}/docs/Makefile +0 -0
  26. {cryptography-45.0.2 → cryptography-45.0.3}/docs/_ext/cryptography-docs.py +0 -0
  27. {cryptography-45.0.2 → cryptography-45.0.3}/docs/_ext/linkcode_res.py +0 -0
  28. {cryptography-45.0.2 → cryptography-45.0.3}/docs/_static/.keep +0 -0
  29. {cryptography-45.0.2 → cryptography-45.0.3}/docs/api-stability.rst +0 -0
  30. {cryptography-45.0.2 → cryptography-45.0.3}/docs/changelog.rst +0 -0
  31. {cryptography-45.0.2 → cryptography-45.0.3}/docs/community.rst +0 -0
  32. {cryptography-45.0.2 → cryptography-45.0.3}/docs/conf.py +0 -0
  33. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/c-bindings.rst +0 -0
  34. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/aes-192-gcm-siv/generate_aes192gcmsiv.py +0 -0
  35. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/aes-192-gcm-siv/verify-aes192gcmsiv/Cargo.toml +0 -0
  36. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/aes-192-gcm-siv/verify-aes192gcmsiv/src/main.rs +0 -0
  37. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/aes-192-gcm-siv.rst +0 -0
  38. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/arc4/generate_arc4.py +0 -0
  39. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/arc4/verify_arc4.go +0 -0
  40. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/arc4.rst +0 -0
  41. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/cast5/generate_cast5.py +0 -0
  42. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/cast5/verify_cast5.go +0 -0
  43. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/cast5.rst +0 -0
  44. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/chacha20/generate_chacha20_overflow.py +0 -0
  45. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/chacha20/verify_chacha20_overflow.py +0 -0
  46. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/chacha20.rst +0 -0
  47. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/hkdf/generate_hkdf.py +0 -0
  48. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/hkdf/verify_hkdf.go +0 -0
  49. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/hkdf.rst +0 -0
  50. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/idea/generate_idea.py +0 -0
  51. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/idea/verify_idea.py +0 -0
  52. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/idea.rst +0 -0
  53. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/rc2/genrc2.go +0 -0
  54. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/rc2/go.mod +0 -0
  55. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/rc2/rc2/rc2.go +0 -0
  56. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/rc2.rst +0 -0
  57. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/rsa-oaep-sha2/VerifyRSAOAEPSHA2.java +0 -0
  58. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/rsa-oaep-sha2/generate_rsa_oaep_sha2.py +0 -0
  59. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/rsa-oaep-sha2.rst +0 -0
  60. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/secp256k1/generate_secp256k1.py +0 -0
  61. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/secp256k1/verify_secp256k1.py +0 -0
  62. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/secp256k1.rst +0 -0
  63. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/seed/generate_seed.py +0 -0
  64. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/seed/verify_seed.py +0 -0
  65. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/custom-vectors/seed.rst +0 -0
  66. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/getting-started.rst +0 -0
  67. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/index.rst +0 -0
  68. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/reviewing-patches.rst +0 -0
  69. {cryptography-45.0.2 → cryptography-45.0.3}/docs/development/submitting-patches.rst +0 -0
  70. {cryptography-45.0.2 → cryptography-45.0.3}/docs/doing-a-release.rst +0 -0
  71. {cryptography-45.0.2 → cryptography-45.0.3}/docs/exceptions.rst +0 -0
  72. {cryptography-45.0.2 → cryptography-45.0.3}/docs/faq.rst +0 -0
  73. {cryptography-45.0.2 → cryptography-45.0.3}/docs/fernet.rst +0 -0
  74. {cryptography-45.0.2 → cryptography-45.0.3}/docs/glossary.rst +0 -0
  75. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/decrepit/index.rst +0 -0
  76. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/aead.rst +0 -0
  77. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/asymmetric/cloudhsm.rst +0 -0
  78. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/asymmetric/dh.rst +0 -0
  79. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/asymmetric/dsa.rst +0 -0
  80. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/asymmetric/ec.rst +0 -0
  81. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/asymmetric/ed25519.rst +0 -0
  82. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/asymmetric/ed448.rst +0 -0
  83. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/asymmetric/index.rst +0 -0
  84. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/asymmetric/rsa.rst +0 -0
  85. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/asymmetric/serialization.rst +0 -0
  86. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/asymmetric/utils.rst +0 -0
  87. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/asymmetric/x25519.rst +0 -0
  88. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/asymmetric/x448.rst +0 -0
  89. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/constant-time.rst +0 -0
  90. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/cryptographic-hashes.rst +0 -0
  91. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/index.rst +0 -0
  92. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/key-derivation-functions.rst +0 -0
  93. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/keywrap.rst +0 -0
  94. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/mac/cmac.rst +0 -0
  95. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/mac/hmac.rst +0 -0
  96. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/mac/index.rst +0 -0
  97. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/mac/poly1305.rst +0 -0
  98. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/padding.rst +0 -0
  99. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/symmetric-encryption.rst +0 -0
  100. {cryptography-45.0.2 → cryptography-45.0.3}/docs/hazmat/primitives/twofactor.rst +0 -0
  101. {cryptography-45.0.2 → cryptography-45.0.3}/docs/index.rst +0 -0
  102. {cryptography-45.0.2 → cryptography-45.0.3}/docs/installation.rst +0 -0
  103. {cryptography-45.0.2 → cryptography-45.0.3}/docs/limitations.rst +0 -0
  104. {cryptography-45.0.2 → cryptography-45.0.3}/docs/make.bat +0 -0
  105. {cryptography-45.0.2 → cryptography-45.0.3}/docs/openssl.rst +0 -0
  106. {cryptography-45.0.2 → cryptography-45.0.3}/docs/random-numbers.rst +0 -0
  107. {cryptography-45.0.2 → cryptography-45.0.3}/docs/security.rst +0 -0
  108. {cryptography-45.0.2 → cryptography-45.0.3}/docs/spelling_wordlist.txt +0 -0
  109. {cryptography-45.0.2 → cryptography-45.0.3}/docs/x509/certificate-transparency.rst +0 -0
  110. {cryptography-45.0.2 → cryptography-45.0.3}/docs/x509/index.rst +0 -0
  111. {cryptography-45.0.2 → cryptography-45.0.3}/docs/x509/ocsp.rst +0 -0
  112. {cryptography-45.0.2 → cryptography-45.0.3}/docs/x509/reference.rst +0 -0
  113. {cryptography-45.0.2 → cryptography-45.0.3}/docs/x509/tutorial.rst +0 -0
  114. {cryptography-45.0.2 → cryptography-45.0.3}/docs/x509/verification.rst +0 -0
  115. {cryptography-45.0.2 → cryptography-45.0.3}/noxfile.py +0 -0
  116. {cryptography-45.0.2 → cryptography-45.0.3}/release.py +0 -0
  117. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/__init__.py +0 -0
  118. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/build_openssl.py +0 -0
  119. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/__init__.py +0 -0
  120. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/asn1.py +0 -0
  121. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/bignum.py +0 -0
  122. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/bio.py +0 -0
  123. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/crypto.py +0 -0
  124. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/cryptography.py +0 -0
  125. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/dh.py +0 -0
  126. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/dsa.py +0 -0
  127. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/ec.py +0 -0
  128. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/engine.py +0 -0
  129. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/err.py +0 -0
  130. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/evp.py +0 -0
  131. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/nid.py +0 -0
  132. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/objects.py +0 -0
  133. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/opensslv.py +0 -0
  134. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/pem.py +0 -0
  135. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/rand.py +0 -0
  136. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/rsa.py +0 -0
  137. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/ssl.py +0 -0
  138. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/x509.py +0 -0
  139. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/x509_vfy.py +0 -0
  140. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/x509name.py +0 -0
  141. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/openssl/x509v3.py +0 -0
  142. {cryptography-45.0.2 → cryptography-45.0.3}/src/_cffi_src/utils.py +0 -0
  143. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/__init__.py +0 -0
  144. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/exceptions.py +0 -0
  145. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/fernet.py +0 -0
  146. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/__init__.py +0 -0
  147. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/_oid.py +0 -0
  148. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/backends/__init__.py +0 -0
  149. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/backends/openssl/__init__.py +0 -0
  150. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/backends/openssl/backend.py +0 -0
  151. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/__init__.py +0 -0
  152. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/__init__.pyi +0 -0
  153. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/_openssl.pyi +0 -0
  154. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/asn1.pyi +0 -0
  155. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/exceptions.pyi +0 -0
  156. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/ocsp.pyi +0 -0
  157. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/__init__.pyi +0 -0
  158. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/aead.pyi +0 -0
  159. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/ciphers.pyi +0 -0
  160. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/cmac.pyi +0 -0
  161. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/dh.pyi +0 -0
  162. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/dsa.pyi +0 -0
  163. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/ec.pyi +0 -0
  164. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/ed25519.pyi +0 -0
  165. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/ed448.pyi +0 -0
  166. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/hashes.pyi +0 -0
  167. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/hmac.pyi +0 -0
  168. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/kdf.pyi +0 -0
  169. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/keys.pyi +0 -0
  170. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/poly1305.pyi +0 -0
  171. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/rsa.pyi +0 -0
  172. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/x25519.pyi +0 -0
  173. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/openssl/x448.pyi +0 -0
  174. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/pkcs12.pyi +0 -0
  175. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/pkcs7.pyi +0 -0
  176. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/test_support.pyi +0 -0
  177. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/_rust/x509.pyi +0 -0
  178. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/openssl/__init__.py +0 -0
  179. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/openssl/_conditional.py +0 -0
  180. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/bindings/openssl/binding.py +0 -0
  181. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/decrepit/__init__.py +0 -0
  182. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/decrepit/ciphers/__init__.py +0 -0
  183. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/__init__.py +0 -0
  184. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/_asymmetric.py +0 -0
  185. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/_cipheralgorithm.py +0 -0
  186. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/_serialization.py +0 -0
  187. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/asymmetric/__init__.py +0 -0
  188. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/asymmetric/dh.py +0 -0
  189. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/asymmetric/dsa.py +0 -0
  190. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/asymmetric/ec.py +0 -0
  191. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/asymmetric/ed25519.py +0 -0
  192. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/asymmetric/ed448.py +0 -0
  193. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/asymmetric/padding.py +0 -0
  194. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/asymmetric/rsa.py +0 -0
  195. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/asymmetric/types.py +0 -0
  196. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/asymmetric/utils.py +0 -0
  197. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/asymmetric/x25519.py +0 -0
  198. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/asymmetric/x448.py +0 -0
  199. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/ciphers/__init__.py +0 -0
  200. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/ciphers/aead.py +0 -0
  201. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/ciphers/algorithms.py +0 -0
  202. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/ciphers/base.py +0 -0
  203. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/ciphers/modes.py +0 -0
  204. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/cmac.py +0 -0
  205. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/constant_time.py +0 -0
  206. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/hashes.py +0 -0
  207. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/hmac.py +0 -0
  208. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/kdf/__init__.py +0 -0
  209. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/kdf/argon2.py +0 -0
  210. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/kdf/concatkdf.py +0 -0
  211. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/kdf/hkdf.py +0 -0
  212. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/kdf/kbkdf.py +0 -0
  213. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/kdf/pbkdf2.py +0 -0
  214. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/kdf/scrypt.py +0 -0
  215. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/kdf/x963kdf.py +0 -0
  216. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/keywrap.py +0 -0
  217. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/padding.py +0 -0
  218. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/poly1305.py +0 -0
  219. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/serialization/__init__.py +0 -0
  220. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/serialization/base.py +0 -0
  221. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/serialization/pkcs12.py +0 -0
  222. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/serialization/pkcs7.py +0 -0
  223. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/serialization/ssh.py +0 -0
  224. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/twofactor/__init__.py +0 -0
  225. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/twofactor/hotp.py +0 -0
  226. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/hazmat/primitives/twofactor/totp.py +0 -0
  227. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/py.typed +0 -0
  228. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/utils.py +0 -0
  229. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/x509/__init__.py +0 -0
  230. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/x509/base.py +0 -0
  231. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/x509/certificate_transparency.py +0 -0
  232. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/x509/extensions.py +0 -0
  233. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/x509/general_name.py +0 -0
  234. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/x509/name.py +0 -0
  235. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/x509/ocsp.py +0 -0
  236. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/x509/oid.py +0 -0
  237. {cryptography-45.0.2 → cryptography-45.0.3}/src/cryptography/x509/verification.py +0 -0
  238. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/Cargo.toml +0 -0
  239. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/build.rs +0 -0
  240. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-cffi/Cargo.toml +0 -0
  241. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-cffi/build.rs +0 -0
  242. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-cffi/src/lib.rs +0 -0
  243. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-crypto/Cargo.toml +0 -0
  244. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-crypto/src/encoding.rs +0 -0
  245. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-crypto/src/lib.rs +0 -0
  246. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-crypto/src/pkcs12.rs +0 -0
  247. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-keepalive/Cargo.toml +0 -0
  248. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-keepalive/src/lib.rs +0 -0
  249. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-key-parsing/Cargo.toml +0 -0
  250. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-key-parsing/build.rs +0 -0
  251. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-key-parsing/src/dsa.rs +0 -0
  252. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-key-parsing/src/ec.rs +0 -0
  253. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-key-parsing/src/lib.rs +0 -0
  254. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-key-parsing/src/rsa.rs +0 -0
  255. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-key-parsing/src/spki.rs +0 -0
  256. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-openssl/Cargo.toml +0 -0
  257. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-openssl/build.rs +0 -0
  258. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-openssl/src/aead.rs +0 -0
  259. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-openssl/src/cmac.rs +0 -0
  260. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-openssl/src/fips.rs +0 -0
  261. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-openssl/src/hmac.rs +0 -0
  262. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-openssl/src/lib.rs +0 -0
  263. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-openssl/src/poly1305.rs +0 -0
  264. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509/Cargo.toml +0 -0
  265. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509/src/certificate.rs +0 -0
  266. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509/src/crl.rs +0 -0
  267. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509/src/csr.rs +0 -0
  268. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509/src/extensions.rs +0 -0
  269. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509/src/lib.rs +0 -0
  270. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509/src/name.rs +0 -0
  271. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509/src/ocsp_req.rs +0 -0
  272. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509/src/ocsp_resp.rs +0 -0
  273. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509/src/pkcs12.rs +0 -0
  274. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509/src/pkcs7.rs +0 -0
  275. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509/src/pkcs8.rs +0 -0
  276. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509-verification/Cargo.toml +0 -0
  277. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509-verification/src/certificate.rs +0 -0
  278. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509-verification/src/lib.rs +0 -0
  279. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509-verification/src/ops.rs +0 -0
  280. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509-verification/src/policy/extension.rs +0 -0
  281. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509-verification/src/policy/mod.rs +0 -0
  282. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509-verification/src/trust_store.rs +0 -0
  283. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/cryptography-x509-verification/src/types.rs +0 -0
  284. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/asn1.rs +0 -0
  285. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/aead.rs +0 -0
  286. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/ciphers.rs +0 -0
  287. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/cmac.rs +0 -0
  288. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/dh.rs +0 -0
  289. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/dsa.rs +0 -0
  290. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/ec.rs +0 -0
  291. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/ed25519.rs +0 -0
  292. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/ed448.rs +0 -0
  293. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/hashes.rs +0 -0
  294. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/hmac.rs +0 -0
  295. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/kdf.rs +0 -0
  296. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/keys.rs +0 -0
  297. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/mod.rs +0 -0
  298. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/poly1305.rs +0 -0
  299. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/rsa.rs +0 -0
  300. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/utils.rs +0 -0
  301. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/x25519.rs +0 -0
  302. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/backend/x448.rs +0 -0
  303. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/buf.rs +0 -0
  304. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/error.rs +0 -0
  305. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/exceptions.rs +0 -0
  306. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/lib.rs +0 -0
  307. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/oid.rs +0 -0
  308. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/padding.rs +0 -0
  309. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/pkcs7.rs +0 -0
  310. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/test_support.rs +0 -0
  311. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/utils.rs +0 -0
  312. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/x509/certificate.rs +0 -0
  313. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/x509/common.rs +0 -0
  314. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/x509/crl.rs +0 -0
  315. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/x509/csr.rs +0 -0
  316. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/x509/extensions.rs +0 -0
  317. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/x509/mod.rs +0 -0
  318. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/x509/ocsp.rs +0 -0
  319. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/x509/ocsp_req.rs +0 -0
  320. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/x509/ocsp_resp.rs +0 -0
  321. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/x509/sct.rs +0 -0
  322. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/x509/sign.rs +0 -0
  323. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/x509/verify/extension_policy.rs +0 -0
  324. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/x509/verify/mod.rs +0 -0
  325. {cryptography-45.0.2 → cryptography-45.0.3}/src/rust/src/x509/verify/policy.rs +0 -0
  326. {cryptography-45.0.2 → cryptography-45.0.3}/tests/__init__.py +0 -0
  327. {cryptography-45.0.2 → cryptography-45.0.3}/tests/bench/__init__.py +0 -0
  328. {cryptography-45.0.2 → cryptography-45.0.3}/tests/bench/test_aead.py +0 -0
  329. {cryptography-45.0.2 → cryptography-45.0.3}/tests/bench/test_ec_load.py +0 -0
  330. {cryptography-45.0.2 → cryptography-45.0.3}/tests/bench/test_fernet.py +0 -0
  331. {cryptography-45.0.2 → cryptography-45.0.3}/tests/bench/test_hashes.py +0 -0
  332. {cryptography-45.0.2 → cryptography-45.0.3}/tests/bench/test_hmac.py +0 -0
  333. {cryptography-45.0.2 → cryptography-45.0.3}/tests/bench/test_x509.py +0 -0
  334. {cryptography-45.0.2 → cryptography-45.0.3}/tests/conftest.py +0 -0
  335. {cryptography-45.0.2 → cryptography-45.0.3}/tests/deprecated_module.py +0 -0
  336. {cryptography-45.0.2 → cryptography-45.0.3}/tests/doubles.py +0 -0
  337. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/__init__.py +0 -0
  338. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/backends/__init__.py +0 -0
  339. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/backends/test_openssl.py +0 -0
  340. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/bindings/test_openssl.py +0 -0
  341. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/__init__.py +0 -0
  342. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/decrepit/__init__.py +0 -0
  343. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/decrepit/test_3des.py +0 -0
  344. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/decrepit/test_algorithms.py +0 -0
  345. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/decrepit/test_arc4.py +0 -0
  346. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/decrepit/test_rc2.py +0 -0
  347. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/fixtures_dh.py +0 -0
  348. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/fixtures_dsa.py +0 -0
  349. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/fixtures_ec.py +0 -0
  350. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/fixtures_rsa.py +0 -0
  351. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_aead.py +0 -0
  352. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_aes.py +0 -0
  353. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_aes_gcm.py +0 -0
  354. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_argon2.py +0 -0
  355. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_asym_utils.py +0 -0
  356. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_block.py +0 -0
  357. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_camellia.py +0 -0
  358. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_chacha20.py +0 -0
  359. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_ciphers.py +0 -0
  360. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_cmac.py +0 -0
  361. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_concatkdf.py +0 -0
  362. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_constant_time.py +0 -0
  363. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_dh.py +0 -0
  364. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_dsa.py +0 -0
  365. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_ec.py +0 -0
  366. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_ed25519.py +0 -0
  367. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_ed448.py +0 -0
  368. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_hash_vectors.py +0 -0
  369. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_hashes.py +0 -0
  370. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_hkdf.py +0 -0
  371. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_hkdf_vectors.py +0 -0
  372. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_hmac.py +0 -0
  373. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_hmac_vectors.py +0 -0
  374. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_kbkdf.py +0 -0
  375. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_kbkdf_vectors.py +0 -0
  376. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_keywrap.py +0 -0
  377. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_padding.py +0 -0
  378. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_pbkdf2hmac.py +0 -0
  379. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_pbkdf2hmac_vectors.py +0 -0
  380. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_pkcs12.py +0 -0
  381. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_pkcs7.py +0 -0
  382. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_poly1305.py +0 -0
  383. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_rsa.py +0 -0
  384. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_scrypt.py +0 -0
  385. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_sm4.py +0 -0
  386. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_ssh.py +0 -0
  387. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_x25519.py +0 -0
  388. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_x448.py +0 -0
  389. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_x963_vectors.py +0 -0
  390. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_x963kdf.py +0 -0
  391. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/test_xofhash.py +0 -0
  392. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/twofactor/__init__.py +0 -0
  393. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/twofactor/test_hotp.py +0 -0
  394. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/twofactor/test_totp.py +0 -0
  395. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/primitives/utils.py +0 -0
  396. {cryptography-45.0.2 → cryptography-45.0.3}/tests/hazmat/test_oid.py +0 -0
  397. {cryptography-45.0.2 → cryptography-45.0.3}/tests/test_cryptography_utils.py +0 -0
  398. {cryptography-45.0.2 → cryptography-45.0.3}/tests/test_fernet.py +0 -0
  399. {cryptography-45.0.2 → cryptography-45.0.3}/tests/test_meta.py +0 -0
  400. {cryptography-45.0.2 → cryptography-45.0.3}/tests/test_utils.py +0 -0
  401. {cryptography-45.0.2 → cryptography-45.0.3}/tests/test_warnings.py +0 -0
  402. {cryptography-45.0.2 → cryptography-45.0.3}/tests/utils.py +0 -0
  403. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/__init__.py +0 -0
  404. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/test_aes.py +0 -0
  405. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/test_chacha20poly1305.py +0 -0
  406. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/test_cmac.py +0 -0
  407. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/test_dsa.py +0 -0
  408. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/test_ecdh.py +0 -0
  409. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/test_ecdsa.py +0 -0
  410. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/test_eddsa.py +0 -0
  411. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/test_hkdf.py +0 -0
  412. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/test_hmac.py +0 -0
  413. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/test_keywrap.py +0 -0
  414. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/test_pbkdf2.py +0 -0
  415. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/test_rsa.py +0 -0
  416. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/test_utils.py +0 -0
  417. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/test_x25519.py +0 -0
  418. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/test_x448.py +0 -0
  419. {cryptography-45.0.2 → cryptography-45.0.3}/tests/wycheproof/utils.py +0 -0
  420. {cryptography-45.0.2 → cryptography-45.0.3}/tests/x509/__init__.py +0 -0
  421. {cryptography-45.0.2 → cryptography-45.0.3}/tests/x509/test_name.py +0 -0
  422. {cryptography-45.0.2 → cryptography-45.0.3}/tests/x509/test_ocsp.py +0 -0
  423. {cryptography-45.0.2 → cryptography-45.0.3}/tests/x509/test_x509.py +0 -0
  424. {cryptography-45.0.2 → cryptography-45.0.3}/tests/x509/test_x509_crlbuilder.py +0 -0
  425. {cryptography-45.0.2 → cryptography-45.0.3}/tests/x509/test_x509_ext.py +0 -0
  426. {cryptography-45.0.2 → cryptography-45.0.3}/tests/x509/test_x509_revokedcertbuilder.py +0 -0
  427. {cryptography-45.0.2 → cryptography-45.0.3}/tests/x509/verification/__init__.py +0 -0
  428. {cryptography-45.0.2 → cryptography-45.0.3}/tests/x509/verification/test_limbo.py +0 -0
  429. {cryptography-45.0.2 → cryptography-45.0.3}/tests/x509/verification/test_verification.py +0 -0
@@ -1,6 +1,16 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ .. _v45-0-3:
5
+
6
+ 45.0.3 - 2025-05-25
7
+ ~~~~~~~~~~~~~~~~~~~
8
+
9
+ * Fixed decrypting PKCS#8 files encrypted with long salts (this impacts keys
10
+ encrypted by Bouncy Castle).
11
+ * Fixed decrypting PKCS#8 files encrypted with DES-CBC-MD5. While wildly
12
+ insecure, this remains prevalent.
13
+
4
14
  .. _v45-0-2:
5
15
 
6
16
  45.0.2 - 2025-05-17
@@ -37,6 +47,24 @@ Changelog
37
47
  provided (previously no exception was raised), and raises a ``TypeError`` if
38
48
  the key is encrypted but no password is provided (previously a ``ValueError``
39
49
  was raised).
50
+ * Added ``__copy__`` to the
51
+ :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePrivateKey`,
52
+ :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey`,
53
+ :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PublicKey`,
54
+ :class:`~cryptography.hazmat.primitives.asymmetric.ed25519.Ed25519PrivateKey`,
55
+ :class:`~cryptography.hazmat.primitives.asymmetric.ed448.Ed448PublicKey`,
56
+ :class:`~cryptography.hazmat.primitives.asymmetric.ed448.Ed448PrivateKey`,
57
+ :class:`~cryptography.hazmat.primitives.asymmetric.x25519.X25519PublicKey`,
58
+ :class:`~cryptography.hazmat.primitives.asymmetric.x25519.X25519PrivateKey`,
59
+ :class:`~cryptography.hazmat.primitives.asymmetric.x448.X448PublicKey`,
60
+ :class:`~cryptography.hazmat.primitives.asymmetric.x448.X448PrivateKey`,
61
+ :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey`,
62
+ :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey`,
63
+ :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPrivateKey`,
64
+ :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey`,
65
+ :class:`~cryptography.hazmat.primitives.asymmetric.dh.DHPrivateKey`, and
66
+ :class:`~cryptography.hazmat.primitives.asymmetric.dh.DHPublicKey`
67
+ abstract base classes.
40
68
  * We significantly refactored how private key loading (
41
69
  :func:`~cryptography.hazmat.primitives.serialization.load_pem_private_key`
42
70
  and
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cryptography
3
- Version: 45.0.2
3
+ Version: 45.0.3
4
4
  Classifier: Development Status :: 5 - Production/Stable
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Natural Language :: English
@@ -26,7 +26,7 @@ Requires-Dist: cffi>=1.14 ; platform_python_implementation != 'PyPy'
26
26
  Requires-Dist: bcrypt>=3.1.5 ; extra == 'ssh'
27
27
  Requires-Dist: nox>=2024.4.15 ; extra == 'nox'
28
28
  Requires-Dist: nox[uv]>=2024.3.2 ; python_full_version >= '3.8' and extra == 'nox'
29
- Requires-Dist: cryptography-vectors==45.0.2 ; extra == 'test'
29
+ Requires-Dist: cryptography-vectors==45.0.3 ; extra == 'test'
30
30
  Requires-Dist: pytest>=7.4.0 ; extra == 'test'
31
31
  Requires-Dist: pytest-benchmark>=4.0 ; extra == 'test'
32
32
  Requires-Dist: pytest-cov>=2.10.1 ; extra == 'test'
@@ -285,6 +285,11 @@ Custom asymmetric vectors
285
285
  RSA key in an encrypted PEM with a malformed IV (not valid hex).
286
286
  * ``asymmetric/Traditional_OpenSSL_Serialization/key1-short-iv.pem`` - An
287
287
  RSA key in an encrypted PEM with an IV that's too short (less than 8 bytes).
288
+ * ``asymmetric/PKCS8/rsa-pbewithmd5anddescbc.pem`` - A PKCS8 encoded RSA key
289
+ encrypted using the ``pbeWithMD5AndDES-CBC`` algorithm with the password
290
+ ``hunter2``.
291
+ * ``asymmetric/PKCS8/rsa-pbe-3des-long-salt.pem`` - A PKCS8 encoded RSA key
292
+ encrypted with a 20 byte salt with the password ``password``.
288
293
 
289
294
  Key exchange
290
295
  ~~~~~~~~~~~~
@@ -4,7 +4,7 @@
4
4
  Decrepit Symmetric algorithms
5
5
  =============================
6
6
 
7
- .. module:: cryptography.hazmat.decrepit.ciphers
7
+ .. module:: cryptography.hazmat.decrepit.ciphers.algorithms
8
8
 
9
9
  This module contains decrepit symmetric encryption algorithms. These
10
10
  are algorithms that should not be used unless necessary for backwards
@@ -15,7 +15,7 @@ build-backend = "maturin"
15
15
 
16
16
  [project]
17
17
  name = "cryptography"
18
- version = "45.0.2"
18
+ version = "45.0.3"
19
19
  authors = [
20
20
  { name = "The Python Cryptographic Authority and individual contributors", email = "cryptography-dev@python.org" },
21
21
  ]
@@ -65,7 +65,7 @@ ssh = ["bcrypt >=3.1.5"]
65
65
  # All the following are used for our own testing.
66
66
  nox = ["nox >=2024.04.15", "nox[uv] >=2024.03.02; python_version >= '3.8'"]
67
67
  test = [
68
- "cryptography_vectors==45.0.2",
68
+ "cryptography_vectors==45.0.3",
69
69
  "pytest >=7.4.0",
70
70
  "pytest-benchmark >=4.0",
71
71
  "pytest-cov >=2.10.1",
@@ -10,7 +10,7 @@ __all__ = [
10
10
  "__version__",
11
11
  ]
12
12
 
13
- __version__ = "45.0.2"
13
+ __version__ = "45.0.3"
14
14
 
15
15
 
16
16
  __author__ = "The Python Cryptographic Authority and individual contributors"
@@ -40,6 +40,11 @@ class TripleDES(BlockCipherAlgorithm):
40
40
  return len(self.key) * 8
41
41
 
42
42
 
43
+ # Not actually supported, marker for tests
44
+ class _DES:
45
+ key_size = 64
46
+
47
+
43
48
  class Blowfish(BlockCipherAlgorithm):
44
49
  name = "Blowfish"
45
50
  block_size = 64
@@ -30,9 +30,37 @@ pub fn openssl_kdf(
30
30
  Ok(key)
31
31
  }
32
32
 
33
+ /// PBKDF1 as defined in RFC 2898 for PKCS#5 v1.5 PBE algorithms
34
+ pub fn pbkdf1(
35
+ hash_alg: openssl::hash::MessageDigest,
36
+ password: &[u8],
37
+ salt: [u8; 8],
38
+ iterations: u64,
39
+ length: usize,
40
+ ) -> Result<Vec<u8>, openssl::error::ErrorStack> {
41
+ if length > hash_alg.size() || iterations == 0 {
42
+ return Err(openssl::error::ErrorStack::get());
43
+ }
44
+
45
+ let mut h = openssl::hash::Hasher::new(hash_alg)?;
46
+ h.update(password)?;
47
+ h.update(&salt)?;
48
+ let mut t = h.finish()?;
49
+
50
+ // Apply hash function for specified iterations
51
+ for _ in 1..iterations {
52
+ let mut h = openssl::hash::Hasher::new(hash_alg)?;
53
+ h.update(&t)?;
54
+ t = h.finish()?;
55
+ }
56
+
57
+ // Return the first `length` bytes
58
+ Ok(t[..length].to_vec())
59
+ }
60
+
33
61
  #[cfg(test)]
34
62
  mod tests {
35
- use super::openssl_kdf;
63
+ use super::{openssl_kdf, pbkdf1};
36
64
 
37
65
  #[test]
38
66
  fn test_openssl_kdf() {
@@ -98,4 +126,10 @@ mod tests {
98
126
  assert_eq!(key, expected);
99
127
  }
100
128
  }
129
+
130
+ #[test]
131
+ fn test_pbkdf1() {
132
+ assert!(pbkdf1(openssl::hash::MessageDigest::md5(), b"abc", [0; 8], 1, 20).is_err());
133
+ assert!(pbkdf1(openssl::hash::MessageDigest::md5(), b"abc", [0; 8], 0, 8).is_err());
134
+ }
101
135
  }
@@ -2,7 +2,9 @@
2
2
  // 2.0, and the BSD License. See the LICENSE file in the root of this repository
3
3
  // for complete details.
4
4
 
5
- use cryptography_x509::common::{AlgorithmIdentifier, AlgorithmParameters, PBES1Params};
5
+ use cryptography_x509::common::{
6
+ AlgorithmIdentifier, AlgorithmParameters, PbeParams, Pkcs12PbeParams,
7
+ };
6
8
  use cryptography_x509::csr::Attributes;
7
9
  use cryptography_x509::pkcs8::EncryptedPrivateKeyInfo;
8
10
 
@@ -122,19 +124,19 @@ pub fn parse_private_key(
122
124
  }
123
125
  }
124
126
 
125
- fn pbes1_decrypt(
127
+ fn pkcs12_pbe_decrypt(
126
128
  data: &[u8],
127
129
  password: &[u8],
128
130
  cipher: openssl::symm::Cipher,
129
131
  hash: openssl::hash::MessageDigest,
130
- params: &PBES1Params,
132
+ params: &Pkcs12PbeParams<'_>,
131
133
  ) -> KeyParsingResult<Vec<u8>> {
132
134
  let Ok(password) = std::str::from_utf8(password) else {
133
135
  return Err(KeyParsingError::IncorrectPassword);
134
136
  };
135
137
  let key = cryptography_crypto::pkcs12::kdf(
136
138
  password,
137
- &params.salt,
139
+ params.salt,
138
140
  cryptography_crypto::pkcs12::KDF_ENCRYPTION_KEY_ID,
139
141
  params.iterations,
140
142
  cipher.key_len(),
@@ -142,7 +144,7 @@ fn pbes1_decrypt(
142
144
  )?;
143
145
  let iv = cryptography_crypto::pkcs12::kdf(
144
146
  password,
145
- &params.salt,
147
+ params.salt,
146
148
  cryptography_crypto::pkcs12::KDF_IV_ID,
147
149
  params.iterations,
148
150
  cipher.block_size(),
@@ -153,6 +155,31 @@ fn pbes1_decrypt(
153
155
  .map_err(|_| KeyParsingError::IncorrectPassword)
154
156
  }
155
157
 
158
+ fn pkcs5_pbe_decrypt(
159
+ data: &[u8],
160
+ password: &[u8],
161
+ cipher: openssl::symm::Cipher,
162
+ hash: openssl::hash::MessageDigest,
163
+ params: &PbeParams,
164
+ ) -> KeyParsingResult<Vec<u8>> {
165
+ // PKCS#5 v1.5 uses PBKDF1 with iteration count
166
+ // For PKCS#5 PBE, we need key + IV length
167
+ let key_iv_len = cipher.key_len() + cipher.iv_len().unwrap();
168
+ let key_iv = cryptography_crypto::pbkdf1::pbkdf1(
169
+ hash,
170
+ password,
171
+ params.salt,
172
+ params.iterations,
173
+ key_iv_len,
174
+ )?;
175
+
176
+ let key = &key_iv[..cipher.key_len()];
177
+ let iv = &key_iv[cipher.key_len()..];
178
+
179
+ openssl::symm::decrypt(cipher, key, Some(iv), data)
180
+ .map_err(|_| KeyParsingError::IncorrectPassword)
181
+ }
182
+
156
183
  pub fn parse_encrypted_private_key(
157
184
  data: &[u8],
158
185
  password: Option<&[u8]>,
@@ -164,7 +191,14 @@ pub fn parse_encrypted_private_key(
164
191
  };
165
192
 
166
193
  let plaintext = match epki.encryption_algorithm.params {
167
- AlgorithmParameters::Pbes1WithShaAnd3KeyTripleDesCbc(params) => pbes1_decrypt(
194
+ AlgorithmParameters::PbeWithMd5AndDesCbc(params) => pkcs5_pbe_decrypt(
195
+ epki.encrypted_data,
196
+ password,
197
+ openssl::symm::Cipher::des_cbc(),
198
+ openssl::hash::MessageDigest::md5(),
199
+ &params,
200
+ )?,
201
+ AlgorithmParameters::PbeWithShaAnd3KeyTripleDesCbc(params) => pkcs12_pbe_decrypt(
168
202
  epki.encrypted_data,
169
203
  password,
170
204
  openssl::symm::Cipher::des_ede3_cbc(),
@@ -172,7 +206,7 @@ pub fn parse_encrypted_private_key(
172
206
  &params,
173
207
  )?,
174
208
  #[cfg(not(CRYPTOGRAPHY_OSSLCONF = "OPENSSL_NO_RC2"))]
175
- AlgorithmParameters::Pbe1WithShaAnd40BitRc2Cbc(params) => pbes1_decrypt(
209
+ AlgorithmParameters::PbeWithShaAnd40BitRc2Cbc(params) => pkcs12_pbe_decrypt(
176
210
  epki.encrypted_data,
177
211
  password,
178
212
  openssl::symm::Cipher::rc2_40_cbc(),
@@ -165,10 +165,12 @@ pub enum AlgorithmParameters<'a> {
165
165
  #[defined_by(oid::RC2_CBC)]
166
166
  Rc2Cbc(Rc2CbcParams),
167
167
 
168
- #[defined_by(oid::PBES1_WITH_SHA_AND_3KEY_TRIPLEDES_CBC)]
169
- Pbes1WithShaAnd3KeyTripleDesCbc(PBES1Params),
170
- #[defined_by(oid::PBES1_WITH_SHA_AND_40_BIT_RC2_CBC)]
171
- Pbe1WithShaAnd40BitRc2Cbc(PBES1Params),
168
+ #[defined_by(oid::PBE_WITH_MD5_AND_DES_CBC)]
169
+ PbeWithMd5AndDesCbc(PbeParams),
170
+ #[defined_by(oid::PBE_WITH_SHA_AND_3KEY_TRIPLEDES_CBC)]
171
+ PbeWithShaAnd3KeyTripleDesCbc(Pkcs12PbeParams<'a>),
172
+ #[defined_by(oid::PBE_WITH_SHA_AND_40_BIT_RC2_CBC)]
173
+ PbeWithShaAnd40BitRc2Cbc(Pkcs12PbeParams<'a>),
172
174
 
173
175
  #[default]
174
176
  Other(asn1::ObjectIdentifier, Option<asn1::Tlv<'a>>),
@@ -529,12 +531,20 @@ pub struct ScryptParams<'a> {
529
531
  pub key_length: Option<u32>,
530
532
  }
531
533
 
534
+ // RFC 8018 Appendix A.3
532
535
  #[derive(asn1::Asn1Read, asn1::Asn1Write, PartialEq, Eq, Hash, Clone, Debug)]
533
- pub struct PBES1Params {
536
+ pub struct PbeParams {
534
537
  pub salt: [u8; 8],
535
538
  pub iterations: u64,
536
539
  }
537
540
 
541
+ // From RFC 7202 Appendix C
542
+ #[derive(asn1::Asn1Read, asn1::Asn1Write, PartialEq, Eq, Hash, Clone, Debug)]
543
+ pub struct Pkcs12PbeParams<'a> {
544
+ pub salt: &'a [u8],
545
+ pub iterations: u64,
546
+ }
547
+
538
548
  #[derive(asn1::Asn1Read, asn1::Asn1Write, PartialEq, Eq, Hash, Clone, Debug)]
539
549
  pub struct Rc2CbcParams {
540
550
  pub version: Option<u32>,
@@ -152,11 +152,12 @@ pub const EKU_CERTIFICATE_TRANSPARENCY_OID: asn1::ObjectIdentifier =
152
152
 
153
153
  pub const PBES2_OID: asn1::ObjectIdentifier = asn1::oid!(1, 2, 840, 113549, 1, 5, 13);
154
154
  pub const PBKDF2_OID: asn1::ObjectIdentifier = asn1::oid!(1, 2, 840, 113549, 1, 5, 12);
155
+ pub const PBE_WITH_MD5_AND_DES_CBC: asn1::ObjectIdentifier = asn1::oid!(1, 2, 840, 113549, 1, 5, 3);
155
156
  pub const SCRYPT_OID: asn1::ObjectIdentifier = asn1::oid!(1, 3, 6, 1, 4, 1, 11591, 4, 11);
156
157
 
157
- pub const PBES1_WITH_SHA_AND_3KEY_TRIPLEDES_CBC: asn1::ObjectIdentifier =
158
+ pub const PBE_WITH_SHA_AND_3KEY_TRIPLEDES_CBC: asn1::ObjectIdentifier =
158
159
  asn1::oid!(1, 2, 840, 113549, 1, 12, 1, 3);
159
- pub const PBES1_WITH_SHA_AND_40_BIT_RC2_CBC: asn1::ObjectIdentifier =
160
+ pub const PBE_WITH_SHA_AND_40_BIT_RC2_CBC: asn1::ObjectIdentifier =
160
161
  asn1::oid!(1, 2, 840, 113549, 1, 12, 1, 6);
161
162
 
162
163
  pub const AES_128_CBC_OID: asn1::ObjectIdentifier = asn1::oid!(2, 16, 840, 1, 101, 3, 4, 1, 2);
@@ -123,6 +123,7 @@ fn get_cipher_registry(
123
123
  let aes128 = types::AES128.get(py)?;
124
124
  let aes256 = types::AES256.get(py)?;
125
125
  let triple_des = types::TRIPLE_DES.get(py)?;
126
+ let des = types::DES.get(py)?;
126
127
  #[cfg(not(CRYPTOGRAPHY_OSSLCONF = "OPENSSL_NO_CAMELLIA"))]
127
128
  let camellia = types::CAMELLIA.get(py)?;
128
129
  #[cfg(not(CRYPTOGRAPHY_OSSLCONF = "OPENSSL_NO_BF"))]
@@ -306,6 +307,8 @@ fn get_cipher_registry(
306
307
  #[cfg(not(CRYPTOGRAPHY_OSSLCONF = "OPENSSL_NO_RC4"))]
307
308
  m.add(&arc4, none_type.as_any(), None, Cipher::rc4())?;
308
309
 
310
+ m.add(&des, &cbc, Some(64), Cipher::des_cbc())?;
311
+
309
312
  if let Some(rc2_cbc) = Cipher::from_nid(openssl::nid::Nid::RC2_CBC) {
310
313
  m.add(&rc2, &cbc, Some(128), rc2_cbc)?;
311
314
  }
@@ -112,14 +112,14 @@ pub(crate) fn symmetric_encrypt(
112
112
  }
113
113
 
114
114
  enum EncryptionAlgorithm {
115
- PBESv1SHA1And3KeyTripleDESCBC,
115
+ PBESHA1And3KeyTripleDESCBC,
116
116
  PBESv2SHA256AndAES256CBC,
117
117
  }
118
118
 
119
119
  impl EncryptionAlgorithm {
120
120
  fn salt_length(&self) -> usize {
121
121
  match self {
122
- EncryptionAlgorithm::PBESv1SHA1And3KeyTripleDESCBC => 8,
122
+ EncryptionAlgorithm::PBESHA1And3KeyTripleDESCBC => 8,
123
123
  EncryptionAlgorithm::PBESv2SHA256AndAES256CBC => 16,
124
124
  }
125
125
  }
@@ -131,11 +131,11 @@ impl EncryptionAlgorithm {
131
131
  iv: &'a [u8],
132
132
  ) -> cryptography_x509::common::AlgorithmIdentifier<'a> {
133
133
  match self {
134
- EncryptionAlgorithm::PBESv1SHA1And3KeyTripleDESCBC => {
134
+ EncryptionAlgorithm::PBESHA1And3KeyTripleDESCBC => {
135
135
  cryptography_x509::common::AlgorithmIdentifier {
136
136
  oid: asn1::DefinedByMarker::marker(),
137
- params: cryptography_x509::common::AlgorithmParameters::Pbes1WithShaAnd3KeyTripleDesCbc(cryptography_x509::common::PBES1Params{
138
- salt: salt[..8].try_into().unwrap(),
137
+ params: cryptography_x509::common::AlgorithmParameters::PbeWithShaAnd3KeyTripleDesCbc(cryptography_x509::common::Pkcs12PbeParams{
138
+ salt,
139
139
  iterations: cipher_kdf_iter,
140
140
  }),
141
141
  }
@@ -189,7 +189,7 @@ impl EncryptionAlgorithm {
189
189
  data: &[u8],
190
190
  ) -> CryptographyResult<Vec<u8>> {
191
191
  match self {
192
- EncryptionAlgorithm::PBESv1SHA1And3KeyTripleDESCBC => {
192
+ EncryptionAlgorithm::PBESHA1And3KeyTripleDESCBC => {
193
193
  let key = cryptography_crypto::pkcs12::kdf(
194
194
  password,
195
195
  salt,
@@ -341,7 +341,7 @@ fn decode_encryption_algorithm<'a>(
341
341
  let key_cert_alg =
342
342
  encryption_algorithm.getattr(pyo3::intern!(py, "_key_cert_algorithm"))?;
343
343
  let cipher = if key_cert_alg.is(&types::PBES_PBESV1SHA1AND3KEYTRIPLEDESCBC.get(py)?) {
344
- EncryptionAlgorithm::PBESv1SHA1And3KeyTripleDESCBC
344
+ EncryptionAlgorithm::PBESHA1And3KeyTripleDESCBC
345
345
  } else if key_cert_alg.is(&types::PBES_PBESV2SHA256ANDAES256CBC.get(py)?) {
346
346
  EncryptionAlgorithm::PBESv2SHA256AndAES256CBC
347
347
  } else {
@@ -515,6 +515,8 @@ pub static TRIPLE_DES: LazyPyImport = LazyPyImport::new(
515
515
  "cryptography.hazmat.decrepit.ciphers.algorithms",
516
516
  &["TripleDES"],
517
517
  );
518
+ pub static DES: LazyPyImport =
519
+ LazyPyImport::new("cryptography.hazmat.decrepit.ciphers.algorithms", &["_DES"]);
518
520
  pub static AES: LazyPyImport = LazyPyImport::new(
519
521
  "cryptography.hazmat.primitives.ciphers.algorithms",
520
522
  &["AES"],
@@ -11,7 +11,7 @@ import textwrap
11
11
  import pytest
12
12
 
13
13
  from cryptography.hazmat.bindings._rust import openssl as rust_openssl
14
- from cryptography.hazmat.decrepit.ciphers.algorithms import RC2
14
+ from cryptography.hazmat.decrepit.ciphers.algorithms import _DES, RC2
15
15
  from cryptography.hazmat.primitives.asymmetric import (
16
16
  dsa,
17
17
  ec,
@@ -22,7 +22,7 @@ from cryptography.hazmat.primitives.asymmetric import (
22
22
  x25519,
23
23
  )
24
24
  from cryptography.hazmat.primitives.ciphers import modes
25
- from cryptography.hazmat.primitives.hashes import SHA1
25
+ from cryptography.hazmat.primitives.hashes import MD5, SHA1
26
26
  from cryptography.hazmat.primitives.serialization import (
27
27
  BestAvailableEncryption,
28
28
  Encoding,
@@ -463,6 +463,20 @@ class TestDERSerialization:
463
463
  with pytest.raises(ValueError):
464
464
  load_pem_private_key(data, password=b"password")
465
465
 
466
+ @pytest.mark.skip_fips(reason="3DES unsupported in FIPS")
467
+ def test_load_pkcs8_pbes_long_salt(self):
468
+ data = load_vectors_from_file(
469
+ os.path.join("asymmetric", "PKCS8", "rsa-pbe-3des-long-salt.pem"),
470
+ lambda f: f.read(),
471
+ mode="rb",
472
+ )
473
+ key = load_pem_private_key(
474
+ data, password=b"password", unsafe_skip_rsa_key_validation=True
475
+ )
476
+ assert isinstance(key, rsa.RSAPrivateKey)
477
+ assert key.key_size == 4096
478
+ assert key.private_numbers().public_numbers.e == 65537
479
+
466
480
  @pytest.mark.parametrize(
467
481
  "filename",
468
482
  [
@@ -559,6 +573,20 @@ class TestDERSerialization:
559
573
  )
560
574
  assert isinstance(key, ed25519.Ed25519PrivateKey)
561
575
 
576
+ @pytest.mark.supported(
577
+ only_if=lambda backend: backend.hash_supported(MD5())
578
+ and backend.cipher_supported(_DES(), modes.CBC(b"\x00" * 8)),
579
+ skip_message="Does not support DES MD5",
580
+ )
581
+ def test_load_pkcs8_pbe_with_md5_and_des_cbc(self):
582
+ key = load_vectors_from_file(
583
+ os.path.join("asymmetric", "PKCS8", "rsa-pbewithmd5anddescbc.pem"),
584
+ lambda f: load_pem_private_key(f.read(), password=b"hunter2"),
585
+ mode="rb",
586
+ )
587
+ assert isinstance(key, rsa.RSAPrivateKey)
588
+ assert key.key_size == 2048
589
+
562
590
 
563
591
  class TestPEMSerialization:
564
592
  @pytest.mark.parametrize(
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes