M2Crypto 0.46.2__tar.gz → 0.48.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.
Files changed (409) hide show
  1. {m2crypto-0.46.2 → m2crypto-0.48.0}/CHANGES +83 -1
  2. m2crypto-0.48.0/INSTALL.md +157 -0
  3. {m2crypto-0.46.2 → m2crypto-0.48.0}/MANIFEST.in +2 -2
  4. {m2crypto-0.46.2 → m2crypto-0.48.0}/PKG-INFO +30 -41
  5. m2crypto-0.46.2/README.rst → m2crypto-0.48.0/README.md +29 -41
  6. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/z2s.py +0 -1
  7. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ZopeX3/install_dir/lib/python/zope/server/http/https_server.py +0 -1
  8. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ZopeX3/install_dir/lib/python/zope/server/http/publisherhttps_server.py +0 -1
  9. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/bio_mem_rw.py +0 -1
  10. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/dhtest.py +0 -1
  11. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/dsa_bench.py +0 -1
  12. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/dsatest.py +0 -1
  13. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ec/ecdhtest.py +0 -1
  14. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ec/ecdsa_bench.py +0 -1
  15. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ec/ecdsatest.py +0 -1
  16. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/https.howto/get_https.py +0 -1
  17. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/START.py +0 -1
  18. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/START_xmlrpc.py +0 -1
  19. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/asyncore.py +0 -1
  20. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/auth_handler.py +0 -1
  21. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/counter.py +0 -1
  22. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/filesys.py +0 -1
  23. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/ftp_server.py +0 -1
  24. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/http_server.py +0 -1
  25. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/put_handler.py +0 -1
  26. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/xmlrpc_handler.py +0 -1
  27. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/START.py +0 -1
  28. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/START_xmlrpc.py +0 -1
  29. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/counter.py +0 -1
  30. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/ftp_server.py +0 -1
  31. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/http_server.py +0 -1
  32. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/xmlrpc_handler.py +0 -1
  33. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/pgp/pgpstep.py +0 -1
  34. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/pkcs7/test.py +0 -1
  35. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/rsa_bench.py +0 -1
  36. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/rsatest.py +0 -1
  37. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime/sendsmime.py +6 -8
  38. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime/test.py +0 -1
  39. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime/unsmime.py +0 -1
  40. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime.howto/decrypt.py +0 -1
  41. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime.howto/dv.py +0 -1
  42. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime.howto/encrypt.py +0 -1
  43. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime.howto/se.py +0 -1
  44. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime.howto/sendsmime.py +6 -8
  45. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime.howto/sign.py +0 -1
  46. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime.howto/verify.py +0 -1
  47. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/echo-eg.py +0 -1
  48. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/echo.py +0 -1
  49. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/echod-async.py +0 -1
  50. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/echod-eg1.py +0 -1
  51. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/echod_lib.py +0 -1
  52. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/https_cli.py +0 -1
  53. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/https_cli_async.py +0 -1
  54. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/s_client.py +0 -1
  55. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/s_server.py +0 -1
  56. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/server3.py +0 -1
  57. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/sess.py +0 -1
  58. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/sess2.py +0 -1
  59. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/somelib.py +0 -1
  60. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/twistedsslclient.py +0 -1
  61. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/twistedsslserver.py +0 -1
  62. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/xmlrpc_cli.py +0 -1
  63. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/xmlrpc_srv.py +0 -1
  64. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/tinderbox/build_lib.py +0 -1
  65. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/x509/ca.py +0 -1
  66. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/x509/certdata2pem.py +0 -1
  67. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/x509/demo1.py +0 -1
  68. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/x509/proxy_info.py +0 -1
  69. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/x509/proxy_init.py +0 -1
  70. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/x509/proxylib.py +0 -1
  71. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/x509/x509auth.py +0 -1
  72. m2crypto-0.48.0/doc/.gitignore +3 -0
  73. m2crypto-0.48.0/doc/HOWTOs.md +12 -0
  74. m2crypto-0.46.2/doc/M2Crypto.SSL.rst → m2crypto-0.48.0/doc/M2Crypto.SSL.md +31 -23
  75. m2crypto-0.46.2/doc/M2Crypto.rst → m2crypto-0.48.0/doc/M2Crypto.md +98 -58
  76. {m2crypto-0.46.2 → m2crypto-0.48.0}/doc/Makefile +1 -1
  77. {m2crypto-0.46.2 → m2crypto-0.48.0}/doc/conf.py +7 -3
  78. m2crypto-0.48.0/doc/howto.ca.md +380 -0
  79. m2crypto-0.46.2/doc/howto.migration.rst → m2crypto-0.48.0/doc/howto.migration.md +69 -56
  80. m2crypto-0.48.0/doc/howto.smime.md +818 -0
  81. m2crypto-0.48.0/doc/howto.ssl.md +242 -0
  82. m2crypto-0.48.0/doc/index.md +16 -0
  83. {m2crypto-0.46.2 → m2crypto-0.48.0}/doc/requirements.txt +1 -0
  84. {m2crypto-0.46.2 → m2crypto-0.48.0}/setup.cfg +7 -5
  85. {m2crypto-0.46.2 → m2crypto-0.48.0}/setup.py +85 -12
  86. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/ASN1.py +125 -17
  87. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/AuthCookie.py +7 -2
  88. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/EVP.py +34 -17
  89. m2crypto-0.48.0/src/M2Crypto/Engine.py +322 -0
  90. m2crypto-0.48.0/src/M2Crypto/Provider.py +152 -0
  91. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/Rand.py +5 -6
  92. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/SMIME.py +66 -2
  93. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/SSL/Checker.py +27 -18
  94. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/SSL/Connection.py +16 -0
  95. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/SSL/timeout.py +20 -4
  96. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/X509.py +281 -16
  97. m2crypto-0.48.0/src/M2Crypto/__init__.py +52 -0
  98. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/_m2crypto.pyi +87 -2
  99. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/httpslib.py +11 -0
  100. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/types.py +4 -1
  101. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/util.py +4 -10
  102. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto.egg-info/PKG-INFO +30 -41
  103. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto.egg-info/SOURCES.txt +30 -20
  104. m2crypto-0.48.0/src/M2Crypto.egg-info/requires.txt +1 -0
  105. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_aes.i +0 -3
  106. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_asn1.i +13 -0
  107. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_bio.i +0 -48
  108. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_ec.i +1 -1
  109. m2crypto-0.48.0/src/SWIG/_engine.i +223 -0
  110. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_evp.i +1 -23
  111. m2crypto-0.48.0/src/SWIG/_lib.h +62 -0
  112. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_lib.i +1 -9
  113. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_m2crypto.i +10 -11
  114. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_pkcs7.i +56 -0
  115. m2crypto-0.48.0/src/SWIG/_provider.i +440 -0
  116. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_py3k_compat.i +0 -19
  117. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_python_logging.i +3 -3
  118. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_rsa.i +0 -4
  119. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_ssl.i +12 -5
  120. m2crypto-0.48.0/src/SWIG/_threads.i +23 -0
  121. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_x509.i +75 -36
  122. m2crypto-0.48.0/tests/__init__.py +90 -0
  123. m2crypto-0.48.0/tests/crl_data/certs/revoked_cert.pem +18 -0
  124. m2crypto-0.48.0/tests/crl_data/certs/revoked_key.pem +28 -0
  125. m2crypto-0.48.0/tests/crl_data/certs/revoking_ca.pem +19 -0
  126. m2crypto-0.48.0/tests/crl_data/certs/revoking_ca_key.pem +28 -0
  127. m2crypto-0.48.0/tests/crl_data/certs/revoking_crl.pem +12 -0
  128. m2crypto-0.48.0/tests/crl_data/certs/valid_cert.pem +18 -0
  129. m2crypto-0.48.0/tests/crl_data/certs/valid_key.pem +28 -0
  130. m2crypto-0.48.0/tests/crl_data/create_certs_to_revoke.py +91 -0
  131. m2crypto-0.48.0/tests/idn_server.pem +105 -0
  132. m2crypto-0.48.0/tests/idn_server_key.pem +27 -0
  133. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/makecerts.py +61 -12
  134. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_asn1.py +0 -1
  135. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_authcookie.py +32 -1
  136. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_bio.py +35 -45
  137. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_bio_membuf.py +9 -2
  138. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_bio_ssl.py +70 -53
  139. m2crypto-0.48.0/tests/test_engine.py +66 -0
  140. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_evp.py +21 -29
  141. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_init.py +3 -1
  142. m2crypto-0.48.0/tests/test_provider.py +332 -0
  143. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_rand.py +1 -4
  144. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_rsa.py +51 -55
  145. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_smime.py +157 -12
  146. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_ssl.py +215 -61
  147. m2crypto-0.48.0/tests/test_starttls.py +112 -0
  148. m2crypto-0.48.0/tests/test_util.py +49 -0
  149. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_x509.py +304 -25
  150. m2crypto-0.46.2/INSTALL.rst +0 -142
  151. m2crypto-0.46.2/doc/HOWTOs.rst +0 -12
  152. m2crypto-0.46.2/doc/howto.ca.rst +0 -370
  153. m2crypto-0.46.2/doc/howto.smime.rst +0 -805
  154. m2crypto-0.46.2/doc/howto.ssl.rst +0 -132
  155. m2crypto-0.46.2/doc/index.rst +0 -19
  156. m2crypto-0.46.2/src/M2Crypto/__init__.py +0 -41
  157. m2crypto-0.46.2/src/SWIG/_lib.h +0 -17
  158. m2crypto-0.46.2/src/SWIG/_lib11_compat.i +0 -457
  159. m2crypto-0.46.2/src/SWIG/_threads.i +0 -67
  160. m2crypto-0.46.2/src/SWIG/libcrypto-compat.h +0 -62
  161. m2crypto-0.46.2/src/SWIG/py3k_compat.h +0 -32
  162. m2crypto-0.46.2/src/SWIG/python_logging.h +0 -11
  163. m2crypto-0.46.2/tests/__init__.py +0 -14
  164. m2crypto-0.46.2/tests/alltests.py +0 -121
  165. m2crypto-0.46.2/tests/randpool.dat +0 -0
  166. m2crypto-0.46.2/tests/sig.p7 +0 -35
  167. m2crypto-0.46.2/tests/sig.p7s +0 -48
  168. m2crypto-0.46.2/tests/te_chunked_response.txt +0 -11
  169. m2crypto-0.46.2/tests/test_util.py +0 -42
  170. {m2crypto-0.46.2 → m2crypto-0.48.0}/LICENSES/BSD-2-Clause.txt +0 -0
  171. {m2crypto-0.46.2 → m2crypto-0.48.0}/contrib/README +0 -0
  172. {m2crypto-0.46.2 → m2crypto-0.48.0}/contrib/SimpleX509create.README +0 -0
  173. {m2crypto-0.46.2 → m2crypto-0.48.0}/contrib/SimpleX509create.py +0 -0
  174. {m2crypto-0.46.2 → m2crypto-0.48.0}/contrib/dave.README +0 -0
  175. {m2crypto-0.46.2 → m2crypto-0.48.0}/contrib/isaac.README +0 -0
  176. {m2crypto-0.46.2 → m2crypto-0.48.0}/contrib/isaac.httpslib.py +0 -0
  177. {m2crypto-0.46.2 → m2crypto-0.48.0}/contrib/smimeplus.README +0 -0
  178. {m2crypto-0.46.2 → m2crypto-0.48.0}/contrib/smimeplus.py +0 -0
  179. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/CipherSaber/CipherSaber.py +0 -0
  180. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/CipherSaber/cstest1.cs1 +0 -0
  181. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/ZServer/HTTPS_Server.py +0 -0
  182. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/ZServer/__init__.py +0 -0
  183. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/ZServer/medusa/ftps_server.py +0 -0
  184. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/ZServer/medusa/https_server.py +0 -0
  185. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/ca.pem +0 -0
  186. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/dh1024.pem +0 -0
  187. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/lib/python/Products/GuardedFile/GuardedFile.py +0 -0
  188. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/lib/python/Products/GuardedFile/README.txt +0 -0
  189. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/lib/python/Products/GuardedFile/TODO.txt +0 -0
  190. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/lib/python/Products/GuardedFile/__init__.py +0 -0
  191. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/lib/python/Products/GuardedFile/add.dtml +0 -0
  192. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/lib/python/Products/GuardedFile/refresh.txt +0 -0
  193. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/lib/python/Products/GuardedFile/version.txt +0 -0
  194. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/lib/python/Products/ZSmime/README.txt +0 -0
  195. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/lib/python/Products/ZSmime/SmimeTag.py +0 -0
  196. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/lib/python/Products/ZSmime/__init__.py +0 -0
  197. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/lib/python/Products/ZSmime/version.txt +0 -0
  198. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/server.pem +0 -0
  199. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/starts +0 -0
  200. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/starts.bat +0 -0
  201. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/utilities/x509_user.py +0 -0
  202. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope/z2s.py.diff +0 -0
  203. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope27/INSTALL.txt +0 -0
  204. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope27/install_dir/lib/python/ZServer/HTTPS_Server.py +0 -0
  205. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope27/install_dir/lib/python/ZServer/__init__.py.patch +0 -0
  206. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope27/install_dir/lib/python/ZServer/component.xml.patch +0 -0
  207. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope27/install_dir/lib/python/ZServer/datatypes.py.patch +0 -0
  208. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope27/install_dir/lib/python/ZServer/medusa/https_server.py +0 -0
  209. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope27/instance_home/README.txt.patch +0 -0
  210. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope27/instance_home/etc/zope.conf.patch +0 -0
  211. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope27/instance_home/ssl/ca.pem +0 -0
  212. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope27/instance_home/ssl/dh1024.pem +0 -0
  213. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/Zope27/instance_home/ssl/server.pem +0 -0
  214. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ZopeX3/INSTALL.txt +0 -0
  215. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ZopeX3/install_dir/lib/python/zope/app/server/configure.zcml.patch +0 -0
  216. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ZopeX3/install_dir/lib/python/zope/app/server/https.py +0 -0
  217. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ZopeX3/install_dir/lib/python/zope/server/http/https_serverchannel.py +0 -0
  218. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ZopeX3/instance_home/etc/zope.conf.patch +0 -0
  219. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ZopeX3/instance_home/ssl/ca.pem +0 -0
  220. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ZopeX3/instance_home/ssl/dh1024.pem +0 -0
  221. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ZopeX3/instance_home/ssl/server.pem +0 -0
  222. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/dsa1024pvtkey.pem +0 -0
  223. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/dsatest.pem +0 -0
  224. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ec/ecdsatest.pem +0 -0
  225. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ec/secp160r1pvtkey.pem +0 -0
  226. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/https.howto/ca.pem +0 -0
  227. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/https.howto/dh1024.pem +0 -0
  228. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/https.howto/https_cli.py +0 -0
  229. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/https.howto/orig_https_srv.py +0 -0
  230. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/https.howto/server.pem +0 -0
  231. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/00_README +0 -0
  232. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/asynchat.py +0 -0
  233. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/ca.pem +0 -0
  234. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/default_handler.py +0 -0
  235. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/dh1024.pem +0 -0
  236. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/ftps_server.py +0 -0
  237. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/http_date.py +0 -0
  238. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/https_server.py +0 -0
  239. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/index.html +0 -0
  240. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/logger.py +0 -0
  241. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/m_syslog.py +0 -0
  242. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/medusa_gif.py +0 -0
  243. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/mime_type_table.py +0 -0
  244. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/poison_handler.py +0 -0
  245. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/producers.py +0 -0
  246. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/redirecting_handler.py +0 -0
  247. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/server.pem +0 -0
  248. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/status_handler.py +0 -0
  249. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa/virtual_handler.py +0 -0
  250. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/00_README +0 -0
  251. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/ca.pem +0 -0
  252. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/default_handler.py +0 -0
  253. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/dh1024.pem +0 -0
  254. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/filesys.py +0 -0
  255. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/ftps_server.py +0 -0
  256. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/http_date.py +0 -0
  257. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/https_server.py +0 -0
  258. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/index.html +0 -0
  259. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/logger.py +0 -0
  260. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/m_syslog.py +0 -0
  261. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/medusa_gif.py +0 -0
  262. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/poison_handler.py +0 -0
  263. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/producers.py +0 -0
  264. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/server.pem +0 -0
  265. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/medusa054/status_handler.py +0 -0
  266. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/perf/memio.py +0 -0
  267. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/perf/sha1.py +0 -0
  268. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/pgp/pubring.pgp +0 -0
  269. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/pgp/secring.pgp +0 -0
  270. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/pkcs7/pkcs7-thawte.pem +0 -0
  271. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/rsa.priv.pem +0 -0
  272. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/rsa.priv0.pem +0 -0
  273. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/rsa.pub.pem +0 -0
  274. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/rsa1024pvtkey.pem +0 -0
  275. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime/README +0 -0
  276. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime/ca.pem +0 -0
  277. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime/clear.p7 +0 -0
  278. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime/client.p12 +0 -0
  279. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime/client.pem +0 -0
  280. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime/client2.pem +0 -0
  281. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime/m2.se.p7 +0 -0
  282. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime/ns.p7 +0 -0
  283. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime/ns.se.p7 +0 -0
  284. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime/opaque.p7 +0 -0
  285. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime.howto/README +0 -0
  286. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime.howto/encrypt.p7 +0 -0
  287. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime.howto/recipient.pem +0 -0
  288. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime.howto/recipient_key.pem +0 -0
  289. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime.howto/se.p7 +0 -0
  290. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime.howto/sign.p7 +0 -0
  291. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime.howto/signer.pem +0 -0
  292. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/smime.howto/signer_key.pem +0 -0
  293. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/README +0 -0
  294. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/c.py +0 -0
  295. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/c_bio.py +0 -0
  296. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/ca.der +0 -0
  297. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/ca.pem +0 -0
  298. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/client.p12 +0 -0
  299. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/client.pem +0 -0
  300. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/dh1024.pem +0 -0
  301. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/echod-forking.py +0 -0
  302. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/echod-iterative.py +0 -0
  303. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/echod-thread.py +0 -0
  304. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/echod-threading.py +0 -0
  305. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/ftp_tls.py +0 -0
  306. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/http_cli_20.py +0 -0
  307. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/https_srv.py +0 -0
  308. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/myapp.py +0 -0
  309. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/server.pem +0 -0
  310. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/sess2.ssldump.out +0 -0
  311. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/socklib.py +0 -0
  312. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/ssl/ss.py +0 -0
  313. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/tinderbox/killableprocess.py +0 -0
  314. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/tinderbox/slave.py +0 -0
  315. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/tinderbox/winprocess.py +0 -0
  316. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/x509/client2.pem +0 -0
  317. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/x509/proxy_destroy.py +0 -0
  318. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/x509/server-expired.pem +0 -0
  319. {m2crypto-0.46.2 → m2crypto-0.48.0}/demo/x509/server.pem +0 -0
  320. {m2crypto-0.46.2 → m2crypto-0.48.0}/doc/make.bat +0 -0
  321. {m2crypto-0.46.2 → m2crypto-0.48.0}/pyproject.toml +0 -0
  322. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/BIO.py +0 -0
  323. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/BN.py +0 -0
  324. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/DH.py +0 -0
  325. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/DSA.py +0 -0
  326. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/EC.py +0 -0
  327. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/Err.py +0 -0
  328. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/RC4.py +0 -0
  329. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/RSA.py +0 -0
  330. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/SSL/Cipher.py +0 -0
  331. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/SSL/Context.py +0 -0
  332. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/SSL/SSLError.py +0 -0
  333. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/SSL/SSLServer.py +0 -0
  334. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/SSL/Session.py +0 -0
  335. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/SSL/TwistedProtocolWrapper.py +0 -0
  336. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/SSL/__init__.py +0 -0
  337. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/SSL/cb.py +0 -0
  338. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/callback.py +0 -0
  339. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/ftpslib.py +0 -0
  340. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/m2.py +0 -0
  341. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/m2crypto.py +0 -0
  342. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/m2urllib.py +0 -0
  343. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/m2urllib2.py +0 -0
  344. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/m2xmlrpclib.py +0 -0
  345. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/py.typed +0 -0
  346. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto/threading.py +0 -0
  347. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto.egg-info/dependency_links.txt +0 -0
  348. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto.egg-info/not-zip-safe +0 -0
  349. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/M2Crypto.egg-info/top_level.txt +0 -0
  350. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_bn.i +0 -0
  351. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_dh.i +0 -0
  352. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_dsa.i +0 -0
  353. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_m2crypto.def +0 -0
  354. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_objects.i +0 -0
  355. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_rand.i +0 -0
  356. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_rc4.i +0 -0
  357. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/_util.i +0 -0
  358. {m2crypto-0.46.2 → m2crypto-0.48.0}/src/SWIG/x509_v_flag.h +0 -0
  359. {m2crypto-0.46.2 → m2crypto-0.48.0}/system_shadowing/sys/types.h +0 -0
  360. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/README +0 -0
  361. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/bad_date_cert.crt +0 -0
  362. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/ca.pem +0 -0
  363. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/ca_key.pem +0 -0
  364. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/der_encoded_seq.b64 +0 -0
  365. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/dhparams.pem +0 -0
  366. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/dsa.param.pem +0 -0
  367. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/dsa.priv.pem +0 -0
  368. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/dsa.pub.pem +0 -0
  369. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/easy_rsa.pem +0 -0
  370. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/ec.priv.pem +0 -0
  371. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/ec.pub.pem +0 -0
  372. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/ec.pub2.pem +0 -0
  373. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/ed25519.priv.pem +0 -0
  374. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/ed25519.pub.pem +0 -0
  375. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/ed25519.pub2.pem +0 -0
  376. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/fips.py +0 -0
  377. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/long_serial_cert.pem +0 -0
  378. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/pubring.pgp +0 -0
  379. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/recipient.pem +0 -0
  380. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/recipient_key.pem +0 -0
  381. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/rsa.priv.pem +0 -0
  382. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/rsa.priv2.pem +0 -0
  383. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/rsa.pub.pem +0 -0
  384. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/sample-p7.pem +0 -0
  385. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/server.pem +0 -0
  386. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/server_key.pem +0 -0
  387. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/signer.pem +0 -0
  388. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/signer_key.pem +0 -0
  389. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_aes.py +0 -0
  390. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_bio_file.py +0 -0
  391. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_bio_iobuf.py +0 -0
  392. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_bn.py +0 -0
  393. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_dh.py +0 -0
  394. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_dsa.py +0 -0
  395. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_ec_curves.py +0 -0
  396. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_ecdh.py +0 -0
  397. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_ecdsa.py +0 -0
  398. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_err.py +0 -0
  399. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_obj.py +0 -0
  400. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_rc4.py +0 -0
  401. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_ssl_offline.py +0 -0
  402. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_ssl_win.py +0 -0
  403. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_threading.py +0 -0
  404. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_timeout.py +0 -0
  405. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/test_xmlrpc.py +0 -0
  406. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/thawte.pem +0 -0
  407. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/x509.der +0 -0
  408. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/x509.pem +0 -0
  409. {m2crypto-0.46.2 → m2crypto-0.48.0}/tests/x509_key.pem +0 -0
