static void HASH512_transform()

in src/hash.c [242:289]


static void HASH512_transform(hash512 *sh)
{
    /* basic transformation step */
    unsign64 a;
    unsign64 b;
    unsign64 c;
    unsign64 d;
    unsign64 e;
    unsign64 f;
    unsign64 g;
    unsign64 h;
    unsign64 t1;
    unsign64 t2;
    for (int j=16; j<80; j++)
        sh->w[j]=theta1_512(sh->w[j-2])+sh->w[j-7]+theta0_512(sh->w[j-15])+sh->w[j-16];

    a=sh->h[0];
    b=sh->h[1];
    c=sh->h[2];
    d=sh->h[3];
    e=sh->h[4];
    f=sh->h[5];
    g=sh->h[6];
    h=sh->h[7];

    for (int j=0; j<80; j++)
    {
        /* 80 times - mush it up */
        t1=h+Sig1_512(e)+Ch(e,f,g)+K_512[j]+sh->w[j];
        t2=Sig0_512(a)+Maj(a,b,c);
        h=g;
        g=f;
        f=e;
        e=d+t1;
        d=c;
        c=b;
        b=a;
        a=t1+t2;
    }
    sh->h[0]+=a;
    sh->h[1]+=b;
    sh->h[2]+=c;
    sh->h[3]+=d;
    sh->h[4]+=e;
    sh->h[5]+=f;
    sh->h[6]+=g;
    sh->h[7]+=h;
}