github.com/justinjmoses/evergreen@v0.0.0-20170530173719-1d50e381ff0d/public/static/js/angular-md5.js (about) 1 // http://kevin.vanzonneveld.net 2 // + original by: Webtoolkit.info (http://www.webtoolkit.info/) 3 // + namespaced by: Michael White (http://getsprink.com) 4 // + tweaked by: Jack 5 // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 6 // + input by: Brett Zamir (http://brett-zamir.me) 7 // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) 8 // - depends on: utf8_encode 9 // * example 1: md5('Kevin van Zonneveld'); 10 // * returns 1: '6e658d4bfcb59cc13f96c14450ac40b9' 11 // Adapted to AngularJS Service by: Jim Lavin (http://jimlavin.net) 12 // after injecting into your controller, directive or service 13 // * example 1: md5.createHash('Kevin van Zonneveld'); 14 // * returns 1: '6e658d4bfcb59cc13f96c14450ac40b9' 15 16 angular.module('md5', []).factory('md5', [function() { 17 18 var md5 = { 19 20 createHash: function(str) { 21 22 var xl; 23 24 var rotateLeft = function (lValue, iShiftBits) { 25 return (lValue << iShiftBits) | (lValue >>> (32 - iShiftBits)); 26 }; 27 28 var addUnsigned = function (lX, lY) { 29 var lX4, lY4, lX8, lY8, lResult; 30 lX8 = (lX & 0x80000000); 31 lY8 = (lY & 0x80000000); 32 lX4 = (lX & 0x40000000); 33 lY4 = (lY & 0x40000000); 34 lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); 35 if (lX4 & lY4) { 36 return (lResult ^ 0x80000000 ^ lX8 ^ lY8); 37 } 38 if (lX4 | lY4) { 39 if (lResult & 0x40000000) { 40 return (lResult ^ 0xC0000000 ^ lX8 ^ lY8); 41 } else { 42 return (lResult ^ 0x40000000 ^ lX8 ^ lY8); 43 } 44 } else { 45 return (lResult ^ lX8 ^ lY8); 46 } 47 }; 48 49 var _F = function (x, y, z) { 50 return (x & y) | ((~x) & z); 51 }; 52 var _G = function (x, y, z) { 53 return (x & z) | (y & (~z)); 54 }; 55 var _H = function (x, y, z) { 56 return (x ^ y ^ z); 57 }; 58 var _I = function (x, y, z) { 59 return (y ^ (x | (~z))); 60 }; 61 62 var _FF = function (a, b, c, d, x, s, ac) { 63 a = addUnsigned(a, addUnsigned(addUnsigned(_F(b, c, d), x), ac)); 64 return addUnsigned(rotateLeft(a, s), b); 65 }; 66 67 var _GG = function (a, b, c, d, x, s, ac) { 68 a = addUnsigned(a, addUnsigned(addUnsigned(_G(b, c, d), x), ac)); 69 return addUnsigned(rotateLeft(a, s), b); 70 }; 71 72 var _HH = function (a, b, c, d, x, s, ac) { 73 a = addUnsigned(a, addUnsigned(addUnsigned(_H(b, c, d), x), ac)); 74 return addUnsigned(rotateLeft(a, s), b); 75 }; 76 77 var _II = function (a, b, c, d, x, s, ac) { 78 a = addUnsigned(a, addUnsigned(addUnsigned(_I(b, c, d), x), ac)); 79 return addUnsigned(rotateLeft(a, s), b); 80 }; 81 82 var convertToWordArray = function (str) { 83 var lWordCount; 84 var lMessageLength = str.length; 85 var lNumberOfWords_temp1 = lMessageLength + 8; 86 var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64; 87 var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16; 88 var lWordArray = new Array(lNumberOfWords - 1); 89 var lBytePosition = 0; 90 var lByteCount = 0; 91 while (lByteCount < lMessageLength) { 92 lWordCount = (lByteCount - (lByteCount % 4)) / 4; 93 lBytePosition = (lByteCount % 4) * 8; 94 lWordArray[lWordCount] = (lWordArray[lWordCount] | (str.charCodeAt(lByteCount) << lBytePosition)); 95 lByteCount++; 96 } 97 lWordCount = (lByteCount - (lByteCount % 4)) / 4; 98 lBytePosition = (lByteCount % 4) * 8; 99 lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition); 100 lWordArray[lNumberOfWords - 2] = lMessageLength << 3; 101 lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; 102 return lWordArray; 103 }; 104 105 var wordToHex = function (lValue) { 106 var wordToHexValue = "", 107 wordToHexValue_temp = "", 108 lByte, lCount; 109 for (lCount = 0; lCount <= 3; lCount++) { 110 lByte = (lValue >>> (lCount * 8)) & 255; 111 wordToHexValue_temp = "0" + lByte.toString(16); 112 wordToHexValue = wordToHexValue + wordToHexValue_temp.substr(wordToHexValue_temp.length - 2, 2); 113 } 114 return wordToHexValue; 115 }; 116 117 var x = [], 118 k, AA, BB, CC, DD, a, b, c, d, S11 = 7, 119 S12 = 12, 120 S13 = 17, 121 S14 = 22, 122 S21 = 5, 123 S22 = 9, 124 S23 = 14, 125 S24 = 20, 126 S31 = 4, 127 S32 = 11, 128 S33 = 16, 129 S34 = 23, 130 S41 = 6, 131 S42 = 10, 132 S43 = 15, 133 S44 = 21; 134 135 //str = this.utf8_encode(str); 136 x = convertToWordArray(str); 137 a = 0x67452301; 138 b = 0xEFCDAB89; 139 c = 0x98BADCFE; 140 d = 0x10325476; 141 142 xl = x.length; 143 for (k = 0; k < xl; k += 16) { 144 AA = a; 145 BB = b; 146 CC = c; 147 DD = d; 148 a = _FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); 149 d = _FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); 150 c = _FF(c, d, a, b, x[k + 2], S13, 0x242070DB); 151 b = _FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); 152 a = _FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); 153 d = _FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); 154 c = _FF(c, d, a, b, x[k + 6], S13, 0xA8304613); 155 b = _FF(b, c, d, a, x[k + 7], S14, 0xFD469501); 156 a = _FF(a, b, c, d, x[k + 8], S11, 0x698098D8); 157 d = _FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); 158 c = _FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); 159 b = _FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); 160 a = _FF(a, b, c, d, x[k + 12], S11, 0x6B901122); 161 d = _FF(d, a, b, c, x[k + 13], S12, 0xFD987193); 162 c = _FF(c, d, a, b, x[k + 14], S13, 0xA679438E); 163 b = _FF(b, c, d, a, x[k + 15], S14, 0x49B40821); 164 a = _GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); 165 d = _GG(d, a, b, c, x[k + 6], S22, 0xC040B340); 166 c = _GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); 167 b = _GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); 168 a = _GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); 169 d = _GG(d, a, b, c, x[k + 10], S22, 0x2441453); 170 c = _GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); 171 b = _GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); 172 a = _GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); 173 d = _GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); 174 c = _GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); 175 b = _GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); 176 a = _GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); 177 d = _GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); 178 c = _GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); 179 b = _GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); 180 a = _HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); 181 d = _HH(d, a, b, c, x[k + 8], S32, 0x8771F681); 182 c = _HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); 183 b = _HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); 184 a = _HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); 185 d = _HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); 186 c = _HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); 187 b = _HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); 188 a = _HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); 189 d = _HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); 190 c = _HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); 191 b = _HH(b, c, d, a, x[k + 6], S34, 0x4881D05); 192 a = _HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); 193 d = _HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); 194 c = _HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); 195 b = _HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); 196 a = _II(a, b, c, d, x[k + 0], S41, 0xF4292244); 197 d = _II(d, a, b, c, x[k + 7], S42, 0x432AFF97); 198 c = _II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); 199 b = _II(b, c, d, a, x[k + 5], S44, 0xFC93A039); 200 a = _II(a, b, c, d, x[k + 12], S41, 0x655B59C3); 201 d = _II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); 202 c = _II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); 203 b = _II(b, c, d, a, x[k + 1], S44, 0x85845DD1); 204 a = _II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); 205 d = _II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); 206 c = _II(c, d, a, b, x[k + 6], S43, 0xA3014314); 207 b = _II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); 208 a = _II(a, b, c, d, x[k + 4], S41, 0xF7537E82); 209 d = _II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); 210 c = _II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); 211 b = _II(b, c, d, a, x[k + 9], S44, 0xEB86D391); 212 a = addUnsigned(a, AA); 213 b = addUnsigned(b, BB); 214 c = addUnsigned(c, CC); 215 d = addUnsigned(d, DD); 216 } 217 218 var temp = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d); 219 220 return temp.toLowerCase(); 221 } 222 223 }; 224 225 return md5; 226 227 }]);