@@ -1,3 +1,85 @@
1
+ 0.48.0 - 2026-05-18
2
+ -------------------
3
+
4
+ This release is rather large, because I failed to publish earlier
5
+ version of it (this was supposed to be 0.49.0).
6
+
7
+ - doc: another move … this time to Codeberg (and communication to
8
+ Matrix)
9
+ - test(smime): parametrize test_write_pkcs7_der
10
+ - test(smime): fix test_signEncryptDecryptVerify
11
+ - fix(util): return bytes from passphrase callbacks
12
+ - fix(SSL.Checker): add IDN Chinese name
13
+ - test(ssl): add IDN certificate fixture coverage
14
+ - test(ssl): cover IDN hostname matching in Checker
15
+ - doc: update expected Name format in migration guide
16
+ - fix(smime): S/MIME signature verification for Outlook and Thunderbird
17
+ - fix(provider): handle OSSL_STORE_INFO_PUBKEY compat. for OpenSSL < 3.2
18
+ - fix: cast X509_dup in sk_X509_deep_copy to avoid type mismatch
19
+ - fix(smime): S/MIME signature verification for Outlook and Thunderbird
20
+ - fix(smime): remove obsolete Python pre-3.6 constructs
21
+ - ci: run on Codeberg with forgejo_runner
22
+ - doc: clarify the status of the project
23
+ - fix(provider): adjust the CI run on Gitea for the older OpenSSL on
24
+ Debian
25
+ - fix(evp): narrow digest and BIO pointers for mypy
26
+ - fix(init): acommodate modern packaging API
27
+ - doc: IRC channel is on Libera, Ergo was a wrong idea
28
+ - fix(tests): remove duplicate definition of IS_DEBIAN in test_ssl
29
+ - fix(test_bio_ssl): fix TLS 1.3 deadlock and add socket timeouts
30
+ - fix(test_bio_ssl): replace sys.exit() with self.fail() to prevent test
31
+ process crash
32
+ - ci: publish to PyPI with Sigstore attestations via Trusted Publishing
33
+ - fix(authcookie): handle CookieError from Python 3.13.12+
34
+ (CVE-2026-0672)
35
+ - ci(leap): use setup.py bdist_wheel to bypass old pip PEP 517 wrapper
36
+ - fix(util): replace is_32bit with struct.calcsize and update tests
37
+ - ci: add FreeBSD SourceHut CI build script
38
+ - fix(swig): avoid clang GNUC pragma block before _lib.h
39
+ - fix(provider): don't abuse TemporaryDirectory to be mkdtemp, use that
40
+ directly.
41
+ - fix(provider): gate provider APIs for OpenSSL 1.1.1
42
+ - feat(provider): add key generation and destruction methods
43
+ - docs(provider): add comprehensive documentation to Provider module
44
+ - fix(provider): better exception handling
45
+ - doc: add a simple AGENTS.md
46
+ - feat(engine): add availability check, lifecycle helpers, and safer
47
+ cleanup
48
+ - doc(engine): Improve documentation and example of using Engine module
49
+
50
+ 0.47.0 - 2026-02-08
51
+ -------------------
52
+
53
+ - feat: added full SWIG bindings for the ASN1_UTCTIME
54
+ - refactor(SWIG): adopt Python Buffer Protocol for
55
+ X509_NAME_ENTRY_set_data
56
+ - fix: allow 64-bit time_t on 32-bit systems in test_is32bit
57
+ - feat(provider): add initial OpenSSL providers support
58
+ - feat: stop supporting 32bit packages on Windows
59
+ - fix: improve detection of OpenSSL on Windows
60
+ - ci: run doctest
61
+ - fix: _matchIPAddress is failing
62
+ - feat: Add degenerate PKCS7 (.p7c) support
63
+ - fix(setup): add `packaging` as a requirement
64
+ - feat(asn1): introduce dedicated ASN1_UTCTIME class
65
+ - feat(CRL): add content of m2crypto-0.21.1-x509_crl.patch
66
+ - refactor(x509): CRL handling and testing
67
+ - feat: add function to provide the equivalent of `openssl ciphers`.
68
+ - fix(X509): refactor new_extension to prevent memory corruption
69
+ - ci: add tests showing the use of M2Crypto for STARTTLS protocol
70
+ - doc: convert documentation to MyST
71
+ - doc: various improvements of documentation
72
+ - revert: remove support for Engine
73
+ - fix(engine): make the compilation of Engine conditional on
74
+ OPENSSL_NO_ENGINE
75
+ - fix(https): make HTTPS Connection work with Proxy
76
+ - doc: add an example of using HTTPS with PKCS#11 Engine
77
+
78
+ 0.46.2 - 2025-10-02
79
+ -------------------
80
+
81
+ - fix[m2xmlrpclib]: make the module compatible with Python 3.6
82
+
1
83
  0.46.1 - 2025-10-02
