auxFormat.c 4.02 KB
Newer Older
Wentao Zhang committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
#include"auxFormat.h"
void P512(unsigned int *s, unsigned char *c, unsigned char rounds) {
	u32 rci,t1,t2,t3,t9,temp=0;
	unsigned char rcNum=0;
    rci=c[rcNum++]; \
    P_512_ARC(rci);
    P_512_SBOX1(s[0],s[4],s[8 ],s[12]);
    P_512_SBOX1(s[1],s[5],s[9 ],s[13]);
    P_512_SBOX1(s[2],s[6],s[10],s[14]);
    P_512_SBOX1(s[3],s[7],s[11],s[15]);
    while(rounds--){
    	temp=((u32* )(c+rcNum))[0];
	    rci=temp&0xff;
	    P_512_ARC(rci);
	    P_512_SBOX2_ROR(s[0],s[7],s[8],s[15]);
	    P_512_SBOX3_ROR(s[1],s[4],s[9 ],s[12]);
	    P_512_SBOX3_ROR(s[2],s[5],s[10],s[13]);
	    P_512_SBOX3_ROR(s[3],s[6],s[11],s[14]);
	    rci=(temp&0xff00)>>8;
	    P_512_ARC(rci);
	    P_512_SBOX2_ROR(s[0],s[6],s[8],s[14]);
	    P_512_SBOX3_ROR(s[1],s[7],s[9 ],s[15]);
	    P_512_SBOX3_ROR(s[2],s[4],s[10],s[12]);
	    P_512_SBOX3_ROR(s[3],s[5],s[11],s[13]);
	    rci=(temp&0xff0000)>>16;
	    P_512_ARC(rci);
	    P_512_SBOX2_ROR(s[0],s[5],s[8],s[13]);
	    P_512_SBOX3_ROR(s[1],s[6],s[9 ],s[14]);
	    P_512_SBOX3_ROR(s[2],s[7],s[10],s[15]);
	    P_512_SBOX3_ROR(s[3],s[4],s[11],s[12]);
	    rci=(temp&0xff000000)>>24;
	    P_512_ARC(rci);
	    P_512_SBOX2_ROR(s[0],s[4],s[8 ],s[12]);
	    P_512_SBOX3_ROR(s[1],s[5],s[9 ],s[13]);
	    P_512_SBOX3_ROR(s[2],s[6],s[10],s[14]);
	    P_512_SBOX3_ROR(s[3],s[7],s[11],s[15]);
	    rcNum+=4;
	}

	temp=((u32* )(c+rcNum))[0];
    rci=temp&0xff;
    P_512_ARC(rci);
    P_512_SBOX2_ROR(s[0],s[7],s[8],s[15]);
    P_512_SBOX3_ROR(s[1],s[4],s[9 ],s[12]);
    P_512_SBOX3_ROR(s[2],s[5],s[10],s[13]);
    P_512_SBOX3_ROR(s[3],s[6],s[11],s[14]);
    rci=(temp&0xff00)>>8;
    P_512_ARC(rci);
    P_512_SBOX2_ROR(s[0],s[6],s[8],s[14]);
    P_512_SBOX3_ROR(s[1],s[7],s[9 ],s[15]);
    P_512_SBOX3_ROR(s[2],s[4],s[10],s[12]);
    P_512_SBOX3_ROR(s[3],s[5],s[11],s[13]);
    rci=(temp&0xff0000)>>16;
    P_512_ARC(rci);
    P_512_SBOX2_ROR(s[0],s[5],s[8],s[13]);
    P_512_SBOX3_ROR(s[1],s[6],s[9 ],s[14]);
    P_512_SBOX3_ROR(s[2],s[7],s[10],s[15]);
    P_512_SBOX3_ROR(s[3],s[4],s[11],s[12]);
    P_512_SR(s[4],s[8],s[9],s[10],s[11],s[12],s[13],s[14],s[15]);
}
void packU128FormatToFourPacket(u32 *out, u8 *in) {
	u32 t0 = U32BIG(((u32* )in)[0]);
	u32 t1 = U32BIG(((u32* )in)[1]);
	u32 t2 = U32BIG(((u32* )in)[2]);
	u32 t3 = U32BIG(((u32* )in)[3]);
	u32 temp1;
	puck32(t0);
	puck32(t0);
	puck32(t1);
	puck32(t1);
	puck32(t2);
	puck32(t2);
	puck32(t3);
	puck32(t3);
	out[3] = (t3 & 0xff000000) | ((t2 >> 8) & 0x00ff0000)
			| ((t1 >> 16) & 0x0000ff00) | (t0 >> 24);
	out[2] = ((t3 << 8) & 0xff000000) | (t2 & 0x00ff0000)
			| ((t1 >> 8) & 0x0000ff00) | ((t0 >> 16) & 0x000000ff);
	out[1] = ((t3 << 16) & 0xff000000) | ((t2 << 8) & 0x00ff0000)
			| (t1 & 0x0000ff00) | ((t0 >> 8) & 0x000000ff);
	out[0] = ((t3 << 24) & 0xff000000) | ((t2 << 16) & 0x00ff0000)
			| ((t1 << 8) & 0x0000ff00) | (t0 & 0x000000ff);
}
void unpackU128FormatToFourPacket(u8 *out, u32 *in) {
	u32 t[4] = { 0 };
	u32 r0;
	t[3] = (in[3] & 0xff000000) | ((in[2] >> 8) & 0x00ff0000)
			| ((in[1] >> 16) & 0x0000ff00) | (in[0] >> 24);
	t[2] = ((in[3] << 8) & 0xff000000) | (in[2] & 0x00ff0000)
			| ((in[1] >> 8) & 0x0000ff00) | ((in[0] >> 16) & 0x000000ff);
	t[1] = ((in[3] << 16) & 0xff000000) | ((in[2] << 8) & 0x00ff0000)
			| (in[1] & 0x0000ff00) | ((in[0] >> 8) & 0x000000ff);
	t[0] = ((in[3] << 24) & 0xff000000) | ((in[2] << 16) & 0x00ff0000)
			| ((in[1] << 8) & 0x0000ff00) | (in[0] & 0x000000ff);
	unpuck32(t[0]);
	unpuck32(t[0]);
	unpuck32(t[1]);
	unpuck32(t[1]);
	unpuck32(t[2]);
	unpuck32(t[2]);
	unpuck32(t[3]);
	unpuck32(t[3]);
	memcpy(out, t, 16 * sizeof(unsigned char));
}
void packU64FormatToFourPacket(u32 *out, u8 *in) {
	u32 t1, t2, temp1;
	t1 = U32BIG(((u32* )in)[0]);
	t2 = U32BIG(((u32* )in)[1]);
	puck32(t1);
	puck32(t1);
	puck32(t2);
	puck32(t2);
	out[3] = ((t2 >> 16) & 0x0000ff00) | ((t1 >> 24));
	out[2] = ((t2 >> 8) & 0x0000ff00) | ((t1 >> 16) & 0x000000ff);
	out[1] = (t2 & 0x0000ff00) | ((t1 >> 8) & 0x000000ff);
	out[0] = ((t2 << 8) & 0x0000ff00) | (t1 & 0x000000ff);
}