Exemplo n.º 1
0
/*cbc_mac*/
int wpi_pmac(unsigned char * pmaciv_in,unsigned char * pmac_in,unsigned int pmacpc_in,unsigned char * pkey,unsigned char * pmac_out)
{
    unsigned int mactmp[4];
    unsigned int i;
    unsigned int * pint0;
    //unsigned int prmackey_in[32];

    if(pmacpc_in<1) return 1;
    if(pmacpc_in>4096) return 1;

    //SMS4KeyExt(pkey,  prmackey_in, 0);

    pint0=(unsigned int *)pmac_in;
    SMS4Crypt(pmaciv_in, (unsigned char *)mactmp, pkey /*prmackey_in*/);
    for(i=0; i<pmacpc_in; i++) {
        mactmp[0]^=pint0[0];
        mactmp[1]^=pint0[1];
        mactmp[2]^=pint0[2];
        mactmp[3]^=pint0[3];
        pint0 += 4;
        SMS4Crypt((unsigned char *)mactmp, (unsigned char *)mactmp, pkey /*prmackey_in*/);
    }
    pint0 = (unsigned int *)pmac_out;
    pint0[0] = mactmp[0];
    pint0[1] = mactmp[1];
    pint0[2] = mactmp[2];
    pint0[3] = mactmp[3];

    return 0;
}
Exemplo n.º 2
0
/*ofb encrypt*/
int wpi_encrypt(unsigned char * pofbiv_in,unsigned char * pbw_in,unsigned int plbw_in,unsigned char * pkey,unsigned char * pcw_out)
{
	unsigned int ofbtmp[4];
	unsigned int * pint0, * pint1;
	unsigned char * pchar0, * pchar1,* pchar2;
	unsigned int counter,comp,i;
	unsigned int prkey_in[32];


	if(plbw_in<1)	return 1;
	//if(plbw_in>65536) return 1;

	SMS4KeyExt(pkey,  prkey_in, 0);

	counter=plbw_in / 16;
	comp=plbw_in % 16;

//get the iv
	SMS4Crypt(pofbiv_in,(unsigned char *)ofbtmp, prkey_in);
	pint0=(unsigned int *)pbw_in;
	pint1=(unsigned int *)pcw_out;
	for(i=0;i<counter;i++) {
		pint1[0]=pint0[0]^ofbtmp[0];
		pint1[1]=pint0[1]^ofbtmp[1];
		pint1[2]=pint0[2]^ofbtmp[2];
		pint1[3]=pint0[3]^ofbtmp[3];
		SMS4Crypt((unsigned char *)ofbtmp,(unsigned char *)ofbtmp, prkey_in);
		pint0+=4;
		pint1+=4;
	}
	pchar0=(unsigned char *)pint0;
	pchar1=(unsigned char *)pint1;
	pchar2=(unsigned char *)ofbtmp;
	for(i=0;i<comp;i++) {
		pchar1[i]=pchar0[i]^pchar2[i];
	}
	
	return 0;	
}