2
84
  -------------------
3
85
 
@@ -285,7 +367,7 @@
285
367
  -------------------
286
368
 
287
369
  - 471582f - setup.py: use ${CPP} as path to cpp <Duncan Macleod>
288
- - efb1580 - Bump pipeline OpenSSL from 1.1.0i to 1.1.0j
370
+ - efb1580 - Bump pipeline OpenSSL from 1.1.0i to 1.1.0j
289
371
  - 35bb71b - Stub wchar_t helpers and ignore unused WCHAR defs <makepost>
290
372
  - effc7be - Add type comment to setup.py <Matěj Cepl>
291
373
 
@@ -0,0 +1,157 @@
1
+ # Installing M2Crypto
2
+
3
+ ```{contents}
4
+ ```
5
+
6
+ ## Pre-requisites
7
+
8
+ The following is required to *use* M2Crypto (once installed):
9
+
10
+ - `Python 3.6` or newer
11
+ - `OpenSSL 1.1.1t` or newer
12
+
13
+ \<!-- alpine/32bit OpenSSL 3.3.1, swig 4.2.1, Python 3.12.3
14
+ fedora OpenSSL 3.2.1, swig 4.2.1, Python 3.12.3
15
+ rawhide OpenSSL 3.2.2, swig 4.2.1, Python 3.13.0~b3
16
+ leap OpenSSL 3.1.4, swig 4.1.1, Python 3.6.15
17
+ tumbleweed OpenSSL 3.1.4, swig 4.2.1, Python 3.11.9
18
+ python3 OpenSSL 3.0.13, swig 4.1.0, Python 3.11.2
19
+ python3-32bit OpenSSL 3.0.13, swig 4.1.0, Python 3.11.2
20
+ python39 OpenSSL 3.0.13, swig 4.1.0, Python 3.11.2
21
+ windows OPenSSL 1.1.1w, swig 4.1.1, Python 3.10.\* -->
22
+
23
+ To *install* M2Crypto, you must be able to compile and link C sources
24
+ against Python and OpenSSL headers/libraries. For example on a Debian-based
25
+ system the following packages are needed:
26
+
27
+ - `build-essential`
28
+ - `python3-dev` and/or `python-dev`
29
+ - `libssl-dev`
30
+ - `swig 4.1.0` or newer (for compatibility with Python 3.12, for
31
+ older Pythons the default platform swig should be enough).
32
+
33
+ ## Installing on Unix-like systems, including Cygwin
34
+
35
+ (not tested and most likely obsolete, updated information for building
36
+ with Cygwin are welcome).:
37
+
38
+ ```
39
+ $ tar zxf m2crypto-<version>.tar.gz
40
+ $ cd m2crypto-<version>
41
+ $ python setup.py build
42
+ $ python setup.py install
43
+ ```
44
+
45
+ If you have installed setuptools you can also optionally run tests like
46
+ this::
47
+
48
+ ```
49
+ $ python -munittest discover -v tests
50
+ ```
51
+
52
+ This assumes OpenSSL is installed in `/usr`. You can provide an
53
+ alternate OpenSSL prefix location with --openssl option to
54
+ `build\_ext` (or `build`) command. So, for example, if you
55
+ build your local version of OpenSSL and install it with
56
+ `/usr/local` prefix (your includes are in
57
+ `/usr/local/include/openssl` and libs in `/usr/local/lib`),
58
+ then you would add `--openssl=/usr/local` to your `build`
59
+ command.
60
+
61
+ ## Differences when installing on Windows
62
+
63
+ Binary wheels for many Windows conifgurations are available on
64
+ PyPI. Try selecting a version, selecting a job that matches your
65
+ Python version, then going to the "Artifacts" tab and downloading
66
+ an installer.
67
+
68
+ 01. Install the latest `Build Tools for Visual Studio 2019`.
69
+ See <https://visualstudio.microsoft.com/downloads/> under "All
70
+ Downloads" -> "Tools for Visual Studio 2019".
71
+
72
+ 02. In the installer, select "C++ Build Tools", install, and
73
+ reboot if necessary.
74
+
75
+ 03. Install the latest full (not `Light`) `OpenSSL`
76
+ for your architecture (`Win64`/`Win32`). Current
77
+ version as of this writing is `1.1.1d`. Make note
78
+ of the directory to which you install `OpenSSL` from
79
+ <https://slproweb.com/products/Win32OpenSSL.html>.
80
+
81
+ 04. In `PowerShell`, install the `Chocolatey` package manager. I used this command from their website:
82
+ Set-ExecutionPolicy Bypass -Scope Process -Force;
83
+
84
+ > iex ((New-Object System.Net.WebClient).DownloadString('<https://chocolatey.org/install.ps1>'))\`
85
+
86
+ 05. Install `swig` with `Chocolatey` (in `PowerShell`). `choco install -r -y swig`
87
+
88
+ 06. Install the `pywin32` dependency. Run `pip install
89
+ pywin32`. If you have problems, try first running `pip
90
+ install wheel`. To get `pip` to target a specific Python
91
+ installation, try launching it using `py -[version] -m pip
92
+ install [module]`. Note: you may need to use an elevated
93
+ (administrator) `PowerShell` to install Python modules.
94
+
95
+ 07. Get the latest `m2crypto` code. If you have `git` installed,
96
+ run `git clone https://git.sr.ht/~mcepl/m2crypto`. Otherwise,
97
+ download and extract the code from SourceHut:
98
+ <https://git.sr.ht/~mcepl/m2crypto/archive/master.tar.gz>
99
+
100
+ 08. Use `cd` to change into the directory `m2crypto` was cloned/extracted to.
101
+
102
+ 09. Assuming `python` launches your desired Python interpreter
103
+ version, run `python setup.py build --openssl="C:\Program
104
+ Files\OpenSSL-Win64" --bundledlls`, replacing `C:\Program
105
+ Files\OpenSSL-Win64` with the directory to which you installed
106
+ `OpenSSL`. (On some systems you can use the `py` launcher
107
+ to specify a Python version to use, run `py -h` for more
108
+ information.)
109
+
110
+ 10. Generate the installable files. `python.exe setup.py
111
+ bdist_wheel bdist_wininst bdist_msi`.
112
+
113
+ 11. Install the module. `cd` into the `dist` directory and run
114
+ `pip install M2Crypto-0.35.2-cp38-cp38-win_amd64.whl`,
115
+ replacing the filename with the generated `.whl` file. If
116
+ you have problems, try first running `pip install wheel`. To
117
+ get `pip` to target a specific Python installation,
118
+ try launching it using `py -[version] -m pip install
119
+ [module]`. Alternatively, you can run the generated `.exe`
120
+ or `.msi` installer. Note: you may need to use an elevated
121
+ (administrator) `PowerShell` to install Python modules.
122
+
123
+ (needs updating)
124
+
125
+ :::{NOTE}
126
+ The following instructions for building M2Crypto with MINGW
127
+ are from M2Crypto 0.12. These instructions should continue to work
128
+ for this release, although I have not tested them.
129
+ :::
130
+
131
+ Read Sebastien Sauvage's webpage:
132
+
133
+ ```
134
+ http://sebsauvage.net/python/mingw.html
135
+ ```
136
+
137
+ For `setup.py build` you may need to use parameter `-cmingw32`.
138
+
139
+ ## MacOSX
140
+
141
+ Apple does not provide on more recent versions of Mac OS X (at least
142
+ certainly [since 10.11]) any version of OpenSSL, so it is necessary to
143
+ use `brew` or similar packaging systems to install third party
144
+ packages. A Mac OS X users suggested, that this series of commands gave
145
+ him a working copy of M2Crypto on his system:
146
+
147
+ ```
148
+ $ brew install openssl && brew install swig
149
+ $ brew --prefix openssl
150
+ /usr/local/opt/openssl
151
+ $ LDFLAGS="-L$(brew --prefix openssl)/lib" \
152
+ CFLAGS="-I$(brew --prefix openssl)/include" \
153
+ SWIG_FEATURES="-I$(brew --prefix openssl)/include" \
154
+ pip install m2crypto
155
+ ```
156
+
157
+ [since 10.11]: https://gitlab.com/m2crypto/m2crypto/merge_requests/7#note_2581821
@@ -16,8 +16,8 @@ recursive-exclude .keys *
16
16
  recursive-include system_shadowing *
