if ((int)data%sizeof(c->u.d[0]) != 0)
if ((size_t)data%sizeof(c->u.d[0]) != 0)
int SHA512_Update (SHA512_CTX *c, const void *_data, size_t len)	{	SHA_LONG64	l;	unsigned char  *p=c->u.p,*data=(unsigned char *)_data;	if (len==0) return  1;	l = (c->Nl+(((SHA_LONG64)len)<<3))&U64(0xffffffffffffffff);	if (l < c->Nl)		c->Nh++;	if (sizeof(len)>=8)	c->Nh+=(((SHA_LONG64)len)>>61);	c->Nl=l;	if (c->num != 0)		{		size_t n = sizeof(c->u) - c->num;		if (len < n)			{			memcpy (p+c->num,data,len), c->num += len;			return 1;			}		else	{			memcpy (p+c->num,data,n), c->num = 0;			len-=n, data+=n;			sha512_block (c,p,1);			}		}	if (len >= sizeof(c->u))		{#ifndef SHA512_BLOCK_CAN_MANAGE_UNALIGNED_DATA		if ((int)data%sizeof(c->u.d[0]) != 0)			while (len >= sizeof(c->u))				memcpy (p,data,sizeof(c->u)),				sha512_block (c,p,1),				len  -= sizeof(c->u),				data += sizeof(c->u);		else#endif			sha512_block (c,data,len/sizeof(c->u)),			data += len,			len  %= sizeof(c->u),			data -= len;		}	if (len != 0)	memcpy (p,data,len), c->num = (int)len;	return 1;	}