|
|
|
@ -3,20 +3,31 @@
|
|
|
|
|
* https://github.com/emn178/js-md2
|
|
|
|
|
*
|
|
|
|
|
* Copyright 2014-2015, emn178@gmail.com
|
|
|
|
|
* Copyright 2015, joseph.finlayson@gmail.com
|
|
|
|
|
|
|
|
|
|
*
|
|
|
|
|
* Licensed under the MIT license:
|
|
|
|
|
* http://www.opensource.org/licenses/MIT
|
|
|
|
|
*/
|
|
|
|
|
;(function(root, undefined) {
|
|
|
|
|
;
|
|
|
|
|
(function (root, undefined) {
|
|
|
|
|
'use strict';
|
|
|
|
|
|
|
|
|
|
var NODE_JS = typeof(module) != 'undefined';
|
|
|
|
|
if(NODE_JS) {
|
|
|
|
|
|
|
|
|
|
var NODE_JS = typeof window === 'undefined';
|
|
|
|
|
if (NODE_JS) {
|
|
|
|
|
root = global;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Note that for maximum portability, libraries that are not jQuery should
|
|
|
|
|
// declare themselves as anonymous modules, and avoid setting a global if an
|
|
|
|
|
// AMD loader is present. jQuery is a special case. For more information, see
|
|
|
|
|
// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var HEX_CHARS = '0123456789abcdef'.split('');
|
|
|
|
|
|
|
|
|
|
var S = [ 0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01, 0x3D, 0x36, 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13,
|
|
|
|
|
var S = [0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01, 0x3D, 0x36, 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13,
|
|
|
|
|
0x62, 0xA7, 0x05, 0xF3, 0xC0, 0xC7, 0x73, 0x8C, 0x98, 0x93, 0x2B, 0xD9, 0xBC, 0x4C, 0x82, 0xCA,
|
|
|
|
|
0x1E, 0x9B, 0x57, 0x3C, 0xFD, 0xD4, 0xE0, 0x16, 0x67, 0x42, 0x6F, 0x18, 0x8A, 0x17, 0xE5, 0x12,
|
|
|
|
|
0xBE, 0x4E, 0xC4, 0xD6, 0xDA, 0x9E, 0xDE, 0x49, 0xA0, 0xFB, 0xF5, 0x8E, 0xBB, 0x2F, 0xEE, 0x7A,
|
|
|
|
@ -35,11 +46,11 @@
|
|
|
|
|
|
|
|
|
|
var M = [], X = [], C = [];
|
|
|
|
|
|
|
|
|
|
var md2 = function(message, asciiOnly) {
|
|
|
|
|
var md2 = function (message, asciiOnly) {
|
|
|
|
|
var code, i, j, k, t, L = 0, loop = 1, B,
|
|
|
|
|
index = 0, start = 0, bytes = 0, length = message.length;
|
|
|
|
|
|
|
|
|
|
for(i = 0;i < 16;++i) {
|
|
|
|
|
for (i = 0; i < 16; ++i) {
|
|
|
|
|
X[i] = C[i] = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -52,18 +63,21 @@
|
|
|
|
|
M[4] = M[5] = M[6] = M[7] =
|
|
|
|
|
M[8] = M[9] = M[10] = M[11] =
|
|
|
|
|
M[12] = M[13] = M[14] = M[15] = 0;
|
|
|
|
|
for (i = start;index < length && i < 16; ++index) {
|
|
|
|
|
for (i = start; index < length && i < 16; ++index) {
|
|
|
|
|
code = message.charCodeAt(index);
|
|
|
|
|
if (code < 0x80) {
|
|
|
|
|
M[i++] = code;
|
|
|
|
|
} else if (code < 0x800) {
|
|
|
|
|
}
|
|
|
|
|
else if (code < 0x800) {
|
|
|
|
|
M[i++] = 0xc0 | (code >> 6);
|
|
|
|
|
M[i++] = 0x80 | (code & 0x3f);
|
|
|
|
|
} else if (code < 0xd800 || code >= 0xe000) {
|
|
|
|
|
}
|
|
|
|
|
else if (code < 0xd800 || code >= 0xe000) {
|
|
|
|
|
M[i++] = 0xe0 | (code >> 12);
|
|
|
|
|
M[i++] = 0x80 | ((code >> 6) & 0x3f);
|
|
|
|
|
M[i++] = 0x80 | (code & 0x3f);
|
|
|
|
|
} else {
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
|
|
|
|
|
M[i++] = 0xf0 | (code >> 18);
|
|
|
|
|
M[i++] = 0x80 | ((code >> 12) & 0x3f);
|
|
|
|
@ -74,20 +88,20 @@
|
|
|
|
|
bytes += i - start;
|
|
|
|
|
start = i - 16;
|
|
|
|
|
|
|
|
|
|
if(index == length && i < 16) {
|
|
|
|
|
if (index == length && i < 16) {
|
|
|
|
|
loop = 2;
|
|
|
|
|
t = 16 - (bytes & 15);
|
|
|
|
|
for(;i < 16;++i) {
|
|
|
|
|
for (; i < 16; ++i) {
|
|
|
|
|
M[i] = t;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(i = 0;i < 16;++i) {
|
|
|
|
|
for (i = 0; i < 16; ++i) {
|
|
|
|
|
C[i] ^= S[M[i] ^ L];
|
|
|
|
|
L = C[i];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(i = 0;i < loop;++i) {
|
|
|
|
|
for (i = 0; i < loop; ++i) {
|
|
|
|
|
B = i === 0 ? M : C;
|
|
|
|
|
|
|
|
|
|
X[16] = B[0];
|
|
|
|
@ -124,25 +138,32 @@
|
|
|
|
|
X[47] = X[31] ^ X[15];
|
|
|
|
|
|
|
|
|
|
t = 0;
|
|
|
|
|
for(j = 0;j < 18;++j) {
|
|
|
|
|
for(k = 0;k < 48;++k) {
|
|
|
|
|
for (j = 0; j < 18; ++j) {
|
|
|
|
|
for (k = 0; k < 48; ++k) {
|
|
|
|
|
X[k] = t = X[k] ^ S[t];
|
|
|
|
|
}
|
|
|
|
|
t = (t + j) & 0xFF;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} while(loop == 1);
|
|
|
|
|
} while (loop == 1);
|
|
|
|
|
|
|
|
|
|
var hex = '';
|
|
|
|
|
for(i = 0;i < 16;++i) {
|
|
|
|
|
for (i = 0; i < 16; ++i) {
|
|
|
|
|
hex += HEX_CHARS[(X[i] >> 4) & 0x0F] + HEX_CHARS[X[i] & 0x0F];
|
|
|
|
|
}
|
|
|
|
|
return hex;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
if(!root.JS_MD2_TEST && NODE_JS) {
|
|
|
|
|
if (!root.JS_MD2_TEST && NODE_JS) {
|
|
|
|
|
module.exports = md2;
|
|
|
|
|
} else if(root) {
|
|
|
|
|
}
|
|
|
|
|
else if (typeof define === "function" && define.amd) {
|
|
|
|
|
define("md2", [], function () {
|
|
|
|
|
return md2;
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
else if (root) {
|
|
|
|
|
root.md2 = md2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}(this));
|
|
|
|
|