17
17
 
18
18
  # include package documentation files
19
- include INSTALL.rst
20
- include README.rst
19
+ include INSTALL.md
20
+ include README.md
21
21
  include CHANGES
22
22
 
23
23
  # include Swig-generated files
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: M2Crypto
3
- Version: 0.46.2
3
+ Version: 0.48.0
4
4
  Summary: A Python crypto and SSL toolkit
5
5
  Author: Ng Pheng Siong
6
6
  Author-email: ngps@sandbox.rulemaker.net
@@ -8,10 +8,10 @@ Maintainer: Matej Cepl
8
8
  Maintainer-email: mcepl@cepl.eu
9
9
  License: BSD-2-Clause
10
10
  Project-URL: home_page, https://sr.ht/~mcepl/m2crypto/
11
- Project-URL: source, https://git.sr.ht/~mcepl/m2crypto
11
+ Project-URL: source, https://codeberg.org/mcepl/m2crypto/
12
12
  Project-URL: documentation, https://m2crypto.readthedocs.io/en/latest/
13
13
  Project-URL: report, https://lists.sr.ht/~mcepl/m2crypto
14
- Project-URL: changelog, https://git.sr.ht/~mcepl/m2crypto/tree/master/item/CHANGES
14
+ Project-URL: changelog, https://codeberg.org/mcepl/m2crypto/src/branch/master/CHANGES
15
15
  Keywords: cryptography,openssl
