1 diff -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
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)'
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'
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
25 -if test "x$with_sha1" = xlibc && test "x$HAVE_SHA1_IN_LIBC" != xyes; then
26 - AC_MSG_ERROR([libc requested but not found])
28 -if test "x$with_sha1" = xlibc; then
29 - AC_DEFINE([HAVE_SHA1_IN_LIBC], [1],
30 - [Use libc SHA1 functions])
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
37 -if test "x$with_sha1" = xCommonCrypto && test "x$HAVE_SHA1_IN_COMMONCRYPTO" != xyes; then
38 - AC_MSG_ERROR([CommonCrypto requested but not found])
40 -if test "x$with_sha1" = xCommonCrypto; then
41 - AC_DEFINE([HAVE_SHA1_IN_COMMONCRYPTO], [1],
42 - [Use CommonCrypto SHA1 functions])
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
50 -if test "x$with_sha1" = xCryptoAPI && test "x$HAVE_SHA1_IN_CRYPTOAPI" != xyes; then
51 - AC_MSG_ERROR([CryptoAPI requested but not found])
53 -if test "x$with_sha1" = xCryptoAPI; then
54 - AC_DEFINE([HAVE_SHA1_IN_CRYPTOAPI], [1],
55 - [Use CryptoAPI SHA1 functions])
58 -AC_CHECK_LIB([md], [SHA1Init], [HAVE_LIBMD=yes])
59 -if test "x$with_sha1" = x && test "x$HAVE_LIBMD" = xyes; then
62 -if test "x$with_sha1" = xlibmd && test "x$HAVE_LIBMD" != xyes; then
63 - AC_MSG_ERROR([libmd requested but not found])
65 -if test "x$with_sha1" = xlibmd; then
66 - AC_DEFINE([HAVE_SHA1_IN_LIBMD], [1],
67 - [Use libmd SHA1 functions])
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
74 -if test "x$with_sha1" = xlibsha1 && test "x$HAVE_LIBSHA1" != xyes; then
75 - AC_MSG_ERROR([libsha1 requested but not found])
77 -if test "x$with_sha1" = xlibsha1; then
78 - AC_DEFINE([HAVE_SHA1_IN_LIBSHA1], [1],
79 - [Use libsha1 for SHA1])
82 -AC_CHECK_LIB([nettle], [nettle_sha1_init], [HAVE_LIBNETTLE=yes])
83 -if test "x$with_sha1" = x && test "x$HAVE_LIBNETTLE" = xyes; then
86 -if test "x$with_sha1" = xlibnettle && test "x$HAVE_LIBNETTLE" != xyes; then
87 - AC_MSG_ERROR([libnettle requested but not found])
89 -if test "x$with_sha1" = xlibnettle; then
90 - AC_DEFINE([HAVE_SHA1_IN_LIBNETTLE], [1],
91 - [Use libnettle SHA1 functions])
94 -AC_CHECK_LIB([gcrypt], [gcry_md_open], [HAVE_LIBGCRYPT=yes])
95 -if test "x$with_sha1" = x && test "x$HAVE_LIBGCRYPT" = xyes; then
98 -if test "x$with_sha1" = xlibgcrypt && test "x$HAVE_LIBGCRYPT" != xyes; then
99 - AC_MSG_ERROR([libgcrypt requested but not found])
101 -if test "x$with_sha1" = xlibgcrypt; then
102 - AC_DEFINE([HAVE_SHA1_IN_LIBGCRYPT], [1],
103 - [Use libgcrypt SHA1 functions])
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
115 - if test "x$with_sha1" = xlibcrypto; then
116 - AC_MSG_ERROR([OpenSSL libcrypto requested but not found])
119 -if test "x$with_sha1" = xlibcrypto; then
120 - if test "x$HAVE_LIBCRYPTO" = xyes; then
123 - SHA1_LIBS="$OPENSSL_LIBS"
124 - SHA1_CFLAGS="$OPENSSL_CFLAGS"
127 -AC_MSG_CHECKING([for SHA1 implementation])
128 -if test "x$with_sha1" = x; then
129 - AC_MSG_ERROR([No suitable SHA1 implementation found])
131 -AC_MSG_RESULT([$with_sha1])
133 -AC_SUBST(SHA1_CFLAGS)
135 PKG_CHECK_MODULES([XSERVERCFLAGS], [$REQUIRED_MODULES $REQUIRED_LIBS])
136 PKG_CHECK_MODULES([XSERVERLIBS], [$REQUIRED_LIBS])
138 diff -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
142 /* Define to 1 if you have the `arc4random_buf' function. */
143 #undef HAVE_ARC4RANDOM_BUF
145 -/* Define to use libc SHA1 functions */
146 -#undef HAVE_SHA1_IN_LIBC
148 -/* Define to use CommonCrypto SHA1 functions */
149 -#undef HAVE_SHA1_IN_COMMONCRYPTO
151 -/* Define to use CryptoAPI SHA1 functions */
152 -#undef HAVE_SHA1_IN_CRYPTOAPI
154 -/* Define to use libmd SHA1 functions */
155 -#undef HAVE_SHA1_IN_LIBMD
157 -/* Define to use libgcrypt SHA1 functions */
158 -#undef HAVE_SHA1_IN_LIBGCRYPT
160 -/* Define to use libnettle SHA1 functions */
161 -#undef HAVE_SHA1_IN_LIBNETTLE
163 -/* Define to use libsha1 for SHA1 */
164 -#undef HAVE_SHA1_IN_LIBSHA1
166 /* Define to 1 if you have the `shmctl64' function. */
169 diff -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
180 diff -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
184 * DEALINGS IN THE SOFTWARE.
187 -#ifdef HAVE_DIX_CONFIG_H
188 -#include <dix-config.h>
194 -#if defined(HAVE_SHA1_IN_LIBMD) /* Use libmd for SHA1 */ \
195 - || defined(HAVE_SHA1_IN_LIBC) /* Use libc for SHA1 */
197 -#if defined(__DragonFly__) || defined(__FreeBSD__)
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
211 - SHA1_CTX *ctx = malloc(sizeof(*ctx));
220 -x_sha1_update(void *ctx, void *data, int size)
222 - SHA1_CTX *sha1_ctx = ctx;
224 - SHA1Update(sha1_ctx, data, size);
229 -x_sha1_final(void *ctx, unsigned char result[20])
231 - SHA1_CTX *sha1_ctx = ctx;
233 - SHA1Final(result, sha1_ctx);
238 -#elif defined(HAVE_SHA1_IN_COMMONCRYPTO) /* Use CommonCrypto for SHA1 */
240 -#include <CommonCrypto/CommonDigest.h>
245 - CC_SHA1_CTX *ctx = malloc(sizeof(*ctx));
254 -x_sha1_update(void *ctx, void *data, int size)
256 - CC_SHA1_CTX *sha1_ctx = ctx;
258 - CC_SHA1_Update(sha1_ctx, data, size);
263 -x_sha1_final(void *ctx, unsigned char result[20])
265 - CC_SHA1_CTX *sha1_ctx = ctx;
267 - CC_SHA1_Final(result, sha1_ctx);
272 -#elif defined(HAVE_SHA1_IN_CRYPTOAPI) /* Use CryptoAPI for SHA1 */
274 -#define WIN32_LEAN_AND_MEAN
275 -#include <X11/Xwindows.h>
276 -#include <wincrypt.h>
278 -static HCRYPTPROV hProv;
283 - HCRYPTHASH *ctx = malloc(sizeof(*ctx));
287 - CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
288 - CryptCreateHash(hProv, CALG_SHA1, 0, 0, ctx);
293 -x_sha1_update(void *ctx, void *data, int size)
295 - HCRYPTHASH *hHash = ctx;
297 - CryptHashData(*hHash, data, size, 0);
302 -x_sha1_final(void *ctx, unsigned char result[20])
304 - HCRYPTHASH *hHash = ctx;
307 - CryptGetHashParam(*hHash, HP_HASHVAL, result, &len, 0);
308 - CryptDestroyHash(*hHash);
309 - CryptReleaseContext(hProv, 0);
314 -#elif defined(HAVE_SHA1_IN_LIBNETTLE) /* Use libnettle for SHA1 */
316 -#include <nettle/sha.h>
321 - struct sha1_ctx *ctx = malloc(sizeof(*ctx));
330 -x_sha1_update(void *ctx, void *data, int size)
332 - sha1_update(ctx, size, data);
337 -x_sha1_final(void *ctx, unsigned char result[20])
339 - sha1_digest(ctx, 20, result);
344 -#elif defined(HAVE_SHA1_IN_LIBGCRYPT) /* Use libgcrypt for SHA1 */
356 - if (!gcry_check_version(NULL))
358 - gcry_control(GCRYCTL_DISABLE_SECMEM, 0);
359 - gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0);
363 - err = gcry_md_open(&h, GCRY_MD_SHA1, 0);
370 -x_sha1_update(void *ctx, void *data, int size)
372 - gcry_md_hd_t h = ctx;
374 - gcry_md_write(h, data, size);
379 -x_sha1_final(void *ctx, unsigned char result[20])
381 - gcry_md_hd_t h = ctx;
383 - memcpy(result, gcry_md_read(h, GCRY_MD_SHA1), 20);
388 -#elif defined(HAVE_SHA1_IN_LIBSHA1) /* Use libsha1 */
390 -#include <libsha1.h>
395 - sha1_ctx *ctx = malloc(sizeof(*ctx));
404 -x_sha1_update(void *ctx, void *data, int size)
406 - sha1_hash(data, size, ctx);
411 -x_sha1_final(void *ctx, unsigned char result[20])
413 - sha1_end(result, ctx);
418 -#else /* Use OpenSSL's libcrypto */
420 -#include <stddef.h> /* buggy openssl/sha.h wants size_t */
421 -#include <openssl/sha.h>
427 - SHA_CTX *ctx = malloc(sizeof(*ctx));
431 - ret = SHA1_Init(ctx);
440 -x_sha1_update(void *ctx, void *data, int size)
443 - SHA_CTX *sha_ctx = ctx;
445 - ret = SHA1_Update(sha_ctx, data, size);
452 -x_sha1_final(void *ctx, unsigned char result[20])
455 - SHA_CTX *sha_ctx = ctx;
457 - ret = SHA1_Final(result, sha_ctx);
463 diff -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
467 #include <dix-config.h>
474 #include "scrnintstr.h"
476 @@ -165,21 +164,13 @@
477 HashGlyph(xGlyphInfo * gi,
478 CARD8 *bits, unsigned long size, unsigned char sha1[20])
480 - void *ctx = x_sha1_init();
487 + SHA1Update (&ctx, gi, sizeof (xGlyphInfo));
488 + SHA1Update (&ctx, bits, size);
489 + SHA1Final (sha1, &ctx);
491 - success = x_sha1_update(ctx, gi, sizeof(xGlyphInfo));
494 - success = x_sha1_update(ctx, bits, size);
497 - success = x_sha1_final(ctx, sha1);
503 diff -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
514 sdk_HEADERS = picture.h mipict.h glyphstr.h picturestr.h
518 diff -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
524 + * By Steve Reid <steve@edmweb.com>
525 + * 100% Public Domain
527 + * Test Vectors (from FIPS PUB 180-1)
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
536 +#include <sys/param.h>
540 +#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
543 + * blk0() and blk() perform the initial expand.
544 + * I got the idea of expanding during the round function from SSLeay
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))
550 +# define blk0(i) block->l[i]
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))
556 + * (R0+R1), R2, R3, R4 are the different operations (rounds) used in SHA1
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);
565 + * Hash a single 512-bit block. This is the core of the algorithm.
568 +SHA1Transform(uint32_t state[5], const uint8_t buffer[SHA1_BLOCK_LENGTH])
570 + uint32_t a, b, c, d, e;
571 + uint8_t workspace[SHA1_BLOCK_LENGTH];
576 + CHAR64LONG16 *block = (CHAR64LONG16 *)workspace;
578 + (void)memcpy(block, buffer, SHA1_BLOCK_LENGTH);
580 + /* Copy context->state[] to working vars */
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);
609 + /* Add the working vars back into context.state[] */
616 + /* Wipe variables */
617 + a = b = c = d = e = 0;
622 + * SHA1Init - Initialize new context
625 +SHA1Init(SHA1_CTX *context)
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;
639 + * Run your data through this.
642 +SHA1Update(SHA1_CTX *context, const uint8_t *data, size_t len)
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]);
657 + (void)memcpy(&context->buffer[j], &data[i], len - i);
662 + * Add padding and return the message digest.
665 +SHA1Pad(SHA1_CTX *context)
667 + uint8_t finalcount[8];
670 + for (i = 0; i < 8; i++) {
671 + finalcount[i] = (uint8_t)((context->count >>
672 + ((7 - (i & 7)) * 8)) & 255); /* Endian independent */
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() */
681 +SHA1Final(uint8_t digest[SHA1_DIGEST_LENGTH], SHA1_CTX *context)
687 + for (i = 0; i < SHA1_DIGEST_LENGTH; i++) {
688 + digest[i] = (uint8_t)
689 + ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
691 + memset(context, 0, sizeof(*context));
695 diff -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
701 + * By Steve Reid <steve@edmweb.com>
702 + * 100% Public Domain
713 +#define SHA1_BLOCK_LENGTH 64
714 +#define SHA1_DIGEST_LENGTH 20
715 +#define SHA1_DIGEST_STRING_LENGTH (SHA1_DIGEST_LENGTH * 2 + 1)
720 + uint8_t buffer[SHA1_BLOCK_LENGTH];
723 +#include <sys/cdefs.h>
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)));
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)
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)
760 +#endif /* _SHA1_H */