Commit 5055ea5a by Wentao Zhang Committed by Sebastian Renner

knot

parent 727508dc
#include"auxFormat.h" #include"auxFormat.h"
void packU96FormatToThreePacket(u32 *out, u8 *in) { void packU96FormatToThreePacket(u32 * out, u8 * in) {
u32 t0 = U32BIG(((u32*)in)[0]), t1 = U32BIG(((u32*)in)[1]), t2 = U32BIG(((u32*)in)[2]); \ u32 temp0[3] = { 0 };
puckU32ToThree_3(t0); \ u32 temp1[3] = { 0 };
puckU32ToThree_3(t1); \ u32 temp2[3] = { 0 };
puckU32ToThree_3(t2); \ u32 t1=U32BIG(((u32*)in)[0]);
temp0[0] = t1; temp0[1] = t1 >> 1; temp0[2] = t1>> 2;
out[0] = ((((t2 >> 21) & 0x400) | (((t2 >> 18) & 0x300)) | ((t2 & 0xff00) >> 8)) << 21) | puckU32ToThree_1(temp0[0]);
((((t1 >> 20) & 0x400) | ((t1 >> 16) & 0x300) | (t1 & 0xff)) << 10) | puckU32ToThree_1(temp0[1]);
(((t0 >> 20) & 0x300) | ((t0 & 0xff0000) >> 16)); puckU32ToThree_1(temp0[2]);
out[1] = ((((t2 >> 20) & 0x400) | ((t2 >> 16) & 0x300) | (t2 & 0xff)) << 21) | t1=U32BIG(((u32*)in)[1]);
((((t1 >> 20) & 0x300) | ((t1 & 0xff0000) >> 16)) << 11) | temp1[0] = t1; temp1[1] = t1>>1; temp1[2] = t1 >> 2;
(((t0 >> 21) & 0x400) | ((t0 >> 18) & 0x300) | ((t0 & 0xff00) >> 8)); puckU32ToThree_1(temp1[0]);
out[2] = ((((t2 >> 20) & 0x300) | ((t2 & 0xff0000) >> 16)) << 22) | puckU32ToThree_1(temp1[1]);
((((t1 >> 21) & 0x400) | ((t1 >> 18) & 0x300)|((t1 & 0xff00) >> 8)) << 11) | puckU32ToThree_1(temp1[2]);
(((t0 >> 20) & 0x400) | ((t0 >> 16) & 0x300) | (t0 & 0xff)); t1=U32BIG(((u32*)in)[2]);
temp2[0] = t1; temp2[1] =t1 >> 1; temp2[2] = t1>> 2;
puckU32ToThree_1(temp2[0]);
puckU32ToThree_1(temp2[1]);
puckU32ToThree_1(temp2[2]);
out[0] = (temp2[1]<<21) |(temp1[0]<<10) |temp0[2];
out[1] = (temp2[0] << 21) | (temp1[2] << 11) | temp0[1];
out[2] = (temp2[2] << 22) | (temp1[1] << 11) | temp0[0];
} }
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 } ;\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ u32 temp1[3] = { 0 };
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ u32 temp2[3] = { 0 };
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ u32 t[3] = { 0 };
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ u32 t0=in[0] ;
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ u32 t1=in[1] ;
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ u32 t2=in[2] ;
((t0 & 0x3fc00) >> 10); \ temp0[0] = t2 & 0x7ff;
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \ temp0[1] = t1 & 0x7ff;
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \ temp0[2] = t0 & 0x3ff;
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \ temp1[0] = (t0>>10) & 0x7ff;
unpuckU32ToThree_3(t[0]); \ temp1[1] = (t2 >>11 ) & 0x7ff;
unpuckU32ToThree_3(t[1]); \ temp1[2] = (t1 >> 11) & 0x3ff;
unpuckU32ToThree_3(t[2]); \ temp2[0] = t1 >> 21;
memcpy(out, t, 12 * sizeof(unsigned char)); \ temp2[1] = t0 >> 21;
temp2[2] = t2 >> 22;
unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_1(temp0[1]);
unpuckU32ToThree_1(temp0[2]);
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
unpuckU32ToThree_1(temp1[0]);
unpuckU32ToThree_1(temp1[1]);
unpuckU32ToThree_1(temp1[2]);
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
unpuckU32ToThree_1(temp2[0]);
unpuckU32ToThree_1(temp2[1]);
unpuckU32ToThree_1(temp2[2]);
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
memcpy(out, t, 12 * sizeof(unsigned char));
} }
void P384(unsigned int *s, unsigned char *round, unsigned char lunNum) { void P384(unsigned int *s, unsigned char *round, unsigned char lunNum) {
u32 rci,t1,t2; u32 rci,t1,t2;
unsigned char i; unsigned char i;
......
...@@ -31,24 +31,21 @@ void packU96FormatToThreePacket(u32 * out, u8 * in); ...@@ -31,24 +31,21 @@ void packU96FormatToThreePacket(u32 * out, u8 * in);
void unpackU96FormatToThreePacket(u8 * out, u32 * in); void unpackU96FormatToThreePacket(u8 * out, u32 * in);
void P384(unsigned int *s, unsigned char *round, unsigned char lunNum); void P384(unsigned int *s, unsigned char *round, unsigned char lunNum);
#define puckU32ToThree_3(lo){\ #define puckU32ToThree_1(x){\
u32 r0;\ x &= 0x49249249;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
unsigned char constant7Format[80]; unsigned char constant7Format[80];
#define P384_ARC_SC1(rci,S2,S3,S4) \ #define P384_ARC_SC1(rci,S2,S3,S4) \
......
...@@ -52,6 +52,20 @@ do { \ ...@@ -52,6 +52,20 @@ do { \
s[4] ^= dataFormat[4]; \ s[4] ^= dataFormat[4]; \
s[5] ^= dataFormat[5]; \ s[5] ^= dataFormat[5]; \
} while (0) } while (0)
#define puckU32ToThree_1(x){\
x &= 0x49249249;\
x = (x | (x >> 2)) & 0xc30c30c3;\
x = (x | (x >>4)) & 0x0f00f00f;\
x = (x | (x >> 8)) & 0xff0000ff;\
x = (x | (x >> 16)) & 0xfff;\
}
#define unpuckU32ToThree_1(x){\
x &= 0xfff;\
x = (x | (x << 16)) & 0xff0000ff;\
x = (x | (x << 8)) & 0x0f00f00f;\
x = (x | (x << 4)) & 0xc30c30c3;\
x = (x | (x << 2)) & 0x49249249;\
}
#define puckU32ToThree_3(lo){\ #define puckU32ToThree_3(lo){\
...@@ -74,37 +88,52 @@ r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ ...@@ -74,37 +88,52 @@ r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
#define packU96FormatToThreePacket( out, in) { \ #define packU96FormatToThreePacket( out, in) { \
u32 t0 = U32BIG(((u32*)in)[0]), t1 = U32BIG(((u32*)in)[1]), t2 = U32BIG(((u32*)in)[2]); \ t1=U32BIG(((u32*)in)[0]); \
puckU32ToThree_3(t0); \ temp0[0] = t1; temp0[1] = t1 >> 1; temp0[2] = t1>> 2; \
puckU32ToThree_3(t1); \ puckU32ToThree_1(temp0[0]); \
puckU32ToThree_3(t2); \ puckU32ToThree_1(temp0[1]); \
out[0] = ((((t2 >> 21) & 0x400) | (((t2 >> 18) & 0x300)) | ((t2 & 0xff00) >> 8)) << 21) | \ puckU32ToThree_1(temp0[2]); \
((((t1 >> 20) & 0x400) | ((t1 >> 16) & 0x300) | (t1 & 0xff)) << 10) | \ t1=U32BIG(((u32*)in)[1]); \
(((t0 >> 20) & 0x300) | ((t0 & 0xff0000) >> 16)); \ temp1[0] = t1; temp1[1] = t1>>1; temp1[2] = t1 >> 2; \
out[1] = ((((t2 >> 20) & 0x400) | ((t2 >> 16) & 0x300) | (t2 & 0xff)) << 21) | \ puckU32ToThree_1(temp1[0]); \
((((t1 >> 20) & 0x300) | ((t1 & 0xff0000) >> 16)) << 11) | \ puckU32ToThree_1(temp1[1]); \
(((t0 >> 21) & 0x400) | ((t0 >> 18) & 0x300) | ((t0 & 0xff00) >> 8)); \ puckU32ToThree_1(temp1[2]); \
out[2] = ((((t2 >> 20) & 0x300) | ((t2 & 0xff0000) >> 16)) << 22) | \ t1=U32BIG(((u32*)in)[2]); \
((((t1 >> 21) & 0x400) | ((t1 >> 18) & 0x300)|((t1 & 0xff00) >> 8)) << 11) | \ temp2[0] = t1; temp2[1] =t1 >> 1; temp2[2] = t1>> 2; \
(((t0 >> 20) & 0x400) | ((t0 >> 16) & 0x300) | (t0 & 0xff)); \ puckU32ToThree_1(temp2[0]); \
puckU32ToThree_1(temp2[1]); \
puckU32ToThree_1(temp2[2]); \
out[0] = (temp2[1]<<21) |(temp1[0]<<10) |temp0[2]; \
out[1] = (temp2[0] << 21) | (temp1[2] << 11) | temp0[1]; \
out[2] = (temp2[2] << 22) | (temp1[1] << 11) | temp0[0]; \
} }
#define unpackU96FormatToThreePacket( out, in) {\ #define unpackU96FormatToThreePacket( out, in) {\
u32 t[3] = { 0 };\ t3=in[0] ; \
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ t1=in[1] ; \
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ t2=in[2] ; \
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ temp0[0] = t2 & 0x7ff; \
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ temp0[1] = t1 & 0x7ff; \
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ temp0[2] = t3 & 0x3ff; \
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ temp1[0] = (t3>>10) & 0x7ff; \
((t0 & 0x3fc00) >> 10); \ temp1[1] = (t2 >>11 ) & 0x7ff; \
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \ temp1[2] = (t1 >> 11) & 0x3ff; \
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \ temp2[0] = t1 >> 21; \
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \ temp2[1] = t3 >> 21; \
unpuckU32ToThree_3(t[0]); \ temp2[2] = t2 >> 22; \
unpuckU32ToThree_3(t[1]); \ unpuckU32ToThree_1(temp0[0]); \
unpuckU32ToThree_3(t[2]); \ unpuckU32ToThree_1(temp0[1]); \
memcpy(out, t, 12 * sizeof(unsigned char)); \ unpuckU32ToThree_1(temp0[2]); \
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2; \
unpuckU32ToThree_1(temp1[0]); \
unpuckU32ToThree_1(temp1[1]); \
unpuckU32ToThree_1(temp1[2]); \
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2; \
unpuckU32ToThree_1(temp2[0]); \
unpuckU32ToThree_1(temp2[1]); \
unpuckU32ToThree_1(temp2[2]); \
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2; \
memcpy(out, t, 12 * sizeof(unsigned char)); \
} }
......
...@@ -34,6 +34,10 @@ int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, ...@@ -34,6 +34,10 @@ int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen,
u32 dataFormat[6] = { 0 }; u32 dataFormat[6] = { 0 };
u32 s_temp[12] = { 0 }; u32 s_temp[12] = { 0 };
u32 t1, t2, t3, t5, t6, t8, t9, t11; u32 t1, t2, t3, t5, t6, t8, t9, t11;
u32 t[3] = { 0 };
u32 temp0[3] = { 0 };
u32 temp1[3] = { 0 };
u32 temp2[3] = { 0 };
u8 tempU8[24] = { 0 }; u8 tempU8[24] = { 0 };
*clen = mlen + CRYPTO_ABYTES; *clen = mlen + CRYPTO_ABYTES;
// initialization // initialization
...@@ -112,6 +116,10 @@ int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, ...@@ -112,6 +116,10 @@ int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen,
u8 tempData[24] = { 0 }; u8 tempData[24] = { 0 };
u8 tempU8[24] = { 0 }; u8 tempU8[24] = { 0 };
u32 t1, t2, t3, t5, t6, t8, t9, t11; u32 t1, t2, t3, t5, t6, t8, t9, t11;
u32 t[3] = { 0 };
u32 temp0[3] = { 0 };
u32 temp1[3] = { 0 };
u32 temp2[3] = { 0 };
*mlen = clen - CRYPTO_ABYTES; *mlen = clen - CRYPTO_ABYTES;
if (clen < CRYPTO_ABYTES) if (clen < CRYPTO_ABYTES)
return -1; return -1;
......
#include"auxFormat.h" #include"auxFormat.h"
void packU96FormatToThreePacket(u32 *out, u8 *in) { void packU96FormatToThreePacket(u32 * out, u8 * in) {
u32 t0 = U32BIG(((u32*)in)[0]), t1 = U32BIG(((u32*)in)[1]), t2 = U32BIG(((u32*)in)[2]); \ u32 temp0[3] = { 0 };
puckU32ToThree_3(t0); \ u32 temp1[3] = { 0 };
puckU32ToThree_3(t1); \ u32 temp2[3] = { 0 };
puckU32ToThree_3(t2); \ u32 t1=U32BIG(((u32*)in)[0]);
out[0] = ((((t2 >> 21) & 0x400) | (((t2 >> 18) & 0x300)) | ((t2 & 0xff00) >> 8)) << 21) | \ temp0[0] = t1; temp0[1] = t1 >> 1; temp0[2] = t1>> 2;
((((t1 >> 20) & 0x400) | ((t1 >> 16) & 0x300) | (t1 & 0xff)) << 10) | \ puckU32ToThree_1(temp0[0]);
(((t0 >> 20) & 0x300) | ((t0 & 0xff0000) >> 16)); \ puckU32ToThree_1(temp0[1]);
out[1] = ((((t2 >> 20) & 0x400) | ((t2 >> 16) & 0x300) | (t2 & 0xff)) << 21) | \ puckU32ToThree_1(temp0[2]);
((((t1 >> 20) & 0x300) | ((t1 & 0xff0000) >> 16)) << 11) | \ t1=U32BIG(((u32*)in)[1]);
(((t0 >> 21) & 0x400) | ((t0 >> 18) & 0x300) | ((t0 & 0xff00) >> 8)); \ temp1[0] = t1; temp1[1] = t1>>1; temp1[2] = t1 >> 2;
out[2] = ((((t2 >> 20) & 0x300) | ((t2 & 0xff0000) >> 16)) << 22) | \ puckU32ToThree_1(temp1[0]);
((((t1 >> 21) & 0x400) | ((t1 >> 18) & 0x300)|((t1 & 0xff00) >> 8)) << 11) | \ puckU32ToThree_1(temp1[1]);
(((t0 >> 20) & 0x400) | ((t0 >> 16) & 0x300) | (t0 & 0xff)); \ puckU32ToThree_1(temp1[2]);
t1=U32BIG(((u32*)in)[2]);
temp2[0] = t1; temp2[1] =t1 >> 1; temp2[2] = t1>> 2;
puckU32ToThree_1(temp2[0]);
puckU32ToThree_1(temp2[1]);
puckU32ToThree_1(temp2[2]);
out[0] = (temp2[1]<<21) |(temp1[0]<<10) |temp0[2];
out[1] = (temp2[0] << 21) | (temp1[2] << 11) | temp0[1];
out[2] = (temp2[2] << 22) | (temp1[1] << 11) | temp0[0];
} }
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 } ;\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ u32 temp1[3] = { 0 };
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ u32 temp2[3] = { 0 };
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ u32 t[3] = { 0 };
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ u32 t0=in[0] ;
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ u32 t1=in[1] ;
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ u32 t2=in[2] ;
((t0 & 0x3fc00) >> 10); \ temp0[0] = t2 & 0x7ff;
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \ temp0[1] = t1 & 0x7ff;
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \ temp0[2] = t0 & 0x3ff;
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \ temp1[0] = (t0>>10) & 0x7ff;
unpuckU32ToThree_3(t[0]); \ temp1[1] = (t2 >>11 ) & 0x7ff;
unpuckU32ToThree_3(t[1]); \ temp1[2] = (t1 >> 11) & 0x3ff;
unpuckU32ToThree_3(t[2]); \ temp2[0] = t1 >> 21;
memcpy(out, t, 12 * sizeof(unsigned char)); \ temp2[1] = t0 >> 21;
temp2[2] = t2 >> 22;
unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_1(temp0[1]);
unpuckU32ToThree_1(temp0[2]);
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
unpuckU32ToThree_1(temp1[0]);
unpuckU32ToThree_1(temp1[1]);
unpuckU32ToThree_1(temp1[2]);
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
unpuckU32ToThree_1(temp2[0]);
unpuckU32ToThree_1(temp2[1]);
unpuckU32ToThree_1(temp2[2]);
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
memcpy(out, t, 12 * sizeof(unsigned char));
} }
void P384(unsigned int *s, unsigned char *round, unsigned char lunNum) { void P384(unsigned int *s, unsigned char *round, unsigned char lunNum) {
u32 s_temp[12] = { 0 }; u32 s_temp[12] = { 0 };
......
...@@ -46,22 +46,18 @@ void packU96FormatToThreePacket(u32 * out, u8 * in); ...@@ -46,22 +46,18 @@ void packU96FormatToThreePacket(u32 * out, u8 * in);
void unpackU96FormatToThreePacket(u8 * out, u32 * in); void unpackU96FormatToThreePacket(u8 * out, u32 * in);
unsigned char constant7Format[80]; unsigned char constant7Format[80];
#define puckU32ToThree_1(x){\
#define puckU32ToThree_3(lo){\ x &= 0x49249249;\
u32 r0;\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
...@@ -17,37 +17,58 @@ void ROUND384_Three(unsigned int *s, unsigned char *c, int lunnum) { ...@@ -17,37 +17,58 @@ void ROUND384_Three(unsigned int *s, unsigned char *c, int lunnum) {
t++; t++;
} }
} }
void packU96FormatToThreePacket(u32 *out, u8 *in) { void packU96FormatToThreePacket(u32 * out, u8 * in) {
u32 t0 = U32BIG(((u32*)in)[0]), t1 = U32BIG(((u32*)in)[1]), t2 = U32BIG(((u32*)in)[2]); \ u32 temp0[3] = { 0 };
puckU32ToThree_3(t0); \ u32 temp1[3] = { 0 };
puckU32ToThree_3(t1); \ u32 temp2[3] = { 0 };
puckU32ToThree_3(t2); \ u32 t1=U32BIG(((u32*)in)[0]);
out[0] = ((((t2 >> 21) & 0x400) | (((t2 >> 18) & 0x300)) | ((t2 & 0xff00) >> 8)) << 21) | \ temp0[0] = t1; temp0[1] = t1 >> 1; temp0[2] = t1>> 2;
((((t1 >> 20) & 0x400) | ((t1 >> 16) & 0x300) | (t1 & 0xff)) << 10) | \ puckU32ToThree_1(temp0[0]);
(((t0 >> 20) & 0x300) | ((t0 & 0xff0000) >> 16)); \ puckU32ToThree_1(temp0[1]);
out[1] = ((((t2 >> 20) & 0x400) | ((t2 >> 16) & 0x300) | (t2 & 0xff)) << 21) | \ puckU32ToThree_1(temp0[2]);
((((t1 >> 20) & 0x300) | ((t1 & 0xff0000) >> 16)) << 11) | \ t1=U32BIG(((u32*)in)[1]);
(((t0 >> 21) & 0x400) | ((t0 >> 18) & 0x300) | ((t0 & 0xff00) >> 8)); \ temp1[0] = t1; temp1[1] = t1>>1; temp1[2] = t1 >> 2;
out[2] = ((((t2 >> 20) & 0x300) | ((t2 & 0xff0000) >> 16)) << 22) | \ puckU32ToThree_1(temp1[0]);
((((t1 >> 21) & 0x400) | ((t1 >> 18) & 0x300)|((t1 & 0xff00) >> 8)) << 11) | \ puckU32ToThree_1(temp1[1]);
(((t0 >> 20) & 0x400) | ((t0 >> 16) & 0x300) | (t0 & 0xff)); \ puckU32ToThree_1(temp1[2]);
t1=U32BIG(((u32*)in)[2]);
temp2[0] = t1; temp2[1] =t1 >> 1; temp2[2] = t1>> 2;
puckU32ToThree_1(temp2[0]);
puckU32ToThree_1(temp2[1]);
puckU32ToThree_1(temp2[2]);
out[0] = (temp2[1]<<21) |(temp1[0]<<10) |temp0[2];
out[1] = (temp2[0] << 21) | (temp1[2] << 11) | temp0[1];
out[2] = (temp2[2] << 22) | (temp1[1] << 11) | temp0[0];
} }
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 } ;\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ u32 temp1[3] = { 0 };
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ u32 temp2[3] = { 0 };
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ u32 t[3] = { 0 };
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ u32 t0=in[0] ;
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ u32 t1=in[1] ;
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ u32 t2=in[2] ;
((t0 & 0x3fc00) >> 10); \ temp0[0] = t2 & 0x7ff;
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \ temp0[1] = t1 & 0x7ff;
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \ temp0[2] = t0 & 0x3ff;
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \ temp1[0] = (t0>>10) & 0x7ff;
unpuckU32ToThree_3(t[0]); \ temp1[1] = (t2 >>11 ) & 0x7ff;
unpuckU32ToThree_3(t[1]); \ temp1[2] = (t1 >> 11) & 0x3ff;
unpuckU32ToThree_3(t[2]); \ temp2[0] = t1 >> 21;
memcpy(out, t, 12 * sizeof(unsigned char)); \ temp2[1] = t0 >> 21;
temp2[2] = t2 >> 22;
unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_1(temp0[1]);
unpuckU32ToThree_1(temp0[2]);
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
unpuckU32ToThree_1(temp1[0]);
unpuckU32ToThree_1(temp1[1]);
unpuckU32ToThree_1(temp1[2]);
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
unpuckU32ToThree_1(temp2[0]);
unpuckU32ToThree_1(temp2[1]);
unpuckU32ToThree_1(temp2[2]);
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
memcpy(out, t, 12 * sizeof(unsigned char));
} }
...@@ -13,25 +13,22 @@ void ROUND384_Three(unsigned int *s, unsigned char *c,int lunnum); ...@@ -13,25 +13,22 @@ void ROUND384_Three(unsigned int *s, unsigned char *c,int lunnum);
#define puckU32ToThree_3(lo){\ #define puckU32ToThree_1(x){\
u32 r0;\ x &= 0x49249249;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0]))) #define ARR_SIZE(a) (sizeof((a))/sizeof((a[0])))
//Processing_Data: //Processing_Data:
#define Processing_Data(data) \ #define Processing_Data(data) \
......
#include"auxFormat.h" #include"auxFormat.h"
void packU96FormatToThreePacket(u32 * out, u8 * in) {
void packU96FormatToThreePacket(u32 *out, u8 *in) { u32 temp0[3] = { 0 };
u32 t0 = U32BIG(((u32*)in)[0]), t1 = U32BIG(((u32*)in)[1]), t2 = U32BIG(((u32*)in)[2]); \ u32 temp1[3] = { 0 };
puckU32ToThree_3(t0); \ u32 temp2[3] = { 0 };
puckU32ToThree_3(t1); \ u32 t1=U32BIG(((u32*)in)[0]);
puckU32ToThree_3(t2); \ temp0[0] = t1; temp0[1] = t1 >> 1; temp0[2] = t1>> 2;
out[0] = ((((t2 >> 21) & 0x400) | (((t2 >> 18) & 0x300)) | ((t2 & 0xff00) >> 8)) << 21) | \ puckU32ToThree_1(temp0[0]);
((((t1 >> 20) & 0x400) | ((t1 >> 16) & 0x300) | (t1 & 0xff)) << 10) | \ puckU32ToThree_1(temp0[1]);
(((t0 >> 20) & 0x300) | ((t0 & 0xff0000) >> 16)); \ puckU32ToThree_1(temp0[2]);
out[1] = ((((t2 >> 20) & 0x400) | ((t2 >> 16) & 0x300) | (t2 & 0xff)) << 21) | \ t1=U32BIG(((u32*)in)[1]);
((((t1 >> 20) & 0x300) | ((t1 & 0xff0000) >> 16)) << 11) | \ temp1[0] = t1; temp1[1] = t1>>1; temp1[2] = t1 >> 2;
(((t0 >> 21) & 0x400) | ((t0 >> 18) & 0x300) | ((t0 & 0xff00) >> 8)); \ puckU32ToThree_1(temp1[0]);
out[2] = ((((t2 >> 20) & 0x300) | ((t2 & 0xff0000) >> 16)) << 22) | \ puckU32ToThree_1(temp1[1]);
((((t1 >> 21) & 0x400) | ((t1 >> 18) & 0x300)|((t1 & 0xff00) >> 8)) << 11) | \ puckU32ToThree_1(temp1[2]);
(((t0 >> 20) & 0x400) | ((t0 >> 16) & 0x300) | (t0 & 0xff)); \ t1=U32BIG(((u32*)in)[2]);
temp2[0] = t1; temp2[1] =t1 >> 1; temp2[2] = t1>> 2;
puckU32ToThree_1(temp2[0]);
puckU32ToThree_1(temp2[1]);
puckU32ToThree_1(temp2[2]);
out[0] = (temp2[1]<<21) |(temp1[0]<<10) |temp0[2];
out[1] = (temp2[0] << 21) | (temp1[2] << 11) | temp0[1];
out[2] = (temp2[2] << 22) | (temp1[1] << 11) | temp0[0];
} }
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 } ;\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ u32 temp1[3] = { 0 };
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ u32 temp2[3] = { 0 };
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ u32 t[3] = { 0 };
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ u32 t0=in[0] ;
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ u32 t1=in[1] ;
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ u32 t2=in[2] ;
((t0 & 0x3fc00) >> 10); \ temp0[0] = t2 & 0x7ff;
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \ temp0[1] = t1 & 0x7ff;
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \ temp0[2] = t0 & 0x3ff;
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \ temp1[0] = (t0>>10) & 0x7ff;
unpuckU32ToThree_3(t[0]); \ temp1[1] = (t2 >>11 ) & 0x7ff;
unpuckU32ToThree_3(t[1]); \ temp1[2] = (t1 >> 11) & 0x3ff;
unpuckU32ToThree_3(t[2]); \ temp2[0] = t1 >> 21;
memcpy(out, t, 12 * sizeof(unsigned char)); \ temp2[1] = t0 >> 21;
temp2[2] = t2 >> 22;
unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_1(temp0[1]);
unpuckU32ToThree_1(temp0[2]);
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
unpuckU32ToThree_1(temp1[0]);
unpuckU32ToThree_1(temp1[1]);
unpuckU32ToThree_1(temp1[2]);
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
unpuckU32ToThree_1(temp2[0]);
unpuckU32ToThree_1(temp2[1]);
unpuckU32ToThree_1(temp2[2]);
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
memcpy(out, t, 12 * sizeof(unsigned char));
} }
void ROUND384_Three(unsigned int *s, unsigned char *c, int lunnum) { void ROUND384_Three(unsigned int *s, unsigned char *c, int lunnum) {
unsigned int t, t1, t2; unsigned int t, t1, t2;
u32 rci, temp; u32 rci, temp;
......
...@@ -11,25 +11,22 @@ typedef unsigned long long u64; ...@@ -11,25 +11,22 @@ typedef unsigned long long u64;
void ROUND384_Three(unsigned int *s, unsigned char *c,int lunnum); void ROUND384_Three(unsigned int *s, unsigned char *c,int lunnum);
#define puckU32ToThree_3(lo){\ #define puckU32ToThree_1(x){\
u32 r0;\ x &= 0x49249249;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0]))) #define ARR_SIZE(a) (sizeof((a))/sizeof((a[0])))
//Processing_Data: //Processing_Data:
#define Processing_Data(data) \ #define Processing_Data(data) \
......
...@@ -10,42 +10,61 @@ void P384(unsigned int *s, unsigned char *round, unsigned char lunNum) { ...@@ -10,42 +10,61 @@ void P384(unsigned int *s, unsigned char *round, unsigned char lunNum) {
P384_SR();\ P384_SR();\
} }
} }
void packU96FormatToThreePacket(u32 * out, u8 * in) {
u32 temp0[3] = { 0 };
u32 temp1[3] = { 0 };
void packU96FormatToThreePacket(u32 *out, u8 *in) { u32 temp2[3] = { 0 };
u32 t0 = U32BIG(((u32*)in)[0]), t1 = U32BIG(((u32*)in)[1]), t2 = U32BIG(((u32*)in)[2]); \ u32 t1=U32BIG(((u32*)in)[0]);
puckU32ToThree_3(t0); \ temp0[0] = t1; temp0[1] = t1 >> 1; temp0[2] = t1>> 2;
puckU32ToThree_3(t1); \ puckU32ToThree_1(temp0[0]);
puckU32ToThree_3(t2); \ puckU32ToThree_1(temp0[1]);
puckU32ToThree_1(temp0[2]);
out[0] = ((((t2 >> 21) & 0x400) | (((t2 >> 18) & 0x300)) | ((t2 & 0xff00) >> 8)) << 21) | t1=U32BIG(((u32*)in)[1]);
((((t1 >> 20) & 0x400) | ((t1 >> 16) & 0x300) | (t1 & 0xff)) << 10) | temp1[0] = t1; temp1[1] = t1>>1; temp1[2] = t1 >> 2;
(((t0 >> 20) & 0x300) | ((t0 & 0xff0000) >> 16)); puckU32ToThree_1(temp1[0]);
out[1] = ((((t2 >> 20) & 0x400) | ((t2 >> 16) & 0x300) | (t2 & 0xff)) << 21) | puckU32ToThree_1(temp1[1]);
((((t1 >> 20) & 0x300) | ((t1 & 0xff0000) >> 16)) << 11) | puckU32ToThree_1(temp1[2]);
(((t0 >> 21) & 0x400) | ((t0 >> 18) & 0x300) | ((t0 & 0xff00) >> 8)); t1=U32BIG(((u32*)in)[2]);
out[2] = ((((t2 >> 20) & 0x300) | ((t2 & 0xff0000) >> 16)) << 22) | temp2[0] = t1; temp2[1] =t1 >> 1; temp2[2] = t1>> 2;
((((t1 >> 21) & 0x400) | ((t1 >> 18) & 0x300)|((t1 & 0xff00) >> 8)) << 11) | puckU32ToThree_1(temp2[0]);
(((t0 >> 20) & 0x400) | ((t0 >> 16) & 0x300) | (t0 & 0xff)); puckU32ToThree_1(temp2[1]);
puckU32ToThree_1(temp2[2]);
out[0] = (temp2[1]<<21) |(temp1[0]<<10) |temp0[2];
out[1] = (temp2[0] << 21) | (temp1[2] << 11) | temp0[1];
out[2] = (temp2[2] << 22) | (temp1[1] << 11) | temp0[0];
} }
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 } ;\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ u32 temp1[3] = { 0 };
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ u32 temp2[3] = { 0 };
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ u32 t[3] = { 0 };
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ u32 t0=in[0] ;
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ u32 t1=in[1] ;
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ u32 t2=in[2] ;
((t0 & 0x3fc00) >> 10); \ temp0[0] = t2 & 0x7ff;
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \ temp0[1] = t1 & 0x7ff;
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \ temp0[2] = t0 & 0x3ff;
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \ temp1[0] = (t0>>10) & 0x7ff;
unpuckU32ToThree_3(t[0]); \ temp1[1] = (t2 >>11 ) & 0x7ff;
unpuckU32ToThree_3(t[1]); \ temp1[2] = (t1 >> 11) & 0x3ff;
unpuckU32ToThree_3(t[2]); \ temp2[0] = t1 >> 21;
memcpy(out, t, 12 * sizeof(unsigned char)); \ temp2[1] = t0 >> 21;
temp2[2] = t2 >> 22;
unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_1(temp0[1]);
unpuckU32ToThree_1(temp0[2]);
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
unpuckU32ToThree_1(temp1[0]);
unpuckU32ToThree_1(temp1[1]);
unpuckU32ToThree_1(temp1[2]);
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
unpuckU32ToThree_1(temp2[0]);
unpuckU32ToThree_1(temp2[1]);
unpuckU32ToThree_1(temp2[2]);
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
memcpy(out, t, 12 * sizeof(unsigned char));
} }
unsigned char constant7Format[76] = { unsigned char constant7Format[76] = {
/*constant7Format[127]:*/ /*constant7Format[127]:*/
0x01,0x08,0x40,0x02,0x10,0x80,0x05,0x09,0x48,0x42,0x12,0x90, 0x01,0x08,0x40,0x02,0x10,0x80,0x05,0x09,0x48,0x42,0x12,0x90,
......
...@@ -16,25 +16,22 @@ typedef unsigned long long u64; ...@@ -16,25 +16,22 @@ typedef unsigned long long u64;
#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0]))) #define ARR_SIZE(a) (sizeof((a))/sizeof((a[0])))
#define puckU32ToThree_3(lo){\ #define puckU32ToThree_1(x){\
u32 r0;\ x &= 0x49249249;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
unsigned char constant7Format[76]; unsigned char constant7Format[76];
#define P384_ARC_SC1(rci,S2,S3,S4) \ #define P384_ARC_SC1(rci,S2,S3,S4) \
do { \ do { \
......
...@@ -22,59 +22,77 @@ unsigned char constant7Format[76] ; ...@@ -22,59 +22,77 @@ unsigned char constant7Format[76] ;
t1 = ~a; t2 = b & t1;t3 = c ^ t2; h = d ^ t3; t5 = b | c; t6 = d ^ t1; g = t5 ^ t6; t8 = b ^ d; t9 = t3 & t6; a = t8 ^ t9; t11 = g & t8; f = t3 ^ t11; \ t1 = ~a; t2 = b & t1;t3 = c ^ t2; h = d ^ t3; t5 = b | c; t6 = d ^ t1; g = t5 ^ t6; t8 = b ^ d; t9 = t3 & t6; a = t8 ^ t9; t11 = g & t8; f = t3 ^ t11; \
} }
#define puckU32ToThree_3(lo){\ #define puckU32ToThree_1(x){\
u32 r0;\ x &= 0x49249249;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
#define packU96FormatToThreePacket( out, in) { \ #define packU96FormatToThreePacket( out, in) { \
u32 t0 = U32BIG(((u32*)in)[0]), t1 = U32BIG(((u32*)in)[1]), t2 = U32BIG(((u32*)in)[2]); \ t1=U32BIG(((u32*)in)[0]); \
puckU32ToThree_3(t0); \ temp0[0] = t1; temp0[1] = t1 >> 1; temp0[2] = t1>> 2; \
puckU32ToThree_3(t1); \ puckU32ToThree_1(temp0[0]); \
puckU32ToThree_3(t2); \ puckU32ToThree_1(temp0[1]); \
out[0] = ((((t2 >> 21) & 0x400) | (((t2 >> 18) & 0x300)) | ((t2 & 0xff00) >> 8)) << 21) | \ puckU32ToThree_1(temp0[2]); \
((((t1 >> 20) & 0x400) | ((t1 >> 16) & 0x300) | (t1 & 0xff)) << 10) | \ t1=U32BIG(((u32*)in)[1]); \
(((t0 >> 20) & 0x300) | ((t0 & 0xff0000) >> 16)); \ temp1[0] = t1; temp1[1] = t1>>1; temp1[2] = t1 >> 2; \
out[1] = ((((t2 >> 20) & 0x400) | ((t2 >> 16) & 0x300) | (t2 & 0xff)) << 21) | \ puckU32ToThree_1(temp1[0]); \
((((t1 >> 20) & 0x300) | ((t1 & 0xff0000) >> 16)) << 11) | \ puckU32ToThree_1(temp1[1]); \
(((t0 >> 21) & 0x400) | ((t0 >> 18) & 0x300) | ((t0 & 0xff00) >> 8)); \ puckU32ToThree_1(temp1[2]); \
out[2] = ((((t2 >> 20) & 0x300) | ((t2 & 0xff0000) >> 16)) << 22) | \ t1=U32BIG(((u32*)in)[2]); \
((((t1 >> 21) & 0x400) | ((t1 >> 18) & 0x300)|((t1 & 0xff00) >> 8)) << 11) | \ temp2[0] = t1; temp2[1] =t1 >> 1; temp2[2] = t1>> 2; \
(((t0 >> 20) & 0x400) | ((t0 >> 16) & 0x300) | (t0 & 0xff)); \ puckU32ToThree_1(temp2[0]); \
puckU32ToThree_1(temp2[1]); \
puckU32ToThree_1(temp2[2]); \
out[0] = (temp2[1]<<21) |(temp1[0]<<10) |temp0[2]; \
out[1] = (temp2[0] << 21) | (temp1[2] << 11) | temp0[1]; \
out[2] = (temp2[2] << 22) | (temp1[1] << 11) | temp0[0]; \
} }
#define unpackU96FormatToThreePacket( out, in) {\ #define unpackU96FormatToThreePacket( out, in) {\
u32 t[3] = { 0 };\ t3=in[0] ; \
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ t1=in[1] ; \
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ t2=in[2] ; \
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ temp0[0] = t2 & 0x7ff; \
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ temp0[1] = t1 & 0x7ff; \
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ temp0[2] = t3 & 0x3ff; \
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ temp1[0] = (t3>>10) & 0x7ff; \
((t0 & 0x3fc00) >> 10); \ temp1[1] = (t2 >>11 ) & 0x7ff; \
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \ temp1[2] = (t1 >> 11) & 0x3ff; \
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \ temp2[0] = t1 >> 21; \
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \ temp2[1] = t3 >> 21; \
unpuckU32ToThree_3(t[0]); \ temp2[2] = t2 >> 22; \
unpuckU32ToThree_3(t[1]); \ unpuckU32ToThree_1(temp0[0]); \
unpuckU32ToThree_3(t[2]); \ unpuckU32ToThree_1(temp0[1]); \
memcpy(out, t, 12 * sizeof(unsigned char)); \ unpuckU32ToThree_1(temp0[2]); \
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2; \
unpuckU32ToThree_1(temp1[0]); \
unpuckU32ToThree_1(temp1[1]); \
unpuckU32ToThree_1(temp1[2]); \
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2; \
unpuckU32ToThree_1(temp2[0]); \
unpuckU32ToThree_1(temp2[1]); \
unpuckU32ToThree_1(temp2[2]); \
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2; \
memcpy(out, t, 12 * sizeof(unsigned char)); \
} }
#define U96_BIT_LOTR32_8(t0,t1,t2,t3,t4,t5){\ #define U96_BIT_LOTR32_8(t0,t1,t2,t3,t4,t5){\
t3= LOTR32(t2, 2);\ t3= LOTR32(t2, 2);\
t4 =LOTR32(t0, 3);\ t4 =LOTR32(t0, 3);\
......
...@@ -34,6 +34,10 @@ int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen, ...@@ -34,6 +34,10 @@ int crypto_aead_encrypt(unsigned char *c, unsigned long long *clen,
u8 tempU8[48] = { 0 }; u8 tempU8[48] = { 0 };
u32 s_temp[12] = { 0 }; u32 s_temp[12] = { 0 };
u32 t[3] = { 0 };
u32 temp0[3] = { 0 };
u32 temp1[3] = { 0 };
u32 temp2[3] = { 0 };
u32 t1, t2, t3, t5, t6, t8, t9, t11; u32 t1, t2, t3, t5, t6, t8, t9, t11;
*clen = mlen + CRYPTO_ABYTES; *clen = mlen + CRYPTO_ABYTES;
// initialization // initialization
...@@ -106,6 +110,10 @@ int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen, ...@@ -106,6 +110,10 @@ int crypto_aead_decrypt(unsigned char *m, unsigned long long *mlen,
u8 tempU8[48] = { 0 }; u8 tempU8[48] = { 0 };
u32 s_temp[12] = { 0 }; u32 s_temp[12] = { 0 };
u32 t1, t2, t3, t5, t6, t8, t9, t11; u32 t1, t2, t3, t5, t6, t8, t9, t11;
u32 t[3] = { 0 };
u32 temp0[3] = { 0 };
u32 temp1[3] = { 0 };
u32 temp2[3] = { 0 };
*mlen = clen - CRYPTO_ABYTES; *mlen = clen - CRYPTO_ABYTES;
if (clen < CRYPTO_ABYTES) if (clen < CRYPTO_ABYTES)
return -1; return -1;
......
...@@ -17,39 +17,61 @@ void P384(unsigned int *s, unsigned char *round, unsigned char lunNum) { ...@@ -17,39 +17,61 @@ void P384(unsigned int *s, unsigned char *round, unsigned char lunNum) {
} }
} }
void packU96FormatToThreePacket(u32 *out, u8 *in) { void packU96FormatToThreePacket(u32 * out, u8 * in) {
u32 t0 = U32BIG(((u32*)in)[0]), t1 = U32BIG(((u32*)in)[1]), t2 = U32BIG(((u32*)in)[2]); \ u32 temp0[3] = { 0 };
puckU32ToThree_3(t0); \ u32 temp1[3] = { 0 };
puckU32ToThree_3(t1); \ u32 temp2[3] = { 0 };
puckU32ToThree_3(t2); \ u32 t1=U32BIG(((u32*)in)[0]);
out[0] = ((((t2 >> 21) & 0x400) | (((t2 >> 18) & 0x300)) | ((t2 & 0xff00) >> 8)) << 21) | \ temp0[0] = t1; temp0[1] = t1 >> 1; temp0[2] = t1>> 2;
((((t1 >> 20) & 0x400) | ((t1 >> 16) & 0x300) | (t1 & 0xff)) << 10) | \ puckU32ToThree_1(temp0[0]);
(((t0 >> 20) & 0x300) | ((t0 & 0xff0000) >> 16)); \ puckU32ToThree_1(temp0[1]);
out[1] = ((((t2 >> 20) & 0x400) | ((t2 >> 16) & 0x300) | (t2 & 0xff)) << 21) | \ puckU32ToThree_1(temp0[2]);
((((t1 >> 20) & 0x300) | ((t1 & 0xff0000) >> 16)) << 11) | \ t1=U32BIG(((u32*)in)[1]);
(((t0 >> 21) & 0x400) | ((t0 >> 18) & 0x300) | ((t0 & 0xff00) >> 8)); \ temp1[0] = t1; temp1[1] = t1>>1; temp1[2] = t1 >> 2;
out[2] = ((((t2 >> 20) & 0x300) | ((t2 & 0xff0000) >> 16)) << 22) | \ puckU32ToThree_1(temp1[0]);
((((t1 >> 21) & 0x400) | ((t1 >> 18) & 0x300)|((t1 & 0xff00) >> 8)) << 11) | \ puckU32ToThree_1(temp1[1]);
(((t0 >> 20) & 0x400) | ((t0 >> 16) & 0x300) | (t0 & 0xff)); \ puckU32ToThree_1(temp1[2]);
t1=U32BIG(((u32*)in)[2]);
temp2[0] = t1; temp2[1] =t1 >> 1; temp2[2] = t1>> 2;
puckU32ToThree_1(temp2[0]);
puckU32ToThree_1(temp2[1]);
puckU32ToThree_1(temp2[2]);
out[0] = (temp2[1]<<21) |(temp1[0]<<10) |temp0[2];
out[1] = (temp2[0] << 21) | (temp1[2] << 11) | temp0[1];
out[2] = (temp2[2] << 22) | (temp1[1] << 11) | temp0[0];
} }
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 } ;\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ u32 temp1[3] = { 0 };
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ u32 temp2[3] = { 0 };
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ u32 t[3] = { 0 };
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ u32 t0=in[0] ;
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ u32 t1=in[1] ;
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ u32 t2=in[2] ;
((t0 & 0x3fc00) >> 10); \ temp0[0] = t2 & 0x7ff;
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \ temp0[1] = t1 & 0x7ff;
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \ temp0[2] = t0 & 0x3ff;
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \ temp1[0] = (t0>>10) & 0x7ff;
unpuckU32ToThree_3(t[0]); \ temp1[1] = (t2 >>11 ) & 0x7ff;
unpuckU32ToThree_3(t[1]); \ temp1[2] = (t1 >> 11) & 0x3ff;
unpuckU32ToThree_3(t[2]); \ temp2[0] = t1 >> 21;
memcpy(out, t, 12 * sizeof(unsigned char)); \ temp2[1] = t0 >> 21;
temp2[2] = t2 >> 22;
unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_1(temp0[1]);
unpuckU32ToThree_1(temp0[2]);
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
unpuckU32ToThree_1(temp1[0]);
unpuckU32ToThree_1(temp1[1]);
unpuckU32ToThree_1(temp1[2]);
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
unpuckU32ToThree_1(temp2[0]);
unpuckU32ToThree_1(temp2[1]);
unpuckU32ToThree_1(temp2[2]);
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
memcpy(out, t, 12 * sizeof(unsigned char));
} }
unsigned char constant7Format[76] = { unsigned char constant7Format[76] = {
/*constant7Format[127]:*/ /*constant7Format[127]:*/
0x01,0x08,0x40,0x02,0x10,0x80,0x05,0x09,0x48,0x42,0x12,0x90, 0x01,0x08,0x40,0x02,0x10,0x80,0x05,0x09,0x48,0x42,0x12,0x90,
......
...@@ -38,22 +38,17 @@ t5 = LOTR32(t0, 19); \ ...@@ -38,22 +38,17 @@ t5 = LOTR32(t0, 19); \
unsigned char constant7Format[76]; unsigned char constant7Format[76];
#define puckU32ToThree_1(x){\
#define puckU32ToThree_3(lo){\ x &= 0x49249249;\
u32 r0;\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
...@@ -29,36 +29,57 @@ void ROUND384_Three(unsigned int *s, unsigned char *c, int lunnum) { ...@@ -29,36 +29,57 @@ void ROUND384_Three(unsigned int *s, unsigned char *c, int lunnum) {
} }
} }
void packU96FormatToThreePacket(u32 *out, u8 *in) { void packU96FormatToThreePacket(u32 * out, u8 * in) {
u32 t0 = U32BIG(((u32*)in)[0]), t1 = U32BIG(((u32*)in)[1]), t2 = U32BIG(((u32*)in)[2]); \ u32 temp0[3] = { 0 };
puckU32ToThree_3(t0); \ u32 temp1[3] = { 0 };
puckU32ToThree_3(t1); \ u32 temp2[3] = { 0 };
puckU32ToThree_3(t2); \ u32 t1=U32BIG(((u32*)in)[0]);
out[0] = ((((t2 >> 21) & 0x400) | (((t2 >> 18) & 0x300)) | ((t2 & 0xff00) >> 8)) << 21) | \ temp0[0] = t1; temp0[1] = t1 >> 1; temp0[2] = t1>> 2;
((((t1 >> 20) & 0x400) | ((t1 >> 16) & 0x300) | (t1 & 0xff)) << 10) | \ puckU32ToThree_1(temp0[0]);
(((t0 >> 20) & 0x300) | ((t0 & 0xff0000) >> 16)); \ puckU32ToThree_1(temp0[1]);
out[1] = ((((t2 >> 20) & 0x400) | ((t2 >> 16) & 0x300) | (t2 & 0xff)) << 21) | \ puckU32ToThree_1(temp0[2]);
((((t1 >> 20) & 0x300) | ((t1 & 0xff0000) >> 16)) << 11) | \ t1=U32BIG(((u32*)in)[1]);
(((t0 >> 21) & 0x400) | ((t0 >> 18) & 0x300) | ((t0 & 0xff00) >> 8)); \ temp1[0] = t1; temp1[1] = t1>>1; temp1[2] = t1 >> 2;
out[2] = ((((t2 >> 20) & 0x300) | ((t2 & 0xff0000) >> 16)) << 22) | \ puckU32ToThree_1(temp1[0]);
((((t1 >> 21) & 0x400) | ((t1 >> 18) & 0x300)|((t1 & 0xff00) >> 8)) << 11) | \ puckU32ToThree_1(temp1[1]);
(((t0 >> 20) & 0x400) | ((t0 >> 16) & 0x300) | (t0 & 0xff)); \ puckU32ToThree_1(temp1[2]);
t1=U32BIG(((u32*)in)[2]);
temp2[0] = t1; temp2[1] =t1 >> 1; temp2[2] = t1>> 2;
puckU32ToThree_1(temp2[0]);
puckU32ToThree_1(temp2[1]);
puckU32ToThree_1(temp2[2]);
out[0] = (temp2[1]<<21) |(temp1[0]<<10) |temp0[2];
out[1] = (temp2[0] << 21) | (temp1[2] << 11) | temp0[1];
out[2] = (temp2[2] << 22) | (temp1[1] << 11) | temp0[0];
} }
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 },r0 ;\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ u32 temp1[3] = { 0 };
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ u32 temp2[3] = { 0 };
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ u32 t[3] = { 0 };
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ u32 t0=in[0] ;
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ u32 t1=in[1] ;
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ u32 t2=in[2] ;
((t0 & 0x3fc00) >> 10); \ temp0[0] = t2 & 0x7ff;
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \ temp0[1] = t1 & 0x7ff;
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \ temp0[2] = t0 & 0x3ff;
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \ temp1[0] = (t0>>10) & 0x7ff;
unpuckU32ToThree_3(t[0]); \ temp1[1] = (t2 >>11 ) & 0x7ff;
unpuckU32ToThree_3(t[1]); \ temp1[2] = (t1 >> 11) & 0x3ff;
unpuckU32ToThree_3(t[2]); \ temp2[0] = t1 >> 21;
memcpy(out, t, 12 * sizeof(unsigned char)); \ temp2[1] = t0 >> 21;
temp2[2] = t2 >> 22;
unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_1(temp0[1]);
unpuckU32ToThree_1(temp0[2]);
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
unpuckU32ToThree_1(temp1[0]);
unpuckU32ToThree_1(temp1[1]);
unpuckU32ToThree_1(temp1[2]);
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
unpuckU32ToThree_1(temp2[0]);
unpuckU32ToThree_1(temp2[1]);
unpuckU32ToThree_1(temp2[2]);
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
memcpy(out, t, 12 * sizeof(unsigned char));
} }
...@@ -12,22 +12,19 @@ typedef unsigned short u16; ...@@ -12,22 +12,19 @@ typedef unsigned short u16;
typedef unsigned int u32; typedef unsigned int u32;
typedef unsigned long long u64; typedef unsigned long long u64;
#define puckU32ToThree_3(lo){\ #define puckU32ToThree_1(x){\
u32 r0;\ x &= 0x49249249;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x &= 0xfff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
void ROUND384_Three(unsigned int *s, unsigned char *c,int lunnum); void ROUND384_Three(unsigned int *s, unsigned char *c,int lunnum);
#define ARC(rci) \ #define ARC(rci) \
......
...@@ -28,36 +28,57 @@ void ROUND384_Three(unsigned int *s, unsigned char *c, int lunnum) { ...@@ -28,36 +28,57 @@ void ROUND384_Three(unsigned int *s, unsigned char *c, int lunnum) {
t += 3; t += 3;
} }
} }
void packU96FormatToThreePacket(u32 *out, u8 *in) { void packU96FormatToThreePacket(u32 * out, u8 * in) {
u32 t0 = U32BIG(((u32*)in)[0]), t1 = U32BIG(((u32*)in)[1]), t2 = U32BIG(((u32*)in)[2]); \ u32 temp0[3] = { 0 };
puckU32ToThree_3(t0); \ u32 temp1[3] = { 0 };
puckU32ToThree_3(t1); \ u32 temp2[3] = { 0 };
puckU32ToThree_3(t2); \ u32 t1=U32BIG(((u32*)in)[0]);
out[0] = ((((t2 >> 21) & 0x400) | (((t2 >> 18) & 0x300)) | ((t2 & 0xff00) >> 8)) << 21) | \ temp0[0] = t1; temp0[1] = t1 >> 1; temp0[2] = t1>> 2;
((((t1 >> 20) & 0x400) | ((t1 >> 16) & 0x300) | (t1 & 0xff)) << 10) | \ puckU32ToThree_1(temp0[0]);
(((t0 >> 20) & 0x300) | ((t0 & 0xff0000) >> 16)); \ puckU32ToThree_1(temp0[1]);
out[1] = ((((t2 >> 20) & 0x400) | ((t2 >> 16) & 0x300) | (t2 & 0xff)) << 21) | \ puckU32ToThree_1(temp0[2]);
((((t1 >> 20) & 0x300) | ((t1 & 0xff0000) >> 16)) << 11) | \ t1=U32BIG(((u32*)in)[1]);
(((t0 >> 21) & 0x400) | ((t0 >> 18) & 0x300) | ((t0 & 0xff00) >> 8)); \ temp1[0] = t1; temp1[1] = t1>>1; temp1[2] = t1 >> 2;
out[2] = ((((t2 >> 20) & 0x300) | ((t2 & 0xff0000) >> 16)) << 22) | \ puckU32ToThree_1(temp1[0]);
((((t1 >> 21) & 0x400) | ((t1 >> 18) & 0x300)|((t1 & 0xff00) >> 8)) << 11) | \ puckU32ToThree_1(temp1[1]);
(((t0 >> 20) & 0x400) | ((t0 >> 16) & 0x300) | (t0 & 0xff)); \ puckU32ToThree_1(temp1[2]);
t1=U32BIG(((u32*)in)[2]);
temp2[0] = t1; temp2[1] =t1 >> 1; temp2[2] = t1>> 2;
puckU32ToThree_1(temp2[0]);
puckU32ToThree_1(temp2[1]);
puckU32ToThree_1(temp2[2]);
out[0] = (temp2[1]<<21) |(temp1[0]<<10) |temp0[2];
out[1] = (temp2[0] << 21) | (temp1[2] << 11) | temp0[1];
out[2] = (temp2[2] << 22) | (temp1[1] << 11) | temp0[0];
} }
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 };\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ u32 temp1[3] = { 0 };
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ u32 temp2[3] = { 0 };
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ u32 t[3] = { 0 };
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ u32 t0=in[0] ;
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ u32 t1=in[1] ;
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ u32 t2=in[2] ;
((t0 & 0x3fc00) >> 10); \ temp0[0] = t2 & 0x7ff;
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \ temp0[1] = t1 & 0x7ff;
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \ temp0[2] = t0 & 0x3ff;
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \ temp1[0] = (t0>>10) & 0x7ff;
unpuckU32ToThree_3(t[0]); \ temp1[1] = (t2 >>11 ) & 0x7ff;
unpuckU32ToThree_3(t[1]); \ temp1[2] = (t1 >> 11) & 0x3ff;
unpuckU32ToThree_3(t[2]); \ temp2[0] = t1 >> 21;
memcpy(out, t, 12 * sizeof(unsigned char)); \ temp2[1] = t0 >> 21;
temp2[2] = t2 >> 22;
unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_1(temp0[1]);
unpuckU32ToThree_1(temp0[2]);
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
unpuckU32ToThree_1(temp1[0]);
unpuckU32ToThree_1(temp1[1]);
unpuckU32ToThree_1(temp1[2]);
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
unpuckU32ToThree_1(temp2[0]);
unpuckU32ToThree_1(temp2[1]);
unpuckU32ToThree_1(temp2[2]);
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
memcpy(out, t, 12 * sizeof(unsigned char));
} }
...@@ -14,26 +14,20 @@ typedef unsigned long long u64; ...@@ -14,26 +14,20 @@ typedef unsigned long long u64;
void ROUND384_Three(unsigned int *s, unsigned char *c,int lunnum); void ROUND384_Three(unsigned int *s, unsigned char *c,int lunnum);
#define puckU32ToThree_1(x){\
#define puckU32ToThree_3(lo){\ x &= 0x49249249;\
u32 r0;\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
#define ARC(rci) \ #define ARC(rci) \
do { \ do { \
__asm__ __volatile__ ( \ __asm__ __volatile__ ( \
......
#include"auxFormat.h" #include"auxFormat.h"
void packU32FormatToThreePacket(u32 *out, u8 *in) { void packU32FormatToThreePacket(u32 * out, u8 * in) {
u32 t0 = U32BIG(((u32* )in)[0]); u32 t2 = U32BIG(((u32*)in)[0]);
puckU32ToThree_3(t0); out[2] = t2; out[1] = t2 >> 1; out[0] = t2 >> 2;//temp2[0] 0;temp2[1] 1;temp2[2] 2;
out[0] = ((((t0 & 0x30000000) >> 20) | ((t0 & 0xff0000) >> 16))); puckU32ToThree_1(out[0]);
out[1] = (((t0 & 0x80000000) >> 21) | ((t0 & 0xc000000) >> 18) puckU32ToThree_1(out[1]);
| ((t0 & 0xff00) >> 8)); puckU32ToThree_1(out[2]);
out[2] = (((t0 & 0x40000000) >> 20) | ((t0 & 0x03000000) >> 16)
| (t0 & 0x000000ff));
} }
void unpackU32FormatToThreePacket(u8 *out, u32 *in) { void unpackU32FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 };\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; temp0[0] = in[0] & 0x3ff;
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | ((t0 & 0x300) << 20) temp0[1] = in[1] & 0x7ff;
| ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | ((t0 & 0xff) << 16) temp0[2] = in[2] & 0x7ff;
| ((t1 & 0xff) << 8) | (t2 & 0xff); unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_3(t[0]); unpuckU32ToThree_1(temp0[1]);
*(u32*) (out) = t[0]; unpuckU32ToThree_1(temp0[2]);
*(u32*)(out) = U32BIG(temp0[0]<<2 | temp0[1] << 1 | temp0[2]);
} }
void packU96FormatToThreePacket(u32 *out, u8 *in) {
u32 t0 = U32BIG(((u32* )in)[0]), t1 = U32BIG(((u32* )in)[1]), t2 = U32BIG( void packU96FormatToThreePacket(u32 * out, u8 * in) {
((u32* )in)[2]); u32 temp0[3] = { 0 };
puckU32ToThree_3(t0); u32 temp1[3] = { 0 };
puckU32ToThree_3(t1); u32 temp2[3] = { 0 };
puckU32ToThree_3(t2); u32 t1=U32BIG(((u32*)in)[0]);
out[0] = (((t2 & 0x80000000)) | ((t2 & 0xc000000) << 3) temp0[0] = t1; temp0[1] = t1 >> 1; temp0[2] = t1>> 2;
| ((t2 & 0xff00) << 13)) puckU32ToThree_1(temp0[0]);
| (((t1 & 0x40000000) >> 10) | ((t1 & 0x03000000) >> 6) puckU32ToThree_1(temp0[1]);
| ((t1 & 0x000000ff) << 10)) puckU32ToThree_1(temp0[2]);
| ((((t0 & 0x30000000) >> 20) | ((t0 & 0xff0000) >> 16))); t1=U32BIG(((u32*)in)[1]);
out[1] = (((t2 & 0x40000000) << 1) | ((t2 & 0x03000000) << 5) temp1[0] = t1; temp1[1] = t1>>1; temp1[2] = t1 >> 2;
| ((t2 & 0x000000ff) << 21)) puckU32ToThree_1(temp1[0]);
| ((((t1 & 0x30000000) >> 9) | ((t1 & 0xff0000) >> 5)) puckU32ToThree_1(temp1[1]);
| (((t0 & 0x80000000) >> 21) | ((t0 & 0xc000000) >> 18) puckU32ToThree_1(temp1[2]);
| ((t0 & 0xff00) >> 8))); t1=U32BIG(((u32*)in)[2]);
out[2] = ((((t2 & 0x30000000) << 2) | ((t2 & 0xff0000) << 6)) temp2[0] = t1; temp2[1] =t1 >> 1; temp2[2] = t1>> 2;
| (((t1 & 0x80000000) >> 10) | ((t1 & 0xc000000) >> 7) puckU32ToThree_1(temp2[0]);
| ((t1 & 0xff00) << 3)) puckU32ToThree_1(temp2[1]);
| (((t0 & 0x40000000) >> 20) | ((t0 & 0x03000000) >> 16) puckU32ToThree_1(temp2[2]);
| (t0 & 0x000000ff))); out[0] = (temp2[1]<<21) |(temp1[0]<<10) |temp0[2];
out[1] = (temp2[0] << 21) | (temp1[2] << 11) | temp0[1];
out[2] = (temp2[2] << 22) | (temp1[1] << 11) | temp0[0];
} }
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 };\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; u32 temp1[3] = { 0 };
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | ((t0 & 0x300) << 20) u32 temp2[3] = { 0 };
| ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | ((t0 & 0xff) << 16) u32 t[3] = { 0 };
| ((t1 & 0xff) << 8) | (t2 & 0xff); u32 t0=in[0] ;
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) u32 t1=in[1] ;
| ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) u32 t2=in[2] ;
| ((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) temp0[0] = t2 & 0x7ff;
| ((t2 & 0x7f800) >> 3) | ((t0 & 0x3fc00) >> 10); temp0[1] = t1 & 0x7ff;
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) temp0[2] = t0 & 0x3ff;
| ((t2 & 0xc0000000) >> 2) | ((t0 & 0x60000000) >> 3) temp1[0] = (t0>>10) & 0x7ff;
| ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) temp1[1] = (t2 >>11 ) & 0x7ff;
| ((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); temp1[2] = (t1 >> 11) & 0x3ff;
unpuckU32ToThree_3(t[0]); temp2[0] = t1 >> 21;
unpuckU32ToThree_3(t[1]); temp2[1] = t0 >> 21;
unpuckU32ToThree_3(t[2]); temp2[2] = t2 >> 22;
unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_1(temp0[1]);
unpuckU32ToThree_1(temp0[2]);
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
unpuckU32ToThree_1(temp1[0]);
unpuckU32ToThree_1(temp1[1]);
unpuckU32ToThree_1(temp1[2]);
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
unpuckU32ToThree_1(temp2[0]);
unpuckU32ToThree_1(temp2[1]);
unpuckU32ToThree_1(temp2[2]);
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
memcpy(out, t, 12 * sizeof(unsigned char)); memcpy(out, t, 12 * sizeof(unsigned char));
} }
unsigned char constant7Format[80] = { unsigned char constant7Format[80] = {
/*constant7Format[127]: 12*6=72*/ /*constant7Format[127]: 12*6=72*/
0x01, 0x08, 0x40, 0x02, 0x10, 0x80, 0x05, 0x09, 0x48, 0x42, 0x12, 0x90, 0x85, 0x01, 0x08, 0x40, 0x02, 0x10, 0x80, 0x05, 0x09, 0x48, 0x42, 0x12, 0x90, 0x85,
......
...@@ -9,23 +9,19 @@ ...@@ -9,23 +9,19 @@
typedef unsigned char u8; typedef unsigned char u8;
typedef unsigned int u32; typedef unsigned int u32;
typedef unsigned long long u64; typedef unsigned long long u64;
#define puckU32ToThree_3(lo){\ #define puckU32ToThree_1(x){\
u32 r0;\ x &= 0x49249249;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
unsigned char constant7Format[80]; unsigned char constant7Format[80];
......
...@@ -12,6 +12,10 @@ int crypto_hash(unsigned char *out, const unsigned char *in, ...@@ -12,6 +12,10 @@ int crypto_hash(unsigned char *out, const unsigned char *in,
u32 s[12] = { 0 }; u32 s[12] = { 0 };
u32 dataFormat[6] = { 0 }; u32 dataFormat[6] = { 0 };
u8 tempData[24] = { 0 }; u8 tempData[24] = { 0 };
u32 t[3] = { 0 };
u32 temp0[3] = { 0 };
u32 temp1[3] = { 0 };
u32 temp2[3] = { 0 };
// initialization // initialization
s[9] = 0x80000000; s[9] = 0x80000000;
//absorb //absorb
......
...@@ -41,70 +41,84 @@ U96_BIT_LOTR32_8(s_temp[6], s_temp [7], s_temp[ 8], s[6], s[7], s[8]);\ ...@@ -41,70 +41,84 @@ U96_BIT_LOTR32_8(s_temp[6], s_temp [7], s_temp[ 8], s[6], s[7], s[8]);\
U96_BIT_LOTR32_55(s_temp[9], s_temp[10], s_temp[11], s[9], s[10], s[11]);\ U96_BIT_LOTR32_55(s_temp[9], s_temp[10], s_temp[11], s[9], s[10], s[11]);\
} }
#define puckU32ToThree_3(lo){\ #define puckU32ToThree_1(x){\
u32 r0;\ x &= 0x49249249;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
#define packU32FormatToThreePacket( out, in) {\ #define packU32FormatToThreePacket( out, in) {\
u32 t0 = U32BIG(((u32*)in)[0]); \ u32 t2 = U32BIG(((u32*)in)[0]); \
puckU32ToThree_3(t0); \ out[2] = t2; out[1] = t2 >> 1; out[0] = t2 >> 2; \
out[0] = ((((t0 & 0x30000000) >> 20) | ((t0 & 0xff0000) >> 16))); \ puckU32ToThree_1(out[0]); \
out[1] = (((t0 & 0x80000000) >> 21) | ((t0 & 0xc000000) >> 18) | ((t0 & 0xff00) >> 8)); \ puckU32ToThree_1(out[1]); \
out[2] = (((t0 & 0x40000000) >> 20) | ((t0 & 0x03000000) >> 16) | (t0 & 0x000000ff)); \ puckU32ToThree_1(out[2]); \
} }
#define unpackU32FormatToThreePacket(out, in) {\ #define unpackU32FormatToThreePacket(out, in) {\
u32 t[3] = { 0 } ;\ u32 temp0[3] = { 0 }; \
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ temp0[0] = in[0] & 0x3ff; \
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ temp0[1] = in[1] & 0x7ff; \
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ temp0[2] = in[2] & 0x7ff; \
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ unpuckU32ToThree_1(temp0[0]); \
unpuckU32ToThree_3(t[0]); \ unpuckU32ToThree_1(temp0[1]); \
*(u32*)(out) = t[0]; \ unpuckU32ToThree_1(temp0[2]); \
*(u32*)(out) = U32BIG(temp0[0]<<2 | temp0[1] << 1 | temp0[2]); \
} }
#define packU96FormatToThreePacket( out, in) { \ #define packU96FormatToThreePacket( out, in) { \
u32 t0 = U32BIG(((u32*)in)[0]), t1 = U32BIG(((u32*)in)[1]), t2 = U32BIG(((u32*)in)[2]); \ t1=U32BIG(((u32*)in)[0]); \
puckU32ToThree_3(t0); \ temp0[0] = t1; temp0[1] = t1 >> 1; temp0[2] = t1>> 2; \
puckU32ToThree_3(t1); \ puckU32ToThree_1(temp0[0]); \
puckU32ToThree_3(t2); \ puckU32ToThree_1(temp0[1]); \
out[0] = (((t2 & 0x80000000)) | ((t2 & 0xc000000) << 3) | ((t2 & 0xff00) << 13)) | \ puckU32ToThree_1(temp0[2]); \
(((t1 & 0x40000000) >> 10) | ((t1 & 0x03000000) >> 6) | ((t1 & 0x000000ff) << 10)) | \ t1=U32BIG(((u32*)in)[1]); \
((((t0 & 0x30000000) >> 20) | ((t0 & 0xff0000) >> 16))); \ temp1[0] = t1; temp1[1] = t1>>1; temp1[2] = t1 >> 2; \
out[1] = (((t2 & 0x40000000) << 1) | ((t2 & 0x03000000) << 5) | ((t2 & 0x000000ff) << 21)) | \ puckU32ToThree_1(temp1[0]); \
((((t1 & 0x30000000) >> 9) | ((t1 & 0xff0000) >> 5)) | \ puckU32ToThree_1(temp1[1]); \
(((t0 & 0x80000000) >> 21) | ((t0 & 0xc000000) >> 18) | ((t0 & 0xff00) >> 8))); \ puckU32ToThree_1(temp1[2]); \
out[2] = ((((t2 & 0x30000000) << 2) | ((t2 & 0xff0000) << 6)) | \ t1=U32BIG(((u32*)in)[2]); \
(((t1 & 0x80000000) >> 10) | ((t1 & 0xc000000) >> 7) | ((t1 & 0xff00) << 3)) | \ temp2[0] = t1; temp2[1] =t1 >> 1; temp2[2] = t1>> 2; \
(((t0 & 0x40000000) >> 20) | ((t0 & 0x03000000) >> 16) | (t0 & 0x000000ff))); \ puckU32ToThree_1(temp2[0]); \
puckU32ToThree_1(temp2[1]); \
puckU32ToThree_1(temp2[2]); \
out[0] = (temp2[1]<<21) |(temp1[0]<<10) |temp0[2]; \
out[1] = (temp2[0] << 21) | (temp1[2] << 11) | temp0[1]; \
out[2] = (temp2[2] << 22) | (temp1[1] << 11) | temp0[0]; \
} }
#define unpackU96FormatToThreePacket( out, in) {\ #define unpackU96FormatToThreePacket( out, in) {\
u32 t[3] = { 0 };\ t3=in[0] ; \
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ t1=in[1] ; \
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ t2=in[2] ; \
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ temp0[0] = t2 & 0x7ff; \
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ temp0[1] = t1 & 0x7ff; \
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ temp0[2] = t3 & 0x3ff; \
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ temp1[0] = (t3>>10) & 0x7ff; \
((t0 & 0x3fc00) >> 10); \ temp1[1] = (t2 >>11 ) & 0x7ff; \
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \ temp1[2] = (t1 >> 11) & 0x3ff; \
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \ temp2[0] = t1 >> 21; \
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \ temp2[1] = t3 >> 21; \
unpuckU32ToThree_3(t[0]); \ temp2[2] = t2 >> 22; \
unpuckU32ToThree_3(t[1]); \ unpuckU32ToThree_1(temp0[0]); \
unpuckU32ToThree_3(t[2]); \ unpuckU32ToThree_1(temp0[1]); \
memcpy(out, t, 12 * sizeof(unsigned char)); \ unpuckU32ToThree_1(temp0[2]); \
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2; \
unpuckU32ToThree_1(temp1[0]); \
unpuckU32ToThree_1(temp1[1]); \
unpuckU32ToThree_1(temp1[2]); \
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2; \
unpuckU32ToThree_1(temp2[0]); \
unpuckU32ToThree_1(temp2[1]); \
unpuckU32ToThree_1(temp2[2]); \
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2; \
memcpy(out, t, 12 * sizeof(unsigned char)); \
} }
...@@ -33,6 +33,10 @@ int crypto_hash(unsigned char *out, const unsigned char *in, ...@@ -33,6 +33,10 @@ int crypto_hash(unsigned char *out, const unsigned char *in,
u8 i, tempData[24] = { 0 }; u8 i, tempData[24] = { 0 };
u32 s_temp[12] = { 0 }; u32 s_temp[12] = { 0 };
u32 t1, t2, t3, t5, t6, t8, t9, t11; u32 t1, t2, t3, t5, t6, t8, t9, t11;
u32 t[3] = { 0 };
u32 temp0[3] = { 0 };
u32 temp1[3] = { 0 };
u32 temp2[3] = { 0 };
// initialization // initialization
s[9] = 0x80000000; s[9] = 0x80000000;
//absorb //absorb
......
#include"auxFormat.h" #include"auxFormat.h"
void packU32FormatToThreePacket(u32 *out, u8 *in) { void packU32FormatToThreePacket(u32 * out, u8 * in) {
u32 t0 = U32BIG(((u32* )in)[0]); u32 t2 = U32BIG(((u32*)in)[0]);
puckU32ToThree_3(t0); out[2] = t2; out[1] = t2 >> 1; out[0] = t2 >> 2;//temp2[0] 0;temp2[1] 1;temp2[2] 2;
out[0] = ((((t0 & 0x30000000) >> 20) | ((t0 & 0xff0000) >> 16))); puckU32ToThree_1(out[0]);
out[1] = (((t0 & 0x80000000) >> 21) | ((t0 & 0xc000000) >> 18) puckU32ToThree_1(out[1]);
| ((t0 & 0xff00) >> 8)); puckU32ToThree_1(out[2]);
out[2] = (((t0 & 0x40000000) >> 20) | ((t0 & 0x03000000) >> 16)
| (t0 & 0x000000ff));
} }
void unpackU32FormatToThreePacket(u8 *out, u32 *in) { void unpackU32FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 };\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; temp0[0] = in[0] & 0x3ff;
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | ((t0 & 0x300) << 20) temp0[1] = in[1] & 0x7ff;
| ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | ((t0 & 0xff) << 16) temp0[2] = in[2] & 0x7ff;
| ((t1 & 0xff) << 8) | (t2 & 0xff); unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_3(t[0]); unpuckU32ToThree_1(temp0[1]);
*(u32*) (out) = t[0]; unpuckU32ToThree_1(temp0[2]);
*(u32*)(out) = U32BIG(temp0[0]<<2 | temp0[1] << 1 | temp0[2]);
} }
void packU96FormatToThreePacket(u32 *out, u8 *in) {
u32 t0 = U32BIG(((u32* )in)[0]), t1 = U32BIG(((u32* )in)[1]), t2 = U32BIG( void packU96FormatToThreePacket(u32 * out, u8 * in) {
((u32* )in)[2]); u32 temp0[3] = { 0 };
puckU32ToThree_3(t0); u32 temp1[3] = { 0 };
puckU32ToThree_3(t1); u32 temp2[3] = { 0 };
puckU32ToThree_3(t2); u32 t1=U32BIG(((u32*)in)[0]);
out[0] = (((t2 & 0x80000000)) | ((t2 & 0xc000000) << 3) temp0[0] = t1; temp0[1] = t1 >> 1; temp0[2] = t1>> 2;
| ((t2 & 0xff00) << 13)) puckU32ToThree_1(temp0[0]);
| (((t1 & 0x40000000) >> 10) | ((t1 & 0x03000000) >> 6) puckU32ToThree_1(temp0[1]);
| ((t1 & 0x000000ff) << 10)) puckU32ToThree_1(temp0[2]);
| ((((t0 & 0x30000000) >> 20) | ((t0 & 0xff0000) >> 16))); t1=U32BIG(((u32*)in)[1]);
out[1] = (((t2 & 0x40000000) << 1) | ((t2 & 0x03000000) << 5) temp1[0] = t1; temp1[1] = t1>>1; temp1[2] = t1 >> 2;
| ((t2 & 0x000000ff) << 21)) puckU32ToThree_1(temp1[0]);
| ((((t1 & 0x30000000) >> 9) | ((t1 & 0xff0000) >> 5)) puckU32ToThree_1(temp1[1]);
| (((t0 & 0x80000000) >> 21) | ((t0 & 0xc000000) >> 18) puckU32ToThree_1(temp1[2]);
| ((t0 & 0xff00) >> 8))); t1=U32BIG(((u32*)in)[2]);
out[2] = ((((t2 & 0x30000000) << 2) | ((t2 & 0xff0000) << 6)) temp2[0] = t1; temp2[1] =t1 >> 1; temp2[2] = t1>> 2;
| (((t1 & 0x80000000) >> 10) | ((t1 & 0xc000000) >> 7) puckU32ToThree_1(temp2[0]);
| ((t1 & 0xff00) << 3)) puckU32ToThree_1(temp2[1]);
| (((t0 & 0x40000000) >> 20) | ((t0 & 0x03000000) >> 16) puckU32ToThree_1(temp2[2]);
| (t0 & 0x000000ff))); out[0] = (temp2[1]<<21) |(temp1[0]<<10) |temp0[2];
out[1] = (temp2[0] << 21) | (temp1[2] << 11) | temp0[1];
out[2] = (temp2[2] << 22) | (temp1[1] << 11) | temp0[0];
} }
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 };\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; u32 temp1[3] = { 0 };
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | ((t0 & 0x300) << 20) u32 temp2[3] = { 0 };
| ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | ((t0 & 0xff) << 16) u32 t[3] = { 0 };
| ((t1 & 0xff) << 8) | (t2 & 0xff); u32 t0=in[0] ;
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) u32 t1=in[1] ;
| ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) u32 t2=in[2] ;
| ((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) temp0[0] = t2 & 0x7ff;
| ((t2 & 0x7f800) >> 3) | ((t0 & 0x3fc00) >> 10); temp0[1] = t1 & 0x7ff;
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) temp0[2] = t0 & 0x3ff;
| ((t2 & 0xc0000000) >> 2) | ((t0 & 0x60000000) >> 3) temp1[0] = (t0>>10) & 0x7ff;
| ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) temp1[1] = (t2 >>11 ) & 0x7ff;
| ((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); temp1[2] = (t1 >> 11) & 0x3ff;
unpuckU32ToThree_3(t[0]); temp2[0] = t1 >> 21;
unpuckU32ToThree_3(t[1]); temp2[1] = t0 >> 21;
unpuckU32ToThree_3(t[2]); temp2[2] = t2 >> 22;
unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_1(temp0[1]);
unpuckU32ToThree_1(temp0[2]);
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
unpuckU32ToThree_1(temp1[0]);
unpuckU32ToThree_1(temp1[1]);
unpuckU32ToThree_1(temp1[2]);
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
unpuckU32ToThree_1(temp2[0]);
unpuckU32ToThree_1(temp2[1]);
unpuckU32ToThree_1(temp2[2]);
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
memcpy(out, t, 12 * sizeof(unsigned char)); memcpy(out, t, 12 * sizeof(unsigned char));
} }
unsigned char constant7Format[80] = { unsigned char constant7Format[80] = {
/*constant7Format[127]: 12*6=72*/ /*constant7Format[127]: 12*6=72*/
0x01, 0x08, 0x40, 0x02, 0x10, 0x80, 0x05, 0x09, 0x48, 0x42, 0x12, 0x90, 0x85, 0x01, 0x08, 0x40, 0x02, 0x10, 0x80, 0x05, 0x09, 0x48, 0x42, 0x12, 0x90, 0x85,
......
...@@ -14,23 +14,19 @@ void unpackU96FormatToThreePacket(u8 * out, u32 * in) ; ...@@ -14,23 +14,19 @@ void unpackU96FormatToThreePacket(u8 * out, u32 * in) ;
void packU96FormatToThreePacket(u32 * out, u8 * in); void packU96FormatToThreePacket(u32 * out, u8 * in);
void unpackU32FormatToThreePacket(u8 * out, u32 * in); void unpackU32FormatToThreePacket(u8 * out, u32 * in);
void packU32FormatToThreePacket(u32 * out, u8 * in); void packU32FormatToThreePacket(u32 * out, u8 * in);
#define puckU32ToThree_3(lo){\ #define puckU32ToThree_1(x){\
u32 r0;\ x &= 0x49249249;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
unsigned char constant7Format[80]; unsigned char constant7Format[80];
......
#include"auxFormat.h" #include"auxFormat.h"
void packU32FormatToThreePacket(u32 *out, u8 *in) {
u32 t0 = U32BIG(((u32* )in)[0]); void packU32FormatToThreePacket(u32 * out, u8 * in) {
puckU32ToThree_3(t0); u32 t2 = U32BIG(((u32*)in)[0]);
out[0] = ((((t0 & 0x30000000) >> 20) | ((t0 & 0xff0000) >> 16))); out[2] = t2; out[1] = t2 >> 1; out[0] = t2 >> 2;//temp2[0] 0;temp2[1] 1;temp2[2] 2;
out[1] = (((t0 & 0x80000000) >> 21) | ((t0 & 0xc000000) >> 18) puckU32ToThree_1(out[0]);
| ((t0 & 0xff00) >> 8)); puckU32ToThree_1(out[1]);
out[2] = (((t0 & 0x40000000) >> 20) | ((t0 & 0x03000000) >> 16) puckU32ToThree_1(out[2]);
| (t0 & 0x000000ff));
} }
void unpackU32FormatToThreePacket(u8 *out, u32 *in) { void unpackU32FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 };\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; temp0[0] = in[0] & 0x3ff;
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | ((t0 & 0x300) << 20) temp0[1] = in[1] & 0x7ff;
| ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | ((t0 & 0xff) << 16) temp0[2] = in[2] & 0x7ff;
| ((t1 & 0xff) << 8) | (t2 & 0xff); unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_3(t[0]); unpuckU32ToThree_1(temp0[1]);
*(u32*) (out) = t[0]; unpuckU32ToThree_1(temp0[2]);
*(u32*)(out) = U32BIG(temp0[0]<<2 | temp0[1] << 1 | temp0[2]);
} }
void packU96FormatToThreePacket(u32 *out, u8 *in) {
u32 t0 = U32BIG(((u32* )in)[0]), t1 = U32BIG(((u32* )in)[1]), t2 = U32BIG( void packU96FormatToThreePacket(u32 * out, u8 * in) {
((u32* )in)[2]); u32 temp0[3] = { 0 };
puckU32ToThree_3(t0); u32 temp1[3] = { 0 };
puckU32ToThree_3(t1); u32 temp2[3] = { 0 };
puckU32ToThree_3(t2); u32 t1=U32BIG(((u32*)in)[0]);
out[0] = (((t2 & 0x80000000)) | ((t2 & 0xc000000) << 3) temp0[0] = t1; temp0[1] = t1 >> 1; temp0[2] = t1>> 2;
| ((t2 & 0xff00) << 13)) puckU32ToThree_1(temp0[0]);
| (((t1 & 0x40000000) >> 10) | ((t1 & 0x03000000) >> 6) puckU32ToThree_1(temp0[1]);
| ((t1 & 0x000000ff) << 10)) puckU32ToThree_1(temp0[2]);
| ((((t0 & 0x30000000) >> 20) | ((t0 & 0xff0000) >> 16))); t1=U32BIG(((u32*)in)[1]);
out[1] = (((t2 & 0x40000000) << 1) | ((t2 & 0x03000000) << 5) temp1[0] = t1; temp1[1] = t1>>1; temp1[2] = t1 >> 2;
| ((t2 & 0x000000ff) << 21)) puckU32ToThree_1(temp1[0]);
| ((((t1 & 0x30000000) >> 9) | ((t1 & 0xff0000) >> 5)) puckU32ToThree_1(temp1[1]);
| (((t0 & 0x80000000) >> 21) | ((t0 & 0xc000000) >> 18) puckU32ToThree_1(temp1[2]);
| ((t0 & 0xff00) >> 8))); t1=U32BIG(((u32*)in)[2]);
out[2] = ((((t2 & 0x30000000) << 2) | ((t2 & 0xff0000) << 6)) temp2[0] = t1; temp2[1] =t1 >> 1; temp2[2] = t1>> 2;
| (((t1 & 0x80000000) >> 10) | ((t1 & 0xc000000) >> 7) puckU32ToThree_1(temp2[0]);
| ((t1 & 0xff00) << 3)) puckU32ToThree_1(temp2[1]);
| (((t0 & 0x40000000) >> 20) | ((t0 & 0x03000000) >> 16) puckU32ToThree_1(temp2[2]);
| (t0 & 0x000000ff))); out[0] = (temp2[1]<<21) |(temp1[0]<<10) |temp0[2];
out[1] = (temp2[0] << 21) | (temp1[2] << 11) | temp0[1];
out[2] = (temp2[2] << 22) | (temp1[1] << 11) | temp0[0];
} }
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 };\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; u32 temp1[3] = { 0 };
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | ((t0 & 0x300) << 20) u32 temp2[3] = { 0 };
| ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | ((t0 & 0xff) << 16) u32 t[3] = { 0 };
| ((t1 & 0xff) << 8) | (t2 & 0xff); u32 t0=in[0] ;
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) u32 t1=in[1] ;
| ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) u32 t2=in[2] ;
| ((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) temp0[0] = t2 & 0x7ff;
| ((t2 & 0x7f800) >> 3) | ((t0 & 0x3fc00) >> 10); temp0[1] = t1 & 0x7ff;
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) temp0[2] = t0 & 0x3ff;
| ((t2 & 0xc0000000) >> 2) | ((t0 & 0x60000000) >> 3) temp1[0] = (t0>>10) & 0x7ff;
| ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) temp1[1] = (t2 >>11 ) & 0x7ff;
| ((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); temp1[2] = (t1 >> 11) & 0x3ff;
unpuckU32ToThree_3(t[0]); temp2[0] = t1 >> 21;
unpuckU32ToThree_3(t[1]); temp2[1] = t0 >> 21;
unpuckU32ToThree_3(t[2]); temp2[2] = t2 >> 22;
unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_1(temp0[1]);
unpuckU32ToThree_1(temp0[2]);
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
unpuckU32ToThree_1(temp1[0]);
unpuckU32ToThree_1(temp1[1]);
unpuckU32ToThree_1(temp1[2]);
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
unpuckU32ToThree_1(temp2[0]);
unpuckU32ToThree_1(temp2[1]);
unpuckU32ToThree_1(temp2[2]);
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
memcpy(out, t, 12 * sizeof(unsigned char)); memcpy(out, t, 12 * sizeof(unsigned char));
} }
void ROUND384_Three(unsigned int *s, unsigned char *c, int lunnum) { void ROUND384_Three(unsigned int *s, unsigned char *c, int lunnum) {
unsigned int t, t1, t2; unsigned int t, t1, t2;
u32 rci; u32 rci;
......
...@@ -15,23 +15,19 @@ void unpackU96FormatToThreePacket(u8 * out, u32 * in) ; ...@@ -15,23 +15,19 @@ void unpackU96FormatToThreePacket(u8 * out, u32 * in) ;
void packU96FormatToThreePacket(u32 * out, u8 * in); void packU96FormatToThreePacket(u32 * out, u8 * in);
void unpackU32FormatToThreePacket(u8 * out, u32 * in); void unpackU32FormatToThreePacket(u8 * out, u32 * in);
void packU32FormatToThreePacket(u32 * out, u8 * in); void packU32FormatToThreePacket(u32 * out, u8 * in);
#define puckU32ToThree_3(lo){\ #define puckU32ToThree_1(x){\
u32 r0;\ x &= 0x49249249;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
////////////constant begin// ////////////constant begin//
unsigned char constant7Format[80]; unsigned char constant7Format[80];
......
#include"auxFormat.h" #include"auxFormat.h"
void packU32FormatToThreePacket(u32 *out, u8 *in) {
u32 t0 = U32BIG(((u32*)in)[0]); \ void packU32FormatToThreePacket(u32 * out, u8 * in) {
puckU32ToThree_3(t0); \ u32 t2 = U32BIG(((u32*)in)[0]);
out[0] = ((((t0 & 0x30000000) >> 20) | ((t0 & 0xff0000) >> 16))); \ out[2] = t2; out[1] = t2 >> 1; out[0] = t2 >> 2;//temp2[0] 0;temp2[1] 1;temp2[2] 2;
out[1] = (((t0 & 0x80000000) >> 21) | ((t0 & 0xc000000) >> 18) | ((t0 & 0xff00) >> 8)); \ puckU32ToThree_1(out[0]);
out[2] = (((t0 & 0x40000000) >> 20) | ((t0 & 0x03000000) >> 16) | (t0 & 0x000000ff)); \ puckU32ToThree_1(out[1]);
puckU32ToThree_1(out[2]);
} }
void unpackU32FormatToThreePacket(u8 *out, u32 *in) { void unpackU32FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 } ;\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ temp0[0] = in[0] & 0x3ff;
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ temp0[1] = in[1] & 0x7ff;
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ temp0[2] = in[2] & 0x7ff;
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_3(t[0]); \ unpuckU32ToThree_1(temp0[1]);
*(u32*)(out) = t[0]; \ unpuckU32ToThree_1(temp0[2]);
*(u32*)(out) = U32BIG(temp0[0]<<2 | temp0[1] << 1 | temp0[2]);
} }
void packU96FormatToThreePacket(u32 *out, u8 *in) {
u32 t0 = U32BIG(((u32*)in)[0]), t1 = U32BIG(((u32*)in)[1]), t2 = U32BIG(((u32*)in)[2]); \ void packU96FormatToThreePacket(u32 * out, u8 * in) {
puckU32ToThree_3(t0); \ u32 temp0[3] = { 0 };
puckU32ToThree_3(t1); \ u32 temp1[3] = { 0 };
puckU32ToThree_3(t2); \ u32 temp2[3] = { 0 };
out[0] = (((t2 & 0x80000000)) | ((t2 & 0xc000000) << 3) | ((t2 & 0xff00) << 13)) | \ u32 t1=U32BIG(((u32*)in)[0]);
(((t1 & 0x40000000) >> 10) | ((t1 & 0x03000000) >> 6) | ((t1 & 0x000000ff) << 10)) | \ temp0[0] = t1; temp0[1] = t1 >> 1; temp0[2] = t1>> 2;
((((t0 & 0x30000000) >> 20) | ((t0 & 0xff0000) >> 16))); \ puckU32ToThree_1(temp0[0]);
out[1] = (((t2 & 0x40000000) << 1) | ((t2 & 0x03000000) << 5) | ((t2 & 0x000000ff) << 21)) | \ puckU32ToThree_1(temp0[1]);
((((t1 & 0x30000000) >> 9) | ((t1 & 0xff0000) >> 5)) | \ puckU32ToThree_1(temp0[2]);
(((t0 & 0x80000000) >> 21) | ((t0 & 0xc000000) >> 18) | ((t0 & 0xff00) >> 8))); \ t1=U32BIG(((u32*)in)[1]);
out[2] = ((((t2 & 0x30000000) << 2) | ((t2 & 0xff0000) << 6)) | \ temp1[0] = t1; temp1[1] = t1>>1; temp1[2] = t1 >> 2;
(((t1 & 0x80000000) >> 10) | ((t1 & 0xc000000) >> 7) | ((t1 & 0xff00) << 3)) | \ puckU32ToThree_1(temp1[0]);
(((t0 & 0x40000000) >> 20) | ((t0 & 0x03000000) >> 16) | (t0 & 0x000000ff))); \ puckU32ToThree_1(temp1[1]);
puckU32ToThree_1(temp1[2]);
t1=U32BIG(((u32*)in)[2]);
temp2[0] = t1; temp2[1] =t1 >> 1; temp2[2] = t1>> 2;
puckU32ToThree_1(temp2[0]);
puckU32ToThree_1(temp2[1]);
puckU32ToThree_1(temp2[2]);
out[0] = (temp2[1]<<21) |(temp1[0]<<10) |temp0[2];
out[1] = (temp2[0] << 21) | (temp1[2] << 11) | temp0[1];
out[2] = (temp2[2] << 22) | (temp1[1] << 11) | temp0[0];
} }
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 };\ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ u32 temp1[3] = { 0 };
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ u32 temp2[3] = { 0 };
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ u32 t[3] = { 0 };
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ u32 t0=in[0] ;
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ u32 t1=in[1] ;
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ u32 t2=in[2] ;
((t0 & 0x3fc00) >> 10); \ temp0[0] = t2 & 0x7ff;
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \ temp0[1] = t1 & 0x7ff;
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \ temp0[2] = t0 & 0x3ff;
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \ temp1[0] = (t0>>10) & 0x7ff;
unpuckU32ToThree_3(t[0]); \ temp1[1] = (t2 >>11 ) & 0x7ff;
unpuckU32ToThree_3(t[1]); \ temp1[2] = (t1 >> 11) & 0x3ff;
unpuckU32ToThree_3(t[2]); \ temp2[0] = t1 >> 21;
memcpy(out, t, 12 * sizeof(unsigned char)); \ temp2[1] = t0 >> 21;
temp2[2] = t2 >> 22;
unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_1(temp0[1]);
unpuckU32ToThree_1(temp0[2]);
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
unpuckU32ToThree_1(temp1[0]);
unpuckU32ToThree_1(temp1[1]);
unpuckU32ToThree_1(temp1[2]);
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
unpuckU32ToThree_1(temp2[0]);
unpuckU32ToThree_1(temp2[1]);
unpuckU32ToThree_1(temp2[2]);
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
memcpy(out, t, 12 * sizeof(unsigned char));
} }
void ROUND384_Three(unsigned int *s, unsigned char *c, int lunnum) { void ROUND384_Three(unsigned int *s, unsigned char *c, int lunnum) {
unsigned int t, t1, t2; unsigned int t, t1, t2;
......
...@@ -11,24 +11,21 @@ typedef unsigned int u32; ...@@ -11,24 +11,21 @@ typedef unsigned int u32;
typedef unsigned long long u64; typedef unsigned long long u64;
void ROUND384_Three(unsigned int *s, unsigned char *c,int lunnum) ; void ROUND384_Three(unsigned int *s, unsigned char *c,int lunnum) ;
#define puckU32ToThree_3(lo){\ #define puckU32ToThree_1(x){\
u32 r0;\ x &= 0x49249249;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
////////////constant begin// ////////////constant begin//
unsigned char constant7Format[80]; unsigned char constant7Format[80];
#define ARC(rci) \ #define ARC(rci) \
......
#include"auxFormat.h" #include"auxFormat.h"
void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { u32 temp0[3] = { 0 };
u32 t[3] = { 0 }; \ u32 temp1[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ u32 temp2[3] = { 0 };
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ u32 t[3] = { 0 };
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ temp0[0] = in[2] & 0x7ff;
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ temp0[1] = in[1] & 0x7ff;
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ temp0[2] = in[0] & 0x3ff;
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ temp1[0] = (in[0]>>10) & 0x7ff;
((t0 & 0x3fc00) >> 10); \ temp1[1] = (in[2] >>11 ) & 0x7ff;
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \ temp1[2] = (in[1] >> 11) & 0x3ff;
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \ temp2[0] = in[1] >> 21;
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \ temp2[1] = in[0] >> 21;
unpuckU32ToThree_3(t[0]); \ temp2[2] = in[2] >> 22;
unpuckU32ToThree_3(t[1]); \ unpuckU32ToThree_1(temp0[0]);
unpuckU32ToThree_3(t[2]); \ unpuckU32ToThree_1(temp0[1]);
memcpy(out, t, 12 * sizeof(unsigned char)); \ unpuckU32ToThree_1(temp0[2]);
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
unpuckU32ToThree_1(temp1[0]);
unpuckU32ToThree_1(temp1[1]);
unpuckU32ToThree_1(temp1[2]);
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
unpuckU32ToThree_1(temp2[0]);
unpuckU32ToThree_1(temp2[1]);
unpuckU32ToThree_1(temp2[2]);
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
memcpy(out, t, 12 * sizeof(unsigned char));
} }
void packU48FormatToThreePacket(u32 * out, u8 * in) { void packU48FormatToThreePacket(u32 * out, u8 * in) {
u32 t0 = U32BIG(*(u32*)(in)), t1 = (u32)U16BIG(*(u16*)(in + 4)); \ u32 t1 = (u32)U16BIG(*(u16*)(in + 4));
puckU32ToThree_3(t0); \ u32 temp0[3] = { 0 };
puckU32ToThree_3(t1); \ u32 temp1[3] = { 0 };
out[0] = \ temp0[0] = U32BIG(((u32*)in)[0]); temp0[1] = U32BIG(((u32*)in)[0]) >> 1; temp0[2] = U32BIG(((u32*)in)[0]) >> 2;
(((t1 & 0x40000000) >> 10) | ((t1 & 0x03000000) >> 6) | ((t1 & 0x000000ff) << 10)) | \ puckU32ToThree_1(temp0[0]);
((((t0 & 0x30000000) >> 20) | ((t0 & 0xff0000) >> 16))); \ puckU32ToThree_1(temp0[1]);
out[1] = \ puckU32ToThree_1(temp0[2]);
((((t1 & 0x30000000) >> 9) | ((t1 & 0xff0000) >> 5)) | \ temp1[0] = t1; temp1[1] = t1 >> 1; temp1[2] = t1 >> 2;
(((t0 & 0x80000000) >> 21) | ((t0 & 0xc000000) >> 18) | ((t0 & 0xff00) >> 8))); \ puckU32ToThree_1(temp1[0]);
out[2] = \ puckU32ToThree_1(temp1[1]);
(((t1 & 0x80000000) >> 10) | ((t1 & 0xc000000) >> 7) | ((t1 & 0xff00) << 3)) | \ puckU32ToThree_1(temp1[2]);
(((t0 & 0x40000000) >> 20) | ((t0 & 0x03000000) >> 16) | (t0 & 0x000000ff)); \ out[0] = (temp1[0] << 10) | temp0[2];
out[1] = (temp1[2] << 11) | temp0[1];
out[2] = (temp1[1] << 11) | temp0[0];
} }
unsigned char constant7Format[104] = { unsigned char constant7Format[104] = {
......
...@@ -17,24 +17,21 @@ void packU48FormatToThreePacket(u32 * out, u8 * in) ; ...@@ -17,24 +17,21 @@ void packU48FormatToThreePacket(u32 * out, u8 * in) ;
void P384(unsigned int *s, unsigned char *round, unsigned char lunNum) ; void P384(unsigned int *s, unsigned char *round, unsigned char lunNum) ;
void unpackU96FormatToThreePacket(u8 * out, u32 * in) ; void unpackU96FormatToThreePacket(u8 * out, u32 * in) ;
#define puckU32ToThree_3(lo){\ #define puckU32ToThree_1(x){\
u32 r0;\ x &= 0x49249249;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
#define P384_ARC_SC1(rci,S2,S3,S4) \ #define P384_ARC_SC1(rci,S2,S3,S4) \
do { \ do { \
__asm__ __volatile__ ( \ __asm__ __volatile__ ( \
......
...@@ -22,55 +22,62 @@ typedef unsigned long long u64; ...@@ -22,55 +22,62 @@ typedef unsigned long long u64;
{ \ { \
t1 = ~a; t2 = b & t1;t3 = c ^ t2; h = d ^ t3; t5 = b | c; t6 = d ^ t1; g = t5 ^ t6; t8 = b ^ d; t9 = t3 & t6; a = t8 ^ t9; t11 = g & t8; f = t3 ^ t11; \ t1 = ~a; t2 = b & t1;t3 = c ^ t2; h = d ^ t3; t5 = b | c; t6 = d ^ t1; g = t5 ^ t6; t8 = b ^ d; t9 = t3 & t6; a = t8 ^ t9; t11 = g & t8; f = t3 ^ t11; \
} }
#define puckU32ToThree_3(lo){\ #define puckU32ToThree_1(x){\
u32 r0;\ x &= 0x49249249;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
#define unpackU96FormatToThreePacket( out, in) {\ #define unpackU96FormatToThreePacket( out, in) {\
u32 t[3] = { 0 };\ t3=in[0] ; \
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ t1=in[1] ; \
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ t2=in[2] ; \
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ temp0[0] = t2 & 0x7ff; \
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ temp0[1] = t1 & 0x7ff; \
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ temp0[2] = t3 & 0x3ff; \
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ temp1[0] = (t3>>10) & 0x7ff; \
((t0 & 0x3fc00) >> 10); \ temp1[1] = (t2 >>11 ) & 0x7ff; \
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \ temp1[2] = (t1 >> 11) & 0x3ff; \
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \ temp2[0] = t1 >> 21; \
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \ temp2[1] = t3 >> 21; \
unpuckU32ToThree_3(t[0]); \ temp2[2] = t2 >> 22; \
unpuckU32ToThree_3(t[1]); \ unpuckU32ToThree_1(temp0[0]); \
unpuckU32ToThree_3(t[2]); \ unpuckU32ToThree_1(temp0[1]); \
memcpy(out, t, 12 * sizeof(unsigned char)); \ unpuckU32ToThree_1(temp0[2]); \
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2; \
unpuckU32ToThree_1(temp1[0]); \
unpuckU32ToThree_1(temp1[1]); \
unpuckU32ToThree_1(temp1[2]); \
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2; \
unpuckU32ToThree_1(temp2[0]); \
unpuckU32ToThree_1(temp2[1]); \
unpuckU32ToThree_1(temp2[2]); \
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2; \
memcpy(out, t, 12 * sizeof(unsigned char)); \
} }
#define packU48FormatToThreePacket(out, in) {\ #define packU48FormatToThreePacket(out, in) {\
u32 t0 = U32BIG(*(u32*)(in)), t1 = (u32)U16BIG(*(u16*)(in + 4)); \ t1 = (u32)U16BIG(*(u16*)(in + 4)); \
puckU32ToThree_3(t0); \ temp0[0] = U32BIG(((u32*)in)[0]); temp0[1] = U32BIG(((u32*)in)[0]) >> 1; temp0[2] = U32BIG(((u32*)in)[0]) >> 2; \
puckU32ToThree_3(t1); \ puckU32ToThree_1(temp0[0]); \
out[0] = \ puckU32ToThree_1(temp0[1]); \
(((t1 & 0x40000000) >> 10) | ((t1 & 0x03000000) >> 6) | ((t1 & 0x000000ff) << 10)) | \ puckU32ToThree_1(temp0[2]); \
((((t0 & 0x30000000) >> 20) | ((t0 & 0xff0000) >> 16))); \ temp1[0] = t1; temp1[1] = t1 >> 1; temp1[2] = t1 >> 2; \
out[1] = \ puckU32ToThree_1(temp1[0]); \
((((t1 & 0x30000000) >> 9) | ((t1 & 0xff0000) >> 5)) | \ puckU32ToThree_1(temp1[1]); \
(((t0 & 0x80000000) >> 21) | ((t0 & 0xc000000) >> 18) | ((t0 & 0xff00) >> 8))); \ puckU32ToThree_1(temp1[2]); \
out[2] = \ out[0] = (temp1[0] << 10) | temp0[2]; \
(((t1 & 0x80000000) >> 10) | ((t1 & 0xc000000) >> 7) | ((t1 & 0xff00) << 3)) | \ out[1] = (temp1[2] << 11) | temp0[1]; \
(((t0 & 0x40000000) >> 20) | ((t0 & 0x03000000) >> 16) | (t0 & 0x000000ff)); \ out[2] = (temp1[1] << 11) | temp0[0]; \
} }
#define U96_BIT_LOTR32_8(t0,t1,t2,t3,t4,t5){\ #define U96_BIT_LOTR32_8(t0,t1,t2,t3,t4,t5){\
t3= LOTR32(t2, 2);\ t3= LOTR32(t2, 2);\
......
...@@ -31,6 +31,10 @@ int crypto_hash(unsigned char *out, const unsigned char *in, ...@@ -31,6 +31,10 @@ int crypto_hash(unsigned char *out, const unsigned char *in,
u32 s_temp[12] = { 0 }; u32 s_temp[12] = { 0 };
u8 i; u8 i;
u32 dataFormat[3] = { 0 }; u32 dataFormat[3] = { 0 };
u32 t[3] = { 0 };
u32 temp0[3] = { 0 };
u32 temp1[3] = { 0 };
u32 temp2[3] = { 0 };
// initialization // initialization
u32 s[12] = { 0 }; u32 s[12] = { 0 };
u8 tempData[12]; u8 tempData[12];
......
#include"auxFormat.h" #include"auxFormat.h"
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
u32 t[3] = { 0 }; \ u32 temp0[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ u32 temp1[3] = { 0 };
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ u32 temp2[3] = { 0 };
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ u32 t[3] = { 0 };
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ temp0[0] = in[2] & 0x7ff;
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ temp0[1] = in[1] & 0x7ff;
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ temp0[2] = in[0] & 0x3ff;
((t0 & 0x3fc00) >> 10); \ temp1[0] = (in[0]>>10) & 0x7ff;
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \ temp1[1] = (in[2] >>11 ) & 0x7ff;
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \ temp1[2] = (in[1] >> 11) & 0x3ff;
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \ temp2[0] = in[1] >> 21;
unpuckU32ToThree_3(t[0]); \ temp2[1] = in[0] >> 21;
unpuckU32ToThree_3(t[1]); \ temp2[2] = in[2] >> 22;
unpuckU32ToThree_3(t[2]); \ unpuckU32ToThree_1(temp0[0]);
memcpy(out, t, 12 * sizeof(unsigned char)); \ unpuckU32ToThree_1(temp0[1]);
unpuckU32ToThree_1(temp0[2]);
t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
unpuckU32ToThree_1(temp1[0]);
unpuckU32ToThree_1(temp1[1]);
unpuckU32ToThree_1(temp1[2]);
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
unpuckU32ToThree_1(temp2[0]);
unpuckU32ToThree_1(temp2[1]);
unpuckU32ToThree_1(temp2[2]);
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
memcpy(out, t, 12 * sizeof(unsigned char));
} }
void packU48FormatToThreePacket(u32 * out, u8 * in) { void packU48FormatToThreePacket(u32 * out, u8 * in) {
u32 t0 = U32BIG(*(u32*)(in)), t1 = (u32)U16BIG(*(u16*)(in + 4)); \ u32 t1 = (u32)U16BIG(*(u16*)(in + 4));
puckU32ToThree_3(t0); \ u32 temp0[3] = { 0 };
puckU32ToThree_3(t1); \ u32 temp1[3] = { 0 };
out[0] = \ temp0[0] = U32BIG(((u32*)in)[0]); temp0[1] = U32BIG(((u32*)in)[0]) >> 1; temp0[2] = U32BIG(((u32*)in)[0]) >> 2;
(((t1 & 0x40000000) >> 10) | ((t1 & 0x03000000) >> 6) | ((t1 & 0x000000ff) << 10)) | \ puckU32ToThree_1(temp0[0]);
((((t0 & 0x30000000) >> 20) | ((t0 & 0xff0000) >> 16))); \ puckU32ToThree_1(temp0[1]);
out[1] = \ puckU32ToThree_1(temp0[2]);
((((t1 & 0x30000000) >> 9) | ((t1 & 0xff0000) >> 5)) | \ temp1[0] = t1; temp1[1] = t1 >> 1; temp1[2] = t1 >> 2;
(((t0 & 0x80000000) >> 21) | ((t0 & 0xc000000) >> 18) | ((t0 & 0xff00) >> 8))); \ puckU32ToThree_1(temp1[0]);
out[2] = \ puckU32ToThree_1(temp1[1]);
(((t1 & 0x80000000) >> 10) | ((t1 & 0xc000000) >> 7) | ((t1 & 0xff00) << 3)) | \ puckU32ToThree_1(temp1[2]);
(((t0 & 0x40000000) >> 20) | ((t0 & 0x03000000) >> 16) | (t0 & 0x000000ff)); \ out[0] = (temp1[0] << 10) | temp0[2];
out[1] = (temp1[2] << 11) | temp0[1];
out[2] = (temp1[1] << 11) | temp0[0];
} }
unsigned char constant7Format[104] = { unsigned char constant7Format[104] = {
......
...@@ -39,21 +39,17 @@ t4 = LOTR32(t2, 18);\ ...@@ -39,21 +39,17 @@ t4 = LOTR32(t2, 18);\
t5 = LOTR32(t0, 19); \ t5 = LOTR32(t0, 19); \
} }
unsigned char constant7Format[104]; unsigned char constant7Format[104];
#define puckU32ToThree_3(lo){\ #define puckU32ToThree_1(x){\
u32 r0;\ x &= 0x49249249;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
#include"auxFormat.h" #include"auxFormat.h"
#define puckU32ToThree_3(lo){\ void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
u32 r0;\ u32 temp0[3] = { 0 };
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ u32 temp1[3] = { 0 };
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ u32 temp2[3] = { 0 };
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ u32 t[3] = { 0 };
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ temp0[0] = in[2] & 0x7ff;
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ temp0[1] = in[1] & 0x7ff;
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ temp0[2] = in[0] & 0x3ff;
} temp1[0] = (in[0]>>10) & 0x7ff;
#define unpuckU32ToThree_3(lo){\ temp1[1] = (in[2] >>11 ) & 0x7ff;
u32 r0;\ temp1[2] = (in[1] >> 11) & 0x3ff;
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ temp2[0] = in[1] >> 21;
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ temp2[1] = in[0] >> 21;
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ temp2[2] = in[2] >> 22;
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ unpuckU32ToThree_1(temp0[0]);
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ unpuckU32ToThree_1(temp0[1]);
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ unpuckU32ToThree_1(temp0[2]);
} t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { unpuckU32ToThree_1(temp1[0]);
u32 t[3] = { 0 }; \ unpuckU32ToThree_1(temp1[1]);
u32 t0 = in[0], t1 = in[1], t2 = in[2]; \ unpuckU32ToThree_1(temp1[2]);
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | \ t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
((t0 & 0x300) << 20) | ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | \ unpuckU32ToThree_1(temp2[0]);
((t0 & 0xff) << 16) | ((t1 & 0xff) << 8) | (t2 & 0xff); \ unpuckU32ToThree_1(temp2[1]);
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) | ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) | \ unpuckU32ToThree_1(temp2[2]);
((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) | ((t2 & 0x7f800) >> 3) | \ t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
((t0 & 0x3fc00) >> 10); \ memcpy(out, t, 12 * sizeof(unsigned char));
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) | ((t2 & 0xc0000000) >> 2) | \
((t0 & 0x60000000) >> 3) | ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) | \
((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); \
unpuckU32ToThree_3(t[0]); \
unpuckU32ToThree_3(t[1]); \
unpuckU32ToThree_3(t[2]); \
memcpy(out, t, 12 * sizeof(unsigned char)); \
} }
void packU48FormatToThreePacket(u32 * out, u8 * in) { void packU48FormatToThreePacket(u32 * out, u8 * in) {
u32 t0 = U32BIG(*(u32*)(in)), t1 = (u32)U16BIG(*(u16*)(in + 4)); \ u32 t1 = (u32)U16BIG(*(u16*)(in + 4));
puckU32ToThree_3(t0); \ u32 temp0[3] = { 0 };
puckU32ToThree_3(t1); \ u32 temp1[3] = { 0 };
out[0] = \ temp0[0] = U32BIG(((u32*)in)[0]); temp0[1] = U32BIG(((u32*)in)[0]) >> 1; temp0[2] = U32BIG(((u32*)in)[0]) >> 2;
(((t1 & 0x40000000) >> 10) | ((t1 & 0x03000000) >> 6) | ((t1 & 0x000000ff) << 10)) | \ puckU32ToThree_1(temp0[0]);
((((t0 & 0x30000000) >> 20) | ((t0 & 0xff0000) >> 16))); \ puckU32ToThree_1(temp0[1]);
out[1] = \ puckU32ToThree_1(temp0[2]);
((((t1 & 0x30000000) >> 9) | ((t1 & 0xff0000) >> 5)) | \ temp1[0] = t1; temp1[1] = t1 >> 1; temp1[2] = t1 >> 2;
(((t0 & 0x80000000) >> 21) | ((t0 & 0xc000000) >> 18) | ((t0 & 0xff00) >> 8))); \ puckU32ToThree_1(temp1[0]);
out[2] = \ puckU32ToThree_1(temp1[1]);
(((t1 & 0x80000000) >> 10) | ((t1 & 0xc000000) >> 7) | ((t1 & 0xff00) << 3)) | \ puckU32ToThree_1(temp1[2]);
(((t0 & 0x40000000) >> 20) | ((t0 & 0x03000000) >> 16) | (t0 & 0x000000ff)); \ out[0] = (temp1[0] << 10) | temp0[2];
out[1] = (temp1[2] << 11) | temp0[1];
out[2] = (temp1[1] << 11) | temp0[0];
} }
unsigned char constant7Format[104] = { unsigned char constant7Format[104] = {
/*constant7Format[127]: 12*9=108*/ /*constant7Format[127]: 12*9=108*/
0x01,0x08,0x40,0x02,0x10,0x80,0x05,0x09,0x48,0x42,0x12,0x90, 0x01,0x08,0x40,0x02,0x10,0x80,0x05,0x09,0x48,0x42,0x12,0x90,
......
#include"auxFormat.h" #include"auxFormat.h"
void unpackU96FormatToThreePacket(u8 *out, u32 *in) { void unpackU96FormatToThreePacket(u8 * out, u32 * in) {
u32 temp0[3] = { 0 };
u32 temp1[3] = { 0 };
u32 temp2[3] = { 0 };
u32 t[3] = { 0 }; u32 t[3] = { 0 };
u32 t0 = in[0], t1 = in[1], t2 = in[2]; temp0[0] = in[2] & 0x7ff;
t[0] = ((t1 & 0x400) << 21) | ((t2 & 0x400) << 20) | ((t0 & 0x300) << 20) temp0[1] = in[1] & 0x7ff;
| ((t1 & 0x300) << 18) | ((t2 & 0x300) << 16) | ((t0 & 0xff) << 16) temp0[2] = in[0] & 0x3ff;
| ((t1 & 0xff) << 8) | (t2 & 0xff); temp1[0] = (in[0]>>10) & 0x7ff;
t[1] = ((t2 & 0x200000) << 10) | ((t0 & 0x100000) << 10) temp1[1] = (in[2] >>11 ) & 0x7ff;
| ((t1 & 0x180000) << 9) | ((t2 & 0x180000) << 7) temp1[2] = (in[1] >> 11) & 0x3ff;
| ((t0 & 0xc0000) << 6) | ((t1 & 0x7f800) << 5) temp2[0] = in[1] >> 21;
| ((t2 & 0x7f800) >> 3) | ((t0 & 0x3fc00) >> 10); temp2[1] = in[0] >> 21;
t[2] = ((t0 & 0x80000000)) | ((t1 & 0x80000000) >> 1) temp2[2] = in[2] >> 22;
| ((t2 & 0xc0000000) >> 2) | ((t0 & 0x60000000) >> 3) unpuckU32ToThree_1(temp0[0]);
| ((t1 & 0x60000000) >> 5) | ((t2 & 0x3fc00000) >> 6) unpuckU32ToThree_1(temp0[1]);
| ((t0 & 0x1fe00000) >> 13) | ((t1 & 0x1fe00000) >> 21); unpuckU32ToThree_1(temp0[2]);
unpuckU32ToThree_3(t[0]); t[0] = temp0[0] | temp0[1] << 1 | temp0[2] << 2;
unpuckU32ToThree_3(t[1]); unpuckU32ToThree_1(temp1[0]);
unpuckU32ToThree_3(t[2]); unpuckU32ToThree_1(temp1[1]);
unpuckU32ToThree_1(temp1[2]);
t[1] = temp1[0] | temp1[1] << 1 | temp1[2] << 2;
unpuckU32ToThree_1(temp2[0]);
unpuckU32ToThree_1(temp2[1]);
unpuckU32ToThree_1(temp2[2]);
t[2] = temp2[0] | temp2[1] << 1 | temp2[2] << 2;
memcpy(out, t, 12 * sizeof(unsigned char)); memcpy(out, t, 12 * sizeof(unsigned char));
} }
void packU48FormatToThreePacket(u32 *out, u8 *in) {
u32 t0 = U32BIG(*(u32* )(in)), t1 = (u32) U16BIG(*(u16* )(in + 4));
puckU32ToThree_3(t0);
puckU32ToThree_3(t1);
out[0] = (((t1 & 0x40000000) >> 10) | ((t1 & 0x03000000) >> 6)
| ((t1 & 0x000000ff) << 10))
| ((((t0 & 0x30000000) >> 20) | ((t0 & 0xff0000) >> 16)));
out[1] = ((((t1 & 0x30000000) >> 9) | ((t1 & 0xff0000) >> 5))
| (((t0 & 0x80000000) >> 21) | ((t0 & 0xc000000) >> 18)
| ((t0 & 0xff00) >> 8)));
out[2] = (((t1 & 0x80000000) >> 10) | ((t1 & 0xc000000) >> 7)
| ((t1 & 0xff00) << 3))
| (((t0 & 0x40000000) >> 20) | ((t0 & 0x03000000) >> 16)
| (t0 & 0x000000ff));
}
void packU48FormatToThreePacket(u32 * out, u8 * in) {
u32 t1 = (u32)U16BIG(*(u16*)(in + 4));
u32 temp0[3] = { 0 };
u32 temp1[3] = { 0 };
temp0[0] = U32BIG(((u32*)in)[0]); temp0[1] = U32BIG(((u32*)in)[0]) >> 1; temp0[2] = U32BIG(((u32*)in)[0]) >> 2;
puckU32ToThree_1(temp0[0]);
puckU32ToThree_1(temp0[1]);
puckU32ToThree_1(temp0[2]);
temp1[0] = t1; temp1[1] = t1 >> 1; temp1[2] = t1 >> 2;
puckU32ToThree_1(temp1[0]);
puckU32ToThree_1(temp1[1]);
puckU32ToThree_1(temp1[2]);
out[0] = (temp1[0] << 10) | temp0[2];
out[1] = (temp1[2] << 11) | temp0[1];
out[2] = (temp1[1] << 11) | temp0[0];
}
unsigned char constant7Format[104] = { unsigned char constant7Format[104] = {
/*constant7Format[127]: 12*9=108*/ /*constant7Format[127]: 12*9=108*/
0x01, 0x08, 0x40, 0x02, 0x10, 0x80, 0x05, 0x09, 0x48, 0x42, 0x12, 0x90, 0x85, 0x01, 0x08, 0x40, 0x02, 0x10, 0x80, 0x05, 0x09, 0x48, 0x42, 0x12, 0x90, 0x85,
......
...@@ -12,24 +12,19 @@ typedef unsigned short u16; ...@@ -12,24 +12,19 @@ typedef unsigned short u16;
typedef unsigned int u32; typedef unsigned int u32;
typedef unsigned long long u64; typedef unsigned long long u64;
#define puckU32ToThree_1(x){\
#define puckU32ToThree_3(lo){\ x &= 0x49249249;\
u32 r0;\ x = (x | (x >> 2)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\ x = (x | (x >>4)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\ x = (x | (x >> 8)) & 0xff0000ff;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x >> 16)) & 0xfff;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\
} }
#define unpuckU32ToThree_3(lo){\ #define unpuckU32ToThree_1(x){\
u32 r0;\ x &= 0xfff;\
r0 = (lo ^ (lo << 12)) & 0x000f0000, lo ^= r0 ^ (r0 >> 12);\ x = (x | (x << 16)) & 0xff0000ff;\
r0 = (lo ^ (lo << 4)) & 0x000f0f00, lo ^= r0 ^ (r0 >> 4);\ x = (x | (x << 8)) & 0x0f00f00f;\
r0 = (lo ^ (lo << 6)) & 0x00300300, lo ^= r0 ^ (r0 >> 6);\ x = (x | (x << 4)) & 0xc30c30c3;\
r0 = (lo ^ (lo << 2)) & 0x00330330, lo ^= r0 ^ (r0 >> 2);\ x = (x | (x << 2)) & 0x49249249;\
r0 = (lo ^ (lo << 3)) & 0x10410410, lo ^= r0 ^ (r0 >> 3);\
r0 = (lo ^ (lo << 1)) & 0x14514514, lo ^= r0 ^ (r0 >> 1);\
} }
#define ARC(rci) \ #define ARC(rci) \
do { \ do { \
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
int crypto_hash(unsigned char *out, const unsigned char *in, int crypto_hash(unsigned char *out, const unsigned char *in,
unsigned long long inlen) { unsigned long long inlen) {
u32 dataFormat[3] = { 0 }, t1, t2; u32 dataFormat[3] = { 0 }, t2;
// initialization // initialization
u32 s[12] = { 0 }; u32 s[12] = { 0 };
u8 tempData[12]; u8 tempData[12];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment