|
|
1.1 ! root 1: /* ! 2: * Program to Generate the SP.c File ! 3: * D.P.Mitchell 83/06/30. ! 4: */ ! 5: ! 6: /* ! 7: * The 8 selection functions. ! 8: */ ! 9: int S[8][64] = { ! 10: 14, 4,13, 1, 2,15,11, 8, 3,10, 6,12, 5, 9, 0, 7, ! 11: 0,15, 7, 4,14, 2,13, 1,10, 6,12,11, 9, 5, 3, 8, ! 12: 4, 1,14, 8,13, 6, 2,11,15,12, 9, 7, 3,10, 5, 0, ! 13: 15,12, 8, 2, 4, 9, 1, 7, 5,11, 3,14,10, 0, 6,13, ! 14: ! 15: 15, 1, 8,14, 6,11, 3, 4, 9, 7, 2,13,12, 0, 5,10, ! 16: 3,13, 4, 7,15, 2, 8,14,12, 0, 1,10, 6, 9,11, 5, ! 17: 0,14, 7,11,10, 4,13, 1, 5, 8,12, 6, 9, 3, 2,15, ! 18: 13, 8,10, 1, 3,15, 4, 2,11, 6, 7,12, 0, 5,14, 9, ! 19: ! 20: 10, 0, 9,14, 6, 3,15, 5, 1,13,12, 7,11, 4, 2, 8, ! 21: 13, 7, 0, 9, 3, 4, 6,10, 2, 8, 5,14,12,11,15, 1, ! 22: 13, 6, 4, 9, 8,15, 3, 0,11, 1, 2,12, 5,10,14, 7, ! 23: 1,10,13, 0, 6, 9, 8, 7, 4,15,14, 3,11, 5, 2,12, ! 24: ! 25: 7,13,14, 3, 0, 6, 9,10, 1, 2, 8, 5,11,12, 4,15, ! 26: 13, 8,11, 5, 6,15, 0, 3, 4, 7, 2,12, 1,10,14, 9, ! 27: 10, 6, 9, 0,12,11, 7,13,15, 1, 3,14, 5, 2, 8, 4, ! 28: 3,15, 0, 6,10, 1,13, 8, 9, 4, 5,11,12, 7, 2,14, ! 29: ! 30: 2,12, 4, 1, 7,10,11, 6, 8, 5, 3,15,13, 0,14, 9, ! 31: 14,11, 2,12, 4, 7,13, 1, 5, 0,15,10, 3, 9, 8, 6, ! 32: 4, 2, 1,11,10,13, 7, 8,15, 9,12, 5, 6, 3, 0,14, ! 33: 11, 8,12, 7, 1,14, 2,13, 6,15, 0, 9,10, 4, 5, 3, ! 34: ! 35: 12, 1,10,15, 9, 2, 6, 8, 0,13, 3, 4,14, 7, 5,11, ! 36: 10,15, 4, 2, 7,12, 9, 5, 6, 1,13,14, 0,11, 3, 8, ! 37: 9,14,15, 5, 2, 8,12, 3, 7, 0, 4,10, 1,13,11, 6, ! 38: 4, 3, 2,12, 9, 5,15,10,11,14, 1, 7, 6, 0, 8,13, ! 39: ! 40: 4,11, 2,14,15, 0, 8,13, 3,12, 9, 7, 5,10, 6, 1, ! 41: 13, 0,11, 7, 4, 9, 1,10,14, 3, 5,12, 2,15, 8, 6, ! 42: 1, 4,11,13,12, 3, 7,14,10,15, 6, 8, 0, 5, 9, 2, ! 43: 6,11,13, 8, 1, 4,10, 7, 9, 5, 0,15,14, 2, 3,12, ! 44: ! 45: 13, 2, 8, 4, 6,15,11, 1,10, 9, 3,14, 5, 0,12, 7, ! 46: 1,15,13, 8,10, 3, 7, 4,12, 5, 6,11, 0,14, 9, 2, ! 47: 7,11, 4, 1, 9,12,14, 2, 0, 6,10,13,15, 3, 5, 8, ! 48: 2, 1,14, 7, 4,10, 8,13,15,12, 9, 0, 3, 5, 6,11, ! 49: }; ! 50: ! 51: /* ! 52: * P is a permutation on the selected combination ! 53: * of the current L and key. ! 54: */ ! 55: int P[] = { ! 56: 16, 7,20,21, ! 57: 29,12,28,17, ! 58: 1,15,23,26, ! 59: 5,18,31,10, ! 60: 2, 8,24,14, ! 61: 32,27, 3, 9, ! 62: 19,13,30, 6, ! 63: 22,11, 4,25, ! 64: }; ! 65: ! 66: SP(bits, box) ! 67: int bits[32]; ! 68: int box; ! 69: { ! 70: int f[32]; ! 71: int t, j, k; ! 72: for (j = 0; j < 32; j++) ! 73: f[j] = 0; ! 74: t = 0; /* 6*box >> low order */ ! 75: k = S[box][(bits[t+0]<<5)+ ! 76: (bits[t+1]<<3)+ ! 77: (bits[t+2]<<2)+ ! 78: (bits[t+3]<<1)+ ! 79: (bits[t+4]<<0)+ ! 80: (bits[t+5]<<4)]; ! 81: t = 4*box; ! 82: f[t+0] = (k>>3)&01; ! 83: f[t+1] = (k>>2)&01; ! 84: f[t+2] = (k>>1)&01; ! 85: f[t+3] = (k>>0)&01; ! 86: for (j=0; j<32; j++) ! 87: bits[j] = f[P[j]-1]; ! 88: } ! 89: ! 90: main() ! 91: { ! 92: int box, sixgram; ! 93: int bits[32]; ! 94: long crypto; ! 95: int i; ! 96: ! 97: for (box = 0; box < 8; box++) { ! 98: printf("long s%dp[] = {\n", box); ! 99: for (sixgram=0; sixgram < 64; sixgram++) { ! 100: for (i = 0; i < 32; i++) { ! 101: if (sixgram & (1 << i)) ! 102: bits[i] = 1; ! 103: else ! 104: bits[i] = 0; ! 105: } ! 106: SP(bits, box); ! 107: crypto = 0; ! 108: for (i = 0; i < 32; i++) ! 109: crypto |= bits[i] << i; ! 110: printf("0x%08x,", crypto); ! 111: if (sixgram % 8 == 7) ! 112: printf("\n"); ! 113: } ! 114: printf("};\n\n"); ! 115: } ! 116: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.