thig_table.h

Go to the documentation of this file.
00001 
00033 /* for computing subkeys */
00034 #define SK_STEP         0x02020202u
00035 #define SK_BUMP         0x01010101u
00036 #define SK_ROTL         9
00037 
00038 /* Reed-Solomon code parameters: (12,8) reversible code
00039     g(x) = x**4 + (a + 1/a) x**3 + a x**2 + (a + 1/a) x + 1
00040    where a = primitive root of field generator 0x14D */
00041 #define RS_GF_FDBK      0x14D       /* field generator */
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 /*  Macros for the MDS matrix
00050 *   The MDS matrix is (using primitive polynomial 169):
00051 *      01  EF  5B  5B
00052 *      5B  EF  EF  01
00053 *      EF  5B  01  EF
00054 *      EF  01  EF  5B
00055 *----------------------------------------------------------------
00056 * More statistical properties of this matrix (from MDS.EXE output):
00057 *
00058 * Min Hamming weight (one byte difference) =  8. Max=26.  Total =  1020.
00059 * Prob[8]:      7    23    42    20    52    95    88    94   121   128    91
00060 *             102    76    41    24     8     4     1     3     0     0     0
00061 * Runs[8]:      2     4     5     6     7     8     9    11
00062 * MSBs[8]:      1     4    15     8    18    38    40    43
00063 * HW= 8: 05040705 0A080E0A 14101C14 28203828 50407050 01499101 A080E0A0 
00064 * HW= 9: 04050707 080A0E0E 10141C1C 20283838 40507070 80A0E0E0 C6432020 07070504 
00065 *        0E0E0A08 1C1C1410 38382820 70705040 E0E0A080 202043C6 05070407 0A0E080E 
00066 *        141C101C 28382038 50704070 A0E080E0 4320C620 02924B02 089A4508 
00067 * Min Hamming weight (two byte difference) =  3. Max=28.  Total = 390150.
00068 * Prob[3]:      7    18    55   149   270   914  2185  5761 11363 20719 32079
00069 *           43492 51612 53851 52098 42015 31117 20854 11538  6223  2492  1033
00070 * MDS OK, ROR:   6+  7+  8+  9+ 10+ 11+ 12+ 13+ 14+ 15+ 16+
00071 *               17+ 18+ 19+ 20+ 21+ 22+ 23+ 24+ 25+ 26+
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))      /* force result to dword so << will work */
00079 #define Mx_X(x) ((DWORD) ((x) ^            LFSR2(x)))   /* 5B */
00080 #define Mx_Y(x) ((DWORD) ((x) ^ LFSR1(x) ^ LFSR2(x)))   /* EF */
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]         /* some syntax shorthand */
00137 
00140 /*
00141  * **********************************************************************
00142 *  07:07:14  05/30/98  [4x4]  TestCnt=256. keySize=128. CRC=4BD14D9E.
00143 * maxKeyed:  dpMax = 18. lpMax =100. fixPt =  8. skXor =  0. skDup =  6. 
00144 * log2(dpMax[ 6..18])=   --- 15.42  1.33  0.89  4.05  7.98 12.05
00145 * log2(lpMax[ 7..12])=  9.32  1.01  1.16  4.23  8.02 12.45
00146 * log2(fixPt[ 0.. 8])=  1.44  1.44  2.44  4.06  6.01  8.21 11.07 14.09 17.00
00147 * log2(skXor[ 0.. 0])
00148 * log2(skDup[ 0.. 6])=   ---  2.37  0.44  3.94  8.36 13.04 17.99
00149 ***********************************************************************/
00150 CONST BYTE P8x8[2][256]=
00151     {
00152 /*  p0:   */
00153 /*  dpMax      = 10.  lpMax      = 64.  cycleCnt=   1  1  1  0.         */
00154 /* 817D6F320B59ECA4.ECB81235F4A6709D.BA5E6D90C8F32471.D7F4126E9B3085CA. */
00155 /* Karnaugh maps:
00156 *  0111 0001 0011 1010. 0001 1001 1100 1111. 1001 1110 0011 1110. 1101 0101 1111 1001. 
00157 *  0101 1111 1100 0100. 1011 0101 0010 0000. 0101 1000 1100 0101. 1000 0111 0011 0010. 
00158 *  0000 1001 1110 1101. 1011 1000 1010 0011. 0011 1001 0101 0000. 0100 0010 0101 1011. 
00159 *  0111 0100 0001 0110. 1000 1011 1110 1001. 0011 0011 1001 1101. 1101 0101 0000 1100. 
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 /*  p1:   */
00196 /*  dpMax      = 10.  lpMax      = 64.  cycleCnt=   2  0  0  1.         */
00197 /* 28BDF76E31940AC5.1E2B4C376DA5F908.4C75169A0ED82B3F.B951C3DE647F208A. */
00198 /* Karnaugh maps:
00199 *  0011 1001 0010 0111. 1010 0111 0100 0110. 0011 0001 1111 0100. 1111 1000 0001 1100. 
00200 *  1100 1111 1111 1010. 0011 0011 1110 0100. 1001 0110 0100 0011. 0101 0110 1011 1011. 
00201 *  0010 0100 0011 0101. 1100 1000 1000 1110. 0111 1111 0010 0110. 0000 1010 0000 0011. 
00202 *  1101 1000 0010 0001. 0110 1001 1110 0101. 0001 0100 0101 0111. 0011 1011 1111 0010. 
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     };

Generated on Thu Oct 23 04:14:38 2008 for Open IMS Core CSCFs by  doxygen 1.5.2