aestab.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. /*
  2. ---------------------------------------------------------------------------
  3. Copyright (c) 1998-2006, Brian Gladman, Worcester, UK. All rights reserved.
  4. LICENSE TERMS
  5. The free distribution and use of this software in both source and binary
  6. form is allowed (with or without changes) provided that:
  7. 1. distributions of this source code include the above copyright
  8. notice, this list of conditions and the following disclaimer;
  9. 2. distributions in binary form include the above copyright
  10. notice, this list of conditions and the following disclaimer
  11. in the documentation and/or other associated materials;
  12. 3. the copyright holder's name is not used to endorse products
  13. built using this software without specific written permission.
  14. ALTERNATIVELY, provided that this notice is retained in full, this product
  15. may be distributed under the terms of the GNU General Public License (GPL),
  16. in which case the provisions of the GPL apply INSTEAD OF those given above.
  17. DISCLAIMER
  18. This software is provided 'as is' with no explicit or implied warranties
  19. in respect of its properties, including, but not limited to, correctness
  20. and/or fitness for purpose.
  21. ---------------------------------------------------------------------------
  22. Issue 09/09/2006
  23. */
  24. #define DO_TABLES
  25. #include "aes.h"
  26. #include "aesopt.h"
  27. #if defined(__cplusplus)
  28. extern "C"
  29. {
  30. #endif
  31. //[winfix]
  32. #if 0
  33. #if ZRTP_PLATFORM != ZP_WIN32 && ZRTP_PLATFORM != ZP_WIN32_KERNEL
  34. #ifndef FIXED_TABLES
  35. #warning "FIXED_TABLES isn't defined. Use dynamic tables."
  36. #else
  37. #warning "FIXED_TABLES is defined. Use static tables."
  38. #endif
  39. #endif
  40. #endif
  41. #if defined(FIXED_TABLES)
  42. #define sb_data(w) {\
  43. w(0x63), w(0x7c), w(0x77), w(0x7b), w(0xf2), w(0x6b), w(0x6f), w(0xc5),\
  44. w(0x30), w(0x01), w(0x67), w(0x2b), w(0xfe), w(0xd7), w(0xab), w(0x76),\
  45. w(0xca), w(0x82), w(0xc9), w(0x7d), w(0xfa), w(0x59), w(0x47), w(0xf0),\
  46. w(0xad), w(0xd4), w(0xa2), w(0xaf), w(0x9c), w(0xa4), w(0x72), w(0xc0),\
  47. w(0xb7), w(0xfd), w(0x93), w(0x26), w(0x36), w(0x3f), w(0xf7), w(0xcc),\
  48. w(0x34), w(0xa5), w(0xe5), w(0xf1), w(0x71), w(0xd8), w(0x31), w(0x15),\
  49. w(0x04), w(0xc7), w(0x23), w(0xc3), w(0x18), w(0x96), w(0x05), w(0x9a),\
  50. w(0x07), w(0x12), w(0x80), w(0xe2), w(0xeb), w(0x27), w(0xb2), w(0x75),\
  51. w(0x09), w(0x83), w(0x2c), w(0x1a), w(0x1b), w(0x6e), w(0x5a), w(0xa0),\
  52. w(0x52), w(0x3b), w(0xd6), w(0xb3), w(0x29), w(0xe3), w(0x2f), w(0x84),\
  53. w(0x53), w(0xd1), w(0x00), w(0xed), w(0x20), w(0xfc), w(0xb1), w(0x5b),\
  54. w(0x6a), w(0xcb), w(0xbe), w(0x39), w(0x4a), w(0x4c), w(0x58), w(0xcf),\
  55. w(0xd0), w(0xef), w(0xaa), w(0xfb), w(0x43), w(0x4d), w(0x33), w(0x85),\
  56. w(0x45), w(0xf9), w(0x02), w(0x7f), w(0x50), w(0x3c), w(0x9f), w(0xa8),\
  57. w(0x51), w(0xa3), w(0x40), w(0x8f), w(0x92), w(0x9d), w(0x38), w(0xf5),\
  58. w(0xbc), w(0xb6), w(0xda), w(0x21), w(0x10), w(0xff), w(0xf3), w(0xd2),\
  59. w(0xcd), w(0x0c), w(0x13), w(0xec), w(0x5f), w(0x97), w(0x44), w(0x17),\
  60. w(0xc4), w(0xa7), w(0x7e), w(0x3d), w(0x64), w(0x5d), w(0x19), w(0x73),\
  61. w(0x60), w(0x81), w(0x4f), w(0xdc), w(0x22), w(0x2a), w(0x90), w(0x88),\
  62. w(0x46), w(0xee), w(0xb8), w(0x14), w(0xde), w(0x5e), w(0x0b), w(0xdb),\
  63. w(0xe0), w(0x32), w(0x3a), w(0x0a), w(0x49), w(0x06), w(0x24), w(0x5c),\
  64. w(0xc2), w(0xd3), w(0xac), w(0x62), w(0x91), w(0x95), w(0xe4), w(0x79),\
  65. w(0xe7), w(0xc8), w(0x37), w(0x6d), w(0x8d), w(0xd5), w(0x4e), w(0xa9),\
  66. w(0x6c), w(0x56), w(0xf4), w(0xea), w(0x65), w(0x7a), w(0xae), w(0x08),\
  67. w(0xba), w(0x78), w(0x25), w(0x2e), w(0x1c), w(0xa6), w(0xb4), w(0xc6),\
  68. w(0xe8), w(0xdd), w(0x74), w(0x1f), w(0x4b), w(0xbd), w(0x8b), w(0x8a),\
  69. w(0x70), w(0x3e), w(0xb5), w(0x66), w(0x48), w(0x03), w(0xf6), w(0x0e),\
  70. w(0x61), w(0x35), w(0x57), w(0xb9), w(0x86), w(0xc1), w(0x1d), w(0x9e),\
  71. w(0xe1), w(0xf8), w(0x98), w(0x11), w(0x69), w(0xd9), w(0x8e), w(0x94),\
  72. w(0x9b), w(0x1e), w(0x87), w(0xe9), w(0xce), w(0x55), w(0x28), w(0xdf),\
  73. w(0x8c), w(0xa1), w(0x89), w(0x0d), w(0xbf), w(0xe6), w(0x42), w(0x68),\
  74. w(0x41), w(0x99), w(0x2d), w(0x0f), w(0xb0), w(0x54), w(0xbb), w(0x16) }
  75. #define isb_data(w) {\
  76. w(0x52), w(0x09), w(0x6a), w(0xd5), w(0x30), w(0x36), w(0xa5), w(0x38),\
  77. w(0xbf), w(0x40), w(0xa3), w(0x9e), w(0x81), w(0xf3), w(0xd7), w(0xfb),\
  78. w(0x7c), w(0xe3), w(0x39), w(0x82), w(0x9b), w(0x2f), w(0xff), w(0x87),\
  79. w(0x34), w(0x8e), w(0x43), w(0x44), w(0xc4), w(0xde), w(0xe9), w(0xcb),\
  80. w(0x54), w(0x7b), w(0x94), w(0x32), w(0xa6), w(0xc2), w(0x23), w(0x3d),\
  81. w(0xee), w(0x4c), w(0x95), w(0x0b), w(0x42), w(0xfa), w(0xc3), w(0x4e),\
  82. w(0x08), w(0x2e), w(0xa1), w(0x66), w(0x28), w(0xd9), w(0x24), w(0xb2),\
  83. w(0x76), w(0x5b), w(0xa2), w(0x49), w(0x6d), w(0x8b), w(0xd1), w(0x25),\
  84. w(0x72), w(0xf8), w(0xf6), w(0x64), w(0x86), w(0x68), w(0x98), w(0x16),\
  85. w(0xd4), w(0xa4), w(0x5c), w(0xcc), w(0x5d), w(0x65), w(0xb6), w(0x92),\
  86. w(0x6c), w(0x70), w(0x48), w(0x50), w(0xfd), w(0xed), w(0xb9), w(0xda),\
  87. w(0x5e), w(0x15), w(0x46), w(0x57), w(0xa7), w(0x8d), w(0x9d), w(0x84),\
  88. w(0x90), w(0xd8), w(0xab), w(0x00), w(0x8c), w(0xbc), w(0xd3), w(0x0a),\
  89. w(0xf7), w(0xe4), w(0x58), w(0x05), w(0xb8), w(0xb3), w(0x45), w(0x06),\
  90. w(0xd0), w(0x2c), w(0x1e), w(0x8f), w(0xca), w(0x3f), w(0x0f), w(0x02),\
  91. w(0xc1), w(0xaf), w(0xbd), w(0x03), w(0x01), w(0x13), w(0x8a), w(0x6b),\
  92. w(0x3a), w(0x91), w(0x11), w(0x41), w(0x4f), w(0x67), w(0xdc), w(0xea),\
  93. w(0x97), w(0xf2), w(0xcf), w(0xce), w(0xf0), w(0xb4), w(0xe6), w(0x73),\
  94. w(0x96), w(0xac), w(0x74), w(0x22), w(0xe7), w(0xad), w(0x35), w(0x85),\
  95. w(0xe2), w(0xf9), w(0x37), w(0xe8), w(0x1c), w(0x75), w(0xdf), w(0x6e),\
  96. w(0x47), w(0xf1), w(0x1a), w(0x71), w(0x1d), w(0x29), w(0xc5), w(0x89),\
  97. w(0x6f), w(0xb7), w(0x62), w(0x0e), w(0xaa), w(0x18), w(0xbe), w(0x1b),\
  98. w(0xfc), w(0x56), w(0x3e), w(0x4b), w(0xc6), w(0xd2), w(0x79), w(0x20),\
  99. w(0x9a), w(0xdb), w(0xc0), w(0xfe), w(0x78), w(0xcd), w(0x5a), w(0xf4),\
  100. w(0x1f), w(0xdd), w(0xa8), w(0x33), w(0x88), w(0x07), w(0xc7), w(0x31),\
  101. w(0xb1), w(0x12), w(0x10), w(0x59), w(0x27), w(0x80), w(0xec), w(0x5f),\
  102. w(0x60), w(0x51), w(0x7f), w(0xa9), w(0x19), w(0xb5), w(0x4a), w(0x0d),\
  103. w(0x2d), w(0xe5), w(0x7a), w(0x9f), w(0x93), w(0xc9), w(0x9c), w(0xef),\
  104. w(0xa0), w(0xe0), w(0x3b), w(0x4d), w(0xae), w(0x2a), w(0xf5), w(0xb0),\
  105. w(0xc8), w(0xeb), w(0xbb), w(0x3c), w(0x83), w(0x53), w(0x99), w(0x61),\
  106. w(0x17), w(0x2b), w(0x04), w(0x7e), w(0xba), w(0x77), w(0xd6), w(0x26),\
  107. w(0xe1), w(0x69), w(0x14), w(0x63), w(0x55), w(0x21), w(0x0c), w(0x7d) }
  108. #define mm_data(w) {\
  109. w(0x00), w(0x01), w(0x02), w(0x03), w(0x04), w(0x05), w(0x06), w(0x07),\
  110. w(0x08), w(0x09), w(0x0a), w(0x0b), w(0x0c), w(0x0d), w(0x0e), w(0x0f),\
  111. w(0x10), w(0x11), w(0x12), w(0x13), w(0x14), w(0x15), w(0x16), w(0x17),\
  112. w(0x18), w(0x19), w(0x1a), w(0x1b), w(0x1c), w(0x1d), w(0x1e), w(0x1f),\
  113. w(0x20), w(0x21), w(0x22), w(0x23), w(0x24), w(0x25), w(0x26), w(0x27),\
  114. w(0x28), w(0x29), w(0x2a), w(0x2b), w(0x2c), w(0x2d), w(0x2e), w(0x2f),\
  115. w(0x30), w(0x31), w(0x32), w(0x33), w(0x34), w(0x35), w(0x36), w(0x37),\
  116. w(0x38), w(0x39), w(0x3a), w(0x3b), w(0x3c), w(0x3d), w(0x3e), w(0x3f),\
  117. w(0x40), w(0x41), w(0x42), w(0x43), w(0x44), w(0x45), w(0x46), w(0x47),\
  118. w(0x48), w(0x49), w(0x4a), w(0x4b), w(0x4c), w(0x4d), w(0x4e), w(0x4f),\
  119. w(0x50), w(0x51), w(0x52), w(0x53), w(0x54), w(0x55), w(0x56), w(0x57),\
  120. w(0x58), w(0x59), w(0x5a), w(0x5b), w(0x5c), w(0x5d), w(0x5e), w(0x5f),\
  121. w(0x60), w(0x61), w(0x62), w(0x63), w(0x64), w(0x65), w(0x66), w(0x67),\
  122. w(0x68), w(0x69), w(0x6a), w(0x6b), w(0x6c), w(0x6d), w(0x6e), w(0x6f),\
  123. w(0x70), w(0x71), w(0x72), w(0x73), w(0x74), w(0x75), w(0x76), w(0x77),\
  124. w(0x78), w(0x79), w(0x7a), w(0x7b), w(0x7c), w(0x7d), w(0x7e), w(0x7f),\
  125. w(0x80), w(0x81), w(0x82), w(0x83), w(0x84), w(0x85), w(0x86), w(0x87),\
  126. w(0x88), w(0x89), w(0x8a), w(0x8b), w(0x8c), w(0x8d), w(0x8e), w(0x8f),\
  127. w(0x90), w(0x91), w(0x92), w(0x93), w(0x94), w(0x95), w(0x96), w(0x97),\
  128. w(0x98), w(0x99), w(0x9a), w(0x9b), w(0x9c), w(0x9d), w(0x9e), w(0x9f),\
  129. w(0xa0), w(0xa1), w(0xa2), w(0xa3), w(0xa4), w(0xa5), w(0xa6), w(0xa7),\
  130. w(0xa8), w(0xa9), w(0xaa), w(0xab), w(0xac), w(0xad), w(0xae), w(0xaf),\
  131. w(0xb0), w(0xb1), w(0xb2), w(0xb3), w(0xb4), w(0xb5), w(0xb6), w(0xb7),\
  132. w(0xb8), w(0xb9), w(0xba), w(0xbb), w(0xbc), w(0xbd), w(0xbe), w(0xbf),\
  133. w(0xc0), w(0xc1), w(0xc2), w(0xc3), w(0xc4), w(0xc5), w(0xc6), w(0xc7),\
  134. w(0xc8), w(0xc9), w(0xca), w(0xcb), w(0xcc), w(0xcd), w(0xce), w(0xcf),\
  135. w(0xd0), w(0xd1), w(0xd2), w(0xd3), w(0xd4), w(0xd5), w(0xd6), w(0xd7),\
  136. w(0xd8), w(0xd9), w(0xda), w(0xdb), w(0xdc), w(0xdd), w(0xde), w(0xdf),\
  137. w(0xe0), w(0xe1), w(0xe2), w(0xe3), w(0xe4), w(0xe5), w(0xe6), w(0xe7),\
  138. w(0xe8), w(0xe9), w(0xea), w(0xeb), w(0xec), w(0xed), w(0xee), w(0xef),\
  139. w(0xf0), w(0xf1), w(0xf2), w(0xf3), w(0xf4), w(0xf5), w(0xf6), w(0xf7),\
  140. w(0xf8), w(0xf9), w(0xfa), w(0xfb), w(0xfc), w(0xfd), w(0xfe), w(0xff) }
  141. #define rc_data(w) {\
  142. w(0x01), w(0x02), w(0x04), w(0x08), w(0x10),w(0x20), w(0x40), w(0x80),\
  143. w(0x1b), w(0x36) }
  144. #define h0(x) (x)
  145. #define w0(p) bytes2word(p, 0, 0, 0)
  146. #define w1(p) bytes2word(0, p, 0, 0)
  147. #define w2(p) bytes2word(0, 0, p, 0)
  148. #define w3(p) bytes2word(0, 0, 0, p)
  149. #define u0(p) bytes2word(f2(p), p, p, f3(p))
  150. #define u1(p) bytes2word(f3(p), f2(p), p, p)
  151. #define u2(p) bytes2word(p, f3(p), f2(p), p)
  152. #define u3(p) bytes2word(p, p, f3(p), f2(p))
  153. #define v0(p) bytes2word(fe(p), f9(p), fd(p), fb(p))
  154. #define v1(p) bytes2word(fb(p), fe(p), f9(p), fd(p))
  155. #define v2(p) bytes2word(fd(p), fb(p), fe(p), f9(p))
  156. #define v3(p) bytes2word(f9(p), fd(p), fb(p), fe(p))
  157. #endif
  158. #if defined(FIXED_TABLES) || !defined(FF_TABLES)
  159. #define f2(x) ((x<<1) ^ (((x>>7) & 1) * WPOLY))
  160. #define f4(x) ((x<<2) ^ (((x>>6) & 1) * WPOLY) ^ (((x>>6) & 2) * WPOLY))
  161. #define f8(x) ((x<<3) ^ (((x>>5) & 1) * WPOLY) ^ (((x>>5) & 2) * WPOLY) \
  162. ^ (((x>>5) & 4) * WPOLY))
  163. #define f3(x) (f2(x) ^ x)
  164. #define f9(x) (f8(x) ^ x)
  165. #define fb(x) (f8(x) ^ f2(x) ^ x)
  166. #define fd(x) (f8(x) ^ f4(x) ^ x)
  167. #define fe(x) (f8(x) ^ f4(x) ^ f2(x))
  168. #else
  169. #define f2(x) ((x) ? pow[log[x] + 0x19] : 0)
  170. #define f3(x) ((x) ? pow[log[x] + 0x01] : 0)
  171. #define f9(x) ((x) ? pow[log[x] + 0xc7] : 0)
  172. #define fb(x) ((x) ? pow[log[x] + 0x68] : 0)
  173. #define fd(x) ((x) ? pow[log[x] + 0xee] : 0)
  174. #define fe(x) ((x) ? pow[log[x] + 0xdf] : 0)
  175. #define fi(x) ((x) ? pow[ 255 - log[x]] : 0)
  176. #endif
  177. #include "aestab.h"
  178. #if defined(FIXED_TABLES)
  179. /* implemented in case of wrong call for fixed tables */
  180. AES_RETURN zrtp_bg_gen_tabs(void)
  181. {
  182. return EXIT_SUCCESS;
  183. }
  184. #else /* dynamic table generation */
  185. #if !defined(FF_TABLES)
  186. /* Generate the tables for the dynamic table option
  187. It will generally be sensible to use tables to compute finite
  188. field multiplies and inverses but where memory is scarse this
  189. code might sometimes be better. But it only has effect during
  190. initialisation so its pretty unimportant in overall terms.
  191. */
  192. /* return 2 ^ (n - 1) where n is the bit number of the highest bit
  193. set in x with x in the range 1 < x < 0x00000200. This form is
  194. used so that locals within fi can be bytes rather than words
  195. */
  196. static uint_8t hibit(const uint_32t x)
  197. { uint_8t r = (uint_8t)((x >> 1) | (x >> 2));
  198. r |= (r >> 2);
  199. r |= (r >> 4);
  200. return (r + 1) >> 1;
  201. }
  202. /* return the inverse of the finite field element x */
  203. static uint_8t fi(const uint_8t x)
  204. { uint_8t p1 = x, p2 = BPOLY, n1 = hibit(x), n2 = 0x80, v1 = 1, v2 = 0;
  205. if(x < 2) return x;
  206. for(;;)
  207. {
  208. if(!n1) return v1;
  209. while(n2 >= n1)
  210. {
  211. n2 /= n1; p2 ^= p1 * n2; v2 ^= v1 * n2; n2 = hibit(p2);
  212. }
  213. if(!n2) return v2;
  214. while(n1 >= n2)
  215. {
  216. n1 /= n2; p1 ^= p2 * n1; v1 ^= v2 * n1; n1 = hibit(p1);
  217. }
  218. }
  219. }
  220. #endif
  221. /* The forward and inverse affine transformations used in the S-box */
  222. #define fwd_affine(x) \
  223. (w = (uint_32t)x, w ^= (w<<1)^(w<<2)^(w<<3)^(w<<4), 0x63^(uint_8t)(w^(w>>8)))
  224. #define inv_affine(x) \
  225. (w = (uint_32t)x, w = (w<<1)^(w<<3)^(w<<6), 0x05^(uint_8t)(w^(w>>8)))
  226. static int init = 0;
  227. AES_RETURN zrtp_bg_gen_tabs(void)
  228. { uint_32t i, w;
  229. #if defined(FF_TABLES)
  230. uint_8t pow[512], log[256];
  231. if(init)
  232. return EXIT_SUCCESS;
  233. /* log and power tables for GF(2^8) finite field with
  234. WPOLY as modular polynomial - the simplest primitive
  235. root is 0x03, used here to generate the tables
  236. */
  237. i = 0; w = 1;
  238. do
  239. {
  240. pow[i] = (uint_8t)w;
  241. pow[i + 255] = (uint_8t)w;
  242. log[w] = (uint_8t)i++;
  243. w ^= (w << 1) ^ (w & 0x80 ? WPOLY : 0);
  244. }
  245. while (w != 1);
  246. #else
  247. if(init)
  248. return EXIT_SUCCESS;
  249. #endif
  250. for(i = 0, w = 1; i < RC_LENGTH; ++i)
  251. {
  252. t_set(r,c)[i] = bytes2word(w, 0, 0, 0);
  253. w = f2(w);
  254. }
  255. for(i = 0; i < 256; ++i)
  256. { uint_8t b;
  257. b = fwd_affine(fi((uint_8t)i));
  258. w = bytes2word(f2(b), b, b, f3(b));
  259. #if defined( SBX_SET )
  260. t_set(s,box)[i] = b;
  261. #endif
  262. #if defined( FT1_SET ) /* tables for a normal encryption round */
  263. t_set(f,n)[i] = w;
  264. #endif
  265. #if defined( FT4_SET )
  266. t_set(f,n)[0][i] = w;
  267. t_set(f,n)[1][i] = upr(w,1);
  268. t_set(f,n)[2][i] = upr(w,2);
  269. t_set(f,n)[3][i] = upr(w,3);
  270. #endif
  271. w = bytes2word(b, 0, 0, 0);
  272. #if defined( FL1_SET ) /* tables for last encryption round (may also */
  273. t_set(f,l)[i] = w; /* be used in the key schedule) */
  274. #endif
  275. #if defined( FL4_SET )
  276. t_set(f,l)[0][i] = w;
  277. t_set(f,l)[1][i] = upr(w,1);
  278. t_set(f,l)[2][i] = upr(w,2);
  279. t_set(f,l)[3][i] = upr(w,3);
  280. #endif
  281. #if defined( LS1_SET ) /* table for key schedule if t_set(f,l) above is */
  282. t_set(l,s)[i] = w; /* not of the required form */
  283. #endif
  284. #if defined( LS4_SET )
  285. t_set(l,s)[0][i] = w;
  286. t_set(l,s)[1][i] = upr(w,1);
  287. t_set(l,s)[2][i] = upr(w,2);
  288. t_set(l,s)[3][i] = upr(w,3);
  289. #endif
  290. b = fi(inv_affine((uint_8t)i));
  291. w = bytes2word(fe(b), f9(b), fd(b), fb(b));
  292. #if defined( IM1_SET ) /* tables for the inverse mix column operation */
  293. t_set(i,m)[b] = w;
  294. #endif
  295. #if defined( IM4_SET )
  296. t_set(i,m)[0][b] = w;
  297. t_set(i,m)[1][b] = upr(w,1);
  298. t_set(i,m)[2][b] = upr(w,2);
  299. t_set(i,m)[3][b] = upr(w,3);
  300. #endif
  301. #if defined( ISB_SET )
  302. t_set(i,box)[i] = b;
  303. #endif
  304. #if defined( IT1_SET ) /* tables for a normal decryption round */
  305. t_set(i,n)[i] = w;
  306. #endif
  307. #if defined( IT4_SET )
  308. t_set(i,n)[0][i] = w;
  309. t_set(i,n)[1][i] = upr(w,1);
  310. t_set(i,n)[2][i] = upr(w,2);
  311. t_set(i,n)[3][i] = upr(w,3);
  312. #endif
  313. w = bytes2word(b, 0, 0, 0);
  314. #if defined( IL1_SET ) /* tables for last decryption round */
  315. t_set(i,l)[i] = w;
  316. #endif
  317. #if defined( IL4_SET )
  318. t_set(i,l)[0][i] = w;
  319. t_set(i,l)[1][i] = upr(w,1);
  320. t_set(i,l)[2][i] = upr(w,2);
  321. t_set(i,l)[3][i] = upr(w,3);
  322. #endif
  323. }
  324. init = 1;
  325. return EXIT_SUCCESS;
  326. }
  327. #endif
  328. #if defined(__cplusplus)
  329. }
  330. #endif