16
16
  Classifier: Development Status :: 5 - Production/Stable
17
17
  Classifier: Intended Audience :: Developers
@@ -29,33 +29,34 @@ Classifier: Programming Language :: Python :: 3.10
29
29
  Classifier: Programming Language :: Python :: 3.11
30
30
  Classifier: Programming Language :: Python :: 3.12
31
31
  Requires-Python: >=3.6
32
- Description-Content-Type: text/x-rst
32
+ Description-Content-Type: text/markdown
33
33
  License-File: LICENSES/BSD-2-Clause.txt
34
+ Requires-Dist: packaging
34
35
  Dynamic: license-file
35
36
 
36
- ========
37
- M2Crypto
38
- ========
37
+ **documentation**: <https://m2crypto.readthedocs.io/>\
38
+ **email list**: <https://lists.sr.ht/~mcepl/m2crypto> ([subscribe via email])\
39
+ **discussion channel**: <matrix:r/m2crypto:ceplovi.cz>\
40
+ **issue tracker**: |-\
41
+ <https://todo.sr.ht/~mcepl/m2crypto> (R/O, please\
42
+ report issues via the email list).\
43
+ **maintainer**: "Matěj Cepl"\
44
+ **web-Site**: <https://codeberg.org/mcepl/m2crypto/>
39
45
 
