Advertisement
Snuggledash

AVM MD5 UTF-16 implementation

May 11th, 2018
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var md5;
  2. md5 = md5 || (function () {
  3.     "use strict";
  4.     var lib = {},
  5.         hexcase = 0,
  6.         chrsz = 16;
  7.  
  8.     function binl2hex(binarray) {
  9.         var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef",
  10.             str = "",
  11.             i = 0;
  12.         for (i = 0; i < binarray.length * 4; i += 1) {
  13.             str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF);
  14.         }
  15.         return str;
  16.     }
  17.  
  18.     function str2binl(str) {
  19.         var bin = [],
  20.             i = 0,
  21.             mask = (1 << chrsz) - 1;
  22.         for (i = 0; i < str.length * chrsz; i += chrsz) {
  23.             bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32);
  24.         }
  25.         return bin;
  26.     }
  27.  
  28.     function safe_add(x, y) {
  29.         var lsw = (x & 0xFFFF) + (y & 0xFFFF),
  30.             msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  31.         return (msw << 16) | (lsw & 0xFFFF);
  32.     }
  33.  
  34.     function bit_rol(num, cnt) {
  35.         return (num << cnt) | (num >>> (32 - cnt));
  36.     }
  37.  
  38.     function md5_cmn(q, a, b, x, s, t) {
  39.         return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
  40.     }
  41.  
  42.     function md5_ff(a, b, c, d, x, s, t) {
  43.         return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
  44.     }
  45.  
  46.     function md5_gg(a, b, c, d, x, s, t) {
  47.         return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
  48.     }
  49.  
  50.     function md5_hh(a, b, c, d, x, s, t) {
  51.         return md5_cmn(b ^ c ^ d, a, b, x, s, t);
  52.     }
  53.  
  54.     function md5_ii(a, b, c, d, x, s, t) {
  55.         return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
  56.     }
  57.  
  58.     function core_md5(x, len) {
  59.         x[len >> 5] |= 0x80 << ((len) % 32);
  60.         x[(((len + 64) >>> 9) << 4) + 14] = len;
  61.         var i = 0,
  62.             a = 1732584193,
  63.             b = -271733879,
  64.             c = -1732584194,
  65.             d = 271733878,
  66.             olda = 0,
  67.             oldb = 0,
  68.             oldc = 0,
  69.             oldd = 0;
  70.         for (i = 0; i < x.length; i += 16) {
  71.             olda = a;
  72.             oldb = b;
  73.             oldc = c;
  74.             oldd = d;
  75.             a = md5_ff(a, b, c, d, x[i], 7, -680876936);
  76.             d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
  77.             c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
  78.             b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
  79.             a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
  80.             d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
  81.             c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
  82.             b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
  83.             a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
  84.             d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
  85.             c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
  86.             b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
  87.             a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
  88.             d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
  89.             c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
  90.             b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
  91.             a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
  92.             d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
  93.             c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
  94.             b = md5_gg(b, c, d, a, x[i], 20, -373897302);
  95.             a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
  96.             d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
  97.             c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
  98.             b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
  99.             a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
  100.             d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
  101.             c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
  102.             b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
  103.             a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
  104.             d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
  105.             c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
  106.             b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
  107.             a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
  108.             d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
  109.             c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
  110.             b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
  111.             a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
  112.             d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
  113.             c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
  114.             b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
  115.             a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
  116.             d = md5_hh(d, a, b, c, x[i], 11, -358537222);
  117.             c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
  118.             b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
  119.             a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
  120.             d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
  121.             c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
  122.             b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
  123.             a = md5_ii(a, b, c, d, x[i], 6, -198630844);
  124.             d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
  125.             c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
  126.             b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
  127.             a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
  128.             d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
  129.             c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
  130.             b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
  131.             a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
  132.             d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
  133.             c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
  134.             b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
  135.             a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
  136.             d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
  137.             c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
  138.             b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
  139.             a = safe_add(a, olda);
  140.             b = safe_add(b, oldb);
  141.             c = safe_add(c, oldc);
  142.             d = safe_add(d, oldd);
  143.         }
  144.         return [a, b, c, d];
  145.     }
  146.     lib.hex = function (s) {
  147.         return binl2hex(core_md5(str2binl(s), s.length * chrsz));
  148.     };
  149.     return lib;
  150. }());
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement