1. --Message
  2. --Digester
  3. --MD5
  4.  
  5. --( public:
  6. --(  <#string> CoMD5DigestFastest (<#string>)
  7. --(
  8. --( abstract:
  9. --(   Fast lingo implementation of the MD5 algorithm.
  10. --(   Implementation by Joni Huhmarniemi (21/2/2004).
  11. --(   © 1991-2, RSA Data Security, Inc.
  12.  
  13. --( public )-- -- -- -- -- -- -- -- -- -- -- -- --//
  14.  
  15. --( Returns the hex representation of string's MD5.
  16. --( i:<#string>
  17. --( o: -
  18. --( r:<#string>
  19.  
  20. on CoMD5DigestFastest(a_sInput)
  21.  
  22.   -- Convert string to list of little-endian words...
  23.  
  24.   t_iLen = length(a_sInput) * 8
  25.   t_iCnt = (t_iLen + 64) / 512 * 16 + 16
  26.  
  27.   -- Create list, fill with zeros...
  28.  
  29.   x = []
  30.   x.SetAt(t_iCnt, 0)
  31.  
  32.   t_fArr = [1, 256, 65536, 16777216]
  33.   i = 0
  34.   j = 0
  35.   repeat while i < t_iLen
  36.     j = j + 1
  37.     t_iNext = i / 32 + 1
  38.     t_iTemp = bitAnd(charToNum(char (i / 8 + 1) of a_sInput), 255) * t_fArr[j]
  39.     x[t_iNext] = bitOr(x[t_iNext], t_iTemp)
  40.     i = i + 8
  41.     j = j mod 4
  42.   end repeat
  43.  
  44.   -- Append padding...
  45.  
  46.   t_iNext = t_iLen / 32 + 1
  47.   x[t_iNext] = bitOr(x[t_iNext], 128 * t_fArr[j + 1])
  48.   x[(t_iLen + 64) / 512 * 16 + 15] = t_iLen
  49.  
  50.   -- Actual algorithm starts here...
  51.  
  52.   a =  1732584193
  53.   b = -271733879
  54.   c = -1732584194
  55.   d =  271733878
  56.   i =  1
  57.  
  58.   t_iWrap = the maxInteger + 1
  59.   t_iCount = x.count + 1
  60.  
  61.   repeat while i < t_iCount
  62.    
  63.     olda = a
  64.     oldb = b
  65.     oldc = c
  66.     oldd = d
  67.    
  68.     -- Round(1) --
  69.    
  70.     n = bitOr(bitAnd(b, c), bitAnd(bitNot(b), d)) + a + x[i] - 680876936
  71.     if(n < 0) then
  72.       a = bitOr(n * 128, bitOr((n + t_iWrap) / 33554432, 64)) + b
  73.     else
  74.       a = bitOr(n * 128, n / 33554432) + b
  75.     end if
  76.    
  77.     n = bitOr(bitAnd(a, b), bitAnd(bitNot(a), c)) + d + x[i + 1] - 389564586
  78.     if(n < 0) then
  79.       d = bitOr(n * 4096, bitOr((n + t_iWrap) / 1048576, 2048)) + a
  80.     else
  81.       d = bitOr(n * 4096, n / 1048576) + a
  82.     end if
  83.    
  84.     n = bitOr(bitAnd(d, a), bitAnd(bitNot(d), b)) + c + x[i + 2] + 606105819
  85.     if(n < 0) then
  86.       c = bitOr(n * 131072, bitOr((n + t_iWrap) / 32768, 65536)) + d
  87.     else
  88.       c = bitOr(n * 131072, n / 32768) + d
  89.     end if
  90.    
  91.     n = bitOr(bitAnd(c, d), bitAnd(bitNot(c), a)) + b + x[i + 3] - 1044525330
  92.     if(n < 0) then
  93.       b = bitOr(n * 4194304, bitOr((n + t_iWrap) / 1024, 2097152)) + c
  94.     else
  95.       b = bitOr(n * 4194304, n / 1024) + c
  96.     end if
  97.    
  98.     n = bitOr(bitAnd(b, c), bitAnd(bitNot(b), d)) + a + x[i + 4] - 176418897
  99.     if(n < 0) then
  100.       a = bitOr(n * 128, bitOr((n + t_iWrap) / 33554432, 64)) + b
  101.     else
  102.       a = bitOr(n * 128, n / 33554432) + b
  103.     end if
  104.    
  105.     n = bitOr(bitAnd(a, b), bitAnd(bitNot(a), c)) + d + x[i + 5] + 1200080426
  106.     if(n < 0) then
  107.       d = bitOr(n * 4096, bitOr((n + t_iWrap) / 1048576, 2048)) + a
  108.     else
  109.       d = bitOr(n * 4096, n / 1048576) + a
  110.     end if
  111.    
  112.     n = bitOr(bitAnd(d, a), bitAnd(bitNot(d), b)) + c + x[i + 6] - 1473231341
  113.     if(n < 0) then
  114.       c = bitOr(n * 131072, bitOr((n + t_iWrap) / 32768, 65536)) + d
  115.     else
  116.       c = bitOr(n * 131072, n / 32768) + d
  117.     end if
  118.    
  119.     n = bitOr(bitAnd(c, d), bitAnd(bitNot(c), a)) + b + x[i + 7] - 45705983
  120.     if(n < 0) then
  121.       b = bitOr(n * 4194304, bitOr((n + t_iWrap) / 1024, 2097152)) + c
  122.     else
  123.       b = bitOr(n * 4194304, n / 1024) + c
  124.     end if
  125.    
  126.     n = bitOr(bitAnd(b, c), bitAnd(bitNot(b), d)) + a + x[i + 8] + 1770035416
  127.     if(n < 0) then
  128.       a = bitOr(n * 128, bitOr((n + t_iWrap) / 33554432, 64)) + b
  129.     else
  130.       a = bitOr(n * 128, n / 33554432) + b
  131.     end if
  132.    
  133.     n = bitOr(bitAnd(a, b), bitAnd(bitNot(a), c)) + d + x[i + 9] - 1958414417
  134.     if(n < 0) then
  135.       d = bitOr(n * 4096, bitOr((n + t_iWrap) / 1048576, 2048)) + a
  136.     else
  137.       d = bitOr(n * 4096, n / 1048576) + a
  138.     end if
  139.    
  140.     n = bitOr(bitAnd(d, a), bitAnd(bitNot(d), b)) + c + x[i + 10] - 42063
  141.     if(n < 0) then
  142.       c = bitOr(n * 131072, bitOr((n + t_iWrap) / 32768, 65536)) + d
  143.     else
  144.       c = bitOr(n * 131072, n / 32768) + d
  145.     end if
  146.    
  147.     n = bitOr(bitAnd(c, d), bitAnd(bitNot(c), a)) + b + x[i + 11] - 1990404162
  148.     if(n < 0) then
  149.       b = bitOr(n * 4194304, bitOr((n + t_iWrap) / 1024, 2097152)) + c
  150.     else
  151.       b = bitOr(n * 4194304, n / 1024) + c
  152.     end if
  153.    
  154.     n = bitOr(bitAnd(b, c), bitAnd(bitNot(b), d)) + a + x[i + 12] + 1804603682
  155.     if(n < 0) then
  156.       a = bitOr(n * 128, bitOr((n + t_iWrap) / 33554432, 64)) + b
  157.     else
  158.       a = bitOr(n * 128, n / 33554432) + b
  159.     end if
  160.    
  161.     n = bitOr(bitAnd(a, b), bitAnd(bitNot(a), c)) + d + x[i + 13] - 40341101
  162.     if(n < 0) then
  163.       d = bitOr(n * 4096, bitOr((n + t_iWrap) / 1048576, 2048)) + a
  164.     else
  165.       d = bitOr(n * 4096, n / 1048576) + a
  166.     end if
  167.    
  168.     n = bitOr(bitAnd(d, a), bitAnd(bitNot(d), b)) + c + x[i + 14] - 1502002290
  169.     if(n < 0) then
  170.       c = bitOr(n * 131072, bitOr((n + t_iWrap) / 32768, 65536)) + d
  171.     else
  172.       c = bitOr(n * 131072, n / 32768) + d
  173.     end if
  174.    
  175.     n = bitOr(bitAnd(c, d), bitAnd(bitNot(c), a)) + b + x[i + 15] + 1236535329
  176.     if(n < 0) then
  177.       b = bitOr(n * 4194304, bitOr((n + t_iWrap) / 1024, 2097152)) + c
  178.     else
  179.       b = bitOr(n * 4194304, n / 1024) + c
  180.     end if
  181.    
  182.     -- Round(2) --
  183.    
  184.     n = bitOr(bitAnd(b, d), bitAnd(c, bitNot(d))) + a + x[i + 1] - 165796510
  185.     if(n < 0) then
  186.       a = bitOr(n * 32, bitOr((n + t_iWrap) / 134217728, 16)) + b
  187.     else
  188.       a = bitOr(n * 32, n / 134217728) + b
  189.     end if
  190.    
  191.     n = bitOr(bitAnd(a, c), bitAnd(b, bitNot(c))) + d + x[i + 6] - 1069501632
  192.     if(n < 0) then
  193.       d = bitOr(n * 512, bitOr((n + t_iWrap) / 8388608, 256)) + a
  194.     else
  195.       d = bitOr(n * 512, n / 8388608) + a
  196.     end if
  197.    
  198.     n = bitOr(bitAnd(d, b), bitAnd(a, bitNot(b))) + c + x[i + 11] + 643717713
  199.     if(n < 0) then
  200.       c = bitOr(n * 16384, bitOr((n + t_iWrap) / 262144, 8192)) + d
  201.     else
  202.       c = bitOr(n * 16384, n / 262144) + d
  203.     end if
  204.    
  205.     n = bitOr(bitAnd(c, a), bitAnd(d, bitNot(a))) + b + x[i] - 373897302
  206.     if(n < 0) then
  207.       b = bitOr(n * 1048576, bitOr((n + t_iWrap) / 4096, 524288)) + c
  208.     else
  209.       b = bitOr(n * 1048576, n / 4096) + c
  210.     end if
  211.    
  212.     n = bitOr(bitAnd(b, d), bitAnd(c, bitNot(d))) + a + x[i + 5] - 701558691
  213.     if(n < 0) then
  214.       a = bitOr(n * 32, bitOr((n + t_iWrap) / 134217728, 16)) + b
  215.     else
  216.       a = bitOr(n * 32, n / 134217728) + b
  217.     end if
  218.    
  219.     n = bitOr(bitAnd(a, c), bitAnd(b, bitNot(c))) + d + x[i + 10] + 38016083
  220.     if(n < 0) then
  221.       d = bitOr(n * 512, bitOr((n + t_iWrap) / 8388608, 256)) + a
  222.     else
  223.       d = bitOr(n * 512, n / 8388608) + a
  224.     end if
  225.    
  226.     n = bitOr(bitAnd(d, b), bitAnd(a, bitNot(b))) + c + x[i + 15] - 660478335
  227.     if(n < 0) then
  228.       c = bitOr(n * 16384, bitOr((n + t_iWrap) / 262144, 8192)) + d
  229.     else
  230.       c = bitOr(n * 16384, n / 262144) + d
  231.     end if
  232.    
  233.     n = bitOr(bitAnd(c, a), bitAnd(d, bitNot(a))) + b + x[i + 4] - 405537848
  234.     if(n < 0) then
  235.       b = bitOr(n * 1048576, bitOr((n + t_iWrap) / 4096, 524288)) + c
  236.     else
  237.       b = bitOr(n * 1048576, n / 4096) + c
  238.     end if
  239.    
  240.     n = bitOr(bitAnd(b, d), bitAnd(c, bitNot(d))) + a + x[i + 9] + 568446438
  241.     if(n < 0) then
  242.       a = bitOr(n * 32, bitOr((n + t_iWrap) / 134217728, 16)) + b
  243.     else
  244.       a = bitOr(n * 32, n / 134217728) + b
  245.     end if
  246.    
  247.     n = bitOr(bitAnd(a, c), bitAnd(b, bitNot(c))) + d + x[i + 14] - 1019803690
  248.     if(n < 0) then
  249.       d = bitOr(n * 512, bitOr((n + t_iWrap) / 8388608, 256)) + a
  250.     else
  251.       d = bitOr(n * 512, n / 8388608) + a
  252.     end if
  253.    
  254.     n = bitOr(bitAnd(d, b), bitAnd(a, bitNot(b))) + c + x[i + 3] - 187363961
  255.     if(n < 0) then
  256.       c = bitOr(n * 16384, bitOr((n + t_iWrap) / 262144, 8192)) + d
  257.     else
  258.       c = bitOr(n * 16384, n / 262144) + d
  259.     end if
  260.    
  261.     n = bitOr(bitAnd(c, a), bitAnd(d, bitNot(a))) + b + x[i + 8] + 1163531501
  262.     if(n < 0) then
  263.       b = bitOr(n * 1048576, bitOr((n + t_iWrap) / 4096, 524288)) + c
  264.     else
  265.       b = bitOr(n * 1048576, n / 4096) + c
  266.     end if
  267.    
  268.     n = bitOr(bitAnd(b, d), bitAnd(c, bitNot(d))) + a + x[i + 13] - 1444681467
  269.     if(n < 0) then
  270.       a = bitOr(n * 32, bitOr((n + t_iWrap) / 134217728, 16)) + b
  271.     else
  272.       a = bitOr(n * 32, n / 134217728) + b
  273.     end if
  274.    
  275.     n = bitOr(bitAnd(a, c), bitAnd(b, bitNot(c))) + d + x[i + 2] - 51403784
  276.     if(n < 0) then
  277.       d = bitOr(n * 512, bitOr((n + t_iWrap) / 8388608, 256)) + a
  278.     else
  279.       d = bitOr(n * 512, n / 8388608) + a
  280.     end if
  281.    
  282.     n = bitOr(bitAnd(d, b), bitAnd(a, bitNot(b))) + c + x[i + 7] + 1735328473
  283.     if(n < 0) then
  284.       c = bitOr(n * 16384, bitOr((n + t_iWrap) / 262144, 8192)) + d
  285.     else
  286.       c = bitOr(n * 16384, n / 262144) + d
  287.     end if
  288.    
  289.     n = bitOr(bitAnd(c, a), bitAnd(d, bitNot(a))) + b + x[i + 12] - 1926607734
  290.     if(n < 0) then
  291.       b = bitOr(n * 1048576, bitOr((n + t_iWrap) / 4096, 524288)) + c
  292.     else
  293.       b = bitOr(n * 1048576, n / 4096) + c
  294.     end if
  295.    
  296.     -- Round(3) --
  297.    
  298.     n = bitXor(bitXor(b, c), d) + a + x[i + 5] - 378558
  299.     if(n < 0) then
  300.       a = bitOr(n * 16, bitOr((n + t_iWrap) / 268435456, 8)) + b
  301.     else
  302.       a = bitOr(n * 16, n / 268435456) + b
  303.     end if
  304.    
  305.     n = bitXor(bitXor(a, b), c) + d + x[i + 8] - 2022574463
  306.     if(n < 0) then
  307.       d = bitOr(n * 2048, bitOr((n + t_iWrap) / 2097152, 1024)) + a
  308.     else
  309.       d = bitOr(n * 2048, n / 2097152) + a
  310.     end if
  311.    
  312.     n = bitXor(bitXor(d, a), b) + c + x[i + 11] + 1839030562
  313.     if(n < 0) then
  314.       c = bitOr(n * 65536, bitOr((n + t_iWrap) / 65536, 32768)) + d
  315.     else
  316.       c = bitOr(n * 65536, n / 65536) + d
  317.     end if
  318.    
  319.     n = bitXor(bitXor(c, d), a) + b + x[i + 14] - 35309556
  320.     if(n < 0) then
  321.       b = bitOr(n * 8388608, bitOr((n + t_iWrap) / 512, 4194304)) + c
  322.     else
  323.       b = bitOr(n * 8388608, n / 512) + c
  324.     end if
  325.    
  326.     n = bitXor(bitXor(b, c), d) + a + x[i + 1] - 1530992060
  327.     if(n < 0) then
  328.       a = bitOr(n * 16, bitOr((n + t_iWrap) / 268435456, 8)) + b
  329.     else
  330.       a = bitOr(n * 16, n / 268435456) + b
  331.     end if
  332.    
  333.     n = bitXor(bitXor(a, b), c) + d + x[i + 4] + 1272893353
  334.     if(n < 0) then
  335.       d = bitOr(n * 2048, bitOr((n + t_iWrap) / 2097152, 1024)) + a
  336.     else
  337.       d = bitOr(n * 2048, n / 2097152) + a
  338.     end if
  339.    
  340.     n = bitXor(bitXor(d, a), b) + c + x[i + 7] - 155497632
  341.     if(n < 0) then
  342.       c = bitOr(n * 65536, bitOr((n + t_iWrap) / 65536, 32768)) + d
  343.     else
  344.       c = bitOr(n * 65536, n / 65536) + d
  345.     end if
  346.    
  347.     n = bitXor(bitXor(c, d), a) + b + x[i + 10] - 1094730640
  348.     if(n < 0) then
  349.       b = bitOr(n * 8388608, bitOr((n + t_iWrap) / 512, 4194304)) + c
  350.     else
  351.       b = bitOr(n * 8388608, n / 512) + c
  352.     end if
  353.    
  354.     n = bitXor(bitXor(b, c), d) + a + x[i + 13] + 681279174
  355.     if(n < 0) then
  356.       a = bitOr(n * 16, bitOr((n + t_iWrap) / 268435456, 8)) + b
  357.     else
  358.       a = bitOr(n * 16, n / 268435456) + b
  359.     end if
  360.    
  361.     n = bitXor(bitXor(a, b), c) + d + x[i] - 358537222
  362.     if(n < 0) then
  363.       d = bitOr(n * 2048, bitOr((n + t_iWrap) / 2097152, 1024)) + a
  364.     else
  365.       d = bitOr(n * 2048, n / 2097152) + a
  366.     end if
  367.    
  368.     n = bitXor(bitXor(d, a), b) + c + x[i + 3] - 722521979
  369.     if(n < 0) then
  370.       c = bitOr(n * 65536, bitOr((n + t_iWrap) / 65536, 32768)) + d
  371.     else
  372.       c = bitOr(n * 65536, n / 65536) + d
  373.     end if
  374.    
  375.     n = bitXor(bitXor(c, d), a) + b + x[i + 6] + 76029189
  376.     if(n < 0) then
  377.       b = bitOr(n * 8388608, bitOr((n + t_iWrap) / 512, 4194304)) + c
  378.     else
  379.       b = bitOr(n * 8388608, n / 512) + c
  380.     end if
  381.    
  382.     n = bitXor(bitXor(b, c), d) + a + x[i + 9] - 640364487
  383.     if(n < 0) then
  384.       a = bitOr(n * 16, bitOr((n + t_iWrap) / 268435456, 8)) + b
  385.     else
  386.       a = bitOr(n * 16, n / 268435456) + b
  387.     end if
  388.    
  389.     n = bitXor(bitXor(a, b), c) + d + x[i + 12] - 421815835
  390.     if(n < 0) then
  391.       d = bitOr(n * 2048, bitOr((n + t_iWrap) / 2097152, 1024)) + a
  392.     else
  393.       d = bitOr(n * 2048, n / 2097152) + a
  394.     end if
  395.    
  396.     n = bitXor(bitXor(d, a), b) + c + x[i + 15] + 530742520
  397.     if(n < 0) then
  398.       c = bitOr(n * 65536, bitOr((n + t_iWrap) / 65536, 32768)) + d
  399.     else
  400.       c = bitOr(n * 65536, n / 65536) + d
  401.     end if
  402.    
  403.     n = bitXor(bitXor(c, d), a) + b + x[i + 2] - 995338651
  404.     if(n < 0) then
  405.       b = bitOr(n * 8388608, bitOr((n + t_iWrap) / 512, 4194304)) + c
  406.     else
  407.       b = bitOr(n * 8388608, n / 512) + c
  408.     end if
  409.    
  410.     -- Round(4) --
  411.    
  412.     n = bitXor(c, bitOr(b, bitNot(d))) + a + x[i] - 198630844
  413.     if(n < 0) then
  414.       a = bitOr(n * 64, bitOr((n + t_iWrap) / 67108864, 32)) + b
  415.     else
  416.       a = bitOr(n * 64, n / 67108864) + b
  417.     end if
  418.    
  419.     n = bitXor(b, bitOr(a, bitNot(c))) + d + x[i + 7] + 1126891415
  420.     if(n < 0) then
  421.       d = bitOr(n * 1024, bitOr((n + t_iWrap) / 4194304, 512)) + a
  422.     else
  423.       d = bitOr(n * 1024, n / 4194304) + a
  424.     end if
  425.    
  426.     n = bitXor(a, bitOr(d, bitNot(b))) + c + x[i + 14] - 1416354905
  427.     if(n < 0) then
  428.       c = bitOr(n * 32768, bitOr((n + t_iWrap) / 131072, 16384)) + d
  429.     else
  430.       c = bitOr(n * 32768, n / 131072) + d
  431.     end if
  432.    
  433.     n = bitXor(d, bitOr(c, bitNot(a))) + b + x[i + 5] - 57434055
  434.     if(n < 0) then
  435.       b = bitOr(n * 2097152, bitOr((n + t_iWrap) / 2048, 1048576)) + c
  436.     else
  437.       b = bitOr(n * 2097152, n / 2048) + c
  438.     end if
  439.    
  440.     n = bitXor(c, bitOr(b, bitNot(d))) + a + x[i + 12] + 1700485571
  441.     if(n < 0) then
  442.       a = bitOr(n * 64, bitOr((n + t_iWrap) / 67108864, 32)) + b
  443.     else
  444.       a = bitOr(n * 64, n / 67108864) + b
  445.     end if
  446.    
  447.     n = bitXor(b, bitOr(a, bitNot(c))) + d + x[i + 3] - 1894986606
  448.     if(n < 0) then
  449.       d = bitOr(n * 1024, bitOr((n + t_iWrap) / 4194304, 512)) + a
  450.     else
  451.       d = bitOr(n * 1024, n / 4194304) + a
  452.     end if
  453.    
  454.     n = bitXor(a, bitOr(d, bitNot(b))) + c + x[i + 10] - 1051523
  455.     if(n < 0) then
  456.       c = bitOr(n * 32768, bitOr((n + t_iWrap) / 131072, 16384)) + d
  457.     else
  458.       c = bitOr(n * 32768, n / 131072) + d
  459.     end if
  460.    
  461.     n = bitXor(d, bitOr(c, bitNot(a))) + b + x[i + 1] - 2054922799
  462.     if(n < 0) then
  463.       b = bitOr(n * 2097152, bitOr((n + t_iWrap) / 2048, 1048576)) + c
  464.     else
  465.       b = bitOr(n * 2097152, n / 2048) + c
  466.     end if
  467.    
  468.     n = bitXor(c, bitOr(b, bitNot(d))) + a + x[i + 8] + 1873313359
  469.     if(n < 0) then
  470.       a = bitOr(n * 64, bitOr((n + t_iWrap) / 67108864, 32)) + b
  471.     else
  472.       a = bitOr(n * 64, n / 67108864) + b
  473.     end if
  474.    
  475.     n = bitXor(b, bitOr(a, bitNot(c))) + d + x[i + 15] - 30611744
  476.     if(n < 0) then
  477.       d = bitOr(n * 1024, bitOr((n + t_iWrap) / 4194304, 512)) + a
  478.     else
  479.       d = bitOr(n * 1024, n / 4194304) + a
  480.     end if
  481.    
  482.     n = bitXor(a, bitOr(d, bitNot(b))) + c + x[i + 6] - 1560198380
  483.     if(n < 0) then
  484.       c = bitOr(n * 32768, bitOr((n + t_iWrap) / 131072, 16384)) + d
  485.     else
  486.       c = bitOr(n * 32768, n / 131072) + d
  487.     end if
  488.    
  489.     n = bitXor(d, bitOr(c, bitNot(a))) + b + x[i + 13] + 1309151649
  490.     if(n < 0) then
  491.       b = bitOr(n * 2097152, bitOr((n + t_iWrap) / 2048, 1048576)) + c
  492.     else
  493.       b = bitOr(n * 2097152, n / 2048) + c
  494.     end if
  495.    
  496.     n = bitXor(c, bitOr(b, bitNot(d))) + a + x[i + 4] - 145523070
  497.     if(n < 0) then
  498.       a = bitOr(n * 64, bitOr((n + t_iWrap) / 67108864, 32)) + b
  499.     else
  500.       a = bitOr(n * 64, n / 67108864) + b
  501.     end if
  502.    
  503.     n = bitXor(b, bitOr(a, bitNot(c))) + d + x[i + 11] - 1120210379
  504.     if(n < 0) then
  505.       d = bitOr(n * 1024, bitOr((n + t_iWrap) / 4194304, 512)) + a
  506.     else
  507.       d = bitOr(n * 1024, n / 4194304) + a
  508.     end if
  509.    
  510.     n = bitXor(a, bitOr(d, bitNot(b))) + c + x[i + 2] + 718787259
  511.     if(n < 0) then
  512.       c = bitOr(n * 32768, bitOr((n + t_iWrap) / 131072, 16384)) + d
  513.     else
  514.       c = bitOr(n * 32768, n / 131072) + d
  515.     end if
  516.    
  517.     n = bitXor(d, bitOr(c, bitNot(a))) + b + x[i + 9] - 343485551
  518.     if(n < 0) then
  519.       b = bitOr(n * 2097152, bitOr((n + t_iWrap) / 2048, 1048576)) + c
  520.     else
  521.       b = bitOr(n * 2097152, n / 2048) + c
  522.     end if
  523.    
  524.     a = a + olda
  525.     b = b + oldb
  526.     c = c + oldc
  527.     d = d + oldd
  528.     i = i + 16
  529.    
  530.   end repeat
  531.  
  532.   -- Construct 32 byte 'little-endian' hex string...
  533.  
  534.   t_sHex = "0123456789abcdef"
  535.   t_iArr = [a, b, c, d]
  536.   t_sOut = EMPTY
  537.  
  538.   repeat with i in t_iArr
  539.     if(i > 0) then
  540.       repeat with n = 1 to 4
  541.         j = i mod 16
  542.         i = i / 16
  543.         k = i mod 16
  544.         i = i / 16
  545.         put char (k + 1) of t_sHex after t_sOut
  546.         put char (j + 1) of t_sHex after t_sOut
  547.       end repeat
  548.     else
  549.       i = bitNot(i)
  550.       repeat with n = 1 to 4
  551.         j = i mod 16
  552.         i = i / 16
  553.         k = i mod 16
  554.         i = i / 16
  555.         put char (16 - k) of t_sHex after t_sOut
  556.         put char (16 - j) of t_sHex after t_sOut
  557.       end repeat
  558.     end if
  559.   end repeat
  560.  
  561.   return(t_sOut)
  562.  
  563. end
  564.  
  565. --( end )-- -- -- -- -- -- -- -- -- -- -- -- -- --//
[raw code]