40
- :Maintainer: Matěj Cepl
41
- :Web-Site: https://sr.ht/~mcepl/m2crypto/
42
- :Documentation: https://m2crypto.readthedocs.io/
43
- :IRC channel: irc://irc.ergo.chat/#m2crypto
44
- :Email list: https://lists.sr.ht/~mcepl/m2crypto (`subscribe via email`_)
45
- :Issue tracker: https://todo.sr.ht/~mcepl/m2crypto (R/O, please
46
- report issues via the email list).
46
+ # M2Crypto
47
47
 
48
- M2Crypto = Python + OpenSSL + SWIG
49
- ----------------------------------
48
+ ## M2Crypto = Python + OpenSSL + SWIG
50
49
 
51
- .. image:: https://builds.sr.ht/~mcepl.svg
52
- :target: https://builds.sr.ht/~mcepl?
53
- :alt: builds.sr.ht status
50
+ ~~~{image} https://builds.sr.ht/~mcepl.svg
51
+ :alt: builds.sr.ht status
52
+ :target: https://builds.sr.ht/~mcepl?
53
+ ~~~
54
54
 
55
- **NOTE: This library is currently in maintenance mode. We
56
- recommend using a more modern alternative such as**
57
- `PyCA/cryptography`_. **Examples of how to migrate can be found
58
- in** `the documentation`_.
55
+ **NOTE: This library is currently in maintenance mode (and it has been
56
+ in it since 2014 and I don’t plan to stop maintaining it anytime soon).
57
+ For new applications we recommend using a more modern alternative such
58
+ as** [PyCA/cryptography]. **Examples of how to migrate can be found in**
59
+ [the documentation].
59
60
 
