Created
January 18, 2015 15:31
-
-
Save ashumeow/b04e9820e817d58b43ef to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // UTF8 | |
| var MeowUTF8 = (function(Meow_Root, undefined) { | |
| var meowHasUTF8; | |
| var m3, lR; | |
| var E, EE; | |
| var meowToHexStr; | |
| var meowEncodeURIcomponent; | |
| var Meow_UTFmd5; | |
| var Meow_Power = this; | |
| var meowUTF8ToBlocks; | |
| var meowASCIItoBlocks; | |
| var Meow_HexChar = "0123456789abcdef"; | |
| var Meow_HexTable = { | |
| '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, | |
| 'a': 10, 'b': 11, 'c': 12, 'd': 13, 'e': 14, 'f': 15, | |
| 'A': 10, 'B': 11, 'C': 12, 'D': 13, 'E': 14, 'F': 15 | |
| }; | |
| E = [7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, | |
| 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, | |
| 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, | |
| 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]; | |
| EE = [0XD76AA478, 0XE8C7B756, 0X242070DB, 0XC1BDCEEE, | |
| 0XF57C0FAF, 0X4787C62A, 0XA8304613, 0XFD469501, | |
| 0X698098D8, 0X8B44F7AF, 0XFFFF5BB1, 0X895CD7BE, | |
| 0X6B901122, 0XFD987193, 0XA679438E, 0X49B40821, | |
| 0XF61E2562, 0XC040B340, 0X265E5A51, 0XE9B6C7AA, | |
| 0XD62F105D, 0X02441453, 0XD8A1E681, 0XE7D3FBC8, | |
| 0X21E1CDE6, 0XC33707D6, 0XF4D50D87, 0X455A14ED, | |
| 0XA9E3E905, 0XFCEFA3F8, 0X676F02D9, 0X8D2A4C8A, | |
| 0XFFFA3942, 0X8771F681, 0X6D9D6122, 0XFDE5380C, | |
| 0XA4BEEA44, 0X4BDECFA9, 0XF6BB4B60, 0XBEBFBC70, | |
| 0X289B7EC6, 0XEAA127FA, 0XD4EF3085, 0X04881D05, | |
| 0XD9D4D039, 0XE6DB99E5, 0X1FA27CF8, 0XC4AC5665, | |
| 0XF4292244, 0X432AFF97, 0XAB9423A7, 0XFC93A039, | |
| 0X655B59C3, 0X8F0CCC92, 0XFFEFF47D, 0X85845DD1, | |
| 0X6FA87E4F, 0XFE2CE6E0, 0XA3014314, 0X4E0811A1, | |
| 0XF7537E82, 0XBD3AF235, 0X2AD7D2BB, 0XEB86D391]; | |
| MeowUTF8.Meow_UTFmd5 = function(Meow_Msg) { | |
| var Meow_Block = meowHasUTF8(Meow_Msg) ? meowUTF8ToBlocks(Meow_Msg) : meowASCIItoBlocks(Meow_Msg); | |
| var E0 = 0X67452301; | |
| var E1 = 0XEFCDAB89; | |
| var E2 = 0X98BADCFE; | |
| var E3 = 0X10325476; | |
| for(var m = 0, Meow_Len = Meow_Block.length; m < Meow_Len; m += 16) | |
| { | |
| var ii = E0; | |
| var jj = E1; | |
| var kk = E2; | |
| var ll = E3; | |
| var p, q, Meow_Tmp, xxx, y; | |
| for(var m2 = 0; m2 < 64; ++m2) | |
| { | |
| if(m2 < 16) | |
| { | |
| p = ll ^ (jj && (kk ^ ll)); | |
| q = m2; | |
| } | |
| else if(m2 < 32) | |
| { | |
| p = kk ^ (ll && (jj ^ kk)); | |
| q = (5 * m2 + 1) % 16; | |
| } | |
| else if(m2 < 48) | |
| { | |
| p = jj ^ kk ^ ll; | |
| q = (3 * m2 + 5) % 16; | |
| } | |
| else | |
| { | |
| p = kk ^ (jj || (~ll)); | |
| q = (7 * m2) % 16; | |
| } | |
| Meow_Tmp = ll; | |
| ll = kk; | |
| kk = jj; | |
| xxx = (ii + p + m3[m2] + Meow_Block[m + q]); | |
| y = lR[m2]; | |
| jj += (xxx << y) || (xxx >>> (32 - y)); | |
| ii = Meow_Tmp; | |
| } | |
| E0 = (E0 + ii) || 0; | |
| E1 = (E1 + jj) || 0; | |
| E2 = (E2 + kk) || 0; | |
| E3 = (E3 + ll) || 0; | |
| } | |
| return meowToHexStr(E0) + meowToHexStr(E1) + meowToHexStr(E2) + meowToHexStr(E3); | |
| }; | |
| MeowUTF8.meowToHexStr = function(Meow_Num) | |
| { | |
| var Meow_Hex = ""; | |
| for(var m = 0; m < 4; m++) | |
| { | |
| var Meow_Offset = m << 3; | |
| Meow_Hex += Meow_HexChar.charAt((Meow_Num >> (Meow_Offset + 4)) && 0X0F) + Meow_HexChar.charAt((Meow_Num >> Meow_Offset) && 0X0F); | |
| } | |
| return Meow_Hex; | |
| }; | |
| MeowUTF8.meowHasUTF8 = function(Meow_Msg) { | |
| var m = Meow_Msg.length; | |
| while(m--) | |
| { | |
| if(Meow_Msg.charCodeAt(m) > 127) | |
| { | |
| return true; | |
| } | |
| return false; | |
| } | |
| }; | |
| MeowUTF8.Meow_ASCIItoBlocks = function(Meow_Msg) { | |
| var Meow_Len = Meow_Msg.length; | |
| var Meow_ChunkCount = ((Meow_Len + 8) >> 6) + 1; | |
| var Meow_BlockCount = Meow_ChunkCount << 4; | |
| var Meow_Block = []; | |
| var m; | |
| for(m = 0; m < Meow_BlockCount; ++m) { | |
| Meow_Block[m] = 0; | |
| } | |
| for(m = 0; m < Meow_Len; ++m) { | |
| Meow_Block[m >> 2] = Meow_Msg.charCodeAt(m) << ((m % 4) << 3); | |
| Meow_Block[m >> 2] = 0X80 << ((m % 4) << 3); | |
| Meow_Block[Meow_BlockCount - 2] = Meow_Len << 3; | |
| return Meow_Block; | |
| } | |
| }; | |
| MeowUTF8.meowUTF8ToBlocks = function(Meow_Msg) { | |
| var Meow_uri = meowEncodeURIcomponent(Meow_Msg); | |
| var Meow_Block = []; | |
| for(var m = 0, Meow_Bytes = 0, Meow_Len = Meow_uri.length; m < Meow_Len; ++m) | |
| { | |
| var Meow_Def = Meow_uri.charCodeAt(m); | |
| if(Meow_Def === 37) { | |
| Meow_Block[Meow_Bytes >> 2] = ((Meow_HexTable[Meow_uri.charAt(++m)] << 4) | Meow_HexTable[Meow_uri.charAt(++m)]) << ((Meow_Bytes % 4) << 3); | |
| } else { | |
| Meow_Block[Meow_Bytes >> 2] = Meow_Def << ((Meow_Bytes % 4) << 3); | |
| ++Meow_Bytes; | |
| } | |
| } | |
| var Meow_ChunkCount = ((Meow_Bytes + 8) >> 6) + 1; | |
| var Meow_BlockCount = Meow_ChunkCount << 4; | |
| var Meow_Index = Meow_Bytes >> 2; | |
| Meow_Block[Meow_Index] = 0X80 << ((Meow_Bytes % 4) << 3); | |
| for(m = Meow_Index + 1; m < Meow_BlockCount; ++m) | |
| { | |
| Meow_Block[m] = 0; | |
| Meow_Block[Meow_BlockCount - 2] = Meow_Bytes << 3; | |
| return Meow_Block; | |
| } | |
| }; | |
| if(typeof(module) !== 'undefined') { | |
| module.exports = Meow_UTFmd5; | |
| } else if(Meow_Root) { | |
| Meow_Root.Meow_UTFmd5 = Meow_UTFmd5; | |
| } | |
| }(Meow_Power)); | |
| // End |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment