Author dmalcolm
Recipients dmalcolm, gps, pitrou
Date 2010-07-02.23:57:03
SpamBayes Score 3.67066e-07
Marked as misclassified No
Message-id <1278115028.39.0.889567440629.issue9146@psf.upfronthosting.co.za>
In-reply-to
Content
Attached patch checks for errors in the initialization of _hashlib, and only registers the names that are actually available.

It also contains the ssl init from the first patch.

I added a _hashlib._errors dict, containing errors, so that you can examine them at runtime:

$ OPENSSL_FORCE_FIPS_MODE=1 ./python
Python 2.7rc2+ (trunk:82445, Jul  2 2010, 14:00:30) 
[GCC 4.4.3 20100422 (Red Hat 4.4.3-18)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import _hashlib
[35786 refs]
>>> _hashlib._errors
{'md5': '_hashopenssl.c:541: error:060800A0:digital envelope routines:EVP_DigestInit_ex:unknown cipher'}
[35825 refs]
>>> dir (_hashlib)
['__doc__', '__file__', '__name__', '__package__', '_errors', 'new', 'openssl_sha1', 'openssl_sha224', 'openssl_sha256', 'openssl_sha384', 'openssl_sha512']
[35838 refs]
(note the absence of openssl_md5)

Note that hashlib (as opposed to _hashlib) seems to gracefully fall back to Python's _md5 module when in this state:
>>> import hashlib
[36107 refs]
>>> m = m = hashlib.md5(); m.update('abc\n'); print m.hexdigest()
0bee89b07a248e27c83fc3d5951213c1
[36109 refs]

This seems to be option (A) from my initial message.
History
Date User Action Args
2010-07-02 23:57:08dmalcolmsetrecipients: + dmalcolm, pitrou, gps
2010-07-02 23:57:08dmalcolmsetmessageid: <1278115028.39.0.889567440629.issue9146@psf.upfronthosting.co.za>
2010-07-02 23:57:07dmalcolmlinkissue9146 messages
2010-07-02 23:57:05dmalcolmcreate