in src/pbc_support.c [28:123]
void mhashit(int sha,int n,const octet *x,octet *w)
{
int i;
int c[4];
int hlen;
hash256 sha256;
hash512 sha512;
char hh[64];
switch (sha)
{
case SHA256:
HASH256_init(&sha256);
break;
case SHA384:
HASH384_init(&sha512);
break;
case SHA512:
HASH512_init(&sha512);
break;
default:
break;
}
hlen=sha;
if (n>0)
{
c[0]=(n>>24)&0xff;
c[1]=(n>>16)&0xff;
c[2]=(n>>8)&0xff;
c[3]=n&0xff;
for (i=0; i<4; i++)
{
switch(sha)
{
case SHA256:
HASH256_process(&sha256,c[i]);
break;
case SHA384:
HASH384_process(&sha512,c[i]);
break;
case SHA512:
HASH512_process(&sha512,c[i]);
break;
default:
break;
}
}
}
if (x!=NULL) for (i=0; i<x->len; i++)
{
switch(sha)
{
case SHA256:
HASH256_process(&sha256,x->val[i]);
break;
case SHA384:
HASH384_process(&sha512,x->val[i]);
break;
case SHA512:
HASH512_process(&sha512,x->val[i]);
break;
default:
break;
}
}
for (i=0; i<hlen; i++) hh[i]=0;
switch (sha)
{
case SHA256:
HASH256_hash(&sha256,hh);
break;
case SHA384:
HASH384_hash(&sha512,hh);
break;
case SHA512:
HASH512_hash(&sha512,hh);
break;
default:
break;
}
OCT_empty(w);
if (hlen>=w->max)
OCT_jbytes(w,hh,w->max);
else
{
OCT_jbyte(w,0,w->max-hlen);
OCT_jbytes(w,hh,hlen);
}
}