[Python-checkins] r77608 - python/trunk/Modules/_hashopenssl.c

gregory.p.smith python-checkins at python.org
Tue Jan 19 09:19:05 CET 2010


Author: gregory.p.smith
Date: Tue Jan 19 09:19:03 2010
New Revision: 77608

Log:
Do not compile stubs for the sha2 series hashes in the openssl hashlib
module when the openssl version is too old to support them.  That
leads both compiled code bloat and to unittests attempting to test
implementations that don't exist for comparison purposes on such
platforms.


Modified:
   python/trunk/Modules/_hashopenssl.c

Modified: python/trunk/Modules/_hashopenssl.c
==============================================================================
--- python/trunk/Modules/_hashopenssl.c	(original)
+++ python/trunk/Modules/_hashopenssl.c	Tue Jan 19 09:19:03 2010
@@ -48,6 +48,10 @@
 #define HASH_OBJ_CONSTRUCTOR 0
 #endif
 
+/* Minimum OpenSSL version needed to support sha224 and higher. */
+#if defined(OPENSSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER >= 0x00908000)
+#define _OPENSSL_SUPPORTS_SHA2
+#endif
 
 typedef struct {
     PyObject_HEAD
@@ -69,10 +73,12 @@
 
 DEFINE_CONSTS_FOR_NEW(md5)
 DEFINE_CONSTS_FOR_NEW(sha1)
+#ifdef _OPENSSL_SUPPORTS_SHA2
 DEFINE_CONSTS_FOR_NEW(sha224)
 DEFINE_CONSTS_FOR_NEW(sha256)
 DEFINE_CONSTS_FOR_NEW(sha384)
 DEFINE_CONSTS_FOR_NEW(sha512)
+#endif
 
 
 static EVPobject *
@@ -529,10 +535,12 @@
 
 GEN_CONSTRUCTOR(md5)
 GEN_CONSTRUCTOR(sha1)
+#ifdef _OPENSSL_SUPPORTS_SHA2
 GEN_CONSTRUCTOR(sha224)
 GEN_CONSTRUCTOR(sha256)
 GEN_CONSTRUCTOR(sha384)
 GEN_CONSTRUCTOR(sha512)
+#endif
 
 /* List of functions exported by this module */
 
@@ -540,10 +548,12 @@
     {"new", (PyCFunction)EVP_new, METH_VARARGS|METH_KEYWORDS, EVP_new__doc__},
     CONSTRUCTOR_METH_DEF(md5),
     CONSTRUCTOR_METH_DEF(sha1),
+#ifdef _OPENSSL_SUPPORTS_SHA2
     CONSTRUCTOR_METH_DEF(sha224),
     CONSTRUCTOR_METH_DEF(sha256),
     CONSTRUCTOR_METH_DEF(sha384),
     CONSTRUCTOR_METH_DEF(sha512),
+#endif
     {NULL,	NULL}		 /* Sentinel */
 };
 
@@ -578,8 +588,10 @@
     /* these constants are used by the convenience constructors */
     INIT_CONSTRUCTOR_CONSTANTS(md5);
     INIT_CONSTRUCTOR_CONSTANTS(sha1);
+#ifdef _OPENSSL_SUPPORTS_SHA2
     INIT_CONSTRUCTOR_CONSTANTS(sha224);
     INIT_CONSTRUCTOR_CONSTANTS(sha256);
     INIT_CONSTRUCTOR_CONSTANTS(sha384);
     INIT_CONSTRUCTOR_CONSTANTS(sha512);
+#endif
 }


More information about the Python-checkins mailing list