Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. ; libcrash -- cryptographic hash (and other) functions
  2. ;
  3. ; Copyright (C) <2016> Jeffrey Amelynck
  4. ; Copyright (C) <2016,2021> Ivan Baravy
  5. ;
  6. ; SPDX-License-Identifier: GPL-2.0-or-later
  7. ;
  8. ; This program is free software: you can redistribute it and/or modify it under
  9. ; the terms of the GNU General Public License as published by the Free Software
  10. ; Foundation, either version 2 of the License, or (at your option) any later
  11. ; version.
  12. ;
  13. ; This program is distributed in the hope that it will be useful, but WITHOUT
  14. ; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  15. ; FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  16. ;
  17. ; You should have received a copy of the GNU General Public License along with
  18. ; this program. If not, see <http://www.gnu.org/licenses/>.
  19.  
  20. AES_MAX_ROUNDS = 14     ; 128/10, 192/12, 256/14
  21.  
  22. AES_BLOCK_SIZE = 16
  23. AES_ALIGN      = 16
  24. AES_ALIGN_MASK = AES_ALIGN - 1
  25.  
  26. struct ctx_aes
  27.         state   rd 64
  28.         key rd 4*(14+1)
  29.         rounds  dd ?
  30. ends
  31.  
  32. proc aes._.init _key, _flags
  33.         test    [_flags], LIBCRASH_CIPHER_DECRYPT
  34.         jnz     .decrypt_key
  35.         ; encrypt key
  36.         stdcall aes_set_encrypt_key, ebx, [_key]
  37.         jmp     .key_done
  38. .decrypt_key:
  39.         stdcall aes_set_decrypt_key, ebx, [_key]
  40. .key_done:
  41.         ret
  42. endp
  43.  
  44. proc aes256.init uses ebx esi edi, _ctx, _key, _flags
  45.         mov     ebx, [_ctx]
  46.         mov     [ebx+ctx_aes.rounds], 14
  47.         stdcall aes._.init, [_key], [_flags]
  48.         ret
  49. endp
  50.  
  51. proc aes_set_encrypt_key uses ebx esi edi, _ctx, _userkey
  52. locals
  53.         i       dd ?
  54. endl
  55.         mov     [i], 0
  56.         mov     ebx, [_ctx]
  57.  
  58.         mov     esi, [_userkey]
  59.         lea     edi, [ebx+ctx_aes.key]
  60.         lodsd
  61.         bswap   eax
  62.         stosd
  63.         lodsd
  64.         bswap   eax
  65.         stosd
  66.         lodsd
  67.         bswap   eax
  68.         stosd
  69.         lodsd
  70.         bswap   eax
  71.         stosd
  72.         lodsd
  73.         bswap   eax
  74.         stosd
  75.         lodsd
  76.         bswap   eax
  77.         stosd
  78.         lodsd
  79.         bswap   eax
  80.         stosd
  81.         lodsd
  82.         bswap   eax
  83.         stosd
  84.  
  85.         lea     esi, [ebx+ctx_aes.key]
  86.  
  87.   .while:
  88.         mov     ebx, [esi+4*7]
  89.  
  90.         mov     ecx, [esi+4*0]
  91.  
  92.         mov     eax, ebx
  93.         shr     eax, 16
  94.         movzx   eax, al
  95.         mov     eax, [Te2+4*eax]
  96.         and     eax, 0xff000000
  97.         xor     ecx, eax
  98.  
  99.         mov     eax, ebx
  100.         shr     eax, 8
  101.         movzx   eax, al
  102.         mov     eax, [Te3+4*eax]
  103.         and     eax, 0x00ff0000
  104.         xor     ecx, eax
  105.  
  106.         mov     eax, ebx
  107.         shr     eax, 0
  108.         movzx   eax, al
  109.         mov     eax, [Te0+4*eax]
  110.         and     eax, 0x0000ff00
  111.         xor     ecx, eax
  112.  
  113.         mov     eax, ebx
  114.         shr     eax, 24
  115.         mov     eax, [Te1+4*eax]
  116.         and     eax, 0x000000ff
  117.         xor     ecx, eax
  118.  
  119.         mov     eax, [i]
  120.         xor     ecx, [rcon+4*eax]
  121.  
  122.         mov     [esi+4*8], ecx
  123.  
  124.  
  125.         xor     ecx, [esi+4*1]
  126.         mov     [esi+4*9], ecx
  127.  
  128.         xor     ecx, [esi+4*2]
  129.         mov     [esi+4*10], ecx
  130.  
  131.         xor     ecx, [esi+4*3]
  132.         mov     [esi+4*11], ecx
  133.  
  134.  
  135.         inc     [i]
  136.         cmp     [i], 7
  137.         jz      .done
  138.  
  139.  
  140.         mov     ebx, [esi+4*11]
  141.  
  142.         mov     ecx, [esi+4*4]
  143.  
  144.         mov     eax, ebx
  145.         shr     eax, 24
  146.         mov     eax, [Te2+4*eax]
  147.         and     eax, 0xff000000
  148.         xor     ecx, eax
  149.  
  150.         mov     eax, ebx
  151.         shr     eax, 16
  152.         movzx   eax, al
  153.         mov     eax, [Te3+4*eax]
  154.         and     eax, 0x00ff0000
  155.         xor     ecx, eax
  156.  
  157.         mov     eax, ebx
  158.         shr     eax, 8
  159.         movzx   eax, al
  160.         mov     eax, [Te0+4*eax]
  161.         and     eax, 0x0000ff00
  162.         xor     ecx, eax
  163.  
  164.         mov     eax, ebx
  165.         shr     eax, 0
  166.         movzx   eax, al
  167.         mov     eax, [Te1+4*eax]
  168.         and     eax, 0x000000ff
  169.         xor     ecx, eax
  170.  
  171.         mov     [esi+4*12], ecx
  172.  
  173.  
  174.         xor     ecx, [esi+4*5]
  175.         mov     [esi+4*13], ecx
  176.  
  177.         xor     ecx, [esi+4*6]
  178.         mov     [esi+4*14], ecx
  179.  
  180.         xor     ecx, [esi+4*7]
  181.         mov     [esi+4*15], ecx
  182.  
  183.         add     esi, 4*8
  184.  
  185.         jmp     .while
  186.  
  187.   .done:
  188.         xor     eax, eax
  189.         ret
  190. endp
  191.  
  192.  
  193. proc aes_set_decrypt_key uses ebx esi edi, _ctx, _bits, _userkey
  194.         stdcall aes_set_encrypt_key, [_ctx], [_bits], [_userkey]
  195.         test    eax, eax
  196.         jnz     .error
  197.  
  198. ; Invert the order of the round keys
  199.         mov     ebx, [_ctx]
  200.         lea     esi, [ebx+ctx_aes.key]
  201.         mov     edi, [ebx+ctx_aes.rounds]
  202.         shl     edi, 4
  203.         add     edi, esi
  204.   @@:
  205.         mov     eax, [esi+0]
  206.         mov     ebx, [edi+0]
  207.         mov     [esi+0], ebx
  208.         mov     [edi+0], eax
  209.         mov     eax, [esi+4]
  210.         mov     ebx, [edi+4]
  211.         mov     [esi+4], ebx
  212.         mov     [edi+4], eax
  213.         mov     eax, [esi+8]
  214.         mov     ebx, [edi+8]
  215.         mov     [esi+8], ebx
  216.         mov     [edi+8], eax
  217.         mov     eax, [esi+12]
  218.         mov     ebx, [edi+12]
  219.         mov     [esi+12], ebx
  220.         mov     [edi+12], eax
  221.         add     esi, 4*4
  222.         sub     edi, 4*4
  223.         cmp     esi, edi
  224.         jb      @r
  225.  
  226. ; Apply the inverse MixColumn transform to all round keys but the first and the last
  227.         mov     ebx, [_ctx]
  228.         mov     ecx, [ebx+ctx_aes.rounds]
  229.         dec     ecx
  230.         shl     ecx, 2
  231.         lea     edi, [ebx+ctx_aes.key+16]
  232.   .inverse:
  233.         mov     eax, [edi]
  234.         shr     eax, 24
  235.         mov     eax, [Te1+4*eax]
  236.         movzx   eax, al
  237.         mov     ebx, [Td0+4*eax]
  238.  
  239.         mov     eax, [edi]
  240.         shr     eax, 16
  241.         movzx   eax, al
  242.         mov     eax, [Te1+4*eax]
  243.         movzx   eax, al
  244.         mov     eax, [Td1+4*eax]
  245.         xor     ebx, eax
  246.  
  247.         mov     eax, [edi]
  248.         shr     eax, 8
  249.         movzx   eax, al
  250.         mov     eax, [Te1+4*eax]
  251.         movzx   eax, al
  252.         mov     eax, [Td2+4*eax]
  253.         xor     ebx, eax
  254.  
  255.         mov     eax, [edi]
  256.         movzx   eax, al
  257.         mov     eax, [Te1+4*eax]
  258.         movzx   eax, al
  259.         mov     eax, [Td3+4*eax]
  260.         xor     eax, ebx
  261.         stosd
  262.  
  263.         dec     ecx
  264.         jnz     .inverse
  265.         xor     eax, eax
  266.   .error:
  267.         ret
  268. endp
  269.  
  270. aes256.encrypt = aes.encrypt
  271. proc aes.encrypt uses ebx esi edi, _ctx, _in, _out
  272. locals
  273.         s       rd 4
  274.         t       rd 4
  275.         r       dd ?
  276. endl
  277.         mov     ebx, [_ctx]
  278.         mov     esi, [_in]
  279.         lea     edi, [s]
  280.  
  281.         mov     eax, [esi+4*0]
  282.         bswap   eax
  283.         xor     eax, [ebx+ctx_aes.key+4*0]
  284.         mov     [edi+4*0], eax
  285.  
  286.         mov     eax, [esi+4*1]
  287.         bswap   eax
  288.         xor     eax, [ebx+ctx_aes.key+4*1]
  289.         mov     [edi+4*1], eax
  290.  
  291.         mov     eax, [esi+ 4*2]
  292.         bswap   eax
  293.         xor     eax, [ebx+ctx_aes.key+4*2]
  294.         mov     [edi+4*2], eax
  295.  
  296.         mov     eax, [esi+4*3]
  297.         bswap   eax
  298.         xor     eax, [ebx+ctx_aes.key+4*3]
  299.         mov     [edi+4*3], eax
  300.  
  301.  
  302.         mov     eax, [ebx+ctx_aes.rounds]
  303.         shr     eax, 1
  304.         mov     [r], eax
  305.  
  306.   .for:
  307.         lea     esi, [s]
  308.         lea     edi, [t]
  309.  
  310.  
  311.         mov     ecx, [ebx+ctx_aes.key+4*4]
  312.  
  313.         mov     eax, [esi+4*0]
  314.         shr     eax, 24
  315.         mov     eax, [Te0+4*eax]
  316.         xor     ecx, eax
  317.  
  318.         mov     eax, [esi+4*1]
  319.         shr     eax, 16
  320.         movzx   eax, al
  321.         mov     eax, [Te1+4*eax]
  322.         xor     ecx, eax
  323.  
  324.         mov     eax, [esi+4*2]
  325.         shr     eax, 8
  326.         movzx   eax, al
  327.         mov     eax, [Te2+4*eax]
  328.         xor     ecx, eax
  329.  
  330.         mov     eax, [esi+4*3]
  331.         movzx   eax, al
  332.         mov     eax, [Te3+4*eax]
  333.         xor     ecx, eax
  334.  
  335.         mov     [edi+4*0], ecx
  336.  
  337.  
  338.         mov     ecx, [ebx+ctx_aes.key+4*5]
  339.  
  340.         mov     eax, [esi+4*1]
  341.         shr     eax, 24
  342.         mov     eax, [Te0+4*eax]
  343.         xor     ecx, eax
  344.  
  345.         mov     eax, [esi+4*2]
  346.         shr     eax, 16
  347.         movzx   eax, al
  348.         mov     eax, [Te1+4*eax]
  349.         xor     ecx, eax
  350.  
  351.         mov     eax, [esi+4*3]
  352.         shr     eax, 8
  353.         movzx   eax, al
  354.         mov     eax, [Te2+4*eax]
  355.         xor     ecx, eax
  356.  
  357.         mov     eax, [esi+4*0]
  358.         movzx   eax, al
  359.         mov     eax, [Te3+4*eax]
  360.         xor     ecx, eax
  361.  
  362.         mov     [edi+4*1], ecx
  363.  
  364.  
  365.         mov     ecx, [ebx+ctx_aes.key+4*6]
  366.  
  367.         mov     eax, [esi+4*2]
  368.         shr     eax, 24
  369.         mov     eax, [Te0+4*eax]
  370.         xor     ecx, eax
  371.  
  372.         mov     eax, [esi+4*3]
  373.         shr     eax, 16
  374.         movzx   eax, al
  375.         mov     eax, [Te1+4*eax]
  376.         xor     ecx, eax
  377.  
  378.         mov     eax, [esi+4*0]
  379.         shr     eax, 8
  380.         movzx   eax, al
  381.         mov     eax, [Te2+4*eax]
  382.         xor     ecx, eax
  383.  
  384.         mov     eax, [esi+4*1]
  385.         movzx   eax, al
  386.         mov     eax, [Te3+4*eax]
  387.         xor     ecx, eax
  388.  
  389.         mov     [edi+4*2], ecx
  390.  
  391.  
  392.         mov     ecx, [ebx+ctx_aes.key+4*7]
  393.  
  394.         mov     eax, [esi+4*3]
  395.         shr     eax, 24
  396.         mov     eax, [Te0+4*eax]
  397.         xor     ecx, eax
  398.  
  399.         mov     eax, [esi+4*0]
  400.         shr     eax, 16
  401.         movzx   eax, al
  402.         mov     eax, [Te1+4*eax]
  403.         xor     ecx, eax
  404.  
  405.         mov     eax, [esi+4*1]
  406.         shr     eax, 8
  407.         movzx   eax, al
  408.         mov     eax, [Te2+4*eax]
  409.         xor     ecx, eax
  410.  
  411.         mov     eax, [esi+4*2]
  412.         movzx   eax, al
  413.         mov     eax, [Te3+4*eax]
  414.         xor     ecx, eax
  415.  
  416.         mov     [edi+4*3], ecx
  417.  
  418.  
  419.         add     ebx, 4*8
  420.         dec     [r]
  421.         jz      .end_for
  422.  
  423.  
  424.         mov     ecx, [ebx+ctx_aes.key+4*0]
  425.  
  426.         mov     eax, [edi+4*0]
  427.         shr     eax, 24
  428.         mov     eax, [Te0+4*eax]
  429.         xor     ecx, eax
  430.  
  431.         mov     eax, [edi+4*1]
  432.         shr     eax, 16
  433.         movzx   eax, al
  434.         mov     eax, [Te1+4*eax]
  435.         xor     ecx, eax
  436.  
  437.         mov     eax, [edi+4*2]
  438.         shr     eax, 8
  439.         movzx   eax, al
  440.         mov     eax, [Te2+4*eax]
  441.         xor     ecx, eax
  442.  
  443.         mov     eax, [edi+4*3]
  444.         movzx   eax, al
  445.         mov     eax, [Te3+4*eax]
  446.         xor     ecx, eax
  447.  
  448.         mov     [esi+4*0], ecx
  449.  
  450.  
  451.         mov     ecx, [ebx+ctx_aes.key+4*1]
  452.  
  453.         mov     eax, [edi+4*1]
  454.         shr     eax, 24
  455.         mov     eax, [Te0+4*eax]
  456.         xor     ecx, eax
  457.  
  458.         mov     eax, [edi+4*2]
  459.         shr     eax, 16
  460.         movzx   eax, al
  461.         mov     eax, [Te1+4*eax]
  462.         xor     ecx, eax
  463.  
  464.         mov     eax, [edi+4*3]
  465.         shr     eax, 8
  466.         movzx   eax, al
  467.         mov     eax, [Te2+4*eax]
  468.         xor     ecx, eax
  469.  
  470.         mov     eax, [edi+4*0]
  471.         movzx   eax, al
  472.         mov     eax, [Te3+4*eax]
  473.         xor     ecx, eax
  474.  
  475.         mov     [esi+4*1], ecx
  476.  
  477.  
  478.         mov     ecx, [ebx+ctx_aes.key+4*2]
  479.  
  480.         mov     eax, [edi+4*2]
  481.         shr     eax, 24
  482.         mov     eax, [Te0+4*eax]
  483.         xor     ecx, eax
  484.  
  485.         mov     eax, [edi+4*3]
  486.         shr     eax, 16
  487.         movzx   eax, al
  488.         mov     eax, [Te1+4*eax]
  489.         xor     ecx, eax
  490.  
  491.         mov     eax, [edi+4*0]
  492.         shr     eax, 8
  493.         movzx   eax, al
  494.         mov     eax, [Te2+4*eax]
  495.         xor     ecx, eax
  496.  
  497.         mov     eax, [edi+4*1]
  498.         movzx   eax, al
  499.         mov     eax, [Te3+4*eax]
  500.         xor     ecx, eax
  501.  
  502.         mov     [esi+4*2], ecx
  503.  
  504.  
  505.         mov     ecx, [ebx+ctx_aes.key+4*3]
  506.  
  507.         mov     eax, [edi+4*3]
  508.         shr     eax, 24
  509.         mov     eax, [Te0+4*eax]
  510.         xor     ecx, eax
  511.  
  512.         mov     eax, [edi+4*0]
  513.         shr     eax, 16
  514.         movzx   eax, al
  515.         mov     eax, [Te1+4*eax]
  516.         xor     ecx, eax
  517.  
  518.         mov     eax, [edi+4*1]
  519.         shr     eax, 8
  520.         movzx   eax, al
  521.         mov     eax, [Te2+4*eax]
  522.         xor     ecx, eax
  523.  
  524.         mov     eax, [edi+4*2]
  525.         movzx   eax, al
  526.         mov     eax, [Te3+4*eax]
  527.         xor     ecx, eax
  528.  
  529.         mov     [esi+4*3], ecx
  530.  
  531.         jmp     .for
  532.   .end_for:
  533.  
  534.         mov     ecx, [ebx+ctx_aes.key+4*0]
  535.  
  536.         mov     eax, [edi+4*0]
  537.         shr     eax, 24
  538.         mov     eax, [Te2+4*eax]
  539.         and     eax, 0xff000000
  540.         xor     ecx, eax
  541.  
  542.         mov     eax, [edi+4*1]
  543.         shr     eax, 16
  544.         movzx   eax, al
  545.         mov     eax, [Te3+4*eax]
  546.         and     eax, 0x00ff0000
  547.         xor     ecx, eax
  548.  
  549.         mov     eax, [edi+4*2]
  550.         shr     eax, 8
  551.         movzx   eax, al
  552.         mov     eax, [Te0+4*eax]
  553.         and     eax, 0x0000ff00
  554.         xor     ecx, eax
  555.  
  556.         mov     eax, [edi+4*3]
  557.         movzx   eax, al
  558.         mov     eax, [Te1+4*eax]
  559.         and     eax, 0x000000ff
  560.         xor     ecx, eax
  561.  
  562.         mov     [esi+4*0], ecx
  563.  
  564.  
  565.         mov     ecx, [ebx+ctx_aes.key+4*1]
  566.  
  567.         mov     eax, [edi+4*1]
  568.         shr     eax, 24
  569.         mov     eax, [Te2+4*eax]
  570.         and     eax, 0xff000000
  571.         xor     ecx, eax
  572.  
  573.         mov     eax, [edi+4*2]
  574.         shr     eax, 16
  575.         movzx   eax, al
  576.         mov     eax, [Te3+4*eax]
  577.         and     eax, 0x00ff0000
  578.         xor     ecx, eax
  579.  
  580.         mov     eax, [edi+4*3]
  581.         shr     eax, 8
  582.         movzx   eax, al
  583.         mov     eax, [Te0+4*eax]
  584.         and     eax, 0x0000ff00
  585.         xor     ecx, eax
  586.  
  587.         mov     eax, [edi+4*0]
  588.         movzx   eax, al
  589.         mov     eax, [Te1+4*eax]
  590.         and     eax, 0x000000ff
  591.         xor     ecx, eax
  592.  
  593.         mov     [esi+4*1], ecx
  594.  
  595.  
  596.         mov     ecx, [ebx+ctx_aes.key+4*2]
  597.  
  598.         mov     eax, [edi+4*2]
  599.         shr     eax, 24
  600.         mov     eax, [Te2+4*eax]
  601.         and     eax, 0xff000000
  602.         xor     ecx, eax
  603.  
  604.         mov     eax, [edi+4*3]
  605.         shr     eax, 16
  606.         movzx   eax, al
  607.         mov     eax, [Te3+4*eax]
  608.         and     eax, 0x00ff0000
  609.         xor     ecx, eax
  610.  
  611.         mov     eax, [edi+4*0]
  612.         shr     eax, 8
  613.         movzx   eax, al
  614.         mov     eax, [Te0+4*eax]
  615.         and     eax, 0x0000ff00
  616.         xor     ecx, eax
  617.  
  618.         mov     eax, [edi+4*1]
  619.         movzx   eax, al
  620.         mov     eax, [Te1+4*eax]
  621.         and     eax, 0x000000ff
  622.         xor     ecx, eax
  623.  
  624.         mov     [esi+4*2], ecx
  625.  
  626.  
  627.         mov     ecx, [ebx+ctx_aes.key+4*3]
  628.  
  629.         mov     eax, [edi+4*3]
  630.         shr     eax, 24
  631.         mov     eax, [Te2+4*eax]
  632.         and     eax, 0xff000000
  633.         xor     ecx, eax
  634.  
  635.         mov     eax, [edi+4*0]
  636.         shr     eax, 16
  637.         movzx   eax, al
  638.         mov     eax, [Te3+4*eax]
  639.         and     eax, 0x00ff0000
  640.         xor     ecx, eax
  641.  
  642.         mov     eax, [edi+4*1]
  643.         shr     eax, 8
  644.         movzx   eax, al
  645.         mov     eax, [Te0+4*eax]
  646.         and     eax, 0x0000ff00
  647.         xor     ecx, eax
  648.  
  649.         mov     eax, [edi+4*2]
  650.         movzx   eax, al
  651.         mov     eax, [Te1+4*eax]
  652.         and     eax, 0x000000ff
  653.         xor     ecx, eax
  654.  
  655.         mov     [esi+4*3], ecx
  656.  
  657.         mov     edi, [_out]
  658.         lodsd
  659.         bswap   eax
  660.         stosd
  661.         lodsd
  662.         bswap   eax
  663.         stosd
  664.         lodsd
  665.         bswap   eax
  666.         stosd
  667.         lodsd
  668.         bswap   eax
  669.         stosd
  670.  
  671.         ret
  672. endp
  673.  
  674. aes256.decrypt = aes.decrypt
  675. proc aes.decrypt uses ebx esi edi, _key, _in, _out
  676. locals
  677.         s       rd 4
  678.         t       rd 4
  679.         r       dd ?
  680. endl
  681.         mov     ebx, [_key]
  682.         mov     esi, [_in]
  683.         lea     edi, [s]
  684.  
  685.         mov     eax, [esi+4*0]
  686.         bswap   eax
  687.         xor     eax, [ebx+ctx_aes.key+4*0]
  688.         mov     [edi+4*0], eax
  689.  
  690.         mov     eax, [esi+4*1]
  691.         bswap   eax
  692.         xor     eax, [ebx+ctx_aes.key+4*1]
  693.         mov     [edi+4*1], eax
  694.  
  695.         mov     eax, [esi+4*2]
  696.         bswap   eax
  697.         xor     eax, [ebx+ctx_aes.key+4*2]
  698.         mov     [edi+4*2], eax
  699.  
  700.         mov     eax, [esi+4*3]
  701.         bswap   eax
  702.         xor     eax, [ebx+ctx_aes.key+4*3]
  703.         mov     [edi+4*3], eax
  704.  
  705.         mov     eax, [ebx+ctx_aes.rounds]
  706.         shr     eax, 1
  707.         mov     [r], eax
  708.   .for:
  709.         lea     esi, [s]
  710.         lea     edi, [t]
  711.  
  712.         mov     ecx, [ebx+ctx_aes.key+4*4]
  713.  
  714.         mov     eax, [esi+4*0]
  715.         shr     eax, 24
  716.         mov     eax, [Td0+4*eax]
  717.         xor     ecx, eax
  718.  
  719.         mov     eax, [esi+4*3]
  720.         shr     eax, 16
  721.         movzx   eax, al
  722.         mov     eax, [Td1+4*eax]
  723.         xor     ecx, eax
  724.  
  725.         mov     eax, [esi+4*2]
  726.         shr     eax, 8
  727.         movzx   eax, al
  728.         mov     eax, [Td2+4*eax]
  729.         xor     ecx, eax
  730.  
  731.         mov     eax, [esi+4*1]
  732.         movzx   eax, al
  733.         mov     eax, [Td3+4*eax]
  734.         xor     ecx, eax
  735.  
  736.         mov     [edi+4*0], ecx
  737.  
  738.  
  739.         mov     ecx, [ebx+ctx_aes.key+4*5]
  740.  
  741.         mov     eax, [esi+4*1]
  742.         shr     eax, 24
  743.         mov     eax, [Td0+4*eax]
  744.         xor     ecx, eax
  745.  
  746.         mov     eax, [esi+4*0]
  747.         shr     eax, 16
  748.         movzx   eax, al
  749.         mov     eax, [Td1+4*eax]
  750.         xor     ecx, eax
  751.  
  752.         mov     eax, [esi+4*3]
  753.         shr     eax, 8
  754.         movzx   eax, al
  755.         mov     eax, [Td2+4*eax]
  756.         xor     ecx, eax
  757.  
  758.         mov     eax, [esi+4*2]
  759.         movzx   eax, al
  760.         mov     eax, [Td3+4*eax]
  761.         xor     ecx, eax
  762.  
  763.         mov     [edi+4*1], ecx
  764.  
  765.  
  766.         mov     ecx, [ebx+ctx_aes.key+4*6]
  767.  
  768.         mov     eax, [esi+4*2]
  769.         shr     eax, 24
  770.         mov     eax, [Td0+4*eax]
  771.         xor     ecx, eax
  772.  
  773.         mov     eax, [esi+4*1]
  774.         shr     eax, 16
  775.         movzx   eax, al
  776.         mov     eax, [Td1+4*eax]
  777.         xor     ecx, eax
  778.  
  779.         mov     eax, [esi+4*0]
  780.         shr     eax, 8
  781.         movzx   eax, al
  782.         mov     eax, [Td2+4*eax]
  783.         xor     ecx, eax
  784.  
  785.         mov     eax, [esi+4*3]
  786.         movzx   eax, al
  787.         mov     eax, [Td3+4*eax]
  788.         xor     ecx, eax
  789.  
  790.         mov     [edi+4*2], ecx
  791.  
  792.  
  793.         mov     ecx, [ebx+ctx_aes.key+4*7]
  794.  
  795.         mov     eax, [esi+4*3]
  796.         shr     eax, 24
  797.         mov     eax, [Td0+4*eax]
  798.         xor     ecx, eax
  799.  
  800.         mov     eax, [esi+4*2]
  801.         shr     eax, 16
  802.         movzx   eax, al
  803.         mov     eax, [Td1+4*eax]
  804.         xor     ecx, eax
  805.  
  806.         mov     eax, [esi+4*1]
  807.         shr     eax, 8
  808.         movzx   eax, al
  809.         mov     eax, [Td2+4*eax]
  810.         xor     ecx, eax
  811.  
  812.         mov     eax, [esi+4*0]
  813.         movzx   eax, al
  814.         mov     eax, [Td3+4*eax]
  815.         xor     ecx, eax
  816.  
  817.         mov     [edi+4*3], ecx
  818.  
  819.  
  820.         add     ebx, 4*8
  821.         dec     [r]
  822.         jz      .end_for
  823.  
  824.  
  825.         mov     ecx, [ebx+ctx_aes.key+4*0]
  826.  
  827.         mov     eax, [edi+4*0]
  828.         shr     eax, 24
  829.         mov     eax, [Td0+4*eax]
  830.         xor     ecx, eax
  831.  
  832.         mov     eax, [edi+4*3]
  833.         shr     eax, 16
  834.         movzx   eax, al
  835.         mov     eax, [Td1+4*eax]
  836.         xor     ecx, eax
  837.  
  838.         mov     eax, [edi+4*2]
  839.         shr     eax, 8
  840.         movzx   eax, al
  841.         mov     eax, [Td2+4*eax]
  842.         xor     ecx, eax
  843.  
  844.         mov     eax, [edi+4*1]
  845.         movzx   eax, al
  846.         mov     eax, [Td3+4*eax]
  847.         xor     ecx, eax
  848.  
  849.         mov     [esi+4*0], ecx
  850.  
  851.  
  852.         mov     ecx, [ebx+ctx_aes.key+4*1]
  853.  
  854.         mov     eax, [edi+4*1]
  855.         shr     eax, 24
  856.         mov     eax, [Td0+4*eax]
  857.         xor     ecx, eax
  858.  
  859.         mov     eax, [edi+4*0]
  860.         shr     eax, 16
  861.         movzx   eax, al
  862.         mov     eax, [Td1+4*eax]
  863.         xor     ecx, eax
  864.  
  865.         mov     eax, [edi+4*3]
  866.         shr     eax, 8
  867.         movzx   eax, al
  868.         mov     eax, [Td2+4*eax]
  869.         xor     ecx, eax
  870.  
  871.         mov     eax, [edi+4*2]
  872.         movzx   eax, al
  873.         mov     eax, [Td3+4*eax]
  874.         xor     ecx, eax
  875.  
  876.         mov     [esi+4*1], ecx
  877.  
  878.  
  879.         mov     ecx, [ebx+ctx_aes.key+4*2]
  880.  
  881.         mov     eax, [edi+4*2]
  882.         shr     eax, 24
  883.         mov     eax, [Td0+4*eax]
  884.         xor     ecx, eax
  885.  
  886.         mov     eax, [edi+4*1]
  887.         shr     eax, 16
  888.         movzx   eax, al
  889.         mov     eax, [Td1+4*eax]
  890.         xor     ecx, eax
  891.  
  892.         mov     eax, [edi+4*0]
  893.         shr     eax, 8
  894.         movzx   eax, al
  895.         mov     eax, [Td2+4*eax]
  896.         xor     ecx, eax
  897.  
  898.         mov     eax, [edi+4*3]
  899.         movzx   eax, al
  900.         mov     eax, [Td3+4*eax]
  901.         xor     ecx, eax
  902.  
  903.         mov     [esi+4*2], ecx
  904.  
  905.  
  906.         mov     ecx, [ebx+ctx_aes.key+4*3]
  907.  
  908.         mov     eax, [edi+4*3]
  909.         shr     eax, 24
  910.         mov     eax, [Td0+4*eax]
  911.         xor     ecx, eax
  912.  
  913.         mov     eax, [edi+4*2]
  914.         shr     eax, 16
  915.         movzx   eax, al
  916.         mov     eax, [Td1+4*eax]
  917.         xor     ecx, eax
  918.  
  919.         mov     eax, [edi+4*1]
  920.         shr     eax, 8
  921.         movzx   eax, al
  922.         mov     eax, [Td2+4*eax]
  923.         xor     ecx, eax
  924.  
  925.         mov     eax, [edi+4*0]
  926.         movzx   eax, al
  927.         mov     eax, [Td3+4*eax]
  928.         xor     ecx, eax
  929.  
  930.         mov     [esi+4*3], ecx
  931.  
  932.         jmp     .for
  933.   .end_for:
  934.  
  935. ; Apply last round
  936.  
  937.         mov     ecx, [ebx+ctx_aes.key+4*0]
  938.  
  939.         mov     eax, [edi+4*0]
  940.         shr     eax, 24
  941.         movzx   eax, [Td4+eax]
  942.         shl     eax, 24
  943.         xor     ecx, eax
  944.  
  945.         mov     eax, [edi+4*3]
  946.         shr     eax, 16
  947.         movzx   eax, al
  948.         movzx   eax, [Td4+eax]
  949.         shl     eax, 16
  950.         xor     ecx, eax
  951.  
  952.         mov     eax, [edi+4*2]
  953.         shr     eax, 8
  954.         movzx   eax, al
  955.         movzx   eax, [Td4+eax]
  956.         shl     eax, 8
  957.         xor     ecx, eax
  958.  
  959.         mov     eax, [edi+4*1]
  960.         movzx   eax, al
  961.         movzx   eax, [Td4+eax]
  962.         xor     ecx, eax
  963.  
  964.         mov     [esi+4*0], ecx
  965.  
  966.  
  967.         mov     ecx, [ebx+ctx_aes.key+4*1]
  968.  
  969.         mov     eax, [edi+4*1]
  970.         shr     eax, 24
  971.         movzx   eax, [Td4+eax]
  972.         shl     eax, 24
  973.         xor     ecx, eax
  974.  
  975.         mov     eax, [edi+4*0]
  976.         shr     eax, 16
  977.         movzx   eax, al
  978.         movzx   eax, [Td4+eax]
  979.         shl     eax, 16
  980.         xor     ecx, eax
  981.  
  982.         mov     eax, [edi+4*3]
  983.         shr     eax, 8
  984.         movzx   eax, al
  985.         movzx   eax, [Td4+eax]
  986.         shl     eax, 8
  987.         xor     ecx, eax
  988.  
  989.         mov     eax, [edi+4*2]
  990.         movzx   eax, al
  991.         movzx   eax, [Td4+eax]
  992.         xor     ecx, eax
  993.  
  994.         mov     [esi+4*1], ecx
  995.  
  996.  
  997.         mov     ecx, [ebx+ctx_aes.key+4*2]
  998.  
  999.         mov     eax, [edi+4*2]
  1000.         shr     eax, 24
  1001.         movzx   eax, [Td4+eax]
  1002.         shl     eax, 24
  1003.         xor     ecx, eax
  1004.  
  1005.         mov     eax, [edi+4*1]
  1006.         shr     eax, 16
  1007.         movzx   eax, al
  1008.         movzx   eax, [Td4+eax]
  1009.         shl     eax, 16
  1010.         xor     ecx, eax
  1011.  
  1012.         mov     eax, [edi+4*0]
  1013.         shr     eax, 8
  1014.         movzx   eax, al
  1015.         movzx   eax, [Td4+eax]
  1016.         shl     eax, 8
  1017.         xor     ecx, eax
  1018.  
  1019.         mov     eax, [edi+4*3]
  1020.         movzx   eax, al
  1021.         movzx   eax, [Td4+eax]
  1022.         xor     ecx, eax
  1023.  
  1024.         mov     [esi+4*2], ecx
  1025.  
  1026.  
  1027.         mov     ecx, [ebx+ctx_aes.key+4*3]
  1028.  
  1029.         mov     eax, [edi+4*3]
  1030.         shr     eax, 24
  1031.         movzx   eax, [Td4+eax]
  1032.         shl     eax, 24
  1033.         xor     ecx, eax
  1034.  
  1035.         mov     eax, [edi+4*2]
  1036.         shr     eax, 16
  1037.         movzx   eax, al
  1038.         movzx   eax, [Td4+eax]
  1039.         shl     eax, 16
  1040.         xor     ecx, eax
  1041.  
  1042.         mov     eax, [edi+4*1]
  1043.         shr     eax, 8
  1044.         movzx   eax, al
  1045.         movzx   eax, [Td4+eax]
  1046.         shl     eax, 8
  1047.         xor     ecx, eax
  1048.  
  1049.         mov     eax, [edi+4*0]
  1050.         movzx   eax, al
  1051.         movzx   eax, [Td4+eax]
  1052.         xor     ecx, eax
  1053.  
  1054.         mov     [esi+4*3], ecx
  1055.  
  1056.  
  1057.         mov     edi, [_out]
  1058.         lodsd
  1059.         bswap   eax
  1060.         stosd
  1061.         lodsd
  1062.         bswap   eax
  1063.         stosd
  1064.         lodsd
  1065.         bswap   eax
  1066.         stosd
  1067.         lodsd
  1068.         bswap   eax
  1069.         stosd
  1070.  
  1071.         ret
  1072. endp
  1073.  
  1074. iglobal
  1075.  
  1076. Te0     dd \
  1077.         0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, \
  1078.         0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, \
  1079.         0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, \
  1080.         0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, \
  1081.         0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, \
  1082.         0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, \
  1083.         0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, \
  1084.         0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, \
  1085.         0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, \
  1086.         0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, \
  1087.         0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, \
  1088.         0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, \
  1089.         0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, \
  1090.         0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, \
  1091.         0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, \
  1092.         0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, \
  1093.         0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, \
  1094.         0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, \
  1095.         0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, \
  1096.         0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, \
  1097.         0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, \
  1098.         0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, \
  1099.         0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, \
  1100.         0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, \
  1101.         0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, \
  1102.         0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, \
  1103.         0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, \
  1104.         0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, \
  1105.         0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, \
  1106.         0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, \
  1107.         0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, \
  1108.         0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, \
  1109.         0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, \
  1110.         0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, \
  1111.         0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, \
  1112.         0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, \
  1113.         0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, \
  1114.         0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, \
  1115.         0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, \
  1116.         0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, \
  1117.         0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, \
  1118.         0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, \
  1119.         0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, \
  1120.         0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, \
  1121.         0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, \
  1122.         0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, \
  1123.         0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, \
  1124.         0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, \
  1125.         0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, \
  1126.         0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, \
  1127.         0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, \
  1128.         0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, \
  1129.         0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, \
  1130.         0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, \
  1131.         0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, \
  1132.         0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, \
  1133.         0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, \
  1134.         0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, \
  1135.         0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, \
  1136.         0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, \
  1137.         0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, \
  1138.         0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, \
  1139.         0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, \
  1140.         0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a
  1141.  
  1142. Te1     dd \
  1143.         0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, \
  1144.         0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, \
  1145.         0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, \
  1146.         0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, \
  1147.         0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, \
  1148.         0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, \
  1149.         0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, \
  1150.         0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, \
  1151.         0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, \
  1152.         0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, \
  1153.         0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, \
  1154.         0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, \
  1155.         0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, \
  1156.         0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, \
  1157.         0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, \
  1158.         0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, \
  1159.         0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, \
  1160.         0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, \
  1161.         0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, \
  1162.         0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, \
  1163.         0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, \
  1164.         0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, \
  1165.         0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, \
  1166.         0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, \
  1167.         0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, \
  1168.         0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, \
  1169.         0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, \
  1170.         0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, \
  1171.         0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, \
  1172.         0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, \
  1173.         0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, \
  1174.         0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, \
  1175.         0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, \
  1176.         0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, \
  1177.         0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, \
  1178.         0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, \
  1179.         0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, \
  1180.         0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, \
  1181.         0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, \
  1182.         0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, \
  1183.         0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, \
  1184.         0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, \
  1185.         0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, \
  1186.         0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, \
  1187.         0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, \
  1188.         0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, \
  1189.         0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, \
  1190.         0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, \
  1191.         0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, \
  1192.         0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, \
  1193.         0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, \
  1194.         0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, \
  1195.         0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, \
  1196.         0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, \
  1197.         0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, \
  1198.         0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, \
  1199.         0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, \
  1200.         0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, \
  1201.         0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, \
  1202.         0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, \
  1203.         0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, \
  1204.         0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, \
  1205.         0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, \
  1206.         0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616
  1207.  
  1208. Te2     dd \
  1209.         0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, \
  1210.         0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, \
  1211.         0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, \
  1212.         0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, \
  1213.         0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, \
  1214.         0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, \
  1215.         0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, \
  1216.         0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, \
  1217.         0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, \
  1218.         0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, \
  1219.         0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, \
  1220.         0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, \
  1221.         0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, \
  1222.         0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, \
  1223.         0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, \
  1224.         0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, \
  1225.         0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, \
  1226.         0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, \
  1227.         0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, \
  1228.         0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, \
  1229.         0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, \
  1230.         0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, \
  1231.         0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, \
  1232.         0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, \
  1233.         0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, \
  1234.         0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, \
  1235.         0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, \
  1236.         0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, \
  1237.         0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, \
  1238.         0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, \
  1239.         0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, \
  1240.         0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, \
  1241.         0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, \
  1242.         0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, \
  1243.         0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, \
  1244.         0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, \
  1245.         0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, \
  1246.         0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, \
  1247.         0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, \
  1248.         0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, \
  1249.         0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, \
  1250.         0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, \
  1251.         0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, \
  1252.         0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, \
  1253.         0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, \
  1254.         0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, \
  1255.         0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, \
  1256.         0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, \
  1257.         0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, \
  1258.         0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, \
  1259.         0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, \
  1260.         0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, \
  1261.         0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, \
  1262.         0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, \
  1263.         0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, \
  1264.         0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, \
  1265.         0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, \
  1266.         0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, \
  1267.         0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, \
  1268.         0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, \
  1269.         0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, \
  1270.         0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, \
  1271.         0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, \
  1272.         0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16
  1273.  
  1274. Te3     dd \
  1275.         0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, \
  1276.         0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, \
  1277.         0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, \
  1278.         0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, \
  1279.         0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, \
  1280.         0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, \
  1281.         0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, \
  1282.         0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, \
  1283.         0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, \
  1284.         0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, \
  1285.         0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, \
  1286.         0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, \
  1287.         0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, \
  1288.         0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, \
  1289.         0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, \
  1290.         0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, \
  1291.         0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, \
  1292.         0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, \
  1293.         0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, \
  1294.         0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, \
  1295.         0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, \
  1296.         0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, \
  1297.         0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, \
  1298.         0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, \
  1299.         0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, \
  1300.         0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, \
  1301.         0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, \
  1302.         0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, \
  1303.         0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, \
  1304.         0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, \
  1305.         0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, \
  1306.         0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, \
  1307.         0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, \
  1308.         0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, \
  1309.         0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, \
  1310.         0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, \
  1311.         0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, \
  1312.         0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, \
  1313.         0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, \
  1314.         0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, \
  1315.         0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, \
  1316.         0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, \
  1317.         0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, \
  1318.         0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, \
  1319.         0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, \
  1320.         0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, \
  1321.         0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, \
  1322.         0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, \
  1323.         0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, \
  1324.         0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, \
  1325.         0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, \
  1326.         0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, \
  1327.         0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, \
  1328.         0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, \
  1329.         0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, \
  1330.         0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, \
  1331.         0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, \
  1332.         0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, \
  1333.         0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, \
  1334.         0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, \
  1335.         0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, \
  1336.         0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, \
  1337.         0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, \
  1338.         0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c
  1339.  
  1340.  
  1341. Td0     dd \
  1342.         0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, \
  1343.         0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, \
  1344.         0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, \
  1345.         0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, \
  1346.         0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, \
  1347.         0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, \
  1348.         0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, \
  1349.         0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, \
  1350.         0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, \
  1351.         0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, \
  1352.         0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, \
  1353.         0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, \
  1354.         0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, \
  1355.         0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, \
  1356.         0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, \
  1357.         0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, \
  1358.         0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, \
  1359.         0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, \
  1360.         0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, \
  1361.         0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, \
  1362.         0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, \
  1363.         0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, \
  1364.         0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, \
  1365.         0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, \
  1366.         0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, \
  1367.         0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, \
  1368.         0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, \
  1369.         0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, \
  1370.         0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, \
  1371.         0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, \
  1372.         0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, \
  1373.         0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, \
  1374.         0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, \
  1375.         0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, \
  1376.         0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, \
  1377.         0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, \
  1378.         0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, \
  1379.         0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, \
  1380.         0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, \
  1381.         0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, \
  1382.         0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, \
  1383.         0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, \
  1384.         0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, \
  1385.         0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, \
  1386.         0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, \
  1387.         0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, \
  1388.         0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, \
  1389.         0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, \
  1390.         0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, \
  1391.         0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, \
  1392.         0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, \
  1393.         0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, \
  1394.         0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, \
  1395.         0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, \
  1396.         0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, \
  1397.         0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, \
  1398.         0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, \
  1399.         0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, \
  1400.         0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, \
  1401.         0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, \
  1402.         0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, \
  1403.         0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, \
  1404.         0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, \
  1405.         0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742
  1406.  
  1407. Td1     dd \
  1408.         0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, \
  1409.         0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, \
  1410.         0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, \
  1411.         0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, \
  1412.         0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, \
  1413.         0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, \
  1414.         0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, \
  1415.         0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, \
  1416.         0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, \
  1417.         0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, \
  1418.         0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, \
  1419.         0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, \
  1420.         0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, \
  1421.         0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, \
  1422.         0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, \
  1423.         0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, \
  1424.         0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, \
  1425.         0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, \
  1426.         0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, \
  1427.         0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, \
  1428.         0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, \
  1429.         0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, \
  1430.         0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, \
  1431.         0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, \
  1432.         0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, \
  1433.         0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, \
  1434.         0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, \
  1435.         0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, \
  1436.         0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, \
  1437.         0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, \
  1438.         0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, \
  1439.         0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, \
  1440.         0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, \
  1441.         0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, \
  1442.         0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, \
  1443.         0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, \
  1444.         0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, \
  1445.         0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, \
  1446.         0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, \
  1447.         0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, \
  1448.         0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, \
  1449.         0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, \
  1450.         0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, \
  1451.         0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, \
  1452.         0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, \
  1453.         0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, \
  1454.         0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, \
  1455.         0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, \
  1456.         0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, \
  1457.         0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, \
  1458.         0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, \
  1459.         0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, \
  1460.         0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, \
  1461.         0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, \
  1462.         0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, \
  1463.         0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, \
  1464.         0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, \
  1465.         0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, \
  1466.         0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, \
  1467.         0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, \
  1468.         0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, \
  1469.         0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, \
  1470.         0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, \
  1471.         0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857
  1472.  
  1473. Td2     dd \
  1474.         0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, \
  1475.         0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, \
  1476.         0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, \
  1477.         0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, \
  1478.         0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, \
  1479.         0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, \
  1480.         0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, \
  1481.         0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, \
  1482.         0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, \
  1483.         0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, \
  1484.         0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, \
  1485.         0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, \
  1486.         0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, \
  1487.         0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, \
  1488.         0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, \
  1489.         0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, \
  1490.         0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, \
  1491.         0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, \
  1492.         0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, \
  1493.         0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, \
  1494.         0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, \
  1495.         0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, \
  1496.         0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, \
  1497.         0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, \
  1498.         0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, \
  1499.         0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, \
  1500.         0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, \
  1501.         0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, \
  1502.         0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, \
  1503.         0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, \
  1504.         0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, \
  1505.         0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, \
  1506.         0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, \
  1507.         0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, \
  1508.         0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, \
  1509.         0xdccad731, 0x85104263, 0x22401397, 0x112084c6, \
  1510.         0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, \
  1511.         0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, \
  1512.         0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, \
  1513.         0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, \
  1514.         0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, \
  1515.         0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, \
  1516.         0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, \
  1517.         0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, \
  1518.         0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, \
  1519.         0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, \
  1520.         0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, \
  1521.         0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, \
  1522.         0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, \
  1523.         0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, \
  1524.         0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, \
  1525.         0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, \
  1526.         0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, \
  1527.         0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, \
  1528.         0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, \
  1529.         0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, \
  1530.         0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, \
  1531.         0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, \
  1532.         0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, \
  1533.         0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, \
  1534.         0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, \
  1535.         0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, \
  1536.         0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, \
  1537.         0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8
  1538.  
  1539. Td3     dd \
  1540.         0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, \
  1541.         0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, \
  1542.         0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, \
  1543.         0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, \
  1544.         0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, \
  1545.         0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, \
  1546.         0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, \
  1547.         0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, \
  1548.         0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, \
  1549.         0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, \
  1550.         0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, \
  1551.         0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, \
  1552.         0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, \
  1553.         0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, \
  1554.         0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, \
  1555.         0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, \
  1556.         0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, \
  1557.         0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, \
  1558.         0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, \
  1559.         0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, \
  1560.         0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, \
  1561.         0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, \
  1562.         0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, \
  1563.         0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, \
  1564.         0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, \
  1565.         0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, \
  1566.         0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, \
  1567.         0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, \
  1568.         0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, \
  1569.         0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, \
  1570.         0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, \
  1571.         0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, \
  1572.         0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, \
  1573.         0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, \
  1574.         0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, \
  1575.         0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, \
  1576.         0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, \
  1577.         0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, \
  1578.         0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, \
  1579.         0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, \
  1580.         0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, \
  1581.         0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, \
  1582.         0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, \
  1583.         0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, \
  1584.         0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, \
  1585.         0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, \
  1586.         0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, \
  1587.         0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, \
  1588.         0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, \
  1589.         0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, \
  1590.         0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, \
  1591.         0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, \
  1592.         0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, \
  1593.         0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, \
  1594.         0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, \
  1595.         0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, \
  1596.         0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, \
  1597.         0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, \
  1598.         0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, \
  1599.         0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, \
  1600.         0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, \
  1601.         0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, \
  1602.         0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, \
  1603.         0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0
  1604.  
  1605. Td4     db \
  1606.         0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, \
  1607.         0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, \
  1608.         0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, \
  1609.         0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, \
  1610.         0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, \
  1611.         0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, \
  1612.         0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, \
  1613.         0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, \
  1614.         0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, \
  1615.         0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, \
  1616.         0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, \
  1617.         0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, \
  1618.         0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, \
  1619.         0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, \
  1620.         0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, \
  1621.         0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, \
  1622.         0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, \
  1623.         0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, \
  1624.         0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, \
  1625.         0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, \
  1626.         0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, \
  1627.         0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, \
  1628.         0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, \
  1629.         0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, \
  1630.         0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, \
  1631.         0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, \
  1632.         0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, \
  1633.         0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, \
  1634.         0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, \
  1635.         0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, \
  1636.         0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, \
  1637.         0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
  1638.  
  1639. rcon    dd \
  1640.         0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000, \
  1641.         0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000
  1642.  
  1643. endg
  1644.