Exemple #1
0
//      GF(2^8)
static BYTE product(WORD x, WORD y)
{
    BYTE* xb = (BYTE*)&x;
    BYTE* yb = (BYTE*)&y;
    return bmul(xb[0], yb[0]) ^ bmul(xb[1], yb[1]) ^
        bmul(xb[2], yb[2]) ^ bmul(xb[3], yb[3]);
}
Exemple #2
0
static BYTE product(WORD x,WORD y)
{ /* dot product of two 4-byte arrays */
    BYTE xb[4],yb[4];
    unpack(x,xb);
    unpack(y,yb); 
    return bmul(xb[0],yb[0])^bmul(xb[1],yb[1])^bmul(xb[2],yb[2])^bmul(xb[3],yb[3]);
}
Exemple #3
0
static u8 product(u32 x,u32 y)
{ /* dot product of two 4-byte arrays */
    u8 xb[4],yb[4];
    unpack(x,xb);
    unpack(y,yb);
    return bmul(xb[0],yb[0])^bmul(xb[1],yb[1])^bmul(xb[2],yb[2])^bmul(xb[3],yb[3]);
}
Exemple #4
0
//==============================================================================
uint8_t product(uint32_t x, uint32_t y, uint8_t mod) //Вспомогательная функция перемешивающая данные в колонке
{
  uint8_t xb[4], yb[4];

  unpack(x, xb);  
  unpack(y, yb);
  
  return bmul(xb[0], yb[0], mod) ^ bmul(xb[1], yb[1], mod) ^ bmul(xb[2], yb[2], mod) ^ bmul(xb[3], yb[3], mod); 
}
Exemple #5
0
static void gentables(void)
{   /* generate tables */
    int i;
    u8 y,b[4];

    /* use 3 as primitive root to generate power and log tables */

    ltab[0]=0;
    ptab[0]=1;
    ltab[1]=0;
    ptab[1]=3;
    ltab[3]=1;
    for (i=2; i<256; i++)
    {
        ptab[i]=ptab[i-1]^xtime(ptab[i-1]);
        ltab[ptab[i]]=i;
    }

    /* affine transformation:- each bit is xored with itself shifted one bit */

    fbsub[0]=0x63;
    rbsub[0x63]=0;
    for (i=1; i<256; i++)
    {
        y=ByteSub((u8)i);
        fbsub[i]=y;
        rbsub[y]=i;
    }

    for (i=0,y=1; i<30; i++)
    {
        rco[i]=y;
        y=xtime(y);
    }

    /* calculate forward and reverse tables */
    for (i=0; i<256; i++)
    {
        y=fbsub[i];
        b[3]=y^xtime(y);
        b[2]=y;
        b[1]=y;
        b[0]=xtime(y);
        ftable[i]=pack(b);

        y=rbsub[i];
        b[3]=bmul(InCo[0],y);
        b[2]=bmul(InCo[1],y);
        b[1]=bmul(InCo[2],y);
        b[0]=bmul(InCo[3],y);
        rtable[i]=pack(b);
    }
}
Exemple #6
0
static WORD MixCol(BYTE b[4])
{
    BYTE s[4];
    s[0] = bmul(0x2, b[0]) ^ bmul(0x3, b[1]) ^ b[2] ^ b[3];
    s[1] = b[0] ^ bmul(0x2, b[1]) ^ bmul(0x3, b[2]) ^ b[3];
    s[2] = b[0] ^ b[1] ^ bmul(0x2, b[2]) ^ bmul(0x3, b[3]);
    s[3] = bmul(0x3, b[0]) ^ b[1] ^ b[2] ^ bmul(0x2, b[3]);
    return pack(s);
}
/*初始化*/
void gentables(void)
{ //初始化矩阵
	int i;
	BYTE y,b[4];
	ltab[0]=0;
	ptab[0]=1;
	ptab[1]=3;
	ltab[1]=0;
	ltab[3]=1;
	for (i=2;i<256;i++)
	{
		ptab[i]=ptab[i-1]^xtime(ptab[i-1]);
		ltab[ptab[i]]=i;
	}
	// 进行移位操作
	fbsub[0]=0x63;
	rbsub[0x63]=0;
	for (i=1;i<256;i++)
	{
		y=ByteSub((BYTE)i);
		fbsub[i]=y;
		rbsub[y]=i;
	}
	for (i=0,y=1;i<30;i++)
	{
		rco[i]=y;
		y=xtime(y);
    }
	for (i=0;i<256;i++)
	{
		y=fbsub[i];
		b[3]=y^xtime(y);
		b[2]=y;
		b[1]=y;
		ftable[i]=pack(b);
		b[0]=xtime(y);
		y=rbsub[i];
		b[3]=bmul(InCo[0],y);
		b[2]=bmul(InCo[1],y);
		b[1]=bmul(InCo[2],y);
		b[0]=bmul(InCo[3],y);
		rtable[i]=pack(b);
	}
}
Exemple #8
0
QWMatrix &QWMatrix::rotate( double a )
{
    double b = deg2rad*a;			// convert to radians
#if defined(_WS_X11_)
    double sina = qsincos(b,FALSE);		// fast and convenient
    double cosa = qsincos(b,TRUE);
#else
    double sina = sin(b);
    double cosa = cos(b);
#endif
    QWMatrix result( cosa, sina, -sina, cosa, 0.0F, 0.0F );
    return bmul( result );
}
Exemple #9
0
QWMatrix &QWMatrix::rotate( float a )
{
    double b = deg2rad*a;			// convert to radians
#if defined(_WS_X11_)
    float sina = qsincos(b,FALSE);		// fast and convenient
    float cosa = qsincos(b,TRUE);
#else
    float sina = (float)sin(b);
    float cosa = (float)cos(b);
#endif
    QWMatrix result( cosa, sina, -sina, cosa, 0.0F, 0.0F );
    return bmul( result );
}
Exemple #10
0
static WORD InvMixCol(BYTE b[4])
{
    BYTE s[4];
    s[0] = bmul(0xe, b[0]) ^ bmul(0xb, b[1]) ^ bmul(0xd, b[2]) ^ bmul(0x9, b[3]);
    s[1] = bmul(0x9, b[0]) ^ bmul(0xe, b[1]) ^ bmul(0xb, b[2]) ^ bmul(0xd, b[3]);
    s[2] = bmul(0xd, b[0]) ^ bmul(0x9, b[1]) ^ bmul(0xe, b[2]) ^ bmul(0xb, b[3]);
    s[3] = bmul(0xb, b[0]) ^ bmul(0xd, b[1]) ^ bmul(0x9, b[2]) ^ bmul(0xe, b[3]);
    return pack(s);
}
Exemple #11
0
QWMatrix &QWMatrix::shear( double sh, double sv )
{
    QWMatrix result( 1.0F, sv, sh, 1.0F, 0.0F, 0.0F );
    return bmul( result );
}
Exemple #12
0
QWMatrix &QWMatrix::scale( double sx, double sy )
{
    QWMatrix result( sx, 0.0F, 0.0F, sy, 0.0F, 0.0F );
    return bmul( result );
}
Exemple #13
0
QWMatrix &QWMatrix::translate( double dx, double dy )
{
    QWMatrix result( 1.0F, 0.0F, 0.0F, 1.0F, dx, dy );
    return bmul( result );
}
Exemple #14
0
QWMatrix &QWMatrix::shear( float sh, float sv )
{
    QWMatrix result( 1.0F, sv, sh, 1.0F, 0.0F, 0.0F );
    return bmul( result );
}
Exemple #15
0
QWMatrix &QWMatrix::scale( float sx, float sy )
{
    QWMatrix result( sx, 0.0F, 0.0F, sy, 0.0F, 0.0F );
    return bmul( result );
}
Exemple #16
0
QWMatrix &QWMatrix::translate( float dx, float dy )
{
    QWMatrix result( 1.0F, 0.0F, 0.0F, 1.0F, dx, dy );
    return bmul( result );
}