60
61
  M2Crypto is a crypto and SSL toolkit for Python.
61
62
 
@@ -65,24 +66,17 @@ M2Crypto comes with the following:
65
66
 
66
67
  - **RSA**, **DSA**, **DH**, **HMACs**, **message digests**,
67
68
  **symmetric ciphers** including **AES**,
68
-
69
69
  - **TLS** functionality to implement **clients and servers**.
70
-
71
70
  - **Example SSL client and server programs**, which are variously
72
71
  **threading**, **forking** or based on **non-blocking socket IO**.
73
-
74
72
  - **HTTPS** extensions to Python's **httplib, urllib and xmlrpclib**.
75
-
76
73
  - Unforgeable HMAC'ing **AuthCookies** for **web session management**.
77
-
78
74
  - **FTP/TLS** client and server.
79
-
80
75
  - **S/MIME v2**.
81
-
82
76
  - **ZSmime**: An S/MIME messenger for **Zope**.
83
77
 
84
78
  We care a lot about stable API and all Python methods should be
85
- preserved, note however that ``m2.`` namespace is considered internal to
79
+ preserved, note however that `m2.` namespace is considered internal to
86
80
  the library and it doesn't have to be preserved. If however some change
87
81
  to it breaks your app, let us know and we will try to make things
88
82
  working for you.
@@ -96,7 +90,7 @@ To install, see the file INSTALL.
96
90
 
97
91
  Look at the tests and demos for example use. Recommended reading before
98
92
  deploying in production is "Network Security with OpenSSL" by John Viega,
99
- Matt Messier and Pravir Chandra, ISBN 059600270X.
93
+ Matt Messier and Pravir Chandra, ISBN [059600270X].
100
94
 
101
95
  Note these caveats:
102
96
 
@@ -104,18 +98,13 @@ Note these caveats:
104
98
  Python side and other objects on the C side, and these may change
105
99
  between OpenSSL versions. (Multiple free's lead to crashes very
106
100
  quickly, so these should be relatively rare.)
107
-
108
101
  - No memory locking/clearing for keys, passphrases, etc. because AFAIK
109
102
  Python does not provide the features needed. On the C (OpenSSL) side
110
103
  things are cleared when the Python objects are deleted.
111
104
 
112
105
  Have fun! Your feedback is welcome.
113
106
 
114
- .. _`subscribe via email`:
115
- mailto:~mcepl/m2crypto+subscribe@lists.sr.ht
116
-
117
- .. _`PyCA/cryptography`:
118
- https://cryptography.io/en/latest/
119
-
120
- .. _`the documentation`:
121
- https://m2crypto.readthedocs.io/en/latest/howto.migration.html
107
+ [pyca/cryptography]: https://cryptography.io/en/latest/
108
+ [subscribe via email]: mailto:~mcepl/m2crypto+subscribe@lists.sr.ht
109
+ [the documentation]: https://m2crypto.readthedocs.io/en/latest/howto.migration.html
110
+ [059600270X]: https://meta.wikimedia.org/wiki/Special:BookSources/0321480910
@@ -1,26 +1,26 @@
1
- ========
2
- M2Crypto
3
- ========
4
-
5
- :Maintainer: Matěj Cepl
6
- :Web-Site: https://sr.ht/~mcepl/m2crypto/
7
- :Documentation: https://m2crypto.readthedocs.io/
8
- :IRC channel: irc://irc.ergo.chat/#m2crypto
9
- :Email list: https://lists.sr.ht/~mcepl/m2crypto (`subscribe via email`_)
10
- :Issue tracker: https://todo.sr.ht/~mcepl/m2crypto (R/O, please
11
- report issues via the email list).
12
-
13
- M2Crypto = Python + OpenSSL + SWIG
14
- ----------------------------------
15
-
16
- .. image:: https://builds.sr.ht/~mcepl.svg
17
- :target: https://builds.sr.ht/~mcepl?
18
- :alt: builds.sr.ht status
19
-
20
- **NOTE: This library is currently in maintenance mode. We
21
- recommend using a more modern alternative such as**
22
- `PyCA/cryptography`_. **Examples of how to migrate can be found
23
- in** `the documentation`_.
1
+ **documentation**: <https://m2crypto.readthedocs.io/>\
2
+ **email list**: <https://lists.sr.ht/~mcepl/m2crypto> ([subscribe via email])\
3
+ **discussion channel**: <matrix:r/m2crypto:ceplovi.cz>\
4
+ **issue tracker**: |-\
5
+ <https://todo.sr.ht/~mcepl/m2crypto> (R/O, please\
6
+ report issues via the email list).\
7
+ **maintainer**: "Matěj Cepl"\
8
+ **web-Site**: <https://codeberg.org/mcepl/m2crypto/>
9
+
10
+ # M2Crypto
11
+
12
+ ## M2Crypto = Python + OpenSSL + SWIG
13
+
14
+ ~~~{image} https://builds.sr.ht/~mcepl.svg
15
+ :alt: builds.sr.ht status
16
+ :target: https://builds.sr.ht/~mcepl?
17
+ ~~~
18
+
19
+ **NOTE: This library is currently in maintenance mode (and it has been
20
+ in it since 2014 and I don’t plan to stop maintaining it anytime soon).
21
+ For new applications we recommend using a more modern alternative such
22
+ as** [PyCA/cryptography]. **Examples of how to migrate can be found in**
23
+ [the documentation].
24
24
 
