static void gf2mul()

in src/gcm.c [88:113]


static void gf2mul(gcm *g)
{
    /* gf2m mul - Z=H*X mod 2^128 */
    int i;
    int j;
    int m;
    unsign32 P[4];
    unsign32 b;

    P[0]=P[1]=P[2]=P[3]=0;
    j=8;
    m=0;
    for (i=0; i<128; i++)
    {
        b=(unsign32)(g->stateX[m]>>(--j))&1;
        b=~b+1;
        for (int k=0; k<NB; k++) P[k]^=(g->table[i][k]&b);
        if (j==0)
        {
            j=8;
            m++;
            if (m==16) break;
        }
    }
    for (i=j=0; i<NB; i++,j+=4) unpack(P[i],&g->stateX[j]);
}