auxFormat.h 4.98 KB
Newer Older
KNOT team committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
//#include<malloc.h>
#include"crypto_aead.h"
#include"api.h"

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#define U32BIG(x) (x)

typedef unsigned char u8;
typedef unsigned int u32;
typedef unsigned long long u64;

#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0])))
#define LOTR32(x,n) (((x)<<(n))|((x)>>(32-(n))))

//////////////////puck begin
//&:5   <<:4    |:4
#define puckU32ToThree(x){\
x &= 0x92492492;\
x = (x | (x << 2)) & 0xc30c30c3;\
x = (x | (x << 4)) & 0xf00f00f0;\
x = (x | (x << 8)) & 0xff0000ff;\
x = (x | (x << 16)) & 0xfff00000;\
}
#define unpuckU32ToThree(x){\
x &= 0xfff00000;\
x = (x | (x >> 16)) & 0xff0000ff;\
x = (x | (x >> 8)) & 0xf00f00f0;\
x = (x | (x >> 4)) & 0xc30c30c3;\
x = (x | (x >> 2)) & 0x92492492;\
}
//ʹ	u8  t2_64, t2_65;u32 temp2[3];t2;
#define packU32FormatToThreePacket( out,  in) {\
t2 = U32BIG(((u32*)in)[0]);	\
t2_64 = (in[3] & 0x80) >> 7, t2_65 = (in[3] & 0x40) >> 6;	\
t2 = t2 << 2;	\
temp2[0] = t2; temp2[1] = t2 << 1; temp2[2] = t2 << 2;	\
puckU32ToThree(temp2[0]);	\
puckU32ToThree(temp2[1]);	\
puckU32ToThree(temp2[2]);	\
out[0] = (temp2[0] >> 22);	\
out[1] = (((u32)t2_64) << 10) | (temp2[1] >> 22);	\
out[2] =(((u32)t2_65) << 10) | (temp2[2] >> 22);	\
}
//t9  t1  t2  t1_32  t2_64  t2_65 temp0[3] temp1[3] temp2[3]
#define packU96FormatToThreePacket(out, in) {\
t9 = U32BIG(((u32*)in)[2]);	\
t1 = U32BIG(((u32*)in)[1]);	\
t2 = U32BIG(((u32*)in)[0]);	\
t1_32 = (in[7] & 0x80) >> 7, t2_64 = (in[3] & 0x80) >> 7, t2_65 = (in[3] & 0x40) >> 6;	\
t1 = t1 << 1;	\
t2 = t2 << 2;	\
temp0[0] = t9; temp0[1] = t9 << 1; temp0[2] = t9 << 2;	\
puckU32ToThree(temp0[0]);	\
puckU32ToThree(temp0[1]);	\
puckU32ToThree(temp0[2]);	\
temp1[0] = t1; temp1[1] = t1 << 1; temp1[2] = t1 << 2;	\
puckU32ToThree(temp1[0]);	\
puckU32ToThree(temp1[1]);	\
puckU32ToThree(temp1[2]);	\
temp2[0] = t2; temp2[1] = t2 << 1; temp2[2] = t2 << 2;	\
puckU32ToThree(temp2[0]);	\
puckU32ToThree(temp2[1]);	\
puckU32ToThree(temp2[2]);	\
out[0] = (temp0[0]) | (temp1[0] >> 11) | (temp2[0] >> 22);	\
out[1] = (temp0[1]) | (temp1[1] >> 11) | (((u32)t2_64) << 10) | (temp2[1] >> 22);	\
out[2] = (temp0[2]) | (((u32)t1_32) << 21) | (temp1[2] >> 11) | (((u32)t2_65) << 10) | (temp2[2] >> 22);	\
}
	//ʹ	u8  t2_64, t2_65;u32 temp2[3];t2;
