00001
00033
00034 #define SK_STEP 0x02020202u
00035 #define SK_BUMP 0x01010101u
00036 #define SK_ROTL 9
00037
00038
00039
00040
00041 #define RS_GF_FDBK 0x14D
00042 #define RS_rem(x) \
00043 { BYTE b = (BYTE) (x >> 24); \
00044 DWORD g2 = ((b << 1) ^ ((b & 0x80) ? RS_GF_FDBK : 0 )) & 0xFF; \
00045 DWORD g3 = ((b >> 1) & 0x7F) ^ ((b & 1) ? RS_GF_FDBK >> 1 : 0 ) ^ g2 ; \
00046 x = (x << 8) ^ (g3 << 24) ^ (g2 << 16) ^ (g3 << 8) ^ b; \
00047 }
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 #define MDS_GF_FDBK 0x169
00074 #define LFSR1(x) ( ((x) >> 1) ^ (((x) & 0x01) ? MDS_GF_FDBK/2 : 0))
00075 #define LFSR2(x) ( ((x) >> 2) ^ (((x) & 0x02) ? MDS_GF_FDBK/2 : 0) \
00076 ^ (((x) & 0x01) ? MDS_GF_FDBK/4 : 0))
00077
00078 #define Mx_1(x) ((DWORD) (x))
00079 #define Mx_X(x) ((DWORD) ((x) ^ LFSR2(x)))
00080 #define Mx_Y(x) ((DWORD) ((x) ^ LFSR1(x) ^ LFSR2(x)))
00081
00082 #define M00 Mul_1
00083 #define M01 Mul_Y
00084 #define M02 Mul_X
00085 #define M03 Mul_X
00086
00087 #define M10 Mul_X
00088 #define M11 Mul_Y
00089 #define M12 Mul_Y
00090 #define M13 Mul_1
00091
00092 #define M20 Mul_Y
00093 #define M21 Mul_X
00094 #define M22 Mul_1
00095 #define M23 Mul_Y
00096
00097 #define M30 Mul_Y
00098 #define M31 Mul_1
00099 #define M32 Mul_Y
00100 #define M33 Mul_X
00101
00102 #define Mul_1 Mx_1
00103 #define Mul_X Mx_X
00104 #define Mul_Y Mx_Y
00105
00112 #define P_00 1
00113 #define P_01 0
00114 #define P_02 0
00115 #define P_03 (P_01^1)
00116 #define P_04 1
00117
00118 #define P_10 0
00119 #define P_11 0
00120 #define P_12 1
00121 #define P_13 (P_11^1)
00122 #define P_14 0
00123
00124 #define P_20 1
00125 #define P_21 1
00126 #define P_22 0
00127 #define P_23 (P_21^1)
00128 #define P_24 0
00129
00130 #define P_30 0
00131 #define P_31 1
00132 #define P_32 1
00133 #define P_33 (P_31^1)
00134 #define P_34 1
00135
00136 #define p8(N) P8x8[P_##N]
00137
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150 CONST BYTE P8x8[2][256]=
00151 {
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161 {
00162 0xA9, 0x67, 0xB3, 0xE8, 0x04, 0xFD, 0xA3, 0x76,
00163 0x9A, 0x92, 0x80, 0x78, 0xE4, 0xDD, 0xD1, 0x38,
00164 0x0D, 0xC6, 0x35, 0x98, 0x18, 0xF7, 0xEC, 0x6C,
00165 0x43, 0x75, 0x37, 0x26, 0xFA, 0x13, 0x94, 0x48,
00166 0xF2, 0xD0, 0x8B, 0x30, 0x84, 0x54, 0xDF, 0x23,
00167 0x19, 0x5B, 0x3D, 0x59, 0xF3, 0xAE, 0xA2, 0x82,
00168 0x63, 0x01, 0x83, 0x2E, 0xD9, 0x51, 0x9B, 0x7C,
00169 0xA6, 0xEB, 0xA5, 0xBE, 0x16, 0x0C, 0xE3, 0x61,
00170 0xC0, 0x8C, 0x3A, 0xF5, 0x73, 0x2C, 0x25, 0x0B,
00171 0xBB, 0x4E, 0x89, 0x6B, 0x53, 0x6A, 0xB4, 0xF1,
00172 0xE1, 0xE6, 0xBD, 0x45, 0xE2, 0xF4, 0xB6, 0x66,
00173 0xCC, 0x95, 0x03, 0x56, 0xD4, 0x1C, 0x1E, 0xD7,
00174 0xFB, 0xC3, 0x8E, 0xB5, 0xE9, 0xCF, 0xBF, 0xBA,
00175 0xEA, 0x77, 0x39, 0xAF, 0x33, 0xC9, 0x62, 0x71,
00176 0x81, 0x79, 0x09, 0xAD, 0x24, 0xCD, 0xF9, 0xD8,
00177 0xE5, 0xC5, 0xB9, 0x4D, 0x44, 0x08, 0x86, 0xE7,
00178 0xA1, 0x1D, 0xAA, 0xED, 0x06, 0x70, 0xB2, 0xD2,
00179 0x41, 0x7B, 0xA0, 0x11, 0x31, 0xC2, 0x27, 0x90,
00180 0x20, 0xF6, 0x60, 0xFF, 0x96, 0x5C, 0xB1, 0xAB,
00181 0x9E, 0x9C, 0x52, 0x1B, 0x5F, 0x93, 0x0A, 0xEF,
00182 0x91, 0x85, 0x49, 0xEE, 0x2D, 0x4F, 0x8F, 0x3B,
00183 0x47, 0x87, 0x6D, 0x46, 0xD6, 0x3E, 0x69, 0x64,
00184 0x2A, 0xCE, 0xCB, 0x2F, 0xFC, 0x97, 0x05, 0x7A,
00185 0xAC, 0x7F, 0xD5, 0x1A, 0x4B, 0x0E, 0xA7, 0x5A,
00186 0x28, 0x14, 0x3F, 0x29, 0x88, 0x3C, 0x4C, 0x02,
00187 0xB8, 0xDA, 0xB0, 0x17, 0x55, 0x1F, 0x8A, 0x7D,
00188 0x57, 0xC7, 0x8D, 0x74, 0xB7, 0xC4, 0x9F, 0x72,
00189 0x7E, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34,
00190 0x6E, 0x50, 0xDE, 0x68, 0x65, 0xBC, 0xDB, 0xF8,
00191 0xC8, 0xA8, 0x2B, 0x40, 0xDC, 0xFE, 0x32, 0xA4,
00192 0xCA, 0x10, 0x21, 0xF0, 0xD3, 0x5D, 0x0F, 0x00,
00193 0x6F, 0x9D, 0x36, 0x42, 0x4A, 0x5E, 0xC1, 0xE0
00194 },
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204 {
00205 0x75, 0xF3, 0xC6, 0xF4, 0xDB, 0x7B, 0xFB, 0xC8,
00206 0x4A, 0xD3, 0xE6, 0x6B, 0x45, 0x7D, 0xE8, 0x4B,
00207 0xD6, 0x32, 0xD8, 0xFD, 0x37, 0x71, 0xF1, 0xE1,
00208 0x30, 0x0F, 0xF8, 0x1B, 0x87, 0xFA, 0x06, 0x3F,
00209 0x5E, 0xBA, 0xAE, 0x5B, 0x8A, 0x00, 0xBC, 0x9D,
00210 0x6D, 0xC1, 0xB1, 0x0E, 0x80, 0x5D, 0xD2, 0xD5,
00211 0xA0, 0x84, 0x07, 0x14, 0xB5, 0x90, 0x2C, 0xA3,
00212 0xB2, 0x73, 0x4C, 0x54, 0x92, 0x74, 0x36, 0x51,
00213 0x38, 0xB0, 0xBD, 0x5A, 0xFC, 0x60, 0x62, 0x96,
00214 0x6C, 0x42, 0xF7, 0x10, 0x7C, 0x28, 0x27, 0x8C,
00215 0x13, 0x95, 0x9C, 0xC7, 0x24, 0x46, 0x3B, 0x70,
00216 0xCA, 0xE3, 0x85, 0xCB, 0x11, 0xD0, 0x93, 0xB8,
00217 0xA6, 0x83, 0x20, 0xFF, 0x9F, 0x77, 0xC3, 0xCC,
00218 0x03, 0x6F, 0x08, 0xBF, 0x40, 0xE7, 0x2B, 0xE2,
00219 0x79, 0x0C, 0xAA, 0x82, 0x41, 0x3A, 0xEA, 0xB9,
00220 0xE4, 0x9A, 0xA4, 0x97, 0x7E, 0xDA, 0x7A, 0x17,
00221 0x66, 0x94, 0xA1, 0x1D, 0x3D, 0xF0, 0xDE, 0xB3,
00222 0x0B, 0x72, 0xA7, 0x1C, 0xEF, 0xD1, 0x53, 0x3E,
00223 0x8F, 0x33, 0x26, 0x5F, 0xEC, 0x76, 0x2A, 0x49,
00224 0x81, 0x88, 0xEE, 0x21, 0xC4, 0x1A, 0xEB, 0xD9,
00225 0xC5, 0x39, 0x99, 0xCD, 0xAD, 0x31, 0x8B, 0x01,
00226 0x18, 0x23, 0xDD, 0x1F, 0x4E, 0x2D, 0xF9, 0x48,
00227 0x4F, 0xF2, 0x65, 0x8E, 0x78, 0x5C, 0x58, 0x19,
00228 0x8D, 0xE5, 0x98, 0x57, 0x67, 0x7F, 0x05, 0x64,
00229 0xAF, 0x63, 0xB6, 0xFE, 0xF5, 0xB7, 0x3C, 0xA5,
00230 0xCE, 0xE9, 0x68, 0x44, 0xE0, 0x4D, 0x43, 0x69,
00231 0x29, 0x2E, 0xAC, 0x15, 0x59, 0xA8, 0x0A, 0x9E,
00232 0x6E, 0x47, 0xDF, 0x34, 0x35, 0x6A, 0xCF, 0xDC,
00233 0x22, 0xC9, 0xC0, 0x9B, 0x89, 0xD4, 0xED, 0xAB,
00234 0x12, 0xA2, 0x0D, 0x52, 0xBB, 0x02, 0x2F, 0xA9,
00235 0xD7, 0x61, 0x1E, 0xB4, 0x50, 0x04, 0xF6, 0xC2,
00236 0x16, 0x25, 0x86, 0x56, 0x55, 0x09, 0xBE, 0x91
00237 }
00238 };