HASH_BLOCK_DATA_ORDER_ALIGNED (c,data,sw);
HASH_BLOCK_DATA_ORDER_ALIGNED (c,(HASH_LONG *)data,sw);
void HASH_UPDATE (HASH_CTX *c, const unsigned char *data, unsigned long len)	{	register HASH_LONG * p;	register unsigned long l;	int sw,sc,ew,ec;	if (len==0) return;	l=(c->Nl+(len<<3))&0xffffffffL;	/* 95-05-24 eay Fixed a bug with the overflow handling, thanks to	 * Wei Dai <weidai@eskimo.com> for pointing it out. */	if (l < c->Nl) /* overflow */		c->Nh++;	c->Nh+=(len>>29);	c->Nl=l;	if (c->num != 0)		{		p=c->data;		sw=c->num>>2;		sc=c->num&0x03;		if ((c->num+len) >= HASH_CBLOCK)			{			l=p[sw]; HOST_p_c2l(data,l,sc); p[sw++]=l;			for (; sw<HASH_LBLOCK; sw++)				{				HOST_c2l(data,l); p[sw]=l;				}			HASH_BLOCK_HOST_ORDER (c,p,1);			len-=(HASH_CBLOCK-c->num);			c->num=0;			/* drop through and do the rest */			}		else			{			c->num+=len;			if ((sc+len) < 4) /* ugly, add char's to a word */				{				l=p[sw]; HOST_p_c2l_p(data,l,sc,len); p[sw]=l;				}			else				{				ew=(c->num>>2);				ec=(c->num&0x03);				l=p[sw]; HOST_p_c2l(data,l,sc); p[sw++]=l;				for (; sw < ew; sw++)					{					HOST_c2l(data,l); p[sw]=l;					}				if (ec)					{					HOST_c2l_p(data,l,ec); p[sw]=l;					}				}			return;			}		}	sw=len/HASH_CBLOCK;	if (sw > 0)		{#if defined(HASH_BLOCK_DATA_ORDER_ALIGNED) && HASH_BLOCK_DATA_ORDER_ALIGNED!=1		/*		 * Note that HASH_BLOCK_DATA_ORDER_ALIGNED gets defined		 * only if sizeof(HASH_LONG)==4.		 */		if ((((unsigned long)data)%4) == 0)			{			HASH_BLOCK_DATA_ORDER_ALIGNED (c,data,sw);			sw*=HASH_CBLOCK;			data+=sw;			len-=sw;			}		else#if !defined(HASH_BLOCK_DATA_ORDER)			while (sw--)				{				memcpy (p=c->data,data,HASH_CBLOCK);				HASH_BLOCK_DATA_ORDER_ALIGNED(c,p,1);				data+=HASH_CBLOCK;				len-=HASH_CBLOCK;				}#endif#endif#if defined(HASH_BLOCK_DATA_ORDER)			{			HASH_BLOCK_DATA_ORDER(c,data,sw);			sw*=HASH_CBLOCK;			data+=sw;			len-=sw;			}#endif		}	if (len!=0)		{		p = c->data;		c->num = len;		ew=len>>2;	/* words to copy */		ec=len&0x03;		for (; ew; ew--,p++)			{			HOST_c2l(data,l); *p=l;			}		HOST_c2l_p(data,l,ec);		*p=l;		}	}