]> git.pld-linux.org Git - packages/xorg-xserver-server.git/blame - xorg-xserver-server-builtin-SHA1.patch
up to 21.1.13
[packages/xorg-xserver-server.git] / xorg-xserver-server-builtin-SHA1.patch
CommitLineData
fc866b7f
AM
1diff -urN xorg-server-1.17.0.org/configure.ac xorg-server-1.17.0/configure.ac
2--- xorg-server-1.17.0.org/configure.ac 2015-02-02 07:40:17.000000000 +0100
3+++ xorg-server-1.17.0/configure.ac 2015-02-04 19:34:23.458568095 +0100
4@@ -1544,7 +1544,7 @@
5
6 if test "x$SPECIAL_DTRACE_OBJECTS" = "xyes" ; then
7 DIX_LIB='$(top_builddir)/dix/dix.O'
8- OS_LIB='$(top_builddir)/os/os.O $(SHA1_LIBS) $(DLOPEN_LIBS) $(LIBUNWIND_LIBS)'
9+ OS_LIB='$(top_builddir)/os/os.O $(DLOPEN_LIBS) $(LIBUNWIND_LIBS)'
10 else
11 DIX_LIB='$(top_builddir)/dix/libdix.la'
12 OS_LIB='$(top_builddir)/os/libos.la'
13@@ -1566,124 +1566,6 @@
14 MIEXT_SYNC_LIB='$(top_builddir)/miext/sync/libsync.la'
15 CORE_INCS='-I$(top_srcdir)/include -I$(top_builddir)/include'
16
17-# SHA1 hashing
18-AC_ARG_WITH([sha1],
19- [AS_HELP_STRING([--with-sha1=libc|libmd|libnettle|libgcrypt|libcrypto|libsha1|CommonCrypto|CryptoAPI],
20- [choose SHA1 implementation])])
21-AC_CHECK_FUNC([SHA1Init], [HAVE_SHA1_IN_LIBC=yes])
22-if test "x$with_sha1" = x && test "x$HAVE_SHA1_IN_LIBC" = xyes; then
23- with_sha1=libc
24-fi
25-if test "x$with_sha1" = xlibc && test "x$HAVE_SHA1_IN_LIBC" != xyes; then
26- AC_MSG_ERROR([libc requested but not found])
27-fi
28-if test "x$with_sha1" = xlibc; then
29- AC_DEFINE([HAVE_SHA1_IN_LIBC], [1],
30- [Use libc SHA1 functions])
31- SHA1_LIBS=""
32-fi
33-AC_CHECK_FUNC([CC_SHA1_Init], [HAVE_SHA1_IN_COMMONCRYPTO=yes])
34-if test "x$with_sha1" = x && test "x$HAVE_SHA1_IN_COMMONCRYPTO" = xyes; then
35- with_sha1=CommonCrypto
36-fi
37-if test "x$with_sha1" = xCommonCrypto && test "x$HAVE_SHA1_IN_COMMONCRYPTO" != xyes; then
38- AC_MSG_ERROR([CommonCrypto requested but not found])
39-fi
40-if test "x$with_sha1" = xCommonCrypto; then
41- AC_DEFINE([HAVE_SHA1_IN_COMMONCRYPTO], [1],
42- [Use CommonCrypto SHA1 functions])
43- SHA1_LIBS=""
44-fi
45-dnl stdcall functions cannot be tested with AC_CHECK_LIB
46-AC_CHECK_HEADER([wincrypt.h], [HAVE_SHA1_IN_CRYPTOAPI=yes], [], [#include <windows.h>])
47-if test "x$with_sha1" = x && test "x$HAVE_SHA1_IN_CRYPTOAPI" = xyes; then
48- with_sha1=CryptoAPI
49-fi
50-if test "x$with_sha1" = xCryptoAPI && test "x$HAVE_SHA1_IN_CRYPTOAPI" != xyes; then
51- AC_MSG_ERROR([CryptoAPI requested but not found])
52-fi
53-if test "x$with_sha1" = xCryptoAPI; then
54- AC_DEFINE([HAVE_SHA1_IN_CRYPTOAPI], [1],
55- [Use CryptoAPI SHA1 functions])
56- SHA1_LIBS=""
57-fi
58-AC_CHECK_LIB([md], [SHA1Init], [HAVE_LIBMD=yes])
59-if test "x$with_sha1" = x && test "x$HAVE_LIBMD" = xyes; then
60- with_sha1=libmd
61-fi
62-if test "x$with_sha1" = xlibmd && test "x$HAVE_LIBMD" != xyes; then
63- AC_MSG_ERROR([libmd requested but not found])
64-fi
65-if test "x$with_sha1" = xlibmd; then
66- AC_DEFINE([HAVE_SHA1_IN_LIBMD], [1],
67- [Use libmd SHA1 functions])
68- SHA1_LIBS=-lmd
69-fi
70-PKG_CHECK_MODULES([LIBSHA1], [libsha1], [HAVE_LIBSHA1=yes], [HAVE_LIBSHA1=no])
71-if test "x$with_sha1" = x && test "x$HAVE_LIBSHA1" = xyes; then
72- with_sha1=libsha1
73-fi
74-if test "x$with_sha1" = xlibsha1 && test "x$HAVE_LIBSHA1" != xyes; then
75- AC_MSG_ERROR([libsha1 requested but not found])
76-fi
77-if test "x$with_sha1" = xlibsha1; then
78- AC_DEFINE([HAVE_SHA1_IN_LIBSHA1], [1],
79- [Use libsha1 for SHA1])
80- SHA1_LIBS=-lsha1
81-fi
82-AC_CHECK_LIB([nettle], [nettle_sha1_init], [HAVE_LIBNETTLE=yes])
83-if test "x$with_sha1" = x && test "x$HAVE_LIBNETTLE" = xyes; then
84- with_sha1=libnettle
85-fi
86-if test "x$with_sha1" = xlibnettle && test "x$HAVE_LIBNETTLE" != xyes; then
87- AC_MSG_ERROR([libnettle requested but not found])
88-fi
89-if test "x$with_sha1" = xlibnettle; then
90- AC_DEFINE([HAVE_SHA1_IN_LIBNETTLE], [1],
91- [Use libnettle SHA1 functions])
92- SHA1_LIBS=-lnettle
93-fi
94-AC_CHECK_LIB([gcrypt], [gcry_md_open], [HAVE_LIBGCRYPT=yes])
95-if test "x$with_sha1" = x && test "x$HAVE_LIBGCRYPT" = xyes; then
96- with_sha1=libgcrypt
97-fi
98-if test "x$with_sha1" = xlibgcrypt && test "x$HAVE_LIBGCRYPT" != xyes; then
99- AC_MSG_ERROR([libgcrypt requested but not found])
100-fi
101-if test "x$with_sha1" = xlibgcrypt; then
102- AC_DEFINE([HAVE_SHA1_IN_LIBGCRYPT], [1],
103- [Use libgcrypt SHA1 functions])
104- SHA1_LIBS=-lgcrypt
105-fi
106-# We don't need all of the OpenSSL libraries, just libcrypto
107-AC_CHECK_LIB([crypto], [SHA1_Init], [HAVE_LIBCRYPTO=yes])
108-PKG_CHECK_MODULES([OPENSSL], [openssl], [HAVE_OPENSSL_PKC=yes],
109- [HAVE_OPENSSL_PKC=no])
110-if test "x$HAVE_LIBCRYPTO" = xyes || test "x$HAVE_OPENSSL_PKC" = xyes; then
111- if test "x$with_sha1" = x; then
112- with_sha1=libcrypto
113- fi
114-else
115- if test "x$with_sha1" = xlibcrypto; then
116- AC_MSG_ERROR([OpenSSL libcrypto requested but not found])
117- fi
118-fi
119-if test "x$with_sha1" = xlibcrypto; then
120- if test "x$HAVE_LIBCRYPTO" = xyes; then
121- SHA1_LIBS=-lcrypto
122- else
123- SHA1_LIBS="$OPENSSL_LIBS"
124- SHA1_CFLAGS="$OPENSSL_CFLAGS"
125- fi
126-fi
127-AC_MSG_CHECKING([for SHA1 implementation])
128-if test "x$with_sha1" = x; then
129- AC_MSG_ERROR([No suitable SHA1 implementation found])
130-fi
131-AC_MSG_RESULT([$with_sha1])
132-AC_SUBST(SHA1_LIBS)
133-AC_SUBST(SHA1_CFLAGS)
134-
135 PKG_CHECK_MODULES([XSERVERCFLAGS], [$REQUIRED_MODULES $REQUIRED_LIBS])
136 PKG_CHECK_MODULES([XSERVERLIBS], [$REQUIRED_LIBS])
137
138diff -urN xorg-server-1.17.0.org/include/dix-config.h.in xorg-server-1.17.0/include/dix-config.h.in
139--- xorg-server-1.17.0.org/include/dix-config.h.in 2014-10-09 14:15:31.000000000 +0200
140+++ xorg-server-1.17.0/include/dix-config.h.in 2015-02-04 19:34:23.455234679 +0100
141@@ -152,27 +152,6 @@
a4642760
JP
142 /* Define to 1 if you have the `arc4random_buf' function. */
143 #undef HAVE_ARC4RANDOM_BUF
be68129d
JR
144
145-/* Define to use libc SHA1 functions */
146-#undef HAVE_SHA1_IN_LIBC
147-
148-/* Define to use CommonCrypto SHA1 functions */
149-#undef HAVE_SHA1_IN_COMMONCRYPTO
150-
c113a98d
AM
151-/* Define to use CryptoAPI SHA1 functions */
152-#undef HAVE_SHA1_IN_CRYPTOAPI
153-
be68129d
JR
154-/* Define to use libmd SHA1 functions */
155-#undef HAVE_SHA1_IN_LIBMD
156-
157-/* Define to use libgcrypt SHA1 functions */
158-#undef HAVE_SHA1_IN_LIBGCRYPT
159-
c39080c6
AM
160-/* Define to use libnettle SHA1 functions */
161-#undef HAVE_SHA1_IN_LIBNETTLE
162-
be68129d
JR
163-/* Define to use libsha1 for SHA1 */
164-#undef HAVE_SHA1_IN_LIBSHA1
165-
166 /* Define to 1 if you have the `shmctl64' function. */
167 #undef HAVE_SHMCTL64
168
fc866b7f
AM
169diff -urN xorg-server-1.17.0.org/os/Makefile.am xorg-server-1.17.0/os/Makefile.am
170--- xorg-server-1.17.0.org/os/Makefile.am 2013-11-12 00:15:00.000000000 +0100
171+++ xorg-server-1.17.0/os/Makefile.am 2015-02-04 19:34:23.455234679 +0100
172@@ -21,7 +21,6 @@
a4642760 173 ospoll.h \
fc866b7f 174 utils.c \
be68129d
JR
175 xdmauth.c \
176- xsha1.c \
177 xstrans.c \
178 xprintf.c \
179 $(XORG_SRCS)
fc866b7f
AM
180diff -urN xorg-server-1.17.0.org/os/xsha1.c xorg-server-1.17.0/os/xsha1.c
181--- xorg-server-1.17.0.org/os/xsha1.c 2015-01-18 00:42:52.000000000 +0100
182+++ xorg-server-1.17.0/os/xsha1.c 2015-02-04 19:34:23.455234679 +0100
1735b6f4 183@@ -23,279 +23,3 @@
fc866b7f
AM
184 * DEALINGS IN THE SOFTWARE.
185 */
186
be68129d
JR
187-#ifdef HAVE_DIX_CONFIG_H
188-#include <dix-config.h>
189-#endif
190-
191-#include "os.h"
192-#include "xsha1.h"
193-
194-#if defined(HAVE_SHA1_IN_LIBMD) /* Use libmd for SHA1 */ \
5ef960ab 195- || defined(HAVE_SHA1_IN_LIBC) /* Use libc for SHA1 */
be68129d 196-
1735b6f4
JP
197-#if defined(__DragonFly__) || defined(__FreeBSD__)
198-#include <sha.h>
199-#define SHA1End SHA1_End
200-#define SHA1File SHA1_File
201-#define SHA1Final SHA1_Final
202-#define SHA1Init SHA1_Init
203-#define SHA1Update SHA1_Update
204-#else
5ef960ab 205-#include <sha1.h>
1735b6f4 206-#endif
be68129d 207-
5ef960ab
AM
208-void *
209-x_sha1_init(void)
be68129d 210-{
156d8c26 211- SHA1_CTX *ctx = malloc(sizeof(*ctx));
5ef960ab 212-
be68129d
JR
213- if (!ctx)
214- return NULL;
215- SHA1Init(ctx);
216- return ctx;
217-}
218-
5ef960ab
AM
219-int
220-x_sha1_update(void *ctx, void *data, int size)
be68129d
JR
221-{
222- SHA1_CTX *sha1_ctx = ctx;
5ef960ab 223-
be68129d
JR
224- SHA1Update(sha1_ctx, data, size);
225- return 1;
226-}
227-
5ef960ab
AM
228-int
229-x_sha1_final(void *ctx, unsigned char result[20])
be68129d
JR
230-{
231- SHA1_CTX *sha1_ctx = ctx;
5ef960ab 232-
be68129d 233- SHA1Final(result, sha1_ctx);
156d8c26 234- free(sha1_ctx);
be68129d
JR
235- return 1;
236-}
237-
5ef960ab 238-#elif defined(HAVE_SHA1_IN_COMMONCRYPTO) /* Use CommonCrypto for SHA1 */
be68129d
JR
239-
240-#include <CommonCrypto/CommonDigest.h>
241-
5ef960ab
AM
242-void *
243-x_sha1_init(void)
be68129d 244-{
156d8c26 245- CC_SHA1_CTX *ctx = malloc(sizeof(*ctx));
5ef960ab 246-
be68129d
JR
247- if (!ctx)
248- return NULL;
249- CC_SHA1_Init(ctx);
250- return ctx;
251-}
252-
5ef960ab
AM
253-int
254-x_sha1_update(void *ctx, void *data, int size)
be68129d
JR
255-{
256- CC_SHA1_CTX *sha1_ctx = ctx;
5ef960ab 257-
be68129d
JR
258- CC_SHA1_Update(sha1_ctx, data, size);
259- return 1;
260-}
261-
5ef960ab
AM
262-int
263-x_sha1_final(void *ctx, unsigned char result[20])
be68129d
JR
264-{
265- CC_SHA1_CTX *sha1_ctx = ctx;
5ef960ab 266-
be68129d 267- CC_SHA1_Final(result, sha1_ctx);
156d8c26 268- free(sha1_ctx);
be68129d
JR
269- return 1;
270-}
271-
c113a98d
AM
272-#elif defined(HAVE_SHA1_IN_CRYPTOAPI) /* Use CryptoAPI for SHA1 */
273-
274-#define WIN32_LEAN_AND_MEAN
275-#include <X11/Xwindows.h>
276-#include <wincrypt.h>
277-
278-static HCRYPTPROV hProv;
279-
280-void *
281-x_sha1_init(void)
282-{
283- HCRYPTHASH *ctx = malloc(sizeof(*ctx));
284-
285- if (!ctx)
286- return NULL;
287- CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
288- CryptCreateHash(hProv, CALG_SHA1, 0, 0, ctx);
289- return ctx;
290-}
291-
292-int
293-x_sha1_update(void *ctx, void *data, int size)
294-{
295- HCRYPTHASH *hHash = ctx;
296-
297- CryptHashData(*hHash, data, size, 0);
298- return 1;
299-}
300-
301-int
302-x_sha1_final(void *ctx, unsigned char result[20])
303-{
304- HCRYPTHASH *hHash = ctx;
305- DWORD len = 20;
306-
307- CryptGetHashParam(*hHash, HP_HASHVAL, result, &len, 0);
308- CryptDestroyHash(*hHash);
309- CryptReleaseContext(hProv, 0);
310- free(ctx);
311- return 1;
312-}
313-
c39080c6
AM
314-#elif defined(HAVE_SHA1_IN_LIBNETTLE) /* Use libnettle for SHA1 */
315-
316-#include <nettle/sha.h>
317-
318-void *
319-x_sha1_init(void)
320-{
321- struct sha1_ctx *ctx = malloc(sizeof(*ctx));
322-
323- if (!ctx)
324- return NULL;
325- sha1_init(ctx);
326- return ctx;
327-}
328-
329-int
330-x_sha1_update(void *ctx, void *data, int size)
331-{
332- sha1_update(ctx, size, data);
333- return 1;
334-}
335-
336-int
337-x_sha1_final(void *ctx, unsigned char result[20])
338-{
339- sha1_digest(ctx, 20, result);
340- free(ctx);
341- return 1;
342-}
343-
5ef960ab 344-#elif defined(HAVE_SHA1_IN_LIBGCRYPT) /* Use libgcrypt for SHA1 */
be68129d 345-
5ef960ab 346-#include <gcrypt.h>
be68129d 347-
5ef960ab
AM
348-void *
349-x_sha1_init(void)
be68129d
JR
350-{
351- static int init;
352- gcry_md_hd_t h;
353- gcry_error_t err;
354-
355- if (!init) {
356- if (!gcry_check_version(NULL))
357- return NULL;
358- gcry_control(GCRYCTL_DISABLE_SECMEM, 0);
359- gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
360- init = 1;
361- }
362-
363- err = gcry_md_open(&h, GCRY_MD_SHA1, 0);
364- if (err)
365- return NULL;
366- return h;
367-}
368-
5ef960ab
AM
369-int
370-x_sha1_update(void *ctx, void *data, int size)
be68129d
JR
371-{
372- gcry_md_hd_t h = ctx;
5ef960ab 373-
be68129d
JR
374- gcry_md_write(h, data, size);
375- return 1;
376-}
377-
5ef960ab
AM
378-int
379-x_sha1_final(void *ctx, unsigned char result[20])
be68129d
JR
380-{
381- gcry_md_hd_t h = ctx;
5ef960ab 382-
be68129d
JR
383- memcpy(result, gcry_md_read(h, GCRY_MD_SHA1), 20);
384- gcry_md_close(h);
385- return 1;
386-}
387-
5ef960ab 388-#elif defined(HAVE_SHA1_IN_LIBSHA1) /* Use libsha1 */
be68129d 389-
5ef960ab 390-#include <libsha1.h>
be68129d 391-
5ef960ab
AM
392-void *
393-x_sha1_init(void)
be68129d 394-{
156d8c26 395- sha1_ctx *ctx = malloc(sizeof(*ctx));
5ef960ab
AM
396-
397- if (!ctx)
be68129d
JR
398- return NULL;
399- sha1_begin(ctx);
400- return ctx;
401-}
402-
5ef960ab
AM
403-int
404-x_sha1_update(void *ctx, void *data, int size)
be68129d
JR
405-{
406- sha1_hash(data, size, ctx);
407- return 1;
408-}
409-
5ef960ab
AM
410-int
411-x_sha1_final(void *ctx, unsigned char result[20])
be68129d
JR
412-{
413- sha1_end(result, ctx);
156d8c26 414- free(ctx);
be68129d
JR
415- return 1;
416-}
417-
5ef960ab 418-#else /* Use OpenSSL's libcrypto */
be68129d 419-
5ef960ab
AM
420-#include <stddef.h> /* buggy openssl/sha.h wants size_t */
421-#include <openssl/sha.h>
be68129d 422-
5ef960ab
AM
423-void *
424-x_sha1_init(void)
be68129d
JR
425-{
426- int ret;
156d8c26 427- SHA_CTX *ctx = malloc(sizeof(*ctx));
5ef960ab 428-
be68129d
JR
429- if (!ctx)
430- return NULL;
431- ret = SHA1_Init(ctx);
432- if (!ret) {
156d8c26 433- free(ctx);
be68129d
JR
434- return NULL;
435- }
436- return ctx;
437-}
438-
5ef960ab
AM
439-int
440-x_sha1_update(void *ctx, void *data, int size)
be68129d
JR
441-{
442- int ret;
443- SHA_CTX *sha_ctx = ctx;
5ef960ab 444-
be68129d
JR
445- ret = SHA1_Update(sha_ctx, data, size);
446- if (!ret)
156d8c26 447- free(sha_ctx);
be68129d
JR
448- return ret;
449-}
450-
5ef960ab
AM
451-int
452-x_sha1_final(void *ctx, unsigned char result[20])
be68129d
JR
453-{
454- int ret;
455- SHA_CTX *sha_ctx = ctx;
5ef960ab 456-
be68129d 457- ret = SHA1_Final(result, sha_ctx);
156d8c26 458- free(sha_ctx);
be68129d
JR
459- return ret;
460-}
461-
462-#endif
fc866b7f
AM
463diff -urN xorg-server-1.17.0.org/render/glyph.c xorg-server-1.17.0/render/glyph.c
464--- xorg-server-1.17.0.org/render/glyph.c 2015-01-18 00:42:52.000000000 +0100
465+++ xorg-server-1.17.0/render/glyph.c 2015-02-04 19:34:23.458568095 +0100
be68129d
JR
466@@ -26,8 +26,7 @@
467 #include <dix-config.h>
468 #endif
469
470-#include "xsha1.h"
471-
472+#include "sha1.h"
473 #include "misc.h"
474 #include "scrnintstr.h"
475 #include "os.h"
fc866b7f 476@@ -165,21 +164,13 @@
5ef960ab
AM
477 HashGlyph(xGlyphInfo * gi,
478 CARD8 *bits, unsigned long size, unsigned char sha1[20])
be68129d
JR
479 {
480- void *ctx = x_sha1_init();
481- int success;
5ef960ab
AM
482+ SHA1_CTX ctx;
483
be68129d 484- if (!ctx)
5ef960ab
AM
485- return BadAlloc;
486+ SHA1Init (&ctx);
487+ SHA1Update (&ctx, gi, sizeof (xGlyphInfo));
488+ SHA1Update (&ctx, bits, size);
489+ SHA1Final (sha1, &ctx);
490
be68129d
JR
491- success = x_sha1_update(ctx, gi, sizeof(xGlyphInfo));
492- if (!success)
5ef960ab 493- return BadAlloc;
be68129d
JR
494- success = x_sha1_update(ctx, bits, size);
495- if (!success)
5ef960ab 496- return BadAlloc;
be68129d
JR
497- success = x_sha1_final(ctx, sha1);
498- if (!success)
5ef960ab 499- return BadAlloc;
be68129d
JR
500 return Success;
501 }
502
fc866b7f
AM
503diff -urN xorg-server-1.17.0.org/render/Makefile.am xorg-server-1.17.0/render/Makefile.am
504--- xorg-server-1.17.0.org/render/Makefile.am 2013-06-18 18:03:42.000000000 +0200
505+++ xorg-server-1.17.0/render/Makefile.am 2015-02-04 19:34:23.455234679 +0100
506@@ -13,8 +13,11 @@
507 mitrap.c \
508 mitri.c \
509 picture.c \
510+ sha1.c \
511 render.c
512
513 if XORG
514 sdk_HEADERS = picture.h mipict.h glyphstr.h picturestr.h
515 endif
516+
517+EXTRA_DIST = sha1.h
518diff -urN xorg-server-1.17.0.org/render/sha1.c xorg-server-1.17.0/render/sha1.c
519--- xorg-server-1.17.0.org/render/sha1.c 1970-01-01 01:00:00.000000000 +0100
520+++ xorg-server-1.17.0/render/sha1.c 2015-02-04 19:34:23.458568095 +0100
be68129d
JR
521@@ -0,0 +1,173 @@
522+/*
523+ * SHA-1 in C
524+ * By Steve Reid <steve@edmweb.com>
525+ * 100% Public Domain
526+ *
527+ * Test Vectors (from FIPS PUB 180-1)
528+ * "abc"
529+ * A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
530+ * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
531+ * 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
532+ * A million repetitions of "a"
533+ * 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
534+ */
535+
536+#include <sys/param.h>
537+#include <string.h>
538+#include <sha1.h>
539+
540+#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
541+
542+/*
543+ * blk0() and blk() perform the initial expand.
544+ * I got the idea of expanding during the round function from SSLeay
545+ */
546+#if BYTE_ORDER == LITTLE_ENDIAN
547+# define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \
548+ |(rol(block->l[i],8)&0x00FF00FF))
549+#else
550+# define blk0(i) block->l[i]
551+#endif
552+#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \
553+ ^block->l[(i+2)&15]^block->l[i&15],1))
554+
555+/*
556+ * (R0+R1), R2, R3, R4 are the different operations (rounds) used in SHA1
557+ */
558+#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);
559+#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30);
560+#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);
561+#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);
562+#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);
563+
564+/*
565+ * Hash a single 512-bit block. This is the core of the algorithm.
566+ */
567+void
568+SHA1Transform(uint32_t state[5], const uint8_t buffer[SHA1_BLOCK_LENGTH])
569+{
570+ uint32_t a, b, c, d, e;
571+ uint8_t workspace[SHA1_BLOCK_LENGTH];
572+ typedef union {
573+ uint8_t c[64];
574+ uint32_t l[16];
575+ } CHAR64LONG16;
576+ CHAR64LONG16 *block = (CHAR64LONG16 *)workspace;
577+
578+ (void)memcpy(block, buffer, SHA1_BLOCK_LENGTH);
579+
580+ /* Copy context->state[] to working vars */
581+ a = state[0];
582+ b = state[1];
583+ c = state[2];
584+ d = state[3];
585+ e = state[4];
586+
587+ /* 4 rounds of 20 operations each. Loop unrolled. */
588+ R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
589+ R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
590+ R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
591+ R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
592+ R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
593+ R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
594+ R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
595+ R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
596+ R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
597+ R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
598+ R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
599+ R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
600+ R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
601+ R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
602+ R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
603+ R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
604+ R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
605+ R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
606+ R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
607+ R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
608+
609+ /* Add the working vars back into context.state[] */
610+ state[0] += a;
611+ state[1] += b;
612+ state[2] += c;
613+ state[3] += d;
614+ state[4] += e;
615+
616+ /* Wipe variables */
617+ a = b = c = d = e = 0;
618+}
619+
620+
621+/*
622+ * SHA1Init - Initialize new context
623+ */
624+void
625+SHA1Init(SHA1_CTX *context)
626+{
627+
628+ /* SHA1 initialization constants */
629+ context->count = 0;
630+ context->state[0] = 0x67452301;
631+ context->state[1] = 0xEFCDAB89;
632+ context->state[2] = 0x98BADCFE;
633+ context->state[3] = 0x10325476;
634+ context->state[4] = 0xC3D2E1F0;
635+}
636+
637+
638+/*
639+ * Run your data through this.
640+ */
641+void
642+SHA1Update(SHA1_CTX *context, const uint8_t *data, size_t len)
643+{
644+ size_t i, j;
645+
646+ j = (size_t)((context->count >> 3) & 63);
647+ context->count += (len << 3);
648+ if ((j + len) > 63) {
649+ (void)memcpy(&context->buffer[j], data, (i = 64-j));
650+ SHA1Transform(context->state, context->buffer);
651+ for ( ; i + 63 < len; i += 64)
652+ SHA1Transform(context->state, (uint8_t *)&data[i]);
653+ j = 0;
654+ } else {
655+ i = 0;
656+ }
657+ (void)memcpy(&context->buffer[j], &data[i], len - i);
658+}
659+
660+
661+/*
662+ * Add padding and return the message digest.
663+ */
664+void
665+SHA1Pad(SHA1_CTX *context)
666+{
667+ uint8_t finalcount[8];
668+ uint i;
669+
670+ for (i = 0; i < 8; i++) {
671+ finalcount[i] = (uint8_t)((context->count >>
672+ ((7 - (i & 7)) * 8)) & 255); /* Endian independent */
673+ }
674+ SHA1Update(context, (uint8_t *)"\200", 1);
675+ while ((context->count & 504) != 448)
676+ SHA1Update(context, (uint8_t *)"\0", 1);
677+ SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */
678+}
679+
680+void
681+SHA1Final(uint8_t digest[SHA1_DIGEST_LENGTH], SHA1_CTX *context)
682+{
683+ uint i;
684+
685+ SHA1Pad(context);
686+ if (digest) {
687+ for (i = 0; i < SHA1_DIGEST_LENGTH; i++) {
688+ digest[i] = (uint8_t)
689+ ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
690+ }
691+ memset(context, 0, sizeof(*context));
692+ }
693+}
694+
fc866b7f
AM
695diff -urN xorg-server-1.17.0.org/render/sha1.h xorg-server-1.17.0/render/sha1.h
696--- xorg-server-1.17.0.org/render/sha1.h 1970-01-01 01:00:00.000000000 +0100
697+++ xorg-server-1.17.0/render/sha1.h 2015-02-04 19:34:23.458568095 +0100
be68129d
JR
698@@ -0,0 +1,63 @@
699+/*
700+ * SHA-1 in C
701+ * By Steve Reid <steve@edmweb.com>
702+ * 100% Public Domain
703+ */
704+
705+#ifndef _SHA1_H
706+#define _SHA1_H
707+
708+#include <stdint.h>
709+#include <stddef.h>
710+#include <unistd.h>
711+
712+
713+#define SHA1_BLOCK_LENGTH 64
714+#define SHA1_DIGEST_LENGTH 20
715+#define SHA1_DIGEST_STRING_LENGTH (SHA1_DIGEST_LENGTH * 2 + 1)
716+
717+typedef struct {
718+ uint32_t state[5];
719+ uint64_t count;
720+ uint8_t buffer[SHA1_BLOCK_LENGTH];
721+} SHA1_CTX;
722+
723+#include <sys/cdefs.h>
724+
725+__BEGIN_DECLS
726+void SHA1Init(SHA1_CTX *);
727+void SHA1Pad(SHA1_CTX *);
728+void SHA1Transform(uint32_t [5], const uint8_t [SHA1_BLOCK_LENGTH])
729+ __attribute__((__bounded__(__minbytes__,1,5)))
730+ __attribute__((__bounded__(__minbytes__,2,SHA1_BLOCK_LENGTH)));
731+void SHA1Update(SHA1_CTX *, const uint8_t *, size_t)
732+ __attribute__((__bounded__(__string__,2,3)));
733+void SHA1Final(uint8_t [SHA1_DIGEST_LENGTH], SHA1_CTX *)
734+ __attribute__((__bounded__(__minbytes__,1,SHA1_DIGEST_LENGTH)));
735+char *SHA1End(SHA1_CTX *, char *)
736+ __attribute__((__bounded__(__minbytes__,2,SHA1_DIGEST_STRING_LENGTH)));
737+char *SHA1File(const char *, char *)
738+ __attribute__((__bounded__(__minbytes__,2,SHA1_DIGEST_STRING_LENGTH)));
739+char *SHA1FileChunk(const char *, char *, off_t, off_t)
740+ __attribute__((__bounded__(__minbytes__,2,SHA1_DIGEST_STRING_LENGTH)));
741+char *SHA1Data(const uint8_t *, size_t, char *)
742+ __attribute__((__bounded__(__string__,1,2)))
743+ __attribute__((__bounded__(__minbytes__,3,SHA1_DIGEST_STRING_LENGTH)));
744+__END_DECLS
745+
746+#define HTONDIGEST(x) do { \
747+ x[0] = htonl(x[0]); \
748+ x[1] = htonl(x[1]); \
749+ x[2] = htonl(x[2]); \
750+ x[3] = htonl(x[3]); \
751+ x[4] = htonl(x[4]); } while (0)
752+
753+#define NTOHDIGEST(x) do { \
754+ x[0] = ntohl(x[0]); \
755+ x[1] = ntohl(x[1]); \
756+ x[2] = ntohl(x[2]); \
757+ x[3] = ntohl(x[3]); \
758+ x[4] = ntohl(x[4]); } while (0)
759+
760+#endif /* _SHA1_H */
761+
This page took 0.581223 seconds and 5 git commands to generate.