#define unpackU32FormatToThreePacket(out, in) {\
temp2[0] = (in[0] & 0x000003ff) << 22;	\
t2_64 = ((in[1] & 0x00000400) << 21);	\
temp2[1] = (in[1] & 0x000003ff) << 22;	\
t2_65 = ((in[2] & 0x00000400) << 20);	\
temp2[2] = (in[2] & 0x000003ff) << 22;	\
unpuckU32ToThree(temp2[0]);	\
unpuckU32ToThree(temp2[1]);	\
unpuckU32ToThree(temp2[2]);	\
t2 = t2_65 | t2_64 | ((temp2[0] | temp2[1] >> 1 | temp2[2] >> 2) >> 2);	\
*(u32*)(out) = U32BIG(t2);	\
}
//u32 temp0[3] = { 0 };u32 temp1[3] = { 0 };u32 temp2[3] = { 0 };u32 t1_32, t2_64, t2_65;t9,t1,t2,
#define unpackU96FormatToThreePacket( out, in) {\
temp0[0] = in[0] & 0xffe00000;	\
temp1[0] = (in[0] & 0x001ffc00) << 11;	\
temp2[0] = (in[0] & 0x000003ff) << 22;	\
temp0[1] = in[1] & 0xffe00000;	\
temp1[1] = (in[1] & 0x001ff800) << 11;	\
t2_64 = ((in[1] & 0x00000400) << 21);	\
temp2[1] = (in[1] & 0x000003ff) << 22;	\
temp0[2] = in[2] & 0xffc00000;	\
t1_32 = ((in[2] & 0x00200000) << 10);	\
temp1[2] = (in[2] & 0x001ff800) << 11;	\
t2_65 = ((in[2] & 0x00000400) << 20);	\
temp2[2] = (in[2] & 0x000003ff) << 22;	\
unpuckU32ToThree(temp0[0]);	\
unpuckU32ToThree(temp0[1]);	\
unpuckU32ToThree(temp0[2]);	\
t9 = temp0[0] | temp0[1] >> 1 | temp0[2] >> 2;	\
unpuckU32ToThree(temp1[0]);	\
unpuckU32ToThree(temp1[1]);	\
unpuckU32ToThree(temp1[2]);	\
t1 = t1_32 | ((temp1[0] | temp1[1] >> 1 | temp1[2] >> 2) >> 1);	\
unpuckU32ToThree(temp2[0]);	\
unpuckU32ToThree(temp2[1]);	\
unpuckU32ToThree(temp2[2]);	\
t2 = t2_65 | t2_64 | ((temp2[0] | temp2[1] >> 1 | temp2[2] >> 2) >> 2);	\
*(u32*)(out) = U32BIG(t2);	\
*(u32*)(out + 4) = U32BIG(t1);	\
*(u32*)(out + 8) = U32BIG(t9);	\
}

#define ARR_SIZE(a) (sizeof((a))/sizeof((a[0])))
#define sbox(a, b, c, d, e, f, g, h)                                                                            \
{                                                                                                                             \
	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; e = t8 ^ t9; t11 = g & t8; f = t3 ^ t11; \
}


#define U96_BIT_LOTR32_1(t0,t1,t2,t3,t4,t5){\
t3= t1;\
t4 = t2;\
t5 = LOTR32(t0, 1); \
}
#define U96_BIT_LOTR32_8(t0,t1,t2,t3,t4,t5){\
t3= LOTR32(t2, 2);\
t4 =LOTR32(t0, 3);\
t5 = LOTR32(t1, 3); \
}
//55=3*18+1
#define U96_BIT_LOTR32_55(t0,t1,t2,t3,t4,t5){\
t3= LOTR32(t1, 18); \
t4 = LOTR32(t2, 18);\
t5 = LOTR32(t0, 19); \
}
/*
s0  s1  s2
s3  s4  s5
s6  s7  s8
s9 s10 s11
*/

void printU32State(char name[], u32* var, long len);
void printfU96Format(char name[], u32 * s);
//////////////////puck end
void printU8(char name[], u8 var[], int len, int offset);
void printfU96Format(char name[], u32 * s);