[PATCH] Added support for another library providing SHA1 algorithm: libsha1.

Mikhail Gusarov dottedmag at dottedmag.net
Sun Mar 15 02:10:58 PDT 2009


The library can be found at http://github.com/dottedmag/libsha1/tree/master

Signed-off-by: Mikhail Gusarov <dottedmag at dottedmag.net>
---
 configure.ac            |    9 +++++++++
 include/dix-config.h.in |    3 +++
 render/glyph.c          |   12 ++++++++++--
 3 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/configure.ac b/configure.ac
index f2718b8..9938fce 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1104,6 +1104,15 @@ if test "x$SHA1_LIB" = "x" ; then
             [Use libmd SHA1 functions instead of OpenSSL libcrypto])])
 fi
 
+#
+# libsha1 is SHA1-only tiny library. Useful for embedded systems.
+#
+if test "x$SHA1_LIB" = "x"; then
+  AC_CHECK_LIB([sha1], [sha1_begin], [SHA1_LIB="-lsha1"
+               AC_DEFINE([HAVE_SHA1_IN_LIBSHA1], [1],
+               [Use libsha1 instead of OpenSSL libcrypto])])
+fi
+
 if test "x$SHA1_LIB" = "x" ; then
   PKG_CHECK_EXISTS([OPENSSL], [openssl], [HAVE_OPENSSL_PKC=yes],
                     [HAVE_OPENSSL_PKC=no])
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index 2515d83..025d16c 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -157,6 +157,9 @@
 /* Define to use libmd SHA1 functions instead of OpenSSL libcrypto */
 #undef HAVE_SHA1_IN_LIBMD
 
+/* Define to use libsha1 functions instead of OpenSSL libcrypto */
+#undef HAVE_SHA1_IN_LIBSHA1
+
 /* Define to 1 if you have the `shmctl64' function. */
 #undef HAVE_SHMCTL64
 
diff --git a/render/glyph.c b/render/glyph.c
index 87b332e..2a2dd9e 100644
--- a/render/glyph.c
+++ b/render/glyph.c
@@ -26,8 +26,10 @@
 #include <dix-config.h>
 #endif
 
-#ifdef HAVE_SHA1_IN_LIBMD /* Use libmd for SHA1 */
+#if defined(HAVE_SHA1_IN_LIBMD) /* Use libmd for SHA1 */
 # include <sha1.h>
+#elif defined(HAVE_SHA1_IN_LIBSHA1)
+# include <libsha1.h>
 #else /* Use OpenSSL's libcrypto */
 # include <stddef.h>  /* buggy openssl/sha.h wants size_t */
 # include <openssl/sha.h>
@@ -198,13 +200,19 @@ HashGlyph (xGlyphInfo    *gi,
 	   unsigned long size,
 	   unsigned char sha1[20])
 {
-#ifdef HAVE_SHA1_IN_LIBMD /* Use libmd for SHA1 */
+#if defined(HAVE_SHA1_IN_LIBMD) /* Use libmd for SHA1 */
     SHA1_CTX ctx;
 
     SHA1Init (&ctx);
     SHA1Update (&ctx, gi, sizeof (xGlyphInfo));
     SHA1Update (&ctx, bits, size);
     SHA1Final (sha1, &ctx);
+#elif defined(HAVE_SHA1_IN_LIBSHA1)
+    sha1_ctx ctx;
+    sha1_begin (&ctx);
+    sha1_hash (gi, sizeof(xGlyphInfo), &ctx);
+    sha1_hash (bits, size, &ctx);
+    sha1_end (sha1, &ctx);
 #else /* Use OpenSSL's libcrypto */
     SHA_CTX ctx;
     int success;
-- 
1.6.2



More information about the xorg-devel mailing list