Re: Should we settle on one SSL implementation?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10/23/07 10:34, Jesse Keating wrote:
On Tue, 23 Oct 2007 16:23:24 +0200
Tomas Mraz <tmraz@xxxxxxxxxx> wrote:

Why remove? Just not use a built-in code but call NSS instead.

Call NSS, to make a sha1sum?

Please, let's not add an external dependency for something
as trivial as a SHA1.

See this thread on xorg-devel@ .

-------- Original Message --------
Subject: Re: glyph-pixmaps merged
Date: Sun, 21 Oct 2007 05:11:40 +0200
From: Edgar Toernig <froese@xxxxxx>
To: xorg@xxxxxxxxxxxxxxx

Keith Packard wrote:

We need a strong hash function as this replaces the previous weak hash +
memcmp when checking incoming glyphs for matches with the existing set
of server-resident glyphs. One could argue that this must be
cryptographically secure to avoid applications uploading misleading
glyph images.

Patches to use alternate SHA1 implementation would also be welcome, if
anyone has reason to choose other bits.

Below is a modified sha1 routine.  The algorithm has been kept
but support for byte streams and byte-order independence has
been dropped.  That simplifies the code and makes it faster.

Compiles to about 700 bytes on x86 and is public domain.

Ciao, ET.

----8<----
#include <sys/types.h>
#include <string.h>

typedef unsigned int u32;

#define f1(x,y,z)   (z ^ (x & (y ^ z)))		/* x ? y : z */
#define f2(x,y,z)   (x ^ y ^ z)			/* xor */
#define f3(x,y,z)   ((x & y) + (z & (x ^ y)))	/* majority */

#define K1  0x5A827999L	/* Rounds  0-19: sqrt(2) * 2^30 */
#define K2  0x6ED9EBA1L	/* Rounds 20-39: sqrt(3) * 2^30 */
#define K3  0x8F1BBCDCL	/* Rounds 40-59: sqrt(5) * 2^30 */
#define K4  0xCA62C1D6L	/* Rounds 60-79: sqrt(10) * 2^30 */

static inline u32
rol32(u32 val, int n)
{
   return (val << n) | (val >> (32 - n));
}

static void
sha1(u32 digest[5], u32 *W)
{
   u32 a, b, c, d, e, t;
   int i;

   for (i = 0; i < 64; i++)
	W[i+16] = rol32(W[i+13] ^ W[i+8] ^ W[i+2] ^ W[i], 1);

   a = digest[0];
   b = digest[1];
   c = digest[2];
   d = digest[3];
   e = digest[4];

   for (i = 0; i < 20; i++)
   {
	t = f1(b, c, d) + K1 + rol32(a, 5) + e + W[i];
	e = d; d = c; c = rol32(b, 30); b = a; a = t;
   }

   for (; i < 40; i++)
   {
	t = f2(b, c, d) + K2 + rol32(a, 5) + e + W[i];
	e = d; d = c; c = rol32(b, 30); b = a; a = t;
   }

   for (; i < 60; i++)
   {
	t = f3(b, c, d) + K3 + rol32(a, 5) + e + W[i];
	e = d; d = c; c = rol32(b, 30); b = a; a = t;
   }

   for (; i < 80; i++)
   {
	t = f2(b, c, d) + K4 + rol32(a, 5) + e + W[i];
	e = d; d = c; c = rol32(b, 30); b = a; a = t;
   }

   digest[0] += a;
   digest[1] += b;
   digest[2] += c;
   digest[3] += d;
   digest[4] += e;
}

void
hash_buffer(u32 digest[5], char *buf, size_t n)
{
   u32 W[80];
   u32 size = n;

   digest[0] = 0x67452301;
   digest[1] = 0xefcdab89;
   digest[2] = 0x98badcfe;
   digest[3] = 0x10325476;
   digest[4] = 0xc3d2e1f0;

   if (n < 64)
	memset((char *)W + n, 0, 64 - n);
   while (n >= 64)
   {
	memcpy((char *)W, buf, 64);
	sha1(digest, W);
	buf += 64;
	n -= 64;
   }
   if (n > 0)
	memcpy((char *)W, buf, n);
   if (n > 60)
	sha1(digest, W);
   W[15] = size;
   sha1(digest, W);
}

_______________________________________________
xorg mailing list
xorg@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/xorg



--
\___/
|___|   Bernardo Innocenti - http://www.codewiz.org/
 \___\  One Laptop Per Child - http://www.laptop.org/

--
fedora-devel-list mailing list
fedora-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/fedora-devel-list

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]
  Powered by Linux