On 08:34 am, krist...@ccpgames.com wrote:
Hello there.
I wanted to do some work on the ssl module, but I was a bit daunted at the prerequisites. Is there anywhere that I can get at precompiled libs for the openssl that we use? In general, gettin all those "external" projects seem to be complex to build. Is there a fast way?

I take it the challenge is that you want to do development on Windows? If so, this might help:

 http://www.slproweb.com/products/Win32OpenSSL.html

It's what I use for any Windows pyOpenSSL development I need to do.

What I want to do, is to implement a separate BIO for OpenSSL, one that calls back into python for writes and reads. This is so that I can use my own sockets implementation for the actual IO, in particular, I want to funnel the encrypted data through our IOCompletion-based stackless sockets.

For what it's worth, Twisted's IOCP SSL support is implemented using pyOpenSSL's support of OpenSSL memory BIOs. This is a little different from your idea: memory BIOs are a built-in part of OpenSSL, and just give you a buffer from which you can pull whatever bytes OpenSSL wanted to write (or a buffer into which to put bytes for OpenSSL to read).

I suspect this would work well enough for your use case. Being able to implement an actual BIO in Python would be pretty cool, though.

If successful, I think this would be a useful addition to ssl.
You would do something like:

class BIO():
 def write(): pass
 def read(): pass

from ssl.import
bio = BIO()
ssl_socket = ssl.wrap_bio(bio, ca_certs=...)

Hopefully this would integrate more nicely with the recent work Antoine has done with SSL contexts. The preferred API for creating an SSL connection is now more like this:

   import ssl
   ctx = ssl.SSLContext(...)
   conn = ctx.wrap_socket(...)

So perhaps you want to add a wrap_bio method to SSLContext. In fact, this would be the more general API, and could supercede wrap_socket: after all, socket support is just implemented with the socket BIOs. wrap_socket would become a simple wrapper around something like wrap_bio(SocketBIO(socket)).

I am new to OpenSSL, I haven't even looked at what a BIO looks like, but I read this: http://marc.info/?l=openssl- users&m=99909952822335&w=2 which indicates that this ought to be possible. And before I start experimenting, I need to get my OpenSSL external ready.

Any thoughts?

It should be possible. One thing that's pretty tricky is getting threading right, though. Python doesn't have to deal with this problem yet, as far as I know, because it never does something that causes OpenSSL to call back into Python code. Once you have a Python BIO implementation, this will clearly be necessary, and you'll have to solve this. It's certainly possible, but quite fiddly.

Jean-Paul
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to