25
25
  M2Crypto is a crypto and SSL toolkit for Python.
26
26
 
@@ -30,24 +30,17 @@ M2Crypto comes with the following:
30
30
 
31
31
  - **RSA**, **DSA**, **DH**, **HMACs**, **message digests**,
32
32
  **symmetric ciphers** including **AES**,
33
-
34
33
  - **TLS** functionality to implement **clients and servers**.
35
-
36
34
  - **Example SSL client and server programs**, which are variously
37
35
  **threading**, **forking** or based on **non-blocking socket IO**.
38
-
39
36
  - **HTTPS** extensions to Python's **httplib, urllib and xmlrpclib**.
40
-
41
37
  - Unforgeable HMAC'ing **AuthCookies** for **web session management**.
42
-
43
38
  - **FTP/TLS** client and server.
44
-
45
39
  - **S/MIME v2**.
46
-
47
40
  - **ZSmime**: An S/MIME messenger for **Zope**.
48
41
 
49
42
  We care a lot about stable API and all Python methods should be
50
- preserved, note however that ``m2.`` namespace is considered internal to
43
+ preserved, note however that `m2.` namespace is considered internal to
51
44
  the library and it doesn't have to be preserved. If however some change
52
45
  to it breaks your app, let us know and we will try to make things
53
46
  working for you.
@@ -61,7 +54,7 @@ To install, see the file INSTALL.
61
54
 
62
55
  Look at the tests and demos for example use. Recommended reading before
63
56
  deploying in production is "Network Security with OpenSSL" by John Viega,
64
- Matt Messier and Pravir Chandra, ISBN 059600270X.
57
+ Matt Messier and Pravir Chandra, ISBN [059600270X].
65
58
 
66
59
  Note these caveats:
67
60
 
@@ -69,18 +62,13 @@ Note these caveats:
69
62
  Python side and other objects on the C side, and these may change
70
63
  between OpenSSL versions. (Multiple free's lead to crashes very
71
64
  quickly, so these should be relatively rare.)
72
-
73
65
  - No memory locking/clearing for keys, passphrases, etc. because AFAIK
74
66
  Python does not provide the features needed. On the C (OpenSSL) side
75
67
  things are cleared when the Python objects are deleted.
76
68
 
77
69
  Have fun! Your feedback is welcome.
78
70
 
79
- .. _`subscribe via email`:
80
- mailto:~mcepl/m2crypto+subscribe@lists.sr.ht
81
-
82
- .. _`PyCA/cryptography`:
83
- https://cryptography.io/en/latest/
84
-
85
- .. _`the documentation`:
86
- https://m2crypto.readthedocs.io/en/latest/howto.migration.html
71
+ [pyca/cryptography]: https://cryptography.io/en/latest/
72
+ [subscribe via email]: mailto:~mcepl/m2crypto+subscribe@lists.sr.ht
73
+ [the documentation]: https://m2crypto.readthedocs.io/en/latest/howto.migration.html
74
+ [059600270X]: https://meta.wikimedia.org/wiki/Special:BookSources/0321480910
@@ -11,7 +11,6 @@
11
11
  #
12
12
  ##############################################################################
13
13
 
14
- from __future__ import print_function
15
14
 
16
15
  """Zope 2 ZServer start-up file
17
16
 
@@ -7,7 +7,6 @@
7
7
  #
8
8
  ##############################################################################
9
9
 
10
- from __future__ import print_function
11
10
 
12
11
  """HTTPS Server
13
12
 
@@ -7,7 +7,6 @@
7
7
  #
8
8
  ##############################################################################
9
9
 
10
- from __future__ import print_function
11
10
 
12
11
  """HTTPS Server that uses the Zope Publisher for executing a task.
13
12
 
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env python2.0
2
2
 
3
- from __future__ import print_function
4
3
 
5
4
  """Demonstrates the use of m2.bio_set_mem_eof_return().
6
5
  Copyright (c) 1999-2003 Ng Pheng Siong. All rights reserved."""
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- from __future__ import print_function
4
3
 
5
4
  """DH demonstration.
6
5
 
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- from __future__ import print_function
4
3
 
5
4
  """
6
5
  DSA demo and benchmark.
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- from __future__ import print_function
4
3
 
5
4
  """DSA demonstration.
6
5
 
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- from __future__ import print_function
4
3
 
5
4
  """ECDH demonstration.
6
5
 
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- from __future__ import print_function
4
3
 
5
4
  """
6
5
  ECDSA demo and benchmark.
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- from __future__ import print_function
4
3
 
5
4
  """ECDSA demonstration.
6
5
 
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- from __future__ import print_function
4
3
 
5
4
  """Demonstrations of M2Crypto.httpslib.
6
5
 
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- from __future__ import print_function
4
3
 
5
4
  # Standard Python library
6
5
  import os
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- from __future__ import print_function
4
3
 
5
4
  # Standard Python library
6
5
  import os
@@ -25,7 +25,6 @@
25
25
  # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
26
26
  # ======================================================================
27
27
 
28
- from __future__ import print_function
29
28
 
30
29
  """Basic infrastructure for asynchronous socket service clients and servers.
31
30
 
@@ -7,7 +7,6 @@
7
7
 
8
8
  # support for 'basic' authenticaion.
9
9
 
10
- from __future__ import print_function
11
10
 
12
11
  import base64
13
12
  import hashlib
@@ -12,7 +12,6 @@
12
12
  # method, the use of long arithmetic is a reminder that the counter
13
13
  # will overflow.
14
14
 
15
- from __future__ import print_function
16
15
 
17
16
 
18
17
  class counter:
@@ -14,7 +14,6 @@
14
14
  # opening files for reading, and listing directories, should
15
15
  # return a producer.
16
16
 
17
- from __future__ import print_function
18
17
 
19
18
 
20
19
  class abstract_filesystem:
@@ -17,7 +17,6 @@
17
17
  # vestigial anyway. I've attempted to include the most commonly-used
18
18
  # commands, using the feature set of wu-ftpd as a guide.
19
19
 
20
- from __future__ import print_function
21
20
 
22
21
  import asyncore
23
22
  import asynchat
@@ -6,7 +6,6 @@
6
6
  # All Rights Reserved.
7
7
  #
8
8
 
9
- from __future__ import print_function
10
9
 
11
10
  # python modules
12
11
  import os