home *** CD-ROM | disk | FTP | other *** search
/ napalm.napnet.hu / 2015-02-12.napalm.napnet.hu.tar / napalm.napnet.hu / programok / kommunikacio / mpp700.exe / md5.mrc < prev    next >
Text File  |  2002-02-19  |  6KB  |  133 lines

  1. ; myndzi / #scripts-are-us @ dalnet
  2. ; v1.1
  3. ; credit to stevie-o on dalnet for doing it before me and better ;P
  4.  
  5. alias md5 {
  6.   if ($len($1-) > 4032) return
  7.   bunset &in
  8.   var %t, %u = $calc($len($1-) * 8), %j = 0, %in, %x
  9.   bset -t &in 1 $1- $+ $chr(128) | bset &x 64 0
  10.   %t = $calc($bvar(&in,0) + 64 - ($calc($bvar(&in,0) + 8) % 64))
  11.   if (%t) bset &in %t 0
  12.   bset &in $calc($bvar(&in,0) + 1) $calc(%u % 256) $int($calc(%u / 256)) 0 0 0 0 0 0
  13.  
  14.   %i = $bvar(&in,0)
  15.   while (%i) {
  16.     tokenize 32 $bvar(&in, [ $+ [ $calc(%i - 3) ] $+ - $+ [ %i ] $+ ] )
  17.     %in = $calc($4 * 2^24 + $3 * 2^16 + $2 * 2^8 + $1) %in
  18.     dec %i 4
  19.   }
  20.  
  21.   var %a = $base(67452301,16,10)
  22.   var %b = $base(efcdab89,16,10)
  23.   var %c = $base(98badcfe,16,10)
  24.   var %d = $base(10325476,16,10)
  25.  
  26.   var %aa, %bb, %cc, %dd
  27.  
  28.   while (%in != $null) {
  29.     %x = $gettok(%in,1-16,32) | %in = $gettok(%in,17-,32)
  30.     %aa = %a | %bb = %b | %cc = %c | %dd = %d
  31.  
  32.     ;/* Round 1 */
  33.     %a = $FF(%a, %b, %c, %d,  0,  7, d76aa478, %x)
  34.     %d = $FF(%d, %a, %b, %c,  1, 12, e8c7b756, %x)
  35.     %c = $FF(%c, %d, %a, %b,  2, 17, 242070db, %x)
  36.     %b = $FF(%b, %c, %d, %a,  3, 22, c1bdceee, %x)
  37.     %a = $FF(%a, %b, %c, %d,  4,  7, f57c0faf, %x)
  38.     %d = $FF(%d, %a, %b, %c,  5, 12, 4787c62a, %x)
  39.     %c = $FF(%c, %d, %a, %b,  6, 17, a8304613, %x)
  40.     %b = $FF(%b, %c, %d, %a,  7, 22, fd469501, %x)
  41.     %a = $FF(%a, %b, %c, %d,  8,  7, 698098d8, %x)
  42.     %d = $FF(%d, %a, %b, %c,  9, 12, 8b44f7af, %x)
  43.     %c = $FF(%c, %d, %a, %b, 10, 17, ffff5bb1, %x)
  44.     %b = $FF(%b, %c, %d, %a, 11, 22, 895cd7be, %x)
  45.     %a = $FF(%a, %b, %c, %d, 12,  7, 6b901122, %x)
  46.     %d = $FF(%d, %a, %b, %c, 13, 12, fd987193, %x)
  47.     %c = $FF(%c, %d, %a, %b, 14, 17, a679438e, %x)
  48.     %b = $FF(%b, %c, %d, %a, 15, 22, 49b40821, %x)
  49.  
  50.     ;/* Round 2 */
  51.     %a = $GG(%a, %b, %c, %d,  1,  5, f61e2562, %x)
  52.     %d = $GG(%d, %a, %b, %c,  6,  9, c040b340, %x)
  53.     %c = $GG(%c, %d, %a, %b, 11, 14, 265e5a51, %x)
  54.     %b = $GG(%b, %c, %d, %a,  0, 20, e9b6c7aa, %x)
  55.     %a = $GG(%a, %b, %c, %d,  5,  5, d62f105d, %x)
  56.     %d = $GG(%d, %a, %b, %c, 10,  9, 02441453, %x)
  57.     %c = $GG(%c, %d, %a, %b, 15, 14, d8a1e681, %x)
  58.     %b = $GG(%b, %c, %d, %a,  4, 20, e7d3fbc8, %x)
  59.     %a = $GG(%a, %b, %c, %d,  9,  5, 21e1cde6, %x)
  60.     %d = $GG(%d, %a, %b, %c, 14,  9, c33707d6, %x)
  61.     %c = $GG(%c, %d, %a, %b,  3, 14, f4d50d87, %x)
  62.     %b = $GG(%b, %c, %d, %a,  8, 20, 455a14ed, %x)
  63.     %a = $GG(%a, %b, %c, %d, 13,  5, a9e3e905, %x)
  64.     %d = $GG(%d, %a, %b, %c,  2,  9, fcefa3f8, %x)
  65.     %c = $GG(%c, %d, %a, %b,  7, 14, 676f02d9, %x)
  66.     %b = $GG(%b, %c, %d, %a, 12, 20, 8d2a4c8a, %x)
  67.  
  68.     ;/* Round 3 */
  69.     %a = $HH(%a, %b, %c, %d,  5,  4, fffa3942, %x)
  70.     %d = $HH(%d, %a, %b, %c,  8, 11, 8771f681, %x)
  71.     %c = $HH(%c, %d, %a, %b, 11, 16, 6d9d6122, %x)
  72.     %b = $HH(%b, %c, %d, %a, 14, 23, fde5380c, %x)
  73.     %a = $HH(%a, %b, %c, %d,  1,  4, a4beea44, %x)
  74.     %d = $HH(%d, %a, %b, %c,  4, 11, 4bdecfa9, %x)
  75.     %c = $HH(%c, %d, %a, %b,  7, 16, f6bb4b60, %x)
  76.     %b = $HH(%b, %c, %d, %a, 10, 23, bebfbc70, %x)
  77.     %a = $HH(%a, %b, %c, %d, 13,  4, 289b7ec6, %x)
  78.     %d = $HH(%d, %a, %b, %c,  0, 11, eaa127fa, %x)
  79.     %c = $HH(%c, %d, %a, %b,  3, 16, d4ef3085, %x)
  80.     %b = $HH(%b, %c, %d, %a,  6, 23, 04881d05, %x)
  81.     %a = $HH(%a, %b, %c, %d,  9,  4, d9d4d039, %x)
  82.     %d = $HH(%d, %a, %b, %c, 12, 11, e6db99e5, %x)
  83.     %c = $HH(%c, %d, %a, %b, 15, 16, 1fa27cf8, %x)
  84.     %b = $HH(%b, %c, %d, %a,  2, 23, c4ac5665, %x)
  85.  
  86.     ;/* Round 4 */
  87.     %a = $II(%a, %b, %c, %d,  0,  6, f4292244, %x)
  88.     %d = $II(%d, %a, %b, %c,  7, 10, 432aff97, %x)
  89.     %c = $II(%c, %d, %a, %b, 14, 15, ab9423a7, %x)
  90.     %b = $II(%b, %c, %d, %a,  5, 21, fc93a039, %x)
  91.     %a = $II(%a, %b, %c, %d, 12,  6, 655b59c3, %x)
  92.     %d = $II(%d, %a, %b, %c,  3, 10, 8f0ccc92, %x)
  93.     %c = $II(%c, %d, %a, %b, 10, 15, ffeff47d, %x)
  94.     %b = $II(%b, %c, %d, %a,  1, 21, 85845dd1, %x)
  95.     %a = $II(%a, %b, %c, %d,  8,  6, 6fa87e4f, %x)
  96.     %d = $II(%d, %a, %b, %c, 15, 10, fe2ce6e0, %x)
  97.     %c = $II(%c, %d, %a, %b,  6, 15, a3014314, %x)
  98.     %b = $II(%b, %c, %d, %a, 13, 21, 4e0811a1, %x)
  99.     %a = $II(%a, %b, %c, %d,  4,  6, f7537e82, %x)
  100.     %d = $II(%d, %a, %b, %c, 11, 10, bd3af235, %x)
  101.     %c = $II(%c, %d, %a, %b,  2, 15, 2ad7d2bb, %x)
  102.     %b = $II(%b, %c, %d, %a,  9, 21, eb86d391, %x)
  103.  
  104.     %a = $chop($calc(%a + %aa))
  105.     %b = $chop($calc(%b + %bb))
  106.     %c = $chop($calc(%c + %cc))
  107.     %d = $chop($calc(%d + %dd))
  108.  
  109.   }
  110.  
  111.   %t = $brv($base(%a,10,16,8)) $+ $brv($base(%b,10,16,8)) $+ $brv($base(%c,10,16,8)) $+ $brv($base(%d,10,16,8))
  112.   return $lower(%t)
  113. }
  114.  
  115. alias -l brv return $mid($1,7,2) $+ $mid($1,5,2) $+ $mid($1,3,2) $+ $mid($1,1,2)
  116. alias -l rotl tokenize 32 $chop($1) $2 | return $calc(($1 * 2 ^ $2) % 2^32 + $int($calc($1 / 2 ^ (32 - $2))))
  117.  
  118. alias -l ff var %a = $1, %b = $2, %c = $3, %d = $4, %x = $gettok($8,$calc($5 + 1),32), %s = $6, %ac = $base($7,16,10) | return $chop($calc(%b + $rotl($calc(%a + $f(%b,%c,%d) + %x + %ac),%s)))
  119. alias -l gg var %a = $1, %b = $2, %c = $3, %d = $4, %x = $gettok($8,$calc($5 + 1),32), %s = $6, %ac = $base($7,16,10) | return $chop($calc(%b + $rotl($calc(%a + $g(%b,%c,%d) + %x + %ac),%s)))
  120. alias -l hh var %a = $1, %b = $2, %c = $3, %d = $4, %x = $gettok($8,$calc($5 + 1),32), %s = $6, %ac = $base($7,16,10) | return $chop($calc(%b + $rotl($calc(%a + $h(%b,%c,%d) + %x + %ac),%s)))
  121. alias -l ii var %a = $1, %b = $2, %c = $3, %d = $4, %x = $gettok($8,$calc($5 + 1),32), %s = $6, %ac = $base($7,16,10) | return $chop($calc(%b + $rotl($calc(%a + $i(%b,%c,%d) + %x + %ac),%s)))
  122.  
  123. alias -l f var %x = $1, %y = $2, %z = $3 | return $oor($aand(%x,%y),$aand($nnot(%x),%z))
  124. alias -l g var %x = $1, %y = $2, %z = $3 | return $oor($aand(%x,%z),$aand(%y,$nnot(%z)))
  125. alias -l h var %x = $1, %y = $2, %z = $3 | return $xxor(%z,$xxor(%x,%y))
  126. alias -l i var %x = $1, %y = $2, %z = $3 | return $xxor(%y,$oor(%x,$nnot(%z)))
  127.  
  128. alias -l aand return $and($chop($1),$chop($2))
  129. alias -l oor return $or($chop($1),$chop($2))
  130. alias -l xxor return $xor($chop($1),$chop($2))
  131. alias -l nnot return $not($chop($1))
  132. alias -l chop return $calc($1 % 2^32)
  133.