Compile SHA-2 code on systems without stdint.h
authorBradley T. Hughes <bradley.hughes@nokia.com>
Tue, 28 Feb 2012 08:25:20 +0000 (09:25 +0100)
committerQt by Nokia <qt-info@nokia.com>
Tue, 28 Feb 2012 17:53:32 +0000 (18:53 +0100)
stdint.h is a C99-ism, which isn't available everywhere. The sha.h
header tells us we need 4 typedefs. Add these to qcryptographichash.cpp
before including sha.h and comment out the stdint.h include in sha.h.

Change-Id: I1ede9569fa7eaa84de3befeb3c58cc6a05aa522c
Reviewed-by: Oliver Wolff <oliver.wolff@nokia.com>
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
src/3rdparty/rfc6234/sha.h
src/corelib/tools/qcryptographichash.cpp

index 1ffd688..9c26f02 100644 (file)
@@ -70,7 +70,8 @@
  *
  */
 
-#include <stdint.h>
+// stdint.h include commented out by Nokia, it is not available on all platforms.
+// #include <stdint.h>
 /*
  * If you do not have the ISO standard stdint.h header file, then you
  * must typedef the following:
index 9c27af0..31a0fdc 100644 (file)
 #include "../../3rdparty/sha1/sha1.cpp"
 
 /*
+    These typedefs are needed by the RFC6234 code. Normally they would come
+    from from stdint.h, but since this header is not available on all platforms
+    (MSVC 2008, for example), we need to define them ourselves.
+*/
+typedef QT_PREPEND_NAMESPACE(quint64) uint64_t;
+typedef QT_PREPEND_NAMESPACE(quint32) uint32_t;
+typedef QT_PREPEND_NAMESPACE(quint8) uint8_t;
+typedef QT_PREPEND_NAMESPACE(qint16) int_least16_t;
+// Header from rfc6234 with 1 modification:
+// sha1.h - commented out '#include <stdint.h>' on line 74
+#include "../../3rdparty/rfc6234/sha.h"
+
+/*
     These 2 functions replace macros of the same name in sha224-256.c and
     sha384-512.c. Originally, these macros relied on a global static 'addTemp'
     variable. We do not want this for 2 reasons:
@@ -57,8 +70,6 @@
     2. static variables are not thread-safe, we do not want multiple threads
     computing a hash to corrupt one another
 */
-// Header from rfc6234 without modifications
-#include "../../3rdparty/rfc6234/sha.h"
 static int SHA224_256AddLength(SHA256Context *context, unsigned int length);
 static int SHA384_512AddLength(SHA512Context *context, unsigned int length);