mirror of
https://gitee.com/js-yhsec/energy_storage.git
synced 2026-05-27 18:59:26 +08:00
引入海康威视插件
This commit is contained in:
621
web/public/codebase/encryption/AES.js
Normal file
621
web/public/codebase/encryption/AES.js
Normal file
@@ -0,0 +1,621 @@
|
||||
(function() {
|
||||
var Nr = 10;
|
||||
// convert two-dimensional indicies to one-dim array indices
|
||||
var I00 = 0;
|
||||
var I01 = 1;
|
||||
var I02 = 2;
|
||||
var I03 = 3;
|
||||
var I10 = 4;
|
||||
var I11 = 5;
|
||||
var I12 = 6;
|
||||
var I13 = 7;
|
||||
var I20 = 8;
|
||||
var I21 = 9;
|
||||
var I22 = 10;
|
||||
var I23 = 11;
|
||||
var I30 = 12;
|
||||
var I31 = 13;
|
||||
var I32 = 14;
|
||||
var I33 = 15;
|
||||
|
||||
// S-Box substitution table
|
||||
var S_enc = new Array(
|
||||
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
|
||||
0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
|
||||
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
|
||||
0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
|
||||
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc,
|
||||
0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
|
||||
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a,
|
||||
0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
|
||||
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
|
||||
0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
|
||||
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b,
|
||||
0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
|
||||
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85,
|
||||
0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
|
||||
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
|
||||
0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
|
||||
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17,
|
||||
0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
|
||||
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88,
|
||||
0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
|
||||
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
|
||||
0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
|
||||
0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9,
|
||||
0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
|
||||
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6,
|
||||
0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
|
||||
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
|
||||
0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
|
||||
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94,
|
||||
0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
|
||||
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68,
|
||||
0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16);
|
||||
|
||||
// inverse S-Box for decryptions
|
||||
var S_dec = new Array(
|
||||
0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38,
|
||||
0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
|
||||
0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
|
||||
0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
|
||||
0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d,
|
||||
0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
|
||||
0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2,
|
||||
0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
|
||||
0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
|
||||
0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
|
||||
0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda,
|
||||
0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
|
||||
0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a,
|
||||
0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
|
||||
0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
|
||||
0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
|
||||
0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea,
|
||||
0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
|
||||
0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85,
|
||||
0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
|
||||
0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
|
||||
0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
|
||||
0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20,
|
||||
0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
|
||||
0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31,
|
||||
0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
|
||||
0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
|
||||
0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
|
||||
0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0,
|
||||
0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
|
||||
0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26,
|
||||
0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d);
|
||||
|
||||
function cvt_hex8 (val) {
|
||||
var vh = (val>>>4)&0x0f;
|
||||
return vh.toString(16) + (val&0x0f).toString(16);
|
||||
}
|
||||
function cvt_byte (str) {
|
||||
// get the first hex digit
|
||||
var val1 = str.charCodeAt(0);
|
||||
// do some error checking
|
||||
if (val1 >= 48 && val1 <= 57) {
|
||||
// have a valid digit 0-9
|
||||
val1 -= 48;
|
||||
} else if (val1 >= 65 && val1 <= 70) {
|
||||
// have a valid digit A-F
|
||||
val1 -= 55;
|
||||
} else if (val1 >= 97 && val1 <= 102) {
|
||||
// have a valid digit A-F
|
||||
val1 -= 87;
|
||||
} else {
|
||||
// not 0-9 or A-F, complain
|
||||
console.log( str.charAt(1)+" is not a valid hex digit" );
|
||||
return -1;
|
||||
}
|
||||
// get the second hex digit
|
||||
var val2 = str.charCodeAt(1);
|
||||
// do some error checking
|
||||
if ( val2 >= 48 && val2 <= 57 ) {
|
||||
// have a valid digit 0-9
|
||||
val2 -= 48;
|
||||
} else if ( val2 >= 65 && val2 <= 70 ) {
|
||||
// have a valid digit A-F
|
||||
val2 -= 55;
|
||||
} else if ( val2 >= 97 && val2 <= 102 ) {
|
||||
// have a valid digit A-F
|
||||
val2 -= 87;
|
||||
} else {
|
||||
// not 0-9 or A-F, complain
|
||||
console.log( str.charAt(2)+" is not a valid hex digit" );
|
||||
return -1;
|
||||
}
|
||||
// all is ok, return the value
|
||||
return val1*16 + val2;
|
||||
}
|
||||
|
||||
// conversion function for non-constant subscripts
|
||||
// assume subscript range 0..3
|
||||
function I(x,y) {
|
||||
return (x*4) + y;
|
||||
}
|
||||
|
||||
// remove spaces from input
|
||||
function remove_spaces(instr) {
|
||||
var i;
|
||||
var outstr = "";
|
||||
for(i=0; i<instr.length; i++) {
|
||||
if ( instr.charAt(i) != " " )
|
||||
// not a space, include it
|
||||
outstr += instr.charAt(i);
|
||||
}
|
||||
return outstr;
|
||||
}
|
||||
|
||||
// get the message to encrypt/decrypt or the key
|
||||
// return as a 16-byte array
|
||||
function get_value(str, isASCII) {
|
||||
var dbyte = new Array(16);
|
||||
var i;
|
||||
var val; // one hex digit
|
||||
if (isASCII) {
|
||||
// check length of data
|
||||
if (str.length > 16) {
|
||||
console.log("is too long, using the first 16 ASCII characters" );
|
||||
}
|
||||
// have ASCII data
|
||||
// 16 characters?
|
||||
if (str.length >= 16) {
|
||||
// 16 or more characters
|
||||
for(i=0; i<16; i++) {
|
||||
dbyte[i] = str.charCodeAt(i);
|
||||
}
|
||||
} else {
|
||||
// less than 16 characters - fill with NULLs
|
||||
for(i=0; i<str.length; i++) {
|
||||
dbyte[i] = str.charCodeAt(i);
|
||||
}
|
||||
for( i=str.length; i<16; i++) {
|
||||
dbyte[i] = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// have hex data - remove any spaces they used, then convert
|
||||
//str = remove_spaces(str);
|
||||
// check length of data
|
||||
if ( str.length != 32 ) {
|
||||
//console.log("\tget_value:\tstr = " + str + "\tisASCII = " + isASCII); //isASCII = false
|
||||
console.log("length wrong: Is " + str.length + " hex digits, but must be 128 bits (32 hex digits)");
|
||||
dbyte[0] = -1;
|
||||
return dbyte;
|
||||
}
|
||||
for( i=0; i<16; i++ ) {
|
||||
// isolate and convert this substring
|
||||
dbyte[i] = cvt_byte( str.substr(i*2,2) );
|
||||
if( dbyte[i] < 0 ) {
|
||||
// have an error
|
||||
dbyte[0] = -1;
|
||||
return dbyte;
|
||||
}
|
||||
}
|
||||
}
|
||||
// return successful conversion
|
||||
return dbyte;
|
||||
}
|
||||
//do the AES GF(2**8) multiplication
|
||||
// do this by the shift-and-"add" approach
|
||||
function aes_mul(a, b) {
|
||||
var res = 0;
|
||||
while(a > 0) {
|
||||
if((a&1) != 0)
|
||||
res = res ^ b; // "add" to the result
|
||||
a >>>= 1; // shift a to get next higher-order bit
|
||||
b <<= 1; // shift multiplier also
|
||||
}
|
||||
// now reduce it modulo x**8 + x**4 + x**3 + x + 1
|
||||
var hbit = 0x10000; // bit to test if we need to take action
|
||||
var modulus = 0x11b00; // modulus - XOR by this to change value
|
||||
while(hbit >= 0x100) {
|
||||
if ((res & hbit) != 0) {
|
||||
res ^= modulus; // XOR with the modulus
|
||||
}
|
||||
// prepare for the next loop
|
||||
hbit >>= 1;
|
||||
modulus >>= 1;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
// apply the S-box substitution to the key expansion
|
||||
function SubWord(word_ary) {
|
||||
var i;
|
||||
for(i=0; i<16; i++) {
|
||||
word_ary[i] = S_enc[word_ary[i]];
|
||||
}
|
||||
return word_ary;
|
||||
}
|
||||
|
||||
// rotate the bytes in a word
|
||||
function RotWord(word_ary) {
|
||||
return new Array(word_ary[1], word_ary[2], word_ary[3], word_ary[0]);
|
||||
}
|
||||
|
||||
// calculate the first item Rcon[i] = { x^(i-1), 0, 0, 0 }
|
||||
// note we only return the first item
|
||||
function Rcon(exp) {
|
||||
var val = 2;
|
||||
var result = 1;
|
||||
|
||||
// remember to calculate x^(exp-1)
|
||||
exp--;
|
||||
|
||||
// process the exponent using normal shift and multiply
|
||||
while ( exp > 0 )
|
||||
{
|
||||
if ( (exp & 1) != 0 )
|
||||
result = aes_mul( result, val );
|
||||
|
||||
// square the value
|
||||
val = aes_mul( val, val );
|
||||
|
||||
// move to the next bit
|
||||
exp >>= 1;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
// round key generation
|
||||
// return a byte array with the expanded key information
|
||||
function key_expand( key )
|
||||
{
|
||||
var temp = new Array(4);
|
||||
var i, j;
|
||||
var w = new Array(4*(Nr+1));
|
||||
|
||||
// copy initial key stuff
|
||||
for( i=0; i<16; i++ )
|
||||
{
|
||||
w[i] = key[i];
|
||||
}
|
||||
|
||||
// generate rest of key schedule using 32-bit words
|
||||
i = 4;
|
||||
while ( i < 4*(Nr+1)) // blocksize * ( rounds + 1 )
|
||||
{
|
||||
// copy word W[i-1] to temp
|
||||
for( j=0; j<4; j++ )
|
||||
temp[j] = w[(i-1)*4+j];
|
||||
|
||||
if ( i % 4 == 0)
|
||||
{
|
||||
// temp = SubWord(RotWord(temp)) ^ Rcon[i/4];
|
||||
temp = RotWord( temp );
|
||||
temp = SubWord( temp );
|
||||
temp[0] ^= Rcon( i>>>2 );
|
||||
}
|
||||
|
||||
// word = word ^ temp
|
||||
for( j=0; j<4; j++ )
|
||||
w[i*4+j] = w[(i-4)*4+j] ^ temp[j];
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
return w;
|
||||
}
|
||||
|
||||
// do S-Box substitution
|
||||
function SubBytes(state, Sbox)
|
||||
{
|
||||
var i;
|
||||
|
||||
for( i=0; i<16; i++ )
|
||||
state[i] = Sbox[ state[i] ];
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
// shift each row as appropriate
|
||||
function ShiftRows(state)
|
||||
{
|
||||
var t0, t1, t2, t3;
|
||||
|
||||
// top row (row 0) isn't shifted
|
||||
|
||||
// next row (row 1) rotated left 1 place
|
||||
t0 = state[I10];
|
||||
t1 = state[I11];
|
||||
t2 = state[I12];
|
||||
t3 = state[I13];
|
||||
state[I10] = t1;
|
||||
state[I11] = t2;
|
||||
state[I12] = t3;
|
||||
state[I13] = t0;
|
||||
|
||||
// next row (row 2) rotated left 2 places
|
||||
t0 = state[I20];
|
||||
t1 = state[I21];
|
||||
t2 = state[I22];
|
||||
t3 = state[I23];
|
||||
state[I20] = t2;
|
||||
state[I21] = t3;
|
||||
state[I22] = t0;
|
||||
state[I23] = t1;
|
||||
|
||||
// bottom row (row 3) rotated left 3 places
|
||||
t0 = state[I30];
|
||||
t1 = state[I31];
|
||||
t2 = state[I32];
|
||||
t3 = state[I33];
|
||||
state[I30] = t3;
|
||||
state[I31] = t0;
|
||||
state[I32] = t1;
|
||||
state[I33] = t2;
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
// inverset shift each row as appropriate
|
||||
function InvShiftRows(state)
|
||||
{
|
||||
var t0, t1, t2, t3;
|
||||
|
||||
// top row (row 0) isn't shifted
|
||||
|
||||
// next row (row 1) rotated left 1 place
|
||||
t0 = state[I10];
|
||||
t1 = state[I11];
|
||||
t2 = state[I12];
|
||||
t3 = state[I13];
|
||||
state[I10] = t3;
|
||||
state[I11] = t0;
|
||||
state[I12] = t1;
|
||||
state[I13] = t2;
|
||||
|
||||
// next row (row 2) rotated left 2 places
|
||||
t0 = state[I20];
|
||||
t1 = state[I21];
|
||||
t2 = state[I22];
|
||||
t3 = state[I23];
|
||||
state[I20] = t2;
|
||||
state[I21] = t3;
|
||||
state[I22] = t0;
|
||||
state[I23] = t1;
|
||||
|
||||
// bottom row (row 3) rotated left 3 places
|
||||
t0 = state[I30];
|
||||
t1 = state[I31];
|
||||
t2 = state[I32];
|
||||
t3 = state[I33];
|
||||
state[I30] = t1;
|
||||
state[I31] = t2;
|
||||
state[I32] = t3;
|
||||
state[I33] = t0;
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
// process column info
|
||||
function MixColumns(state)
|
||||
{
|
||||
var col;
|
||||
var c0, c1, c2, c3;
|
||||
|
||||
for( col=0; col<4; col++ )
|
||||
{
|
||||
c0 = state[I(0,col)];
|
||||
c1 = state[I(1,col)];
|
||||
c2 = state[I(2,col)];
|
||||
c3 = state[I(3,col)];
|
||||
|
||||
// do mixing, and put back into array
|
||||
state[I(0,col)] = aes_mul(2,c0) ^ aes_mul(3,c1) ^ c2 ^ c3;
|
||||
state[I(1,col)] = c0 ^ aes_mul(2,c1) ^ aes_mul(3,c2) ^ c3;
|
||||
state[I(2,col)] = c0 ^ c1 ^ aes_mul(2,c2) ^ aes_mul(3,c3);
|
||||
state[I(3,col)] = aes_mul(3,c0) ^ c1 ^ c2 ^ aes_mul(2,c3);
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
// inverse process column info
|
||||
function InvMixColumns(state)
|
||||
{
|
||||
var col;
|
||||
var c0, c1, c2, c3;
|
||||
|
||||
for( col=0; col<4; col++ )
|
||||
{
|
||||
c0 = state[I(0,col)];
|
||||
c1 = state[I(1,col)];
|
||||
c2 = state[I(2,col)];
|
||||
c3 = state[I(3,col)];
|
||||
|
||||
// do inverse mixing, and put back into array
|
||||
state[I(0,col)] = aes_mul(0x0e,c0) ^ aes_mul(0x0b,c1)
|
||||
^ aes_mul(0x0d,c2) ^ aes_mul(0x09,c3);
|
||||
state[I(1,col)] = aes_mul(0x09,c0) ^ aes_mul(0x0e,c1)
|
||||
^ aes_mul(0x0b,c2) ^ aes_mul(0x0d,c3);
|
||||
state[I(2,col)] = aes_mul(0x0d,c0) ^ aes_mul(0x09,c1)
|
||||
^ aes_mul(0x0e,c2) ^ aes_mul(0x0b,c3);
|
||||
state[I(3,col)] = aes_mul(0x0b,c0) ^ aes_mul(0x0d,c1)
|
||||
^ aes_mul(0x09,c2) ^ aes_mul(0x0e,c3);
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
// insert subkey information
|
||||
function AddRoundKey( state, w, base )
|
||||
{
|
||||
var col;
|
||||
|
||||
for( col=0; col<4; col++ )
|
||||
{
|
||||
state[I(0,col)] ^= w[base+col*4];
|
||||
state[I(1,col)] ^= w[base+col*4+1];
|
||||
state[I(2,col)] ^= w[base+col*4+2];
|
||||
state[I(3,col)] ^= w[base+col*4+3];
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
// return a transposed array
|
||||
function transpose( msg )
|
||||
{
|
||||
var row, col;
|
||||
var state = new Array( 16 );
|
||||
|
||||
for( row=0; row<4; row++ )
|
||||
for( col=0; col<4; col++ )
|
||||
state[I(row,col)] = msg[I(col,row)];
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
// final AES state
|
||||
var AES_output = new Array(16);
|
||||
|
||||
// format AES output
|
||||
// -- uses the global array DES_output
|
||||
function format_AES_output(bASCII)
|
||||
{
|
||||
var i;
|
||||
var bits;
|
||||
var str="";
|
||||
|
||||
// what type of data do we have to work with?
|
||||
if (bASCII)
|
||||
{
|
||||
// convert each set of bits back to ASCII
|
||||
for( i=0; i<16; i++ )
|
||||
str += String.fromCharCode( AES_output[i] );
|
||||
}
|
||||
else
|
||||
{
|
||||
// output hexdecimal data (insert spaces)
|
||||
str = cvt_hex8( AES_output[0] );
|
||||
for( i=1; i<16; i++ )
|
||||
{
|
||||
str += "" + cvt_hex8( AES_output[i] );
|
||||
}
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
// do encrytion
|
||||
function aes_encrypt(str, key, bASCII)
|
||||
{
|
||||
//console.log(" aes_encrypt:\tstr = " + str + "\tkey = " + key + "\t bASCII = " + bASCII);
|
||||
var w = new Array( 4*(Nr+1) ); // subkey information
|
||||
var state = new Array( 16 ); // working state
|
||||
var round;
|
||||
|
||||
//accumulated_output_info = "";
|
||||
|
||||
// get the message from the user
|
||||
// also check if it is ASCII or hex
|
||||
var msg = get_value(str, bASCII);
|
||||
|
||||
// problems??
|
||||
if ( msg[0] < 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// get the key from the user
|
||||
var key = get_value(key, false);
|
||||
// problems??
|
||||
if ( key[0] < 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// expand the key
|
||||
w = key_expand( key );
|
||||
|
||||
// initial state = message in columns (transposed from what we input)
|
||||
state = transpose( msg );
|
||||
|
||||
// display the round key - Transpose due to the way it is stored/used
|
||||
state = AddRoundKey(state, w, 0);
|
||||
|
||||
for( round=1; round<Nr; round++ )
|
||||
{
|
||||
state = SubBytes(state, S_enc);
|
||||
state = ShiftRows(state);
|
||||
state = MixColumns(state);
|
||||
// display the round key - Transpose due to the way it is stored/used
|
||||
// note here the spec uses 32-bit words, we are using bytes, so an extra *4
|
||||
state = AddRoundKey(state, w, round*4*4);
|
||||
}
|
||||
|
||||
SubBytes(state, S_enc);
|
||||
ShiftRows(state);
|
||||
AddRoundKey(state, w, Nr*4*4);
|
||||
|
||||
// process output
|
||||
AES_output = transpose( state );
|
||||
var szOutput = format_AES_output(!bASCII);
|
||||
return szOutput;
|
||||
}
|
||||
|
||||
// do decryption
|
||||
function aes_decrypt(str, key, bASCII)
|
||||
{
|
||||
//console.log(" aes_decrypt:\tstr = " + str + "\tkey = " + key + "\tbASCII = " + bASCII);
|
||||
var w = new Array( 4*(Nr+1) ); // subkey information
|
||||
var state = new Array( 16 ); // working state
|
||||
var round;
|
||||
|
||||
//accumulated_output_info = "";
|
||||
|
||||
// get the message from the user
|
||||
// also check if it is ASCII or hex
|
||||
var msg = get_value(str, bASCII);
|
||||
|
||||
// problems??
|
||||
if ( msg[0] < 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// get the key from the user
|
||||
var key = get_value(key, false);
|
||||
// problems??
|
||||
if ( key[0] < 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// expand the key
|
||||
w = key_expand( key );
|
||||
|
||||
// initial state = message
|
||||
state = transpose( msg );
|
||||
// display the round key - Transpose due to the way it is stored/used
|
||||
state = AddRoundKey(state, w, Nr*4*4);
|
||||
|
||||
for( round=Nr-1; round>=1; round-- )
|
||||
{
|
||||
state = InvShiftRows(state);
|
||||
state = SubBytes(state, S_dec);
|
||||
// display the round key - Transpose due to the way it is stored/used
|
||||
// note here the spec uses 32-bit words, we are using bytes, so an extra *4
|
||||
state = AddRoundKey(state, w, round*4*4);
|
||||
state = InvMixColumns(state);
|
||||
}
|
||||
|
||||
InvShiftRows(state);
|
||||
SubBytes(state, S_dec);
|
||||
AddRoundKey(state, w, 0);
|
||||
|
||||
// process output
|
||||
AES_output = transpose( state );
|
||||
var szOutput = format_AES_output(!bASCII);
|
||||
return szOutput;
|
||||
}
|
||||
window.aes_encrypt = aes_encrypt;
|
||||
window.aes_decrypt = aes_decrypt;
|
||||
window.console = window.console || {
|
||||
log: function() {}
|
||||
};
|
||||
}());
|
||||
106
web/public/codebase/encryption/cryptico.min.js
vendored
Normal file
106
web/public/codebase/encryption/cryptico.min.js
vendored
Normal file
@@ -0,0 +1,106 @@
|
||||
var dbits,canary=244837814094590,j_lm=(canary&16777215)==15715070;function BigInteger(a,b,c){a!=null&&("number"==typeof a?this.fromNumber(a,b,c):b==null&&"string"!=typeof a?this.fromString(a,256):this.fromString(a,b))}function nbi(){return new BigInteger(null)}function am1(a,b,c,d,e,g){for(;--g>=0;){var h=b*this[a++]+c[d]+e,e=Math.floor(h/67108864);c[d++]=h&67108863}return e}
|
||||
function am2(a,b,c,d,e,g){var h=b&32767;for(b>>=15;--g>=0;){var f=this[a]&32767,o=this[a++]>>15,p=b*f+o*h,f=h*f+((p&32767)<<15)+c[d]+(e&1073741823),e=(f>>>30)+(p>>>15)+b*o+(e>>>30);c[d++]=f&1073741823}return e}function am3(a,b,c,d,e,g){var h=b&16383;for(b>>=14;--g>=0;){var f=this[a]&16383,o=this[a++]>>14,p=b*f+o*h,f=h*f+((p&16383)<<14)+c[d]+e,e=(f>>28)+(p>>14)+b*o;c[d++]=f&268435455}return e}
|
||||
j_lm&&navigator.appName=="Microsoft Internet Explorer"?(BigInteger.prototype.am=am2,dbits=30):j_lm&&navigator.appName!="Netscape"?(BigInteger.prototype.am=am1,dbits=26):(BigInteger.prototype.am=am3,dbits=28);BigInteger.prototype.DB=dbits;BigInteger.prototype.DM=(1<<dbits)-1;BigInteger.prototype.DV=1<<dbits;var BI_FP=52;BigInteger.prototype.FV=Math.pow(2,BI_FP);BigInteger.prototype.F1=BI_FP-dbits;BigInteger.prototype.F2=2*dbits-BI_FP;var BI_RM="0123456789abcdefghijklmnopqrstuvwxyz",BI_RC=[],rr,vv;
|
||||
rr="0".charCodeAt(0);for(vv=0;vv<=9;++vv)BI_RC[rr++]=vv;rr="a".charCodeAt(0);for(vv=10;vv<36;++vv)BI_RC[rr++]=vv;rr="A".charCodeAt(0);for(vv=10;vv<36;++vv)BI_RC[rr++]=vv;function int2char(a){return BI_RM.charAt(a)}function intAt(a,b){var c=BI_RC[a.charCodeAt(b)];return c==null?-1:c}function bnpCopyTo(a){for(var b=this.t-1;b>=0;--b)a[b]=this[b];a.t=this.t;a.s=this.s}function bnpFromInt(a){this.t=1;this.s=a<0?-1:0;a>0?this[0]=a:a<-1?this[0]=a+DV:this.t=0}
|
||||
function nbv(a){var b=nbi();b.fromInt(a);return b}
|
||||
function bnpFromString(a,b){var c;if(b==16)c=4;else if(b==8)c=3;else if(b==256)c=8;else if(b==2)c=1;else if(b==32)c=5;else if(b==4)c=2;else{this.fromRadix(a,b);return}this.s=this.t=0;for(var d=a.length,e=!1,g=0;--d>=0;){var h=c==8?a[d]&255:intAt(a,d);h<0?a.charAt(d)=="-"&&(e=!0):(e=!1,g==0?this[this.t++]=h:g+c>this.DB?(this[this.t-1]|=(h&(1<<this.DB-g)-1)<<g,this[this.t++]=h>>this.DB-g):this[this.t-1]|=h<<g,g+=c,g>=this.DB&&(g-=this.DB))}if(c==8&&(a[0]&128)!=0)this.s=-1,g>0&&(this[this.t-1]|=(1<<
|
||||
this.DB-g)-1<<g);this.clamp();e&&BigInteger.ZERO.subTo(this,this)}function bnpClamp(){for(var a=this.s&this.DM;this.t>0&&this[this.t-1]==a;)--this.t}
|
||||
function bnToString(a){if(this.s<0)return"-"+this.negate().toString(a);if(a==16)a=4;else if(a==8)a=3;else if(a==2)a=1;else if(a==32)a=5;else if(a==64)a=6;else if(a==4)a=2;else return this.toRadix(a);var b=(1<<a)-1,c,d=!1,e="",g=this.t,h=this.DB-g*this.DB%a;if(g-- >0){if(h<this.DB&&(c=this[g]>>h)>0)d=!0,e=int2char(c);for(;g>=0;)h<a?(c=(this[g]&(1<<h)-1)<<a-h,c|=this[--g]>>(h+=this.DB-a)):(c=this[g]>>(h-=a)&b,h<=0&&(h+=this.DB,--g)),c>0&&(d=!0),d&&(e+=int2char(c))}return d?e:"0"}
|
||||
function bnNegate(){var a=nbi();BigInteger.ZERO.subTo(this,a);return a}function bnAbs(){return this.s<0?this.negate():this}function bnCompareTo(a){var b=this.s-a.s;if(b!=0)return b;var c=this.t,b=c-a.t;if(b!=0)return b;for(;--c>=0;)if((b=this[c]-a[c])!=0)return b;return 0}function nbits(a){var b=1,c;if((c=a>>>16)!=0)a=c,b+=16;if((c=a>>8)!=0)a=c,b+=8;if((c=a>>4)!=0)a=c,b+=4;if((c=a>>2)!=0)a=c,b+=2;a>>1!=0&&(b+=1);return b}
|
||||
function bnBitLength(){return this.t<=0?0:this.DB*(this.t-1)+nbits(this[this.t-1]^this.s&this.DM)}function bnpDLShiftTo(a,b){var c;for(c=this.t-1;c>=0;--c)b[c+a]=this[c];for(c=a-1;c>=0;--c)b[c]=0;b.t=this.t+a;b.s=this.s}function bnpDRShiftTo(a,b){for(var c=a;c<this.t;++c)b[c-a]=this[c];b.t=Math.max(this.t-a,0);b.s=this.s}
|
||||
function bnpLShiftTo(a,b){var c=a%this.DB,d=this.DB-c,e=(1<<d)-1,g=Math.floor(a/this.DB),h=this.s<<c&this.DM,f;for(f=this.t-1;f>=0;--f)b[f+g+1]=this[f]>>d|h,h=(this[f]&e)<<c;for(f=g-1;f>=0;--f)b[f]=0;b[g]=h;b.t=this.t+g+1;b.s=this.s;b.clamp()}
|
||||
function bnpRShiftTo(a,b){b.s=this.s;var c=Math.floor(a/this.DB);if(c>=this.t)b.t=0;else{var d=a%this.DB,e=this.DB-d,g=(1<<d)-1;b[0]=this[c]>>d;for(var h=c+1;h<this.t;++h)b[h-c-1]|=(this[h]&g)<<e,b[h-c]=this[h]>>d;d>0&&(b[this.t-c-1]|=(this.s&g)<<e);b.t=this.t-c;b.clamp()}}
|
||||
function bnpSubTo(a,b){for(var c=0,d=0,e=Math.min(a.t,this.t);c<e;)d+=this[c]-a[c],b[c++]=d&this.DM,d>>=this.DB;if(a.t<this.t){for(d-=a.s;c<this.t;)d+=this[c],b[c++]=d&this.DM,d>>=this.DB;d+=this.s}else{for(d+=this.s;c<a.t;)d-=a[c],b[c++]=d&this.DM,d>>=this.DB;d-=a.s}b.s=d<0?-1:0;d<-1?b[c++]=this.DV+d:d>0&&(b[c++]=d);b.t=c;b.clamp()}
|
||||
function bnpMultiplyTo(a,b){var c=this.abs(),d=a.abs(),e=c.t;for(b.t=e+d.t;--e>=0;)b[e]=0;for(e=0;e<d.t;++e)b[e+c.t]=c.am(0,d[e],b,e,0,c.t);b.s=0;b.clamp();this.s!=a.s&&BigInteger.ZERO.subTo(b,b)}function bnpSquareTo(a){for(var b=this.abs(),c=a.t=2*b.t;--c>=0;)a[c]=0;for(c=0;c<b.t-1;++c){var d=b.am(c,b[c],a,2*c,0,1);if((a[c+b.t]+=b.am(c+1,2*b[c],a,2*c+1,d,b.t-c-1))>=b.DV)a[c+b.t]-=b.DV,a[c+b.t+1]=1}a.t>0&&(a[a.t-1]+=b.am(c,b[c],a,2*c,0,1));a.s=0;a.clamp()}
|
||||
function bnpDivRemTo(a,b,c){var d=a.abs();if(!(d.t<=0)){var e=this.abs();if(e.t<d.t)b!=null&&b.fromInt(0),c!=null&&this.copyTo(c);else{c==null&&(c=nbi());var g=nbi(),h=this.s,a=a.s,f=this.DB-nbits(d[d.t-1]);f>0?(d.lShiftTo(f,g),e.lShiftTo(f,c)):(d.copyTo(g),e.copyTo(c));d=g.t;e=g[d-1];if(e!=0){var o=e*(1<<this.F1)+(d>1?g[d-2]>>this.F2:0),p=this.FV/o,o=(1<<this.F1)/o,q=1<<this.F2,n=c.t,k=n-d,j=b==null?nbi():b;g.dlShiftTo(k,j);c.compareTo(j)>=0&&(c[c.t++]=1,c.subTo(j,c));BigInteger.ONE.dlShiftTo(d,
|
||||
j);for(j.subTo(g,g);g.t<d;)g[g.t++]=0;for(;--k>=0;){var l=c[--n]==e?this.DM:Math.floor(c[n]*p+(c[n-1]+q)*o);if((c[n]+=g.am(0,l,c,k,0,d))<l){g.dlShiftTo(k,j);for(c.subTo(j,c);c[n]<--l;)c.subTo(j,c)}}b!=null&&(c.drShiftTo(d,b),h!=a&&BigInteger.ZERO.subTo(b,b));c.t=d;c.clamp();f>0&&c.rShiftTo(f,c);h<0&&BigInteger.ZERO.subTo(c,c)}}}}function bnMod(a){var b=nbi();this.abs().divRemTo(a,null,b);this.s<0&&b.compareTo(BigInteger.ZERO)>0&&a.subTo(b,b);return b}function Classic(a){this.m=a}
|
||||
function cConvert(a){return a.s<0||a.compareTo(this.m)>=0?a.mod(this.m):a}function cRevert(a){return a}function cReduce(a){a.divRemTo(this.m,null,a)}function cMulTo(a,b,c){a.multiplyTo(b,c);this.reduce(c)}function cSqrTo(a,b){a.squareTo(b);this.reduce(b)}Classic.prototype.convert=cConvert;Classic.prototype.revert=cRevert;Classic.prototype.reduce=cReduce;Classic.prototype.mulTo=cMulTo;Classic.prototype.sqrTo=cSqrTo;
|
||||
function bnpInvDigit(){if(this.t<1)return 0;var a=this[0];if((a&1)==0)return 0;var b=a&3,b=b*(2-(a&15)*b)&15,b=b*(2-(a&255)*b)&255,b=b*(2-((a&65535)*b&65535))&65535,b=b*(2-a*b%this.DV)%this.DV;return b>0?this.DV-b:-b}function Montgomery(a){this.m=a;this.mp=a.invDigit();this.mpl=this.mp&32767;this.mph=this.mp>>15;this.um=(1<<a.DB-15)-1;this.mt2=2*a.t}
|
||||
function montConvert(a){var b=nbi();a.abs().dlShiftTo(this.m.t,b);b.divRemTo(this.m,null,b);a.s<0&&b.compareTo(BigInteger.ZERO)>0&&this.m.subTo(b,b);return b}function montRevert(a){var b=nbi();a.copyTo(b);this.reduce(b);return b}
|
||||
function montReduce(a){for(;a.t<=this.mt2;)a[a.t++]=0;for(var b=0;b<this.m.t;++b){var c=a[b]&32767,d=c*this.mpl+((c*this.mph+(a[b]>>15)*this.mpl&this.um)<<15)&a.DM,c=b+this.m.t;for(a[c]+=this.m.am(0,d,a,b,0,this.m.t);a[c]>=a.DV;)a[c]-=a.DV,a[++c]++}a.clamp();a.drShiftTo(this.m.t,a);a.compareTo(this.m)>=0&&a.subTo(this.m,a)}function montSqrTo(a,b){a.squareTo(b);this.reduce(b)}function montMulTo(a,b,c){a.multiplyTo(b,c);this.reduce(c)}Montgomery.prototype.convert=montConvert;
|
||||
Montgomery.prototype.revert=montRevert;Montgomery.prototype.reduce=montReduce;Montgomery.prototype.mulTo=montMulTo;Montgomery.prototype.sqrTo=montSqrTo;function bnpIsEven(){return(this.t>0?this[0]&1:this.s)==0}function bnpExp(a,b){if(a>4294967295||a<1)return BigInteger.ONE;var c=nbi(),d=nbi(),e=b.convert(this),g=nbits(a)-1;for(e.copyTo(c);--g>=0;)if(b.sqrTo(c,d),(a&1<<g)>0)b.mulTo(d,e,c);else var h=c,c=d,d=h;return b.revert(c)}
|
||||
function bnModPowInt(a,b){var c;c=a<256||b.isEven()?new Classic(b):new Montgomery(b);return this.exp(a,c)}BigInteger.prototype.copyTo=bnpCopyTo;BigInteger.prototype.fromInt=bnpFromInt;BigInteger.prototype.fromString=bnpFromString;BigInteger.prototype.clamp=bnpClamp;BigInteger.prototype.dlShiftTo=bnpDLShiftTo;BigInteger.prototype.drShiftTo=bnpDRShiftTo;BigInteger.prototype.lShiftTo=bnpLShiftTo;BigInteger.prototype.rShiftTo=bnpRShiftTo;BigInteger.prototype.subTo=bnpSubTo;
|
||||
BigInteger.prototype.multiplyTo=bnpMultiplyTo;BigInteger.prototype.squareTo=bnpSquareTo;BigInteger.prototype.divRemTo=bnpDivRemTo;BigInteger.prototype.invDigit=bnpInvDigit;BigInteger.prototype.isEven=bnpIsEven;BigInteger.prototype.exp=bnpExp;BigInteger.prototype.toString=bnToString;BigInteger.prototype.negate=bnNegate;BigInteger.prototype.abs=bnAbs;BigInteger.prototype.compareTo=bnCompareTo;BigInteger.prototype.bitLength=bnBitLength;BigInteger.prototype.mod=bnMod;BigInteger.prototype.modPowInt=bnModPowInt;
|
||||
BigInteger.ZERO=nbv(0);BigInteger.ONE=nbv(1);function bnClone(){var a=nbi();this.copyTo(a);return a}function bnIntValue(){if(this.s<0)if(this.t==1)return this[0]-this.DV;else{if(this.t==0)return-1}else if(this.t==1)return this[0];else if(this.t==0)return 0;return(this[1]&(1<<32-this.DB)-1)<<this.DB|this[0]}function bnByteValue(){return this.t==0?this.s:this[0]<<24>>24}function bnShortValue(){return this.t==0?this.s:this[0]<<16>>16}
|
||||
function bnpChunkSize(a){return Math.floor(Math.LN2*this.DB/Math.log(a))}function bnSigNum(){return this.s<0?-1:this.t<=0||this.t==1&&this[0]<=0?0:1}function bnpToRadix(a){a==null&&(a=10);if(this.signum()==0||a<2||a>36)return"0";var b=this.chunkSize(a),b=Math.pow(a,b),c=nbv(b),d=nbi(),e=nbi(),g="";for(this.divRemTo(c,d,e);d.signum()>0;)g=(b+e.intValue()).toString(a).substr(1)+g,d.divRemTo(c,d,e);return e.intValue().toString(a)+g}
|
||||
function bnpFromRadix(a,b){this.fromInt(0);b==null&&(b=10);for(var c=this.chunkSize(b),d=Math.pow(b,c),e=!1,g=0,h=0,f=0;f<a.length;++f){var o=intAt(a,f);o<0?a.charAt(f)=="-"&&this.signum()==0&&(e=!0):(h=b*h+o,++g>=c&&(this.dMultiply(d),this.dAddOffset(h,0),h=g=0))}g>0&&(this.dMultiply(Math.pow(b,g)),this.dAddOffset(h,0));e&&BigInteger.ZERO.subTo(this,this)}
|
||||
function bnpFromNumber(a,b,c){if("number"==typeof b)if(a<2)this.fromInt(1);else{this.fromNumber(a,c);this.testBit(a-1)||this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);for(this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(b);)this.dAddOffset(2,0),this.bitLength()>a&&this.subTo(BigInteger.ONE.shiftLeft(a-1),this)}else{var c=[],d=a&7;c.length=(a>>3)+1;b.nextBytes(c);d>0?c[0]&=(1<<d)-1:c[0]=0;this.fromString(c,256)}}
|
||||
function bnToByteArray(){var a=this.t,b=[];b[0]=this.s;var c=this.DB-a*this.DB%8,d,e=0;if(a-- >0){if(c<this.DB&&(d=this[a]>>c)!=(this.s&this.DM)>>c)b[e++]=d|this.s<<this.DB-c;for(;a>=0;)if(c<8?(d=(this[a]&(1<<c)-1)<<8-c,d|=this[--a]>>(c+=this.DB-8)):(d=this[a]>>(c-=8)&255,c<=0&&(c+=this.DB,--a)),(d&128)!=0&&(d|=-256),e==0&&(this.s&128)!=(d&128)&&++e,e>0||d!=this.s)b[e++]=d}return b}function bnEquals(a){return this.compareTo(a)==0}function bnMin(a){return this.compareTo(a)<0?this:a}
|
||||
function bnMax(a){return this.compareTo(a)>0?this:a}function bnpBitwiseTo(a,b,c){var d,e,g=Math.min(a.t,this.t);for(d=0;d<g;++d)c[d]=b(this[d],a[d]);if(a.t<this.t){e=a.s&this.DM;for(d=g;d<this.t;++d)c[d]=b(this[d],e);c.t=this.t}else{e=this.s&this.DM;for(d=g;d<a.t;++d)c[d]=b(e,a[d]);c.t=a.t}c.s=b(this.s,a.s);c.clamp()}function op_and(a,b){return a&b}function bnAnd(a){var b=nbi();this.bitwiseTo(a,op_and,b);return b}function op_or(a,b){return a|b}
|
||||
function bnOr(a){var b=nbi();this.bitwiseTo(a,op_or,b);return b}function op_xor(a,b){return a^b}function bnXor(a){var b=nbi();this.bitwiseTo(a,op_xor,b);return b}function op_andnot(a,b){return a&~b}function bnAndNot(a){var b=nbi();this.bitwiseTo(a,op_andnot,b);return b}function bnNot(){for(var a=nbi(),b=0;b<this.t;++b)a[b]=this.DM&~this[b];a.t=this.t;a.s=~this.s;return a}function bnShiftLeft(a){var b=nbi();a<0?this.rShiftTo(-a,b):this.lShiftTo(a,b);return b}
|
||||
function bnShiftRight(a){var b=nbi();a<0?this.lShiftTo(-a,b):this.rShiftTo(a,b);return b}function lbit(a){if(a==0)return-1;var b=0;(a&65535)==0&&(a>>=16,b+=16);(a&255)==0&&(a>>=8,b+=8);(a&15)==0&&(a>>=4,b+=4);(a&3)==0&&(a>>=2,b+=2);(a&1)==0&&++b;return b}function bnGetLowestSetBit(){for(var a=0;a<this.t;++a)if(this[a]!=0)return a*this.DB+lbit(this[a]);return this.s<0?this.t*this.DB:-1}function cbit(a){for(var b=0;a!=0;)a&=a-1,++b;return b}
|
||||
function bnBitCount(){for(var a=0,b=this.s&this.DM,c=0;c<this.t;++c)a+=cbit(this[c]^b);return a}function bnTestBit(a){var b=Math.floor(a/this.DB);return b>=this.t?this.s!=0:(this[b]&1<<a%this.DB)!=0}function bnpChangeBit(a,b){var c=BigInteger.ONE.shiftLeft(a);this.bitwiseTo(c,b,c);return c}function bnSetBit(a){return this.changeBit(a,op_or)}function bnClearBit(a){return this.changeBit(a,op_andnot)}function bnFlipBit(a){return this.changeBit(a,op_xor)}
|
||||
function bnpAddTo(a,b){for(var c=0,d=0,e=Math.min(a.t,this.t);c<e;)d+=this[c]+a[c],b[c++]=d&this.DM,d>>=this.DB;if(a.t<this.t){for(d+=a.s;c<this.t;)d+=this[c],b[c++]=d&this.DM,d>>=this.DB;d+=this.s}else{for(d+=this.s;c<a.t;)d+=a[c],b[c++]=d&this.DM,d>>=this.DB;d+=a.s}b.s=d<0?-1:0;d>0?b[c++]=d:d<-1&&(b[c++]=this.DV+d);b.t=c;b.clamp()}function bnAdd(a){var b=nbi();this.addTo(a,b);return b}function bnSubtract(a){var b=nbi();this.subTo(a,b);return b}
|
||||
function bnMultiply(a){var b=nbi();this.multiplyTo(a,b);return b}function bnSquare(){var a=nbi();this.squareTo(a);return a}function bnDivide(a){var b=nbi();this.divRemTo(a,b,null);return b}function bnRemainder(a){var b=nbi();this.divRemTo(a,null,b);return b}function bnDivideAndRemainder(a){var b=nbi(),c=nbi();this.divRemTo(a,b,c);return[b,c]}function bnpDMultiply(a){this[this.t]=this.am(0,a-1,this,0,0,this.t);++this.t;this.clamp()}
|
||||
function bnpDAddOffset(a,b){if(a!=0){for(;this.t<=b;)this[this.t++]=0;for(this[b]+=a;this[b]>=this.DV;)this[b]-=this.DV,++b>=this.t&&(this[this.t++]=0),++this[b]}}function NullExp(){}function nNop(a){return a}function nMulTo(a,b,c){a.multiplyTo(b,c)}function nSqrTo(a,b){a.squareTo(b)}NullExp.prototype.convert=nNop;NullExp.prototype.revert=nNop;NullExp.prototype.mulTo=nMulTo;NullExp.prototype.sqrTo=nSqrTo;function bnPow(a){return this.exp(a,new NullExp)}
|
||||
function bnpMultiplyLowerTo(a,b,c){var d=Math.min(this.t+a.t,b);c.s=0;for(c.t=d;d>0;)c[--d]=0;var e;for(e=c.t-this.t;d<e;++d)c[d+this.t]=this.am(0,a[d],c,d,0,this.t);for(e=Math.min(a.t,b);d<e;++d)this.am(0,a[d],c,d,0,b-d);c.clamp()}function bnpMultiplyUpperTo(a,b,c){--b;var d=c.t=this.t+a.t-b;for(c.s=0;--d>=0;)c[d]=0;for(d=Math.max(b-this.t,0);d<a.t;++d)c[this.t+d-b]=this.am(b-d,a[d],c,0,0,this.t+d-b);c.clamp();c.drShiftTo(1,c)}
|
||||
function Barrett(a){this.r2=nbi();this.q3=nbi();BigInteger.ONE.dlShiftTo(2*a.t,this.r2);this.mu=this.r2.divide(a);this.m=a}function barrettConvert(a){if(a.s<0||a.t>2*this.m.t)return a.mod(this.m);else if(a.compareTo(this.m)<0)return a;else{var b=nbi();a.copyTo(b);this.reduce(b);return b}}function barrettRevert(a){return a}
|
||||
function barrettReduce(a){a.drShiftTo(this.m.t-1,this.r2);if(a.t>this.m.t+1)a.t=this.m.t+1,a.clamp();this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);for(this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);a.compareTo(this.r2)<0;)a.dAddOffset(1,this.m.t+1);for(a.subTo(this.r2,a);a.compareTo(this.m)>=0;)a.subTo(this.m,a)}function barrettSqrTo(a,b){a.squareTo(b);this.reduce(b)}function barrettMulTo(a,b,c){a.multiplyTo(b,c);this.reduce(c)}Barrett.prototype.convert=barrettConvert;
|
||||
Barrett.prototype.revert=barrettRevert;Barrett.prototype.reduce=barrettReduce;Barrett.prototype.mulTo=barrettMulTo;Barrett.prototype.sqrTo=barrettSqrTo;
|
||||
function bnModPow(a,b){var c=a.bitLength(),d,e=nbv(1),g;if(c<=0)return e;else d=c<18?1:c<48?3:c<144?4:c<768?5:6;g=c<8?new Classic(b):b.isEven()?new Barrett(b):new Montgomery(b);var h=[],f=3,o=d-1,p=(1<<d)-1;h[1]=g.convert(this);if(d>1){c=nbi();for(g.sqrTo(h[1],c);f<=p;)h[f]=nbi(),g.mulTo(c,h[f-2],h[f]),f+=2}for(var q=a.t-1,n,k=!0,j=nbi(),c=nbits(a[q])-1;q>=0;){c>=o?n=a[q]>>c-o&p:(n=(a[q]&(1<<c+1)-1)<<o-c,q>0&&(n|=a[q-1]>>this.DB+c-o));for(f=d;(n&1)==0;)n>>=1,--f;if((c-=f)<0)c+=this.DB,--q;if(k)h[n].copyTo(e),
|
||||
k=!1;else{for(;f>1;)g.sqrTo(e,j),g.sqrTo(j,e),f-=2;f>0?g.sqrTo(e,j):(f=e,e=j,j=f);g.mulTo(j,h[n],e)}for(;q>=0&&(a[q]&1<<c)==0;)g.sqrTo(e,j),f=e,e=j,j=f,--c<0&&(c=this.DB-1,--q)}return g.revert(e)}
|
||||
function bnGCD(a){var b=this.s<0?this.negate():this.clone(),a=a.s<0?a.negate():a.clone();if(b.compareTo(a)<0)var c=b,b=a,a=c;var c=b.getLowestSetBit(),d=a.getLowestSetBit();if(d<0)return b;c<d&&(d=c);d>0&&(b.rShiftTo(d,b),a.rShiftTo(d,a));for(;b.signum()>0;)(c=b.getLowestSetBit())>0&&b.rShiftTo(c,b),(c=a.getLowestSetBit())>0&&a.rShiftTo(c,a),b.compareTo(a)>=0?(b.subTo(a,b),b.rShiftTo(1,b)):(a.subTo(b,a),a.rShiftTo(1,a));d>0&&a.lShiftTo(d,a);return a}
|
||||
function bnpModInt(a){if(a<=0)return 0;var b=this.DV%a,c=this.s<0?a-1:0;if(this.t>0)if(b==0)c=this[0]%a;else for(var d=this.t-1;d>=0;--d)c=(b*c+this[d])%a;return c}
|
||||
function bnModInverse(a){var b=a.isEven();if(this.isEven()&&b||a.signum()==0)return BigInteger.ZERO;for(var c=a.clone(),d=this.clone(),e=nbv(1),g=nbv(0),h=nbv(0),f=nbv(1);c.signum()!=0;){for(;c.isEven();){c.rShiftTo(1,c);if(b){if(!e.isEven()||!g.isEven())e.addTo(this,e),g.subTo(a,g);e.rShiftTo(1,e)}else g.isEven()||g.subTo(a,g);g.rShiftTo(1,g)}for(;d.isEven();){d.rShiftTo(1,d);if(b){if(!h.isEven()||!f.isEven())h.addTo(this,h),f.subTo(a,f);h.rShiftTo(1,h)}else f.isEven()||f.subTo(a,f);f.rShiftTo(1,
|
||||
f)}c.compareTo(d)>=0?(c.subTo(d,c),b&&e.subTo(h,e),g.subTo(f,g)):(d.subTo(c,d),b&&h.subTo(e,h),f.subTo(g,f))}if(d.compareTo(BigInteger.ONE)!=0)return BigInteger.ZERO;if(f.compareTo(a)>=0)return f.subtract(a);if(f.signum()<0)f.addTo(a,f);else return f;return f.signum()<0?f.add(a):f}
|
||||
var lowprimes=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,
|
||||
733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],lplim=67108864/lowprimes[lowprimes.length-1];
|
||||
function bnIsProbablePrime(a){var b,c=this.abs();if(c.t==1&&c[0]<=lowprimes[lowprimes.length-1]){for(b=0;b<lowprimes.length;++b)if(c[0]==lowprimes[b])return!0;return!1}if(c.isEven())return!1;for(b=1;b<lowprimes.length;){for(var d=lowprimes[b],e=b+1;e<lowprimes.length&&d<lplim;)d*=lowprimes[e++];for(d=c.modInt(d);b<e;)if(d%lowprimes[b++]==0)return!1}return c.millerRabin(a)}
|
||||
function bnpMillerRabin(a){var b=this.subtract(BigInteger.ONE),c=b.getLowestSetBit();if(c<=0)return!1;var d=b.shiftRight(c),a=a+1>>1;if(a>lowprimes.length)a=lowprimes.length;for(var e=nbi(),g=0;g<a;++g){e.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]);var h=e.modPow(d,this);if(h.compareTo(BigInteger.ONE)!=0&&h.compareTo(b)!=0){for(var f=1;f++<c&&h.compareTo(b)!=0;)if(h=h.modPowInt(2,this),h.compareTo(BigInteger.ONE)==0)return!1;if(h.compareTo(b)!=0)return!1}}return!0}
|
||||
BigInteger.prototype.chunkSize=bnpChunkSize;BigInteger.prototype.toRadix=bnpToRadix;BigInteger.prototype.fromRadix=bnpFromRadix;BigInteger.prototype.fromNumber=bnpFromNumber;BigInteger.prototype.bitwiseTo=bnpBitwiseTo;BigInteger.prototype.changeBit=bnpChangeBit;BigInteger.prototype.addTo=bnpAddTo;BigInteger.prototype.dMultiply=bnpDMultiply;BigInteger.prototype.dAddOffset=bnpDAddOffset;BigInteger.prototype.multiplyLowerTo=bnpMultiplyLowerTo;BigInteger.prototype.multiplyUpperTo=bnpMultiplyUpperTo;
|
||||
BigInteger.prototype.modInt=bnpModInt;BigInteger.prototype.millerRabin=bnpMillerRabin;BigInteger.prototype.clone=bnClone;BigInteger.prototype.intValue=bnIntValue;BigInteger.prototype.byteValue=bnByteValue;BigInteger.prototype.shortValue=bnShortValue;BigInteger.prototype.signum=bnSigNum;BigInteger.prototype.toByteArray=bnToByteArray;BigInteger.prototype.equals=bnEquals;BigInteger.prototype.min=bnMin;BigInteger.prototype.max=bnMax;BigInteger.prototype.and=bnAnd;BigInteger.prototype.or=bnOr;
|
||||
BigInteger.prototype.xor=bnXor;BigInteger.prototype.andNot=bnAndNot;BigInteger.prototype.not=bnNot;BigInteger.prototype.shiftLeft=bnShiftLeft;BigInteger.prototype.shiftRight=bnShiftRight;BigInteger.prototype.getLowestSetBit=bnGetLowestSetBit;BigInteger.prototype.bitCount=bnBitCount;BigInteger.prototype.testBit=bnTestBit;BigInteger.prototype.setBit=bnSetBit;BigInteger.prototype.clearBit=bnClearBit;BigInteger.prototype.flipBit=bnFlipBit;BigInteger.prototype.add=bnAdd;BigInteger.prototype.subtract=bnSubtract;
|
||||
BigInteger.prototype.multiply=bnMultiply;BigInteger.prototype.divide=bnDivide;BigInteger.prototype.remainder=bnRemainder;BigInteger.prototype.divideAndRemainder=bnDivideAndRemainder;BigInteger.prototype.modPow=bnModPow;BigInteger.prototype.modInverse=bnModInverse;BigInteger.prototype.pow=bnPow;BigInteger.prototype.gcd=bnGCD;BigInteger.prototype.isProbablePrime=bnIsProbablePrime;BigInteger.prototype.square=bnSquare;
|
||||
(function(a,b,c,d,e,g,h){function f(a){var b,d,e=this,g=a.length,f=0,h=e.i=e.j=e.m=0;e.S=[];e.c=[];for(g||(a=[g++]);f<c;)e.S[f]=f++;for(f=0;f<c;f++)b=e.S[f],h=h+b+a[f%g]&c-1,d=e.S[h],e.S[f]=d,e.S[h]=b;e.g=function(a){var b=e.S,d=e.i+1&c-1,g=b[d],f=e.j+g&c-1,h=b[f];b[d]=h;b[f]=g;for(var k=b[g+h&c-1];--a;)d=d+1&c-1,g=b[d],f=f+g&c-1,h=b[f],b[d]=h,b[f]=g,k=k*c+b[g+h&c-1];e.i=d;e.j=f;return k};e.g(c)}function o(a,b,c,d,e){c=[];e=typeof a;if(b&&e=="object")for(d in a)if(d.indexOf("S")<5)try{c.push(o(a[d],
|
||||
b-1))}catch(g){}return c.length?c:a+(e!="string"?"\x00":"")}function p(a,b,d,e){a+="";for(e=d=0;e<a.length;e++){var g=b,f=e&c-1,h=(d^=b[e&c-1]*19)+a.charCodeAt(e);g[f]=h&c-1}a="";for(e in b)a+=String.fromCharCode(b[e]);return a}b.seedrandom=function(q,n){var k=[],j,q=p(o(n?[q,a]:arguments.length?q:[(new Date).getTime(),a,window],3),k);j=new f(k);p(j.S,a);b.random=function(){for(var a=j.g(d),b=h,f=0;a<e;)a=(a+f)*c,b*=c,f=j.g(1);for(;a>=g;)a/=2,b/=2,f>>>=1;return(a+f)/b};return q};h=b.pow(c,d);e=b.pow(2,
|
||||
e);g=e*2;p(b.random(),a)})([],Math,256,6,52);function SeededRandom(){}function SRnextBytes(a){var b;for(b=0;b<a.length;b++)a[b]=Math.floor(Math.random()*256)}SeededRandom.prototype.nextBytes=SRnextBytes;function Arcfour(){this.j=this.i=0;this.S=[]}function ARC4init(a){var b,c,d;for(b=0;b<256;++b)this.S[b]=b;for(b=c=0;b<256;++b)c=c+this.S[b]+a[b%a.length]&255,d=this.S[b],this.S[b]=this.S[c],this.S[c]=d;this.j=this.i=0}
|
||||
function ARC4next(){var a;this.i=this.i+1&255;this.j=this.j+this.S[this.i]&255;a=this.S[this.i];this.S[this.i]=this.S[this.j];this.S[this.j]=a;return this.S[a+this.S[this.i]&255]}Arcfour.prototype.init=ARC4init;Arcfour.prototype.next=ARC4next;function prng_newstate(){return new Arcfour}var rng_psize=256,rng_state,rng_pool,rng_pptr;
|
||||
function rng_seed_int(a){rng_pool[rng_pptr++]^=a&255;rng_pool[rng_pptr++]^=a>>8&255;rng_pool[rng_pptr++]^=a>>16&255;rng_pool[rng_pptr++]^=a>>24&255;rng_pptr>=rng_psize&&(rng_pptr-=rng_psize)}function rng_seed_time(){rng_seed_int((new Date).getTime())}
|
||||
if(rng_pool==null){rng_pool=[];rng_pptr=0;var t;if(navigator.appName=="Netscape"&&navigator.appVersion<"5"&&window.crypto){var z=window.crypto.random(32);for(t=0;t<z.length;++t)rng_pool[rng_pptr++]=z.charCodeAt(t)&255}for(;rng_pptr<rng_psize;)t=Math.floor(65536*Math.random()),rng_pool[rng_pptr++]=t>>>8,rng_pool[rng_pptr++]=t&255;rng_pptr=0;rng_seed_time()}
|
||||
function rng_get_byte(){if(rng_state==null){rng_seed_time();rng_state=prng_newstate();rng_state.init(rng_pool);for(rng_pptr=0;rng_pptr<rng_pool.length;++rng_pptr)rng_pool[rng_pptr]=0;rng_pptr=0}return rng_state.next()}function rng_get_bytes(a){var b;for(b=0;b<a.length;++b)a[b]=rng_get_byte()}function SecureRandom(){}SecureRandom.prototype.nextBytes=rng_get_bytes;
|
||||
function SHA256(a){function b(a,b){var c=(a&65535)+(b&65535);return(a>>16)+(b>>16)+(c>>16)<<16|c&65535}function c(a,b){return a>>>b|a<<32-b}a=function(a){for(var a=a.replace(/\r\n/g,"\n"),b="",c=0;c<a.length;c++){var h=a.charCodeAt(c);h<128?b+=String.fromCharCode(h):(h>127&&h<2048?b+=String.fromCharCode(h>>6|192):(b+=String.fromCharCode(h>>12|224),b+=String.fromCharCode(h>>6&63|128)),b+=String.fromCharCode(h&63|128))}return b}(a);return function(a){for(var b="",c=0;c<a.length*4;c++)b+="0123456789abcdef".charAt(a[c>>
|
||||
2]>>(3-c%4)*8+4&15)+"0123456789abcdef".charAt(a[c>>2]>>(3-c%4)*8&15);return b}(function(a,e){var g=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,
|
||||
2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],f=Array(64),o,p,q,n,k,j,l,m,s,r,u,w;a[e>>5]|=128<<24-e%32;a[(e+64>>9<<4)+15]=e;for(s=0;s<a.length;s+=16){o=h[0];p=h[1];q=h[2];n=h[3];
|
||||
k=h[4];j=h[5];l=h[6];m=h[7];for(r=0;r<64;r++)f[r]=r<16?a[r+s]:b(b(b(c(f[r-2],17)^c(f[r-2],19)^f[r-2]>>>10,f[r-7]),c(f[r-15],7)^c(f[r-15],18)^f[r-15]>>>3),f[r-16]),u=b(b(b(b(m,c(k,6)^c(k,11)^c(k,25)),k&j^~k&l),g[r]),f[r]),w=b(c(o,2)^c(o,13)^c(o,22),o&p^o&q^p&q),m=l,l=j,j=k,k=b(n,u),n=q,q=p,p=o,o=b(u,w);h[0]=b(o,h[0]);h[1]=b(p,h[1]);h[2]=b(q,h[2]);h[3]=b(n,h[3]);h[4]=b(k,h[4]);h[5]=b(j,h[5]);h[6]=b(l,h[6]);h[7]=b(m,h[7])}return h}(function(a){for(var b=[],c=0;c<a.length*8;c+=8)b[c>>5]|=(a.charCodeAt(c/
|
||||
8)&255)<<24-c%32;return b}(a),a.length*8))}var sha256={hex:function(a){return SHA256(a)}};
|
||||
function SHA1(a){function b(a,b){return a<<b|a>>>32-b}function c(a){var b="",c,d;for(c=7;c>=0;c--)d=a>>>c*4&15,b+=d.toString(16);return b}var d,e,g=Array(80),h=1732584193,f=4023233417,o=2562383102,p=271733878,q=3285377520,n,k,j,l,m,a=function(a){for(var a=a.replace(/\r\n/g,"\n"),b="",c=0;c<a.length;c++){var d=a.charCodeAt(c);d<128?b+=String.fromCharCode(d):(d>127&&d<2048?b+=String.fromCharCode(d>>6|192):(b+=String.fromCharCode(d>>12|224),b+=String.fromCharCode(d>>6&63|128)),b+=String.fromCharCode(d&
|
||||
63|128))}return b}(a);n=a.length;var s=[];for(d=0;d<n-3;d+=4)e=a.charCodeAt(d)<<24|a.charCodeAt(d+1)<<16|a.charCodeAt(d+2)<<8|a.charCodeAt(d+3),s.push(e);switch(n%4){case 0:d=2147483648;break;case 1:d=a.charCodeAt(n-1)<<24|8388608;break;case 2:d=a.charCodeAt(n-2)<<24|a.charCodeAt(n-1)<<16|32768;break;case 3:d=a.charCodeAt(n-3)<<24|a.charCodeAt(n-2)<<16|a.charCodeAt(n-1)<<8|128}for(s.push(d);s.length%16!=14;)s.push(0);s.push(n>>>29);s.push(n<<3&4294967295);for(a=0;a<s.length;a+=16){for(d=0;d<16;d++)g[d]=
|
||||
s[a+d];for(d=16;d<=79;d++)g[d]=b(g[d-3]^g[d-8]^g[d-14]^g[d-16],1);e=h;n=f;k=o;j=p;l=q;for(d=0;d<=19;d++)m=b(e,5)+(n&k|~n&j)+l+g[d]+1518500249&4294967295,l=j,j=k,k=b(n,30),n=e,e=m;for(d=20;d<=39;d++)m=b(e,5)+(n^k^j)+l+g[d]+1859775393&4294967295,l=j,j=k,k=b(n,30),n=e,e=m;for(d=40;d<=59;d++)m=b(e,5)+(n&k|n&j|k&j)+l+g[d]+2400959708&4294967295,l=j,j=k,k=b(n,30),n=e,e=m;for(d=60;d<=79;d++)m=b(e,5)+(n^k^j)+l+g[d]+3395469782&4294967295,l=j,j=k,k=b(n,30),n=e,e=m;h=h+e&4294967295;f=f+n&4294967295;o=o+k&4294967295;
|
||||
p=p+j&4294967295;q=q+l&4294967295}m=c(h)+c(f)+c(o)+c(p)+c(q);return m.toLowerCase()}
|
||||
var sha1={hex:function(a){return SHA1(a)}},MD5=function(a){function b(a,b){var c,d,e,f,g;e=a&2147483648;f=b&2147483648;c=a&1073741824;d=b&1073741824;g=(a&1073741823)+(b&1073741823);return c&d?g^2147483648^e^f:c|d?g&1073741824?g^3221225472^e^f:g^1073741824^e^f:g^e^f}function c(a,c,d,e,f,g,h){a=b(a,b(b(c&d|~c&e,f),h));return b(a<<g|a>>>32-g,c)}function d(a,c,d,e,f,g,h){a=b(a,b(b(c&e|d&~e,f),h));return b(a<<g|a>>>32-g,c)}function e(a,c,d,e,f,g,h){a=b(a,b(b(c^d^e,f),h));return b(a<<g|a>>>32-g,c)}function g(a,
|
||||
c,d,e,f,g,h){a=b(a,b(b(d^(c|~e),f),h));return b(a<<g|a>>>32-g,c)}function h(a){var b="",c="",d;for(d=0;d<=3;d++)c=a>>>d*8&255,c="0"+c.toString(16),b+=c.substr(c.length-2,2);return b}var f=[],o,p,q,n,k,j,l,m,a=function(a){for(var a=a.replace(/\r\n/g,"\n"),b="",c=0;c<a.length;c++){var d=a.charCodeAt(c);d<128?b+=String.fromCharCode(d):(d>127&&d<2048?b+=String.fromCharCode(d>>6|192):(b+=String.fromCharCode(d>>12|224),b+=String.fromCharCode(d>>6&63|128)),b+=String.fromCharCode(d&63|128))}return b}(a),
|
||||
f=function(a){var b,c=a.length;b=c+8;for(var d=((b-b%64)/64+1)*16,e=Array(d-1),f=0,g=0;g<c;)b=(g-g%4)/4,f=g%4*8,e[b]|=a.charCodeAt(g)<<f,g++;e[(g-g%4)/4]|=128<<g%4*8;e[d-2]=c<<3;e[d-1]=c>>>29;return e}(a);k=1732584193;j=4023233417;l=2562383102;m=271733878;for(a=0;a<f.length;a+=16)o=k,p=j,q=l,n=m,k=c(k,j,l,m,f[a+0],7,3614090360),m=c(m,k,j,l,f[a+1],12,3905402710),l=c(l,m,k,j,f[a+2],17,606105819),j=c(j,l,m,k,f[a+3],22,3250441966),k=c(k,j,l,m,f[a+4],7,4118548399),m=c(m,k,j,l,f[a+5],12,1200080426),l=c(l,
|
||||
m,k,j,f[a+6],17,2821735955),j=c(j,l,m,k,f[a+7],22,4249261313),k=c(k,j,l,m,f[a+8],7,1770035416),m=c(m,k,j,l,f[a+9],12,2336552879),l=c(l,m,k,j,f[a+10],17,4294925233),j=c(j,l,m,k,f[a+11],22,2304563134),k=c(k,j,l,m,f[a+12],7,1804603682),m=c(m,k,j,l,f[a+13],12,4254626195),l=c(l,m,k,j,f[a+14],17,2792965006),j=c(j,l,m,k,f[a+15],22,1236535329),k=d(k,j,l,m,f[a+1],5,4129170786),m=d(m,k,j,l,f[a+6],9,3225465664),l=d(l,m,k,j,f[a+11],14,643717713),j=d(j,l,m,k,f[a+0],20,3921069994),k=d(k,j,l,m,f[a+5],5,3593408605),
|
||||
m=d(m,k,j,l,f[a+10],9,38016083),l=d(l,m,k,j,f[a+15],14,3634488961),j=d(j,l,m,k,f[a+4],20,3889429448),k=d(k,j,l,m,f[a+9],5,568446438),m=d(m,k,j,l,f[a+14],9,3275163606),l=d(l,m,k,j,f[a+3],14,4107603335),j=d(j,l,m,k,f[a+8],20,1163531501),k=d(k,j,l,m,f[a+13],5,2850285829),m=d(m,k,j,l,f[a+2],9,4243563512),l=d(l,m,k,j,f[a+7],14,1735328473),j=d(j,l,m,k,f[a+12],20,2368359562),k=e(k,j,l,m,f[a+5],4,4294588738),m=e(m,k,j,l,f[a+8],11,2272392833),l=e(l,m,k,j,f[a+11],16,1839030562),j=e(j,l,m,k,f[a+14],23,4259657740),
|
||||
k=e(k,j,l,m,f[a+1],4,2763975236),m=e(m,k,j,l,f[a+4],11,1272893353),l=e(l,m,k,j,f[a+7],16,4139469664),j=e(j,l,m,k,f[a+10],23,3200236656),k=e(k,j,l,m,f[a+13],4,681279174),m=e(m,k,j,l,f[a+0],11,3936430074),l=e(l,m,k,j,f[a+3],16,3572445317),j=e(j,l,m,k,f[a+6],23,76029189),k=e(k,j,l,m,f[a+9],4,3654602809),m=e(m,k,j,l,f[a+12],11,3873151461),l=e(l,m,k,j,f[a+15],16,530742520),j=e(j,l,m,k,f[a+2],23,3299628645),k=g(k,j,l,m,f[a+0],6,4096336452),m=g(m,k,j,l,f[a+7],10,1126891415),l=g(l,m,k,j,f[a+14],15,2878612391),
|
||||
j=g(j,l,m,k,f[a+5],21,4237533241),k=g(k,j,l,m,f[a+12],6,1700485571),m=g(m,k,j,l,f[a+3],10,2399980690),l=g(l,m,k,j,f[a+10],15,4293915773),j=g(j,l,m,k,f[a+1],21,2240044497),k=g(k,j,l,m,f[a+8],6,1873313359),m=g(m,k,j,l,f[a+15],10,4264355552),l=g(l,m,k,j,f[a+6],15,2734768916),j=g(j,l,m,k,f[a+13],21,1309151649),k=g(k,j,l,m,f[a+4],6,4149444226),m=g(m,k,j,l,f[a+11],10,3174756917),l=g(l,m,k,j,f[a+2],15,718787259),j=g(j,l,m,k,f[a+9],21,3951481745),k=b(k,o),j=b(j,p),l=b(l,q),m=b(m,n);return(h(k)+h(j)+h(l)+
|
||||
h(m)).toLowerCase()};function parseBigInt(a,b){return new BigInteger(a,b)}function linebrk(a,b){for(var c="",d=0;d+b<a.length;)c+=a.substring(d,d+b)+"\n",d+=b;return c+a.substring(d,a.length)}function byte2Hex(a){return a<16?"0"+a.toString(16):a.toString(16)}
|
||||
function pkcs1pad2(a,b){if(b<a.length+11)throw"Message too long for RSA (n="+b+", l="+a.length+")";for(var c=[],d=a.length-1;d>=0&&b>0;){var e=a.charCodeAt(d--);e<128?c[--b]=e:e>127&&e<2048?(c[--b]=e&63|128,c[--b]=e>>6|192):(c[--b]=e&63|128,c[--b]=e>>6&63|128,c[--b]=e>>12|224)}c[--b]=0;d=new SecureRandom;for(e=[];b>2;){for(e[0]=0;e[0]==0;)d.nextBytes(e);c[--b]=e[0]}c[--b]=2;c[--b]=0;return new BigInteger(c)}
|
||||
function RSAKey(){this.n=null;this.e=0;this.coeff=this.dmq1=this.dmp1=this.q=this.p=this.d=null}function RSASetPublic(a,b){a!=null&&b!=null&&a.length>0&&b.length>0?(this.n=parseBigInt(a,16),this.e=parseInt(b,16)):alert("Invalid RSA public key")}function RSADoPublic(a){return a.modPowInt(this.e,this.n)}function RSAEncrypt(a){a=pkcs1pad2(a,this.n.bitLength()+7>>3);if(a==null)return null;a=this.doPublic(a);if(a==null)return null;a=a.toString(16);return(a.length&1)==0?a:"0"+a}
|
||||
RSAKey.prototype.doPublic=RSADoPublic;RSAKey.prototype.setPublic=RSASetPublic;RSAKey.prototype.encrypt=RSAEncrypt;function pkcs1unpad2(a,b){for(var c=a.toByteArray(),d=0;d<c.length&&c[d]==0;)++d;if(c.length-d!=b-1||c[d]!=2)return null;for(++d;c[d]!=0;)if(++d>=c.length)return null;for(var e="";++d<c.length;){var g=c[d]&255;g<128?e+=String.fromCharCode(g):g>191&&g<224?(e+=String.fromCharCode((g&31)<<6|c[d+1]&63),++d):(e+=String.fromCharCode((g&15)<<12|(c[d+1]&63)<<6|c[d+2]&63),d+=2)}return e}
|
||||
function RSASetPrivate(a,b,c){a!=null&&b!=null&&a.length>0&&b.length>0?(this.n=parseBigInt(a,16),this.e=parseInt(b,16),this.d=parseBigInt(c,16)):alert("Invalid RSA private key")}
|
||||
function RSASetPrivateEx(a,b,c,d,e,g,h,f){a!=null&&b!=null&&a.length>0&&b.length>0?(this.n=parseBigInt(a,16),this.e=parseInt(b,16),this.d=parseBigInt(c,16),this.p=parseBigInt(d,16),this.q=parseBigInt(e,16),this.dmp1=parseBigInt(g,16),this.dmq1=parseBigInt(h,16),this.coeff=parseBigInt(f,16)):alert("Invalid RSA private key")}
|
||||
function RSAGenerate(a,b){var c=new SeededRandom,d=a>>1;this.e=parseInt(b,16);for(var e=new BigInteger(b,16);;){for(;;)if(this.p=new BigInteger(a-d,1,c),this.p.subtract(BigInteger.ONE).gcd(e).compareTo(BigInteger.ONE)==0&&this.p.isProbablePrime(10))break;for(;;)if(this.q=new BigInteger(d,1,c),this.q.subtract(BigInteger.ONE).gcd(e).compareTo(BigInteger.ONE)==0&&this.q.isProbablePrime(10))break;if(this.p.compareTo(this.q)<=0){var g=this.p;this.p=this.q;this.q=g}var g=this.p.subtract(BigInteger.ONE),
|
||||
h=this.q.subtract(BigInteger.ONE),f=g.multiply(h);if(f.gcd(e).compareTo(BigInteger.ONE)==0){this.n=this.p.multiply(this.q);this.d=e.modInverse(f);this.dmp1=this.d.mod(g);this.dmq1=this.d.mod(h);this.coeff=this.q.modInverse(this.p);break}}}
|
||||
function RSADoPrivate(a){if(this.p==null||this.q==null)return a.modPow(this.d,this.n);for(var b=a.mod(this.p).modPow(this.dmp1,this.p),a=a.mod(this.q).modPow(this.dmq1,this.q);b.compareTo(a)<0;)b=b.add(this.p);return b.subtract(a).multiply(this.coeff).mod(this.p).multiply(this.q).add(a)}function RSADecrypt(a){a=this.doPrivate(parseBigInt(a,16));return a==null?null:pkcs1unpad2(a,this.n.bitLength()+7>>3)}RSAKey.prototype.doPrivate=RSADoPrivate;RSAKey.prototype.setPrivate=RSASetPrivate;
|
||||
RSAKey.prototype.setPrivateEx=RSASetPrivateEx;RSAKey.prototype.generate=RSAGenerate;RSAKey.prototype.decrypt=RSADecrypt;var _RSASIGN_DIHEAD=[];_RSASIGN_DIHEAD.sha1="3021300906052b0e03021a05000414";_RSASIGN_DIHEAD.sha256="3031300d060960864801650304020105000420";var _RSASIGN_HASHHEXFUNC=[];_RSASIGN_HASHHEXFUNC.sha1=sha1.hex;_RSASIGN_HASHHEXFUNC.sha256=sha256.hex;
|
||||
function _rsasign_getHexPaddedDigestInfoForString(a,b,c){b/=4;for(var a=(0,_RSASIGN_HASHHEXFUNC[c])(a),c="00"+_RSASIGN_DIHEAD[c]+a,a="",b=b-4-c.length,d=0;d<b;d+=2)a+="ff";return sPaddedMessageHex="0001"+a+c}function _rsasign_signString(a,b){var c=_rsasign_getHexPaddedDigestInfoForString(a,this.n.bitLength(),b);return this.doPrivate(parseBigInt(c,16)).toString(16)}
|
||||
function _rsasign_signStringWithSHA1(a){a=_rsasign_getHexPaddedDigestInfoForString(a,this.n.bitLength(),"sha1");return this.doPrivate(parseBigInt(a,16)).toString(16)}function _rsasign_signStringWithSHA256(a){a=_rsasign_getHexPaddedDigestInfoForString(a,this.n.bitLength(),"sha256");return this.doPrivate(parseBigInt(a,16)).toString(16)}function _rsasign_getDecryptSignatureBI(a,b,c){var d=new RSAKey;d.setPublic(b,c);return d.doPublic(a)}
|
||||
function _rsasign_getHexDigestInfoFromSig(a,b,c){return _rsasign_getDecryptSignatureBI(a,b,c).toString(16).replace(/^1f+00/,"")}function _rsasign_getAlgNameAndHashFromHexDisgestInfo(a){for(var b in _RSASIGN_DIHEAD){var c=_RSASIGN_DIHEAD[b],d=c.length;if(a.substring(0,d)==c)return[b,a.substring(d)]}return[]}
|
||||
function _rsasign_verifySignatureWithArgs(a,b,c,d){b=_rsasign_getHexDigestInfoFromSig(b,c,d);c=_rsasign_getAlgNameAndHashFromHexDisgestInfo(b);if(c.length==0)return!1;b=c[1];a=(0,_RSASIGN_HASHHEXFUNC[c[0]])(a);return b==a}function _rsasign_verifyHexSignatureForMessage(a,b){var c=parseBigInt(a,16);return _rsasign_verifySignatureWithArgs(b,c,this.n.toString(16),this.e.toString(16))}
|
||||
function _rsasign_verifyString(a,b){var b=b.replace(/[ \n]+/g,""),c=this.doPublic(parseBigInt(b,16)).toString(16).replace(/^1f+00/,""),d=_rsasign_getAlgNameAndHashFromHexDisgestInfo(c);if(d.length==0)return!1;c=d[1];d=(0,_RSASIGN_HASHHEXFUNC[d[0]])(a);return c==d}RSAKey.prototype.signString=_rsasign_signString;RSAKey.prototype.signStringWithSHA1=_rsasign_signStringWithSHA1;RSAKey.prototype.signStringWithSHA256=_rsasign_signStringWithSHA256;RSAKey.prototype.verifyString=_rsasign_verifyString;
|
||||
RSAKey.prototype.verifyHexSignatureForMessage=_rsasign_verifyHexSignatureForMessage;
|
||||
var aes=function(){var a={Sbox:[99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,
|
||||
95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22],ShiftRowTab:[0,5,10,15,4,9,14,3,8,13,2,7,12,1,6,11]};a.Init=
|
||||
function(){a.Sbox_Inv=Array(256);for(var b=0;b<256;b++)a.Sbox_Inv[a.Sbox[b]]=b;a.ShiftRowTab_Inv=Array(16);for(b=0;b<16;b++)a.ShiftRowTab_Inv[a.ShiftRowTab[b]]=b;a.xtime=Array(256);for(b=0;b<128;b++)a.xtime[b]=b<<1,a.xtime[128+b]=b<<1^27};a.Done=function(){delete a.Sbox_Inv;delete a.ShiftRowTab_Inv;delete a.xtime};a.ExpandKey=function(b){var c=b.length,d,e=1;switch(c){case 16:d=176;break;case 24:d=208;break;case 32:d=240;break;default:alert("my.ExpandKey: Only key lengths of 16, 24 or 32 bytes allowed!")}for(var g=
|
||||
c;g<d;g+=4){var h=b.slice(g-4,g);if(g%c==0){if(h=[a.Sbox[h[1]]^e,a.Sbox[h[2]],a.Sbox[h[3]],a.Sbox[h[0]]],(e<<=1)>=256)e^=283}else c>24&&g%c==16&&(h=[a.Sbox[h[0]],a.Sbox[h[1]],a.Sbox[h[2]],a.Sbox[h[3]]]);for(var f=0;f<4;f++)b[g+f]=b[g+f-c]^h[f]}};a.Encrypt=function(b,c){var d=c.length;a.AddRoundKey(b,c.slice(0,16));for(var e=16;e<d-16;e+=16)a.SubBytes(b,a.Sbox),a.ShiftRows(b,a.ShiftRowTab),a.MixColumns(b),a.AddRoundKey(b,c.slice(e,e+16));a.SubBytes(b,a.Sbox);a.ShiftRows(b,a.ShiftRowTab);a.AddRoundKey(b,
|
||||
c.slice(e,d))};a.Decrypt=function(b,c){var d=c.length;a.AddRoundKey(b,c.slice(d-16,d));a.ShiftRows(b,a.ShiftRowTab_Inv);a.SubBytes(b,a.Sbox_Inv);for(d-=32;d>=16;d-=16)a.AddRoundKey(b,c.slice(d,d+16)),a.MixColumns_Inv(b),a.ShiftRows(b,a.ShiftRowTab_Inv),a.SubBytes(b,a.Sbox_Inv);a.AddRoundKey(b,c.slice(0,16))};a.SubBytes=function(a,c){for(var d=0;d<16;d++)a[d]=c[a[d]]};a.AddRoundKey=function(a,c){for(var d=0;d<16;d++)a[d]^=c[d]};a.ShiftRows=function(a,c){for(var d=[].concat(a),e=0;e<16;e++)a[e]=d[c[e]]};
|
||||
a.MixColumns=function(b){for(var c=0;c<16;c+=4){var d=b[c+0],e=b[c+1],g=b[c+2],h=b[c+3],f=d^e^g^h;b[c+0]^=f^a.xtime[d^e];b[c+1]^=f^a.xtime[e^g];b[c+2]^=f^a.xtime[g^h];b[c+3]^=f^a.xtime[h^d]}};a.MixColumns_Inv=function(b){for(var c=0;c<16;c+=4){var d=b[c+0],e=b[c+1],g=b[c+2],h=b[c+3],f=d^e^g^h,o=a.xtime[f],p=a.xtime[a.xtime[o^d^g]]^f;f^=a.xtime[a.xtime[o^e^h]];b[c+0]^=p^a.xtime[d^e];b[c+1]^=f^a.xtime[e^g];b[c+2]^=p^a.xtime[g^h];b[c+3]^=f^a.xtime[h^d]}};return a}(),cryptico=function(){var a={};aes.Init();
|
||||
a.b256to64=function(a){var c,d,e,g="",h=0,f=0,o=a.length;for(e=0;e<o;e++)d=a.charCodeAt(e),f==0?(g+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d>>2&63),c=(d&3)<<4):f==1?(g+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(c|d>>4&15),c=(d&15)<<2):f==2&&(g+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(c|d>>6&3),h+=1,g+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d&63)),h+=1,f+=1,f==3&&
|
||||
(f=0);f>0&&(g+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(c),g+="=");f==1&&(g+="=");return g};a.b64to256=function(a){var c,d,e="",g=0,h=0,f=a.length;for(d=0;d<f;d++)c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(d)),c>=0&&(g&&(e+=String.fromCharCode(h|c>>6-g&255)),g=g+2&7,h=c<<g&255);return e};a.b16to64=function(a){var c,d,e="";a.length%2==1&&(a="0"+a);for(c=0;c+3<=a.length;c+=3)d=parseInt(a.substring(c,c+3),16),e+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d>>
|
||||
6)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d&63);c+1==a.length?(d=parseInt(a.substring(c,c+1),16),e+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d<<2)):c+2==a.length&&(d=parseInt(a.substring(c,c+2),16),e+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d>>2)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt((d&3)<<4));for(;(e.length&3)>0;)e+="=";return e};a.b64to16=function(a){var c="",
|
||||
d,e=0,g;for(d=0;d<a.length;++d){if(a.charAt(d)=="=")break;v="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(d));v<0||(e==0?(c+=int2char(v>>2),g=v&3,e=1):e==1?(c+=int2char(g<<2|v>>4),g=v&15,e=2):e==2?(c+=int2char(g),c+=int2char(v>>2),g=v&3,e=3):(c+=int2char(g<<2|v>>4),c+=int2char(v&15),e=0))}e==1&&(c+=int2char(g<<2));return c};a.string2bytes=function(a){for(var c=[],d=0;d<a.length;d++)c.push(a.charCodeAt(d));return c};a.bytes2string=function(a){for(var c="",d=0;d<
|
||||
a.length;d++)c+=String.fromCharCode(a[d]);return c};a.blockXOR=function(a,c){for(var d=Array(16),e=0;e<16;e++)d[e]=a[e]^c[e];return d};a.blockIV=function(){var a=new SecureRandom,c=Array(16);a.nextBytes(c);return c};a.pad16=function(a){var c=a.slice(0),d=(16-a.length%16)%16;for(i=a.length;i<a.length+d;i++)c.push(0);return c};a.depad=function(a){for(a=a.slice(0);a[a.length-1]==0;)a=a.slice(0,a.length-1);return a};a.encryptAESCBC=function(b,c){var d=c.slice(0);aes.ExpandKey(d);for(var e=a.string2bytes(b),
|
||||
e=a.pad16(e),g=a.blockIV(),h=0;h<e.length/16;h++){var f=e.slice(h*16,h*16+16),o=g.slice(h*16,h*16+16),f=a.blockXOR(o,f);aes.Encrypt(f,d);g=g.concat(f)}d=a.bytes2string(g);return a.b256to64(d)};a.decryptAESCBC=function(b,c){var d=c.slice(0);aes.ExpandKey(d);for(var b=a.b64to256(b),e=a.string2bytes(b),g=[],h=1;h<e.length/16;h++){var f=e.slice(h*16,h*16+16),o=e.slice((h-1)*16,(h-1)*16+16);aes.Decrypt(f,d);f=a.blockXOR(o,f);g=g.concat(f)}g=a.depad(g);return a.bytes2string(g)};a.wrap60=function(a){for(var c=
|
||||
"",d=0;d<a.length;d++)d%60==0&&d!=0&&(c+="\n"),c+=a[d];return c};a.generateAESKey=function(){var a=Array(16);(new SecureRandom).nextBytes(a);return a};a.generateRSAKey=function(a,c){Math.seedrandom(sha256.hex(a));var d=new RSAKey;d.generate(c,"10001");return d};a.publicKeyString=function(b){return pubkey=b.n.toString(16)};a.publicKeyID=function(a){return MD5(a)};a.publicKeyFromString=function(b){var b=b.split("|")[0],c=new RSAKey;c.setPublic(b,"10001");return c};a.encrypt=function(b,
|
||||
c,d){var e="";try{var h=a.publicKeyFromString(c);e+=h.encrypt(b)+"?"}catch(f){return{status:"Invalid public key"}};return{status:"success",cipher:e}};a.decrypt=function(b,c){var d=b.split("?"),e=c.decrypt(d[0]);return{status:"success",plaintext:e,signature:"unsigned"}};return a}();
|
||||
35
web/public/codebase/encryption/crypto-3.1.2.min.js
vendored
Normal file
35
web/public/codebase/encryption/crypto-3.1.2.min.js
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
CryptoJS v3.1.2
|
||||
code.google.com/p/crypto-js
|
||||
(c) 2009-2013 by Jeff Mott. All rights reserved.
|
||||
code.google.com/p/crypto-js/wiki/License
|
||||
*/
|
||||
var CryptoJS=CryptoJS||function(u,p){var d={},l=d.lib={},s=function(){},t=l.Base={extend:function(a){s.prototype=this;var c=new s;a&&c.mixIn(a);c.hasOwnProperty("init")||(c.init=function(){c.$super.init.apply(this,arguments)});c.init.prototype=c;c.$super=this;return c},create:function(){var a=this.extend();a.init.apply(a,arguments);return a},init:function(){},mixIn:function(a){for(var c in a)a.hasOwnProperty(c)&&(this[c]=a[c]);a.hasOwnProperty("toString")&&(this.toString=a.toString)},clone:function(){return this.init.prototype.extend(this)}},
|
||||
r=l.WordArray=t.extend({init:function(a,c){a=this.words=a||[];this.sigBytes=c!=p?c:4*a.length},toString:function(a){return(a||v).stringify(this)},concat:function(a){var c=this.words,e=a.words,j=this.sigBytes;a=a.sigBytes;this.clamp();if(j%4)for(var k=0;k<a;k++)c[j+k>>>2]|=(e[k>>>2]>>>24-8*(k%4)&255)<<24-8*((j+k)%4);else if(65535<e.length)for(k=0;k<a;k+=4)c[j+k>>>2]=e[k>>>2];else c.push.apply(c,e);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<<
|
||||
32-8*(c%4);a.length=u.ceil(c/4)},clone:function(){var a=t.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],e=0;e<a;e+=4)c.push(4294967296*u.random()|0);return new r.init(c,a)}}),w=d.enc={},v=w.Hex={stringify:function(a){var c=a.words;a=a.sigBytes;for(var e=[],j=0;j<a;j++){var k=c[j>>>2]>>>24-8*(j%4)&255;e.push((k>>>4).toString(16));e.push((k&15).toString(16))}return e.join("")},parse:function(a){for(var c=a.length,e=[],j=0;j<c;j+=2)e[j>>>3]|=parseInt(a.substr(j,
|
||||
2),16)<<24-4*(j%8);return new r.init(e,c/2)}},b=w.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var e=[],j=0;j<a;j++)e.push(String.fromCharCode(c[j>>>2]>>>24-8*(j%4)&255));return e.join("")},parse:function(a){for(var c=a.length,e=[],j=0;j<c;j++)e[j>>>2]|=(a.charCodeAt(j)&255)<<24-8*(j%4);return new r.init(e,c)}},x=w.Utf8={stringify:function(a){try{return decodeURIComponent(escape(b.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return b.parse(unescape(encodeURIComponent(a)))}},
|
||||
q=l.BufferedBlockAlgorithm=t.extend({reset:function(){this._data=new r.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=x.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,e=c.words,j=c.sigBytes,k=this.blockSize,b=j/(4*k),b=a?u.ceil(b):u.max((b|0)-this._minBufferSize,0);a=b*k;j=u.min(4*a,j);if(a){for(var q=0;q<a;q+=k)this._doProcessBlock(e,q);q=e.splice(0,a);c.sigBytes-=j}return new r.init(q,j)},clone:function(){var a=t.clone.call(this);
|
||||
a._data=this._data.clone();return a},_minBufferSize:0});l.Hasher=q.extend({cfg:t.extend(),init:function(a){this.cfg=this.cfg.extend(a);this.reset()},reset:function(){q.reset.call(this);this._doReset()},update:function(a){this._append(a);this._process();return this},finalize:function(a){a&&this._append(a);return this._doFinalize()},blockSize:16,_createHelper:function(a){return function(b,e){return(new a.init(e)).finalize(b)}},_createHmacHelper:function(a){return function(b,e){return(new n.HMAC.init(a,
|
||||
e)).finalize(b)}}});var n=d.algo={};return d}(Math);
|
||||
(function(){var u=CryptoJS,p=u.lib.WordArray;u.enc.Base64={stringify:function(d){var l=d.words,p=d.sigBytes,t=this._map;d.clamp();d=[];for(var r=0;r<p;r+=3)for(var w=(l[r>>>2]>>>24-8*(r%4)&255)<<16|(l[r+1>>>2]>>>24-8*((r+1)%4)&255)<<8|l[r+2>>>2]>>>24-8*((r+2)%4)&255,v=0;4>v&&r+0.75*v<p;v++)d.push(t.charAt(w>>>6*(3-v)&63));if(l=t.charAt(64))for(;d.length%4;)d.push(l);return d.join("")},parse:function(d){var l=d.length,s=this._map,t=s.charAt(64);t&&(t=d.indexOf(t),-1!=t&&(l=t));for(var t=[],r=0,w=0;w<
|
||||
l;w++)if(w%4){var v=s.indexOf(d.charAt(w-1))<<2*(w%4),b=s.indexOf(d.charAt(w))>>>6-2*(w%4);t[r>>>2]|=(v|b)<<24-8*(r%4);r++}return p.create(t,r)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}})();
|
||||
(function(u){function p(b,n,a,c,e,j,k){b=b+(n&a|~n&c)+e+k;return(b<<j|b>>>32-j)+n}function d(b,n,a,c,e,j,k){b=b+(n&c|a&~c)+e+k;return(b<<j|b>>>32-j)+n}function l(b,n,a,c,e,j,k){b=b+(n^a^c)+e+k;return(b<<j|b>>>32-j)+n}function s(b,n,a,c,e,j,k){b=b+(a^(n|~c))+e+k;return(b<<j|b>>>32-j)+n}for(var t=CryptoJS,r=t.lib,w=r.WordArray,v=r.Hasher,r=t.algo,b=[],x=0;64>x;x++)b[x]=4294967296*u.abs(u.sin(x+1))|0;r=r.MD5=v.extend({_doReset:function(){this._hash=new w.init([1732584193,4023233417,2562383102,271733878])},
|
||||
_doProcessBlock:function(q,n){for(var a=0;16>a;a++){var c=n+a,e=q[c];q[c]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360}var a=this._hash.words,c=q[n+0],e=q[n+1],j=q[n+2],k=q[n+3],z=q[n+4],r=q[n+5],t=q[n+6],w=q[n+7],v=q[n+8],A=q[n+9],B=q[n+10],C=q[n+11],u=q[n+12],D=q[n+13],E=q[n+14],x=q[n+15],f=a[0],m=a[1],g=a[2],h=a[3],f=p(f,m,g,h,c,7,b[0]),h=p(h,f,m,g,e,12,b[1]),g=p(g,h,f,m,j,17,b[2]),m=p(m,g,h,f,k,22,b[3]),f=p(f,m,g,h,z,7,b[4]),h=p(h,f,m,g,r,12,b[5]),g=p(g,h,f,m,t,17,b[6]),m=p(m,g,h,f,w,22,b[7]),
|
||||
f=p(f,m,g,h,v,7,b[8]),h=p(h,f,m,g,A,12,b[9]),g=p(g,h,f,m,B,17,b[10]),m=p(m,g,h,f,C,22,b[11]),f=p(f,m,g,h,u,7,b[12]),h=p(h,f,m,g,D,12,b[13]),g=p(g,h,f,m,E,17,b[14]),m=p(m,g,h,f,x,22,b[15]),f=d(f,m,g,h,e,5,b[16]),h=d(h,f,m,g,t,9,b[17]),g=d(g,h,f,m,C,14,b[18]),m=d(m,g,h,f,c,20,b[19]),f=d(f,m,g,h,r,5,b[20]),h=d(h,f,m,g,B,9,b[21]),g=d(g,h,f,m,x,14,b[22]),m=d(m,g,h,f,z,20,b[23]),f=d(f,m,g,h,A,5,b[24]),h=d(h,f,m,g,E,9,b[25]),g=d(g,h,f,m,k,14,b[26]),m=d(m,g,h,f,v,20,b[27]),f=d(f,m,g,h,D,5,b[28]),h=d(h,f,
|
||||
m,g,j,9,b[29]),g=d(g,h,f,m,w,14,b[30]),m=d(m,g,h,f,u,20,b[31]),f=l(f,m,g,h,r,4,b[32]),h=l(h,f,m,g,v,11,b[33]),g=l(g,h,f,m,C,16,b[34]),m=l(m,g,h,f,E,23,b[35]),f=l(f,m,g,h,e,4,b[36]),h=l(h,f,m,g,z,11,b[37]),g=l(g,h,f,m,w,16,b[38]),m=l(m,g,h,f,B,23,b[39]),f=l(f,m,g,h,D,4,b[40]),h=l(h,f,m,g,c,11,b[41]),g=l(g,h,f,m,k,16,b[42]),m=l(m,g,h,f,t,23,b[43]),f=l(f,m,g,h,A,4,b[44]),h=l(h,f,m,g,u,11,b[45]),g=l(g,h,f,m,x,16,b[46]),m=l(m,g,h,f,j,23,b[47]),f=s(f,m,g,h,c,6,b[48]),h=s(h,f,m,g,w,10,b[49]),g=s(g,h,f,m,
|
||||
E,15,b[50]),m=s(m,g,h,f,r,21,b[51]),f=s(f,m,g,h,u,6,b[52]),h=s(h,f,m,g,k,10,b[53]),g=s(g,h,f,m,B,15,b[54]),m=s(m,g,h,f,e,21,b[55]),f=s(f,m,g,h,v,6,b[56]),h=s(h,f,m,g,x,10,b[57]),g=s(g,h,f,m,t,15,b[58]),m=s(m,g,h,f,D,21,b[59]),f=s(f,m,g,h,z,6,b[60]),h=s(h,f,m,g,C,10,b[61]),g=s(g,h,f,m,j,15,b[62]),m=s(m,g,h,f,A,21,b[63]);a[0]=a[0]+f|0;a[1]=a[1]+m|0;a[2]=a[2]+g|0;a[3]=a[3]+h|0},_doFinalize:function(){var b=this._data,n=b.words,a=8*this._nDataBytes,c=8*b.sigBytes;n[c>>>5]|=128<<24-c%32;var e=u.floor(a/
|
||||
4294967296);n[(c+64>>>9<<4)+15]=(e<<8|e>>>24)&16711935|(e<<24|e>>>8)&4278255360;n[(c+64>>>9<<4)+14]=(a<<8|a>>>24)&16711935|(a<<24|a>>>8)&4278255360;b.sigBytes=4*(n.length+1);this._process();b=this._hash;n=b.words;for(a=0;4>a;a++)c=n[a],n[a]=(c<<8|c>>>24)&16711935|(c<<24|c>>>8)&4278255360;return b},clone:function(){var b=v.clone.call(this);b._hash=this._hash.clone();return b}});t.MD5=v._createHelper(r);t.HmacMD5=v._createHmacHelper(r)})(Math);
|
||||
(function(){var u=CryptoJS,p=u.lib,d=p.Base,l=p.WordArray,p=u.algo,s=p.EvpKDF=d.extend({cfg:d.extend({keySize:4,hasher:p.MD5,iterations:1}),init:function(d){this.cfg=this.cfg.extend(d)},compute:function(d,r){for(var p=this.cfg,s=p.hasher.create(),b=l.create(),u=b.words,q=p.keySize,p=p.iterations;u.length<q;){n&&s.update(n);var n=s.update(d).finalize(r);s.reset();for(var a=1;a<p;a++)n=s.finalize(n),s.reset();b.concat(n)}b.sigBytes=4*q;return b}});u.EvpKDF=function(d,l,p){return s.create(p).compute(d,
|
||||
l)}})();
|
||||
CryptoJS.lib.Cipher||function(u){var p=CryptoJS,d=p.lib,l=d.Base,s=d.WordArray,t=d.BufferedBlockAlgorithm,r=p.enc.Base64,w=p.algo.EvpKDF,v=d.Cipher=t.extend({cfg:l.extend(),createEncryptor:function(e,a){return this.create(this._ENC_XFORM_MODE,e,a)},createDecryptor:function(e,a){return this.create(this._DEC_XFORM_MODE,e,a)},init:function(e,a,b){this.cfg=this.cfg.extend(b);this._xformMode=e;this._key=a;this.reset()},reset:function(){t.reset.call(this);this._doReset()},process:function(e){this._append(e);return this._process()},
|
||||
finalize:function(e){e&&this._append(e);return this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(b,k,d){return("string"==typeof k?c:a).encrypt(e,b,k,d)},decrypt:function(b,k,d){return("string"==typeof k?c:a).decrypt(e,b,k,d)}}}});d.StreamCipher=v.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var b=p.mode={},x=function(e,a,b){var c=this._iv;c?this._iv=u:c=this._prevBlock;for(var d=0;d<b;d++)e[a+d]^=
|
||||
c[d]},q=(d.BlockCipherMode=l.extend({createEncryptor:function(e,a){return this.Encryptor.create(e,a)},createDecryptor:function(e,a){return this.Decryptor.create(e,a)},init:function(e,a){this._cipher=e;this._iv=a}})).extend();q.Encryptor=q.extend({processBlock:function(e,a){var b=this._cipher,c=b.blockSize;x.call(this,e,a,c);b.encryptBlock(e,a);this._prevBlock=e.slice(a,a+c)}});q.Decryptor=q.extend({processBlock:function(e,a){var b=this._cipher,c=b.blockSize,d=e.slice(a,a+c);b.decryptBlock(e,a);x.call(this,
|
||||
e,a,c);this._prevBlock=d}});b=b.CBC=q;q=(p.pad={}).Pkcs7={pad:function(a,b){for(var c=4*b,c=c-a.sigBytes%c,d=c<<24|c<<16|c<<8|c,l=[],n=0;n<c;n+=4)l.push(d);c=s.create(l,c);a.concat(c)},unpad:function(a){a.sigBytes-=a.words[a.sigBytes-1>>>2]&255}};d.BlockCipher=v.extend({cfg:v.cfg.extend({mode:b,padding:q}),reset:function(){v.reset.call(this);var a=this.cfg,b=a.iv,a=a.mode;if(this._xformMode==this._ENC_XFORM_MODE)var c=a.createEncryptor;else c=a.createDecryptor,this._minBufferSize=1;this._mode=c.call(a,
|
||||
this,b&&b.words)},_doProcessBlock:function(a,b){this._mode.processBlock(a,b)},_doFinalize:function(){var a=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){a.pad(this._data,this.blockSize);var b=this._process(!0)}else b=this._process(!0),a.unpad(b);return b},blockSize:4});var n=d.CipherParams=l.extend({init:function(a){this.mixIn(a)},toString:function(a){return(a||this.formatter).stringify(this)}}),b=(p.format={}).OpenSSL={stringify:function(a){var b=a.ciphertext;a=a.salt;return(a?s.create([1398893684,
|
||||
1701076831]).concat(a).concat(b):b).toString(r)},parse:function(a){a=r.parse(a);var b=a.words;if(1398893684==b[0]&&1701076831==b[1]){var c=s.create(b.slice(2,4));b.splice(0,4);a.sigBytes-=16}return n.create({ciphertext:a,salt:c})}},a=d.SerializableCipher=l.extend({cfg:l.extend({format:b}),encrypt:function(a,b,c,d){d=this.cfg.extend(d);var l=a.createEncryptor(c,d);b=l.finalize(b);l=l.cfg;return n.create({ciphertext:b,key:c,iv:l.iv,algorithm:a,mode:l.mode,padding:l.padding,blockSize:a.blockSize,formatter:d.format})},
|
||||
decrypt:function(a,b,c,d){d=this.cfg.extend(d);b=this._parse(b,d.format);return a.createDecryptor(c,d).finalize(b.ciphertext)},_parse:function(a,b){return"string"==typeof a?b.parse(a,this):a}}),p=(p.kdf={}).OpenSSL={execute:function(a,b,c,d){d||(d=s.random(8));a=w.create({keySize:b+c}).compute(a,d);c=s.create(a.words.slice(b),4*c);a.sigBytes=4*b;return n.create({key:a,iv:c,salt:d})}},c=d.PasswordBasedCipher=a.extend({cfg:a.cfg.extend({kdf:p}),encrypt:function(b,c,d,l){l=this.cfg.extend(l);d=l.kdf.execute(d,
|
||||
b.keySize,b.ivSize);l.iv=d.iv;b=a.encrypt.call(this,b,c,d.key,l);b.mixIn(d);return b},decrypt:function(b,c,d,l){l=this.cfg.extend(l);c=this._parse(c,l.format);d=l.kdf.execute(d,b.keySize,b.ivSize,c.salt);l.iv=d.iv;return a.decrypt.call(this,b,c,d.key,l)}})}();
|
||||
(function(){for(var u=CryptoJS,p=u.lib.BlockCipher,d=u.algo,l=[],s=[],t=[],r=[],w=[],v=[],b=[],x=[],q=[],n=[],a=[],c=0;256>c;c++)a[c]=128>c?c<<1:c<<1^283;for(var e=0,j=0,c=0;256>c;c++){var k=j^j<<1^j<<2^j<<3^j<<4,k=k>>>8^k&255^99;l[e]=k;s[k]=e;var z=a[e],F=a[z],G=a[F],y=257*a[k]^16843008*k;t[e]=y<<24|y>>>8;r[e]=y<<16|y>>>16;w[e]=y<<8|y>>>24;v[e]=y;y=16843009*G^65537*F^257*z^16843008*e;b[k]=y<<24|y>>>8;x[k]=y<<16|y>>>16;q[k]=y<<8|y>>>24;n[k]=y;e?(e=z^a[a[a[G^z]]],j^=a[a[j]]):e=j=1}var H=[0,1,2,4,8,
|
||||
16,32,64,128,27,54],d=d.AES=p.extend({_doReset:function(){for(var a=this._key,c=a.words,d=a.sigBytes/4,a=4*((this._nRounds=d+6)+1),e=this._keySchedule=[],j=0;j<a;j++)if(j<d)e[j]=c[j];else{var k=e[j-1];j%d?6<d&&4==j%d&&(k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255]):(k=k<<8|k>>>24,k=l[k>>>24]<<24|l[k>>>16&255]<<16|l[k>>>8&255]<<8|l[k&255],k^=H[j/d|0]<<24);e[j]=e[j-d]^k}c=this._invKeySchedule=[];for(d=0;d<a;d++)j=a-d,k=d%4?e[j]:e[j-4],c[d]=4>d||4>=j?k:b[l[k>>>24]]^x[l[k>>>16&255]]^q[l[k>>>
|
||||
8&255]]^n[l[k&255]]},encryptBlock:function(a,b){this._doCryptBlock(a,b,this._keySchedule,t,r,w,v,l)},decryptBlock:function(a,c){var d=a[c+1];a[c+1]=a[c+3];a[c+3]=d;this._doCryptBlock(a,c,this._invKeySchedule,b,x,q,n,s);d=a[c+1];a[c+1]=a[c+3];a[c+3]=d},_doCryptBlock:function(a,b,c,d,e,j,l,f){for(var m=this._nRounds,g=a[b]^c[0],h=a[b+1]^c[1],k=a[b+2]^c[2],n=a[b+3]^c[3],p=4,r=1;r<m;r++)var q=d[g>>>24]^e[h>>>16&255]^j[k>>>8&255]^l[n&255]^c[p++],s=d[h>>>24]^e[k>>>16&255]^j[n>>>8&255]^l[g&255]^c[p++],t=
|
||||
d[k>>>24]^e[n>>>16&255]^j[g>>>8&255]^l[h&255]^c[p++],n=d[n>>>24]^e[g>>>16&255]^j[h>>>8&255]^l[k&255]^c[p++],g=q,h=s,k=t;q=(f[g>>>24]<<24|f[h>>>16&255]<<16|f[k>>>8&255]<<8|f[n&255])^c[p++];s=(f[h>>>24]<<24|f[k>>>16&255]<<16|f[n>>>8&255]<<8|f[g&255])^c[p++];t=(f[k>>>24]<<24|f[n>>>16&255]<<16|f[g>>>8&255]<<8|f[h&255])^c[p++];n=(f[n>>>24]<<24|f[g>>>16&255]<<16|f[h>>>8&255]<<8|f[k&255])^c[p++];a[b]=q;a[b+1]=s;a[b+2]=t;a[b+3]=n},keySize:8});u.AES=p._createHelper(d)})();
|
||||
111
web/public/codebase/encryption/encryption.js
Normal file
111
web/public/codebase/encryption/encryption.js
Normal file
@@ -0,0 +1,111 @@
|
||||
define(function(require, exports, module) {
|
||||
var _oCommon, _oUtils, _oBase64;
|
||||
|
||||
require("websdk");
|
||||
_oCommon = require("common");
|
||||
_oUtils = require("utils");
|
||||
_oBase64 = require("base64");
|
||||
|
||||
function EncryptionFac () {}
|
||||
|
||||
EncryptionFac.prototype.encrypt = function (oStr, iRSABits, bBase64Encrypted, cbFun) {
|
||||
//var that = this;
|
||||
var iBits = 1024;
|
||||
|
||||
if (iRSABits) {
|
||||
iBits = iRSABits;
|
||||
}
|
||||
|
||||
var szPassPhrase = new Date() + "",
|
||||
szMattsRSAkey = cryptico.generateRSAKey(szPassPhrase, iBits),
|
||||
szPublicKeyString = cryptico.publicKeyString(szMattsRSAkey),
|
||||
szXml = "<?xml version='1.0' encoding='UTF-8'?><PublicKey><key>" + _oBase64.encode(szPublicKeyString) + "</key></PublicKey>",
|
||||
oXmlDoc = _oUtils.parseXmlFromStr(szXml);
|
||||
|
||||
WebSDK.WSDK_Request(_oCommon.m_szHostName, _oCommon.m_iHttpProtocal, _oCommon.m_iHttpPort, {
|
||||
cmd: "challenge",
|
||||
type: "POST",
|
||||
data: oXmlDoc,
|
||||
success: function (status, xmlDoc) {
|
||||
var szDecryptionResult = cryptico.decrypt(_oBase64.decode(_oUtils.nodeValue(xmlDoc, "key")), szMattsRSAkey);
|
||||
if(szDecryptionResult.plaintext != null) {
|
||||
var szKey,szEncryptPassword;
|
||||
var aResult = [];
|
||||
if (iBits === 256) {
|
||||
szKey = _oUtils.toHex(szDecryptionResult.plaintext);
|
||||
} else {
|
||||
szKey = szDecryptionResult.plaintext;
|
||||
}
|
||||
|
||||
szEncryptPassword = aes_encrypt(szDecryptionResult.plaintext.substring(0, 16), szKey, true);
|
||||
|
||||
if("function" === typeof cbFun) {
|
||||
if("string" === typeof oStr) {
|
||||
bBase64Encrypted && ( oStr = _oBase64.encode(oStr) );
|
||||
cbFun( _oBase64.encode( szEncryptPassword + _oUtils.encodeAES(oStr, szKey, "", "ecb") ) );
|
||||
} else if("[object Array]" === Object.prototype.toString.call(oStr)) {
|
||||
for(var i = 0, iArrayLen = oStr.length; i < iArrayLen; i++) {
|
||||
bBase64Encrypted && ( oStr[i] = _oBase64.encode(oStr[i]) );
|
||||
var szTemp = szEncryptPassword + _oUtils.encodeAES(oStr[i], szKey, "", "ecb");
|
||||
aResult.push( _oBase64.encode(szTemp) );
|
||||
}
|
||||
cbFun(aResult);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
EncryptionFac.prototype.encryptSync = function (oStr, iRSABits, bBase64Encrypted) {
|
||||
//var that = this;
|
||||
var iBits = 1024;
|
||||
var aResult = [];
|
||||
|
||||
if (iRSABits) {
|
||||
iBits = iRSABits;
|
||||
}
|
||||
|
||||
var szPassPhrase = new Date() + "",
|
||||
szMattsRSAkey = cryptico.generateRSAKey(szPassPhrase, iBits),
|
||||
szPublicKeyString = cryptico.publicKeyString(szMattsRSAkey),
|
||||
szXml = "<?xml version='1.0' encoding='UTF-8'?><PublicKey><key>" + _oBase64.encode(szPublicKeyString) + "</key></PublicKey>",
|
||||
oXmlDoc = _oUtils.parseXmlFromStr(szXml);
|
||||
|
||||
WebSDK.WSDK_Request(_oCommon.m_szHostName, _oCommon.m_iHttpProtocal, _oCommon.m_iHttpPort, {
|
||||
cmd: "challenge",
|
||||
type: "POST",
|
||||
async: false,
|
||||
data: oXmlDoc,
|
||||
success: function (status, xmlDoc) {
|
||||
var szDecryptionResult = cryptico.decrypt(_oBase64.decode(_oUtils.nodeValue(xmlDoc, "key")), szMattsRSAkey);
|
||||
if(szDecryptionResult.plaintext != null) {
|
||||
var szKey, szEncryptPassword;
|
||||
if (iBits === 256) {
|
||||
szKey = _oUtils.toHex(szDecryptionResult.plaintext);
|
||||
} else {
|
||||
szKey = szDecryptionResult.plaintext;
|
||||
}
|
||||
szEncryptPassword = aes_encrypt(szDecryptionResult.plaintext.substring(0, 16), szKey, true);
|
||||
if("string" === typeof oStr) {
|
||||
bBase64Encrypted && ( oStr = _oBase64.encode(oStr) );
|
||||
aResult.push( _oBase64.encode( szEncryptPassword + _oUtils.encodeAES(oStr, szKey, "", "ecb") ) );
|
||||
} else {
|
||||
for(var i = 0, iArrayLen = oStr.length; i < iArrayLen; i++) {
|
||||
bBase64Encrypted && ( oStr[i] = _oBase64.encode(oStr[i]) );
|
||||
var szTemp = szEncryptPassword + _oUtils.encodeAES(oStr[i], szKey, "", "ecb");
|
||||
aResult.push( _oBase64.encode(szTemp) );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
if("string" === typeof oStr) {
|
||||
return aResult[0];
|
||||
} else {
|
||||
return aResult;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = new EncryptionFac();
|
||||
});
|
||||
21
web/public/codebase/jsPlugin/audioMixer/AudioAMER.js
Normal file
21
web/public/codebase/jsPlugin/audioMixer/AudioAMER.js
Normal file
File diff suppressed because one or more lines are too long
BIN
web/public/codebase/jsPlugin/audioMixer/AudioAMER.wasm
Normal file
BIN
web/public/codebase/jsPlugin/audioMixer/AudioAMER.wasm
Normal file
Binary file not shown.
87
web/public/codebase/jsPlugin/audioMixer/audioMixer-worker.js
Normal file
87
web/public/codebase/jsPlugin/audioMixer/audioMixer-worker.js
Normal file
@@ -0,0 +1,87 @@
|
||||
importScripts('AudioAMER.js');
|
||||
|
||||
let channelNum = 2; // 通道数(需求上只需要2通道,不用改)
|
||||
let sampleRate = 32000; // 采样率,支持8K/16K/32K/48K
|
||||
let bitsPerSample = 16; // 采样精度,支持16/32
|
||||
let dataLen = 320; // 一帧数据长度(采样点数),320个16位采样点即640B,支持4/8/10/16/20/24/30/32/40ms
|
||||
|
||||
// self.JSAudioCodecModule['onRuntimeInitialized'] = function () {
|
||||
// JSAudioCodecModule().then(instance => {
|
||||
// AudioModule = instance;
|
||||
// });
|
||||
// postMessage({type: "loaded"});
|
||||
// };
|
||||
|
||||
JSAudioCodecModule().then(instance => {
|
||||
AudioModule = instance;
|
||||
postMessage({type: "loaded"});
|
||||
});
|
||||
|
||||
onmessage = function (e) {
|
||||
let data = e.data;
|
||||
if ("create" === data.type) {
|
||||
let size = AudioModule._malloc(4);
|
||||
let alignment = AudioModule._malloc(4);
|
||||
if (size === null || alignment === null) {
|
||||
console.log("inputdata malloc failed!!!");
|
||||
return -1;
|
||||
}
|
||||
channelNum = data.channelNum;
|
||||
sampleRate = data.sampleRate;
|
||||
bitsPerSample = data.bitsPerSample;
|
||||
dataLen = data.dataLen;
|
||||
|
||||
let iRet = AudioModule._JSHIK_AMER_GetMemSize(channelNum, sampleRate, bitsPerSample, dataLen, size, alignment);
|
||||
if (iRet !== 1) {
|
||||
console.log("_CreatHandle failed!" + iRet);
|
||||
} else {
|
||||
let sizeOut = AudioModule.getValue(size, "i32");
|
||||
let alignmentOut = AudioModule.getValue(alignment, "i32");
|
||||
iRet = AudioModule._JSHIK_AMER_Create(channelNum, sampleRate, bitsPerSample, dataLen, sizeOut, alignmentOut);
|
||||
console.log("Create_res:" + iRet);
|
||||
postMessage({type: "created"});
|
||||
}
|
||||
if (size !== null) {
|
||||
AudioModule._free(size);
|
||||
size = null;
|
||||
}
|
||||
if (alignment !== null) {
|
||||
AudioModule._free(alignment);
|
||||
alignment = null;
|
||||
}
|
||||
} else if ("inputData" === data.type) {
|
||||
let inputSize = dataLen * 2;//dataLen为320,inputSize应该是 320 * 2 = 640
|
||||
let pInputData1 = AudioModule._malloc(inputSize);
|
||||
let pInputData2 = AudioModule._malloc(inputSize);
|
||||
|
||||
let pOutputData1 = AudioModule._malloc(inputSize);
|
||||
let pOutputData2 = AudioModule._malloc(inputSize);
|
||||
let pOutputData3 = AudioModule._malloc(inputSize);
|
||||
if (pInputData1 === null || pInputData2 === null || pOutputData1 === null || pOutputData2 === null || pOutputData3 === null) {
|
||||
console.log("inputdata or outputData malloc failed!!!");
|
||||
return -1;
|
||||
}
|
||||
let inputData1 = new Uint8Array(data.buf1);
|
||||
let inputData2 = new Uint8Array(data.buf2);
|
||||
AudioModule.writeArrayToMemory(inputData1, pInputData1);
|
||||
AudioModule.writeArrayToMemory(inputData2, pInputData2);
|
||||
inputData1 = null;
|
||||
inputData2 = null;
|
||||
// 开始处理
|
||||
let res = AudioModule._JSHIK_AMER_Process(pInputData1, pInputData2, pOutputData1, pOutputData2, pOutputData3, parseInt(inputSize / 2, 10));
|
||||
if (res === 1) {
|
||||
let aOutputData = new Uint8Array(inputSize);
|
||||
aOutputData.set(AudioModule.HEAPU8.subarray(pOutputData3, pOutputData3 + inputSize)); // 必须取pOutputData3的数据
|
||||
// postMessage({ type: "outputData", buf: aOutputData}, [aOutputData]);
|
||||
postMessage({ type: "outputData", dType: 1, buf: aOutputData.buffer}, [aOutputData.buffer]);
|
||||
}
|
||||
AudioModule._free(pInputData1);
|
||||
AudioModule._free(pInputData2);
|
||||
AudioModule._free(pOutputData1);
|
||||
AudioModule._free(pOutputData2);
|
||||
AudioModule._free(pOutputData3);
|
||||
} else if ("release" === data.type) {
|
||||
//奇怪,到时和研究院确认一下,库为什么不提供释放资源或者停止的接口??
|
||||
close();
|
||||
}
|
||||
};
|
||||
2
web/public/codebase/jsPlugin/jquery.min.js
vendored
Normal file
2
web/public/codebase/jsPlugin/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
301
web/public/codebase/jsPlugin/jsPlugin-3.0.0.min.js
vendored
Normal file
301
web/public/codebase/jsPlugin/jsPlugin-3.0.0.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1 @@
|
||||
"use strict";var Module={};var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason??e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}JSPlayerModule(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){Module["__embind_initialize_bindings"]();initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage;
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1 @@
|
||||
"use strict";var Module={};var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason??e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}JSPlayerModule(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){Module["__embind_initialize_bindings"]();initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage;
|
||||
1
web/public/codebase/jsPlugin/playctrl/PlayCtrlWasm/wasmplayer.min.js
vendored
Normal file
1
web/public/codebase/jsPlugin/playctrl/PlayCtrlWasm/wasmplayer.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
21
web/public/codebase/jsPlugin/talkW/AudioInterCom.js
Normal file
21
web/public/codebase/jsPlugin/talkW/AudioInterCom.js
Normal file
File diff suppressed because one or more lines are too long
BIN
web/public/codebase/jsPlugin/talkW/AudioInterCom.wasm
Normal file
BIN
web/public/codebase/jsPlugin/talkW/AudioInterCom.wasm
Normal file
Binary file not shown.
@@ -0,0 +1 @@
|
||||
"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:f=>(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\n");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason??e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}JSAudioInterComModule(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){Module["__embind_initialize_bindings"]();initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}}self.onmessage=handleMessage;
|
||||
881
web/public/codebase/jsPlugin/timeBar.js
Normal file
881
web/public/codebase/jsPlugin/timeBar.js
Normal file
@@ -0,0 +1,881 @@
|
||||
/* eslint-disable no-cond-assign */
|
||||
var bindAsEventListener = function (object, fun) {
|
||||
var args = Array.prototype.slice.call(arguments).slice(2);
|
||||
return function (event) {
|
||||
return fun.apply(object, [event || window.event].concat(args));
|
||||
};
|
||||
};
|
||||
/*
|
||||
Function: bind
|
||||
Description: 绑定对象到函数
|
||||
Input: object 对象, fun 函数
|
||||
Output: 无
|
||||
return: 关联后的函数
|
||||
*************************************************/
|
||||
var bind = function (object, fun) {
|
||||
return function () {
|
||||
return fun.apply(object, arguments);
|
||||
};
|
||||
};
|
||||
/*
|
||||
Function: addEventHandler
|
||||
Description: 添加事件
|
||||
Input: oTarget 目标对象, sEventType 事件, fnHandler 函数
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
var addEventHandler = function (oTarget, sEventType, fnHandler) {
|
||||
oTarget["on" + sEventType] = fnHandler;
|
||||
};
|
||||
|
||||
var removeEventHandler = function (oTarget, sEventType) {
|
||||
oTarget["on" + sEventType] = null;
|
||||
};
|
||||
|
||||
/*
|
||||
Function: getObjLeft
|
||||
Description: 获取对象相对网页的左上角坐标
|
||||
Input: obj 对象
|
||||
Output: 无
|
||||
return: 坐标
|
||||
*************************************************/
|
||||
function getObjLeft(obj) {
|
||||
var x = obj.offsetLeft;
|
||||
while (obj = obj.offsetParent) {
|
||||
x += obj.offsetLeft;
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
/*
|
||||
Function: getObjTop
|
||||
Description: 获取对象相对网页的左上角坐标
|
||||
Input: obj 对象
|
||||
Output: 无
|
||||
return: 坐标
|
||||
*************************************************/
|
||||
function getObjTop(obj) {
|
||||
var y = obj.offsetTop;
|
||||
while (obj = obj.offsetParent) {
|
||||
y += obj.offsetTop;
|
||||
}
|
||||
return y;
|
||||
}
|
||||
/*
|
||||
* Class ScaleInfo
|
||||
* @version v1.0
|
||||
* @function 工具类,时间刻度信息
|
||||
*************************************************/
|
||||
function ScaleInfo(x, y, iSeconds) {
|
||||
this.m_ix = x;
|
||||
this.m_iy = y;
|
||||
this.m_ixMin = 0;
|
||||
this.m_ixMax = 0;
|
||||
this.m_iHour = parseInt(iSeconds / 3600, 10);
|
||||
this.m_iMinute = parseInt(iSeconds % 3600 / 60, 10);
|
||||
this.m_iSecond = parseInt(iSeconds % 3600 % 60, 10);
|
||||
this.m_szTime = "";
|
||||
if (this.m_iHour < 10 && this.m_iMinute < 10) {
|
||||
this.m_szTime = "0" + this.m_iHour + ":0" + this.m_iMinute;
|
||||
} else if (this.m_iHour < 10 && this.m_iMinute >= 10) {
|
||||
this.m_szTime = "0" + this.m_iHour + ":" + this.m_iMinute;
|
||||
} else if (this.m_iHour >= 10 && this.m_iMinute >= 10) {
|
||||
this.m_szTime = "" + this.m_iHour + ":" + this.m_iMinute;
|
||||
} else {
|
||||
this.m_szTime = "" + this.m_iHour + ":0" + this.m_iMinute;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Function: setPos
|
||||
Description: 设置刻度的位置
|
||||
Input: x 横坐标, y 纵坐标
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
ScaleInfo.prototype.setPos = function (x, y) {
|
||||
// this.x = x;
|
||||
if (x < this.m_ixMin) {
|
||||
x = this.m_ixMax - (this.m_ixMin - x);
|
||||
} else if (x > this.m_ixMax) {
|
||||
x = this.m_ixMin + (x - this.m_ixMax);
|
||||
}
|
||||
this.m_ix = x;
|
||||
this.m_iy = y;
|
||||
};
|
||||
/*
|
||||
Function: setPosRange
|
||||
Description: 设置刻度显示的范围
|
||||
Input: ixMin 最小横坐标, ixMax 最大横坐标
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
ScaleInfo.prototype.setPosRange = function (ixMin, ixMax) {
|
||||
this.m_ixMin = ixMin;
|
||||
this.m_ixMax = ixMax;
|
||||
};
|
||||
/*
|
||||
Function: isInRange
|
||||
Description: 是否在范围内
|
||||
Input: ixMin 最小横坐标, ixMax 最大横坐标
|
||||
Output: 无
|
||||
return: bool
|
||||
*************************************************/
|
||||
ScaleInfo.prototype.isInRange = function (iMin, iMax) {
|
||||
if (this.m_ix >= iMin && this.m_ix <= iMax) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
/*
|
||||
Function: update
|
||||
Description: 更新刻度时间
|
||||
Input: iSeconds
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
ScaleInfo.prototype.update = function (iSeconds) {
|
||||
this.m_iHour = parseInt(iSeconds / 3600, 10);
|
||||
this.m_iMinute = parseInt(iSeconds % 3600 / 60, 10);
|
||||
this.m_iSecond = parseInt(iSeconds % 3600 % 60, 10);
|
||||
if (this.m_iHour < 10 && this.m_iMinute < 10) {
|
||||
this.m_szTime = "0" + this.m_iHour + ":0" + this.m_iMinute;
|
||||
} else if (this.m_iHour < 10 && this.m_iMinute >= 10) {
|
||||
this.m_szTime = "0" + this.m_iHour + ":" + this.m_iMinute;
|
||||
} else if (this.m_iHour >= 10 && this.m_iMinute >= 10) {
|
||||
this.m_szTime = "" + this.m_iHour + ":" + this.m_iMinute;
|
||||
} else {
|
||||
this.m_szTime = "" + this.m_iHour + ":0" + this.m_iMinute;
|
||||
}
|
||||
};
|
||||
/*
|
||||
* Class Time
|
||||
* @version v1.0
|
||||
* @function 工具类,时间相关信息
|
||||
*************************************************/
|
||||
function Time() {
|
||||
var tCurrentTime = new Date();
|
||||
this.m_iYear = tCurrentTime.getFullYear();
|
||||
this.m_iMonth = tCurrentTime.getMonth() + 1;
|
||||
this.m_iDay = tCurrentTime.getDate();
|
||||
this.m_iHour = tCurrentTime.getHours();
|
||||
this.m_iMinute = tCurrentTime.getMinutes();
|
||||
this.m_iSecond = tCurrentTime.getSeconds();
|
||||
this.m_iMilliseconds = tCurrentTime.getTime();//返回 1970 年 1 月 1 日至今的毫秒数
|
||||
}
|
||||
|
||||
/*
|
||||
Function: setTimeByMis
|
||||
Description: 设置时间
|
||||
Input: iMilliseconds: 1970 年 1 月 1 日至今的毫秒数
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
Time.prototype.setTimeByMis = function (iMilliseconds) {
|
||||
var tSetTime = new Date(iMilliseconds);
|
||||
this.m_iYear = tSetTime.getFullYear();
|
||||
this.m_iMonth = tSetTime.getMonth() + 1;
|
||||
this.m_iDay = tSetTime.getDate();
|
||||
this.m_iHour = tSetTime.getHours();
|
||||
this.m_iMinute = tSetTime.getMinutes();
|
||||
this.m_iSecond = tSetTime.getSeconds();
|
||||
this.m_iMilliseconds = iMilliseconds;
|
||||
};
|
||||
/*
|
||||
Function: getStringTime
|
||||
Description: 获取时间字符串
|
||||
Input: 无
|
||||
Output: 无
|
||||
return: string yyyy-MM-dd HH:mm:ss
|
||||
*************************************************/
|
||||
Time.prototype.getStringTime = function () {
|
||||
var szYear = "" + this.m_iYear;
|
||||
|
||||
var szMonth;
|
||||
if (this.m_iMonth < 10) {
|
||||
szMonth = "0" + this.m_iMonth;
|
||||
} else {
|
||||
szMonth = "" + this.m_iMonth;
|
||||
}
|
||||
|
||||
var szDay;
|
||||
if (this.m_iDay < 10) {
|
||||
szDay = "0" + this.m_iDay;
|
||||
} else {
|
||||
szDay = "" + this.m_iDay;
|
||||
}
|
||||
|
||||
var szHour;
|
||||
if (this.m_iHour < 10) {
|
||||
szHour = "0" + this.m_iHour;
|
||||
} else {
|
||||
szHour = "" + this.m_iHour;
|
||||
}
|
||||
|
||||
var szMinute;
|
||||
if (this.m_iMinute < 10) {
|
||||
szMinute = "0" + this.m_iMinute;
|
||||
} else {
|
||||
szMinute = "" + this.m_iMinute;
|
||||
}
|
||||
|
||||
var szSecond;
|
||||
if (this.m_iSecond < 10) {
|
||||
szSecond = "0" + this.m_iSecond;
|
||||
} else {
|
||||
szSecond = "" + this.m_iSecond;
|
||||
}
|
||||
var szCurrentTime = szYear + "-" + szMonth + "-" + szDay + " " + szHour + ":" + szMinute + ":" + szSecond;
|
||||
return szCurrentTime;
|
||||
};
|
||||
/*
|
||||
Function: parseTime
|
||||
Description: 通过时间字符串设置时间
|
||||
Input: szTime 时间 yyyy-MM-dd HH:mm:ss
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
Time.prototype.parseTime = function (szTime) {
|
||||
var aDate = szTime.split(' ')[0].split('-');
|
||||
var aTime = szTime.split(' ')[1].split(':');
|
||||
|
||||
this.m_iYear = parseInt(aDate[0], 10);
|
||||
this.m_iMonth = parseInt(aDate[1], 10);
|
||||
this.m_iDay = parseInt(aDate[2], 10);
|
||||
|
||||
this.m_iHour = parseInt(aTime[0], 10);
|
||||
this.m_iMinute = parseInt(aTime[1], 10);
|
||||
this.m_iSecond = parseInt(aTime[2], 10);
|
||||
|
||||
var tTime = new Date();
|
||||
tTime.setFullYear(this.m_iYear);
|
||||
tTime.setMonth(this.m_iMonth - 1, this.m_iDay);
|
||||
|
||||
tTime.setHours(this.m_iHour);
|
||||
tTime.setMinutes(this.m_iMinute);
|
||||
tTime.setSeconds(this.m_iSecond);
|
||||
|
||||
this.m_iMilliseconds = tTime.getTime();
|
||||
};
|
||||
/*
|
||||
* Class FileInfo
|
||||
* @version v1.0
|
||||
* @function 工具类,录像文件相关信息
|
||||
*************************************************/
|
||||
function FileInfo(iX, iY, iWidth, iHeight, iType, cColor, tStartTime, tStopTime) {
|
||||
this.m_iX = iX;
|
||||
this.m_ixMin = 0;
|
||||
this.m_ixMax = 0;
|
||||
this.m_iY = iY;
|
||||
this.m_iWidth = iWidth;
|
||||
this.m_iHeight = iHeight;
|
||||
this.m_cColor = cColor;
|
||||
this.m_iType = iType;
|
||||
this.m_tStartTime = tStartTime;
|
||||
this.m_tStopTime = tStopTime;
|
||||
}
|
||||
|
||||
/*
|
||||
Function: isInRange
|
||||
Description: 是否在范围之内
|
||||
Input: left 左起始点 right 右终点
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
FileInfo.prototype.isInRange = function (left, right) {
|
||||
if ((this.m_iX + this.m_iWidth) <= left || this.m_iX >= right) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
/*
|
||||
Function: setPos
|
||||
Description: 设置位置内
|
||||
Input: iX iY左起始点坐标 iWidth 宽度 iHeight高度
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
FileInfo.prototype.setPos = function (iX, iY, iWidth, iHeight) {
|
||||
this.m_iX = iX;
|
||||
this.m_iWidth = iWidth;
|
||||
this.m_iY = iY;
|
||||
this.m_iHeight = iHeight;
|
||||
};
|
||||
/*
|
||||
Function: setPosRange
|
||||
Description: 设置范围
|
||||
Input: ixMin, ixMax
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
FileInfo.prototype.setPosRange = function (ixMin, ixMax) {
|
||||
this.m_ixMin = ixMin;
|
||||
this.m_ixMax = ixMax;
|
||||
};
|
||||
/*
|
||||
Function: draw
|
||||
Description: 画文件信息
|
||||
Input: g 设备资源
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
FileInfo.prototype.draw = function (g) {
|
||||
if (this.isInRange(this.m_ixMin, this.m_ixMax)) {
|
||||
var colorOld = g.fillStyle;
|
||||
g.fillStyle = this.m_cColor;
|
||||
if ((this.m_iX >= this.m_ixMin) && (this.m_iX + this.m_iWidth) <= this.m_ixMax) {
|
||||
g.fillRect(this.m_iX, this.m_iY, this.m_iWidth, this.m_iHeight);
|
||||
} else if ((this.m_iX < this.m_ixMax) && ((this.m_iX + this.m_iWidth) > this.m_ixMax)) {
|
||||
g.fillRect(this.m_iX, this.m_iY, this.m_ixMax - this.m_iX, this.m_iHeight);
|
||||
} else {
|
||||
g.fillRect(this.m_ixMin, this.m_iY, (this.m_iX + this.m_iWidth) - this.m_ixMin, this.m_iHeight);
|
||||
}
|
||||
g.fillStyle = colorOld;
|
||||
}
|
||||
};
|
||||
/*
|
||||
* Class TimeBar
|
||||
* @version v1.0
|
||||
* @function 工具类,时间条
|
||||
*************************************************/
|
||||
function TimeBar(canvas, iWidth, iHeight, options) {
|
||||
canvas.width = iWidth || 300;
|
||||
canvas.height = iHeight || 50;
|
||||
|
||||
this.m_canvas = canvas;
|
||||
this.m_ctx = canvas.getContext("2d");
|
||||
|
||||
this.m_iMinFileWidth = 1; //文件的最小宽度
|
||||
|
||||
let backgroundColor = 'rgb(0, 0, 0)'; //时间条背景颜色
|
||||
let partLineColor = 'rgb(0,0,0)'; //分割线颜色
|
||||
let timeScaleColor = 'rgb(150, 250, 150)'; //时间条刻度颜色
|
||||
let middleLineColor = 'rgb(0, 250, 0)'; //中轴线颜色
|
||||
let middleLineTimeColor = 'rgb(0, 250, 0)'; //中轴时间颜色
|
||||
|
||||
if (options) {
|
||||
if (options.backgroundColor) {
|
||||
backgroundColor = options.backgroundColor;
|
||||
}
|
||||
if (options.partLineColor) {
|
||||
partLineColor = options.partLineColor;
|
||||
}
|
||||
if (options.timeScaleColor) {
|
||||
timeScaleColor = options.timeScaleColor;
|
||||
}
|
||||
if (options.middleLineColor) {
|
||||
middleLineColor = options.middleLineColor;
|
||||
}
|
||||
if (options.middleLineTimeColor) {
|
||||
middleLineTimeColor = options.middleLineTimeColor;
|
||||
}
|
||||
}
|
||||
|
||||
this.backgroundColor = backgroundColor; //时间条背景颜色
|
||||
this.partLineColor = partLineColor; //分割线颜色
|
||||
this.channelNameColor = 'rgb(150, 150, 150)'; //通道名称颜色
|
||||
this.timeScaleColor = timeScaleColor; //时间条刻度颜色
|
||||
this.middleLineColor = middleLineColor; //中轴线颜色
|
||||
this.middleLineTimeColor = middleLineTimeColor; //中轴时间颜色
|
||||
|
||||
this.defaultFileColor = 'rgb(0, 255, 0)'; //默认录像类型颜色
|
||||
this.cmdFileColor = 'rgb(21, 184, 155)'; //命令触发录像颜色
|
||||
this.scheFileColor = 'rgb(33, 150, 243)'; //录像计划颜色
|
||||
this.alarmFileColor = 'rgb(255, 104, 66)'; //警告录像颜色
|
||||
this.manualFileColor = 'rgb(247, 199, 5)'; //手动录像颜色
|
||||
this.anrFileColor = 'rgb(138, 146, 153)'; //回传录像颜色
|
||||
|
||||
this.m_fMidTimeFont = '14px Verdana'; //中线时间字体及大小
|
||||
this.m_fCurTimeFont = 'bold 12px Arial'; //鼠标当前时间字体及大小
|
||||
this.m_fScaleFont = 'bold 10px Arial'; //刻度字体及大小 sans-serif
|
||||
this.m_fChannelNameFont = '14px Verdana'; //通道名称字体
|
||||
|
||||
canvas.style.backgroundColor = this.backgroundColor;
|
||||
|
||||
this.m_szCurChannelName = ''; //当前通道名称
|
||||
this.m_fCellTime = parseFloat(2.0); //每个代表几个小时
|
||||
this.ScaleInfo = [];
|
||||
this.ScaleInfoNum = parseInt(24 / this.m_fCellTime, 10); //总的刻度数量
|
||||
this.ScaleInfoDisNum = 12; //显示的刻度数量
|
||||
|
||||
//初始化刻度
|
||||
for (var i = 0; i < this.ScaleInfoNum; i++) {
|
||||
this.ScaleInfo.push(new ScaleInfo(0, 0, parseInt(i * 3600 * this.m_fCellTime, 10)));
|
||||
}
|
||||
this.m_iMaxWndNum = 16; //最大窗口数
|
||||
this.m_iSelWnd = 0; //选中的窗口号
|
||||
|
||||
this.FileInfoSet = new Array(this.m_iMaxWndNum); //文件信息集合
|
||||
//初始化文件信息集合
|
||||
for (i = 0; i < this.m_iMaxWndNum; i++) {
|
||||
this.FileInfoSet[i] = [];
|
||||
}
|
||||
this.m_iHeight = parseInt(canvas.height, 10);
|
||||
this.m_iWidth = parseInt(canvas.width, 10);
|
||||
this.m_iFileListStartPos = 0; // 文件列表起始位置
|
||||
this.m_iBlankHeight = 4; // 中间及底边空白高度
|
||||
this.m_iTimeRectHeight = 30; //parseInt(this.m_iHeight * 4 / 7) 时间块的高度
|
||||
this.m_iFileRectHeight = this.m_iHeight - this.m_iTimeRectHeight - this.m_iBlankHeight; //文件块的高度
|
||||
this.m_iMiddleLinePos = parseInt((this.m_iFileListStartPos + this.m_iWidth) / 2, 10); //中轴线的位置
|
||||
this.m_iCellWidth = Math.floor((this.m_iWidth - this.m_iFileListStartPos) / this.ScaleInfoDisNum); //每个像素的秒数
|
||||
this.m_iCellMilliseconds = parseInt((3600 * this.m_fCellTime * 1000) / this.m_iCellWidth, 10); //每个像素的毫秒数
|
||||
|
||||
this.m_tCurrentMidTime = new Time(); //当前中轴线的时间
|
||||
this.m_ctx.font = this.m_fMidTimeFont;
|
||||
this.m_iTextWidth = this.m_ctx.measureText(this.m_tCurrentMidTime.getStringTime()).width;
|
||||
|
||||
this.m_tMouseCurTime = new Time(); //当前鼠标点的时间
|
||||
this.m_ctx.font = this.m_fCurTimeFont;
|
||||
this.m_iCurTextWidth = this.m_ctx.measureText(this.m_tMouseCurTime.getStringTime()).width;
|
||||
|
||||
this.m_iCanvasLeft = getObjLeft(this.m_canvas);
|
||||
this.m_iCanvasTop = getObjTop(this.m_canvas);
|
||||
|
||||
//初始化时间刻度信息
|
||||
for (i = 0; i < this.ScaleInfoNum; i++) {
|
||||
// 计算与中轴线的时间差(只计算时分秒)
|
||||
var seconds = (this.ScaleInfo[i].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[i].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[i].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
|
||||
var iScalePos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
|
||||
// 设置刻度位置范围
|
||||
this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum, 10));
|
||||
this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
|
||||
}
|
||||
|
||||
//注册消息响应
|
||||
this.m_ieventX = 0;
|
||||
this.m_iMousePosX = 0;
|
||||
|
||||
this.m_bMouseDown = false;
|
||||
this.m_bMouseOver = false;
|
||||
this.m_iMove = 0;
|
||||
this.m_iMiddleLineTime = 0;
|
||||
this.Start = function (oEvent) {
|
||||
this.m_iMove = 0;
|
||||
this.m_ieventX = oEvent.clientX;
|
||||
this.m_iMiddleLineTime = this.m_tCurrentMidTime.m_iMilliseconds;
|
||||
this.m_bMouseDown = true;
|
||||
|
||||
this.mouseDownCallbackFunc();
|
||||
addEventHandler(document, 'mousemove', bindAsEventListener(this, this.Move));
|
||||
addEventHandler(document, 'mouseup', bind(this, this.Stop));
|
||||
addEventHandler(parent.document, 'mouseup', bind(this, this.Stop)); //解决鼠标在父页面释放时不能响应的问题
|
||||
//焦点丢失
|
||||
addEventHandler(window, "blur", bindAsEventListener(this, bindAsEventListener(this, this.Stop)));
|
||||
//阻止默认动作
|
||||
oEvent.preventDefault();
|
||||
|
||||
removeEventHandler(canvas, 'mousemove', bindAsEventListener(this, this.onMouseMove));
|
||||
};
|
||||
this.mouseDownCallbackFunc = function () {
|
||||
//
|
||||
};
|
||||
this.mouseUpCallbackFunc = function () {
|
||||
//
|
||||
};
|
||||
this.mouseMoveCallbackFunc = function () {
|
||||
//
|
||||
};
|
||||
this.Stop = function () {
|
||||
this.m_bMouseDown = false;
|
||||
if (this.m_iMove === 0) {
|
||||
this.m_tCurrentMidTime.setTimeByMis(this.m_tMouseCurTime.m_iMilliseconds);
|
||||
}
|
||||
this.mouseUpCallbackFunc();
|
||||
removeEventHandler(document, 'mousemove', bindAsEventListener(this, this.Move));
|
||||
removeEventHandler(document, 'mouseup', bindAsEventListener(this, this.Stop));
|
||||
removeEventHandler(window, "blur", bindAsEventListener(this, this.Stop));
|
||||
|
||||
addEventHandler(canvas, 'mousemove', bindAsEventListener(this, this.onMouseMove));
|
||||
};
|
||||
this.onMouseMoveIn = true;
|
||||
this.Move = function (oEvent) {
|
||||
this.m_iMove = oEvent.clientX - this.m_ieventX;
|
||||
if (this.m_bMouseDown) {
|
||||
//清除选择
|
||||
window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
|
||||
this.m_tCurrentMidTime.setTimeByMis(this.m_iMiddleLineTime - this.m_iMove * this.m_iCellMilliseconds);
|
||||
this.repaint();
|
||||
|
||||
this.mouseMoveCallbackFunc();
|
||||
}
|
||||
};
|
||||
this.onMouseMove = function (oEvent) {
|
||||
this.m_iMousePosX = oEvent.clientX - this.m_iCanvasLeft;
|
||||
this.m_tMouseCurTime.setTimeByMis((this.m_iMousePosX - this.m_iMiddleLinePos) * this.m_iCellMilliseconds + this.m_tCurrentMidTime.m_iMilliseconds);
|
||||
this.repaint();
|
||||
var szCurMouseTime = this.m_tMouseCurTime.getStringTime();
|
||||
this.m_ctx.fillStyle = this.middleLineTimeColor;
|
||||
this.m_ctx.font = this.m_fCurTimeFont;
|
||||
this.m_ctx.fillText(szCurMouseTime.split(' ')[1], this.m_iMousePosX/*(this.m_iMousePosX - parseInt(this.m_iCurTextWidth / 2))*/, 20/*parseInt(this.m_iTimeRectHeight / 4)*/);
|
||||
};
|
||||
|
||||
this.onMouseOut = function (/*oEvent*/) {
|
||||
this.repaint();
|
||||
};
|
||||
addEventHandler(canvas, 'mousedown', bindAsEventListener(this, this.Start));
|
||||
|
||||
addEventHandler(canvas, 'mousemove', bindAsEventListener(this, this.onMouseMove));
|
||||
addEventHandler(canvas, 'mouseout', bindAsEventListener(this, this.onMouseOut));
|
||||
|
||||
this.repaint();
|
||||
}
|
||||
|
||||
/*
|
||||
Function: repaint
|
||||
Description: 重绘
|
||||
Input: 无
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
TimeBar.prototype.repaint = function () {
|
||||
// var szCurrentTime = this.m_tCurrentMidTime.getStringTime();
|
||||
this.updateScalePos();
|
||||
this.updateFileListPos();
|
||||
|
||||
this.m_ctx.clearRect(0, 0, this.m_iWidth, this.m_iHeight);
|
||||
//画通道名称分割线
|
||||
this.m_ctx.strokeStyle = this.partLineColor;
|
||||
this.m_ctx.lineWidth = 1;
|
||||
this.m_ctx.beginPath();
|
||||
this.m_ctx.moveTo(this.m_iFileListStartPos, this.m_iTimeRectHeight);
|
||||
this.m_ctx.lineTo(this.m_iFileListStartPos, this.m_iHeight);
|
||||
this.m_ctx.stroke();
|
||||
|
||||
//画文件两条横轴和纵轴
|
||||
this.m_ctx.lineWidth = this.m_iBlankHeight;
|
||||
this.m_ctx.beginPath();
|
||||
this.m_ctx.moveTo(0, this.m_iTimeRectHeight);
|
||||
this.m_ctx.lineTo(this.m_iWidth, this.m_iTimeRectHeight);
|
||||
this.m_ctx.stroke();
|
||||
|
||||
this.m_ctx.beginPath();
|
||||
this.m_ctx.moveTo(0, this.m_iHeight - this.m_iBlankHeight / 2);
|
||||
this.m_ctx.lineTo(this.m_iWidth, this.m_iHeight - this.m_iBlankHeight / 2);
|
||||
this.m_ctx.stroke();
|
||||
|
||||
//显示通道名称
|
||||
this.m_ctx.fillStyle = this.channelNameColor;
|
||||
this.m_ctx.font = this.m_fChannelNameFont;
|
||||
this.m_ctx.fillText(this.m_szCurChannelName, 0, this.m_iTimeRectHeight + this.m_iBlankHeight + parseInt(this.m_iFileRectHeight / 2, 10) + 5, 90);
|
||||
|
||||
this.m_ctx.strokeStyle = this.timeScaleColor;
|
||||
this.m_ctx.font = this.m_fScaleFont;
|
||||
this.m_ctx.lineWidth = 1;
|
||||
//画时间刻度
|
||||
var i;
|
||||
for (i = 0; i < this.ScaleInfoNum; i++) {
|
||||
if (this.ScaleInfo[i].isInRange(this.m_iFileListStartPos, this.m_iWidth)) {
|
||||
this.m_ctx.beginPath();
|
||||
this.m_ctx.moveTo(this.ScaleInfo[i].m_ix, 2/*this.m_iTimeRectHeight*/);
|
||||
this.m_ctx.lineTo(this.ScaleInfo[i].m_ix, 10/*this.m_iHeight*/);
|
||||
this.m_ctx.stroke();
|
||||
this.m_ctx.fillText(this.ScaleInfo[i].m_szTime, this.ScaleInfo[i].m_ix + 2/*this.ScaleInfo[i].m_ix - 15*/, 12/*this.m_iTimeRectHeight - 5*/);
|
||||
}
|
||||
}
|
||||
|
||||
//画文件信息区域
|
||||
for (i = 0; i < this.FileInfoSet[this.m_iSelWnd].length; i++) {
|
||||
this.FileInfoSet[this.m_iSelWnd][i].draw(this.m_ctx);
|
||||
}
|
||||
|
||||
//画中轴线
|
||||
this.m_ctx.strokeStyle = this.middleLineColor;
|
||||
this.m_ctx.lineWidth = 2;
|
||||
this.m_ctx.beginPath();
|
||||
this.m_ctx.moveTo(this.m_iMiddleLinePos, 0);
|
||||
this.m_ctx.lineTo(this.m_iMiddleLinePos, this.m_iHeight);
|
||||
this.m_ctx.stroke();
|
||||
};
|
||||
|
||||
/*
|
||||
Function: updateScalePos
|
||||
Description: 更新刻度
|
||||
Input: 无
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
TimeBar.prototype.updateScalePos = function () {
|
||||
if (this.ScaleInfo.length === 0) {
|
||||
return;
|
||||
}
|
||||
// 以00:00移动的距离为准
|
||||
var seconds = (this.ScaleInfo[0].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[0].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[0].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
|
||||
var iPos0 = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
|
||||
if (iPos0 < this.ScaleInfo[0].m_ixMin) {
|
||||
iPos0 = this.ScaleInfo[0].m_ixMax - (this.ScaleInfo[0].m_ixMin - iPos0);
|
||||
} else if (iPos0 > this.ScaleInfo[0].m_ixMax) {
|
||||
iPos0 = this.ScaleInfo[0].m_ixMin + (iPos0 - this.ScaleInfo[0].m_ixMax);
|
||||
}
|
||||
var iMoved = iPos0 - this.ScaleInfo[0].m_ix;
|
||||
//没有移动直接返回
|
||||
if (iMoved === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 更新所有的刻度
|
||||
for (var i = 0; i < this.ScaleInfoNum; i++) {
|
||||
var iScalePos = this.ScaleInfo[i].m_ix + iMoved;
|
||||
// 设置刻度位置范围
|
||||
this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum, 10));
|
||||
this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
Function: updateFileListPos
|
||||
Description: 更新文件
|
||||
Input: 无
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
TimeBar.prototype.updateFileListPos = function () {
|
||||
var iFileLength = this.FileInfoSet[this.m_iSelWnd].length;
|
||||
if (iFileLength === 0) {
|
||||
return;
|
||||
}
|
||||
var tStartTime = this.FileInfoSet[this.m_iSelWnd][0].m_tStartTime;
|
||||
var seconds = parseInt((tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
|
||||
var iFile0Pos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
|
||||
var iMoved = iFile0Pos - this.FileInfoSet[this.m_iSelWnd][0].m_iX;
|
||||
//没有移动直接返回
|
||||
if (iMoved === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 更新所有
|
||||
for (var i = 0; i < iFileLength; i++) {
|
||||
var iX = this.FileInfoSet[this.m_iSelWnd][i].m_iX + iMoved;
|
||||
var iY = this.FileInfoSet[this.m_iSelWnd][i].m_iY;
|
||||
var iWidth = this.FileInfoSet[this.m_iSelWnd][i].m_iWidth;
|
||||
var iHeight = this.FileInfoSet[this.m_iSelWnd][i].m_iHeight;
|
||||
this.FileInfoSet[this.m_iSelWnd][i].setPos(iX, iY, iWidth, iHeight);
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
Function: resize
|
||||
Description: 重置大小
|
||||
Input: iWidth宽度, iHeight高度
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
TimeBar.prototype.resize = function (iWidth, iHeight) {
|
||||
this.m_canvas.height = iHeight;
|
||||
this.m_canvas.width = iWidth;
|
||||
this.m_iHeight = iHeight;
|
||||
this.m_iWidth = iWidth;
|
||||
this.m_iTimeRectHeight = parseInt(this.m_iHeight * 4 / 7, 10);
|
||||
this.m_iFileRectHeight = this.m_iHeight - this.m_iTimeRectHeight - this.m_iBlankHeight;
|
||||
this.m_iMiddleLinePos = parseInt((this.m_iFileListStartPos + this.m_iWidth) / 2, 10);
|
||||
this.m_iCellWidth = Math.floor((this.m_iWidth - this.m_iFileListStartPos) / this.ScaleInfoDisNum);
|
||||
this.m_iCellMilliseconds = parseInt((3600 * this.m_fCellTime * 1000) / this.m_iCellWidth, 10);
|
||||
|
||||
//初始化时间刻度信息
|
||||
var i;
|
||||
for (i = 0; i < this.ScaleInfoNum; i++) {
|
||||
// 计算与中轴线的时间差(只计算时分秒)
|
||||
var seconds = (this.ScaleInfo[i].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[i].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[i].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
|
||||
var iScalePos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
|
||||
// 设置刻度位置范围
|
||||
this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum, 10));
|
||||
this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
|
||||
}
|
||||
|
||||
//初始化文件列表信息
|
||||
for (i = 0; i < this.FileInfoSet[this.m_iSelWnd].length; i++) {
|
||||
var FileInfoSetSel = this.FileInfoSet[this.m_iSelWnd][i];
|
||||
var iXLeftSeconds = parseInt((FileInfoSetSel.m_tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
|
||||
var iFilePosLeft = this.m_iMiddleLinePos + parseInt(parseFloat(iXLeftSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
|
||||
|
||||
var iXRightSeconds = parseInt((FileInfoSetSel.m_tStopTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
|
||||
|
||||
var iFilePosRight = this.m_iMiddleLinePos + parseInt(parseFloat(iXRightSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
|
||||
if ((iFilePosRight - iFilePosLeft) < this.m_iMinFileWidth) {
|
||||
iFilePosRight = iFilePosLeft + this.m_iMinFileWidth;
|
||||
}
|
||||
|
||||
FileInfoSetSel.setPos(iFilePosLeft, this.m_iTimeRectHeight + parseInt(this.m_iBlankHeight / 2, 10), iFilePosRight - iFilePosLeft, this.m_iFileRectHeight + 2);
|
||||
}
|
||||
|
||||
this.repaint();
|
||||
};
|
||||
|
||||
/*
|
||||
Function: setSpanType
|
||||
Description: 设置时间条的显示样式
|
||||
Input: 无
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
TimeBar.prototype.setSpanType = function (iSpanType) {
|
||||
switch (iSpanType) {
|
||||
case 6://每2小时一格
|
||||
this.ScaleInfoDisNum = 12;
|
||||
this.m_fCellTime = parseFloat(2.0);
|
||||
break;
|
||||
case 7://每小时一格
|
||||
this.ScaleInfoDisNum = 12;
|
||||
this.m_fCellTime = parseFloat(1.0);
|
||||
break;
|
||||
case 8://每半小时一格
|
||||
this.ScaleInfoDisNum = 12;
|
||||
this.m_fCellTime = parseFloat(0.5);
|
||||
break;
|
||||
case 9://每10分钟一格
|
||||
this.ScaleInfoDisNum = 12;
|
||||
this.m_fCellTime = parseFloat(1 / 6);
|
||||
break;
|
||||
case 10://每5分钟一格
|
||||
this.ScaleInfoDisNum = 12;
|
||||
this.m_fCellTime = parseFloat(1 / 12);
|
||||
break;
|
||||
case 11://每1分钟一格
|
||||
this.ScaleInfoDisNum = 12;
|
||||
this.m_fCellTime = parseFloat(1 / 60);
|
||||
break;
|
||||
default:
|
||||
this.ScaleInfoDisNum = 12;
|
||||
this.m_fCellTime = parseFloat(2.0);
|
||||
return;
|
||||
}
|
||||
this.ScaleInfoNum = parseInt(24 / this.m_fCellTime, 10);
|
||||
this.m_iCellWidth = Math.floor((this.m_iWidth - this.m_iFileListStartPos) / this.ScaleInfoDisNum);
|
||||
this.m_iCellMilliseconds = parseInt((3600 * this.m_fCellTime * 1000) / this.m_iCellWidth, 10);
|
||||
|
||||
//初始化刻度
|
||||
this.ScaleInfo.length = 0;
|
||||
for (var i = 0; i < this.ScaleInfoNum; i++) {
|
||||
this.ScaleInfo.push(new ScaleInfo(0, 0, parseInt(i * 3600 * this.m_fCellTime, 10)));
|
||||
}
|
||||
|
||||
//初始化时间刻度信息
|
||||
for (i = 0; i < this.ScaleInfoNum; i++) {
|
||||
// 计算与中轴线的时间差(只计算时分秒)
|
||||
var seconds = (this.ScaleInfo[i].m_iHour - this.m_tCurrentMidTime.m_iHour) * 3600 + (this.ScaleInfo[i].m_iMinute - this.m_tCurrentMidTime.m_iMinute) * 60 + (this.ScaleInfo[i].m_iSecond - this.m_tCurrentMidTime.m_iSecond);
|
||||
var iScalePos = this.m_iMiddleLinePos + parseInt(parseFloat(seconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
|
||||
// 设置刻度位置范围
|
||||
this.ScaleInfo[i].setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum, 10));
|
||||
this.ScaleInfo[i].setPos(iScalePos, this.m_iTimeRectHeight);
|
||||
}
|
||||
|
||||
//初始化文件列表信息
|
||||
for (i = 0; i < this.FileInfoSet[this.m_iSelWnd].length; i++) {
|
||||
var FileInfoSetSel = this.FileInfoSet[this.m_iSelWnd][i];
|
||||
var iXLeftSeconds = parseInt((FileInfoSetSel.m_tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
|
||||
var iFilePosLeft = this.m_iMiddleLinePos + parseInt(parseFloat(iXLeftSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
|
||||
|
||||
var iXRightSeconds = parseInt((FileInfoSetSel.m_tStopTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
|
||||
|
||||
var iFilePosRight = this.m_iMiddleLinePos + parseInt(parseFloat(iXRightSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
|
||||
if ((iFilePosRight - iFilePosLeft) < this.m_iMinFileWidth) {
|
||||
iFilePosRight = iFilePosLeft + this.m_iMinFileWidth;
|
||||
}
|
||||
FileInfoSetSel.setPos(iFilePosLeft, this.m_iTimeRectHeight + parseInt(this.m_iBlankHeight / 2, 10), iFilePosRight - iFilePosLeft, this.m_iFileRectHeight + 2);
|
||||
}
|
||||
|
||||
this.repaint();
|
||||
};
|
||||
/*
|
||||
Function: addFile
|
||||
Description: 添加文件
|
||||
Input: StartTime 开始时间, StopTime 结束时间, iType 类型, iWndNum 默认当前窗口 添加到某个窗口
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
TimeBar.prototype.addFile = function (StartTime, StopTime, iType/*, iWndNum*/) {
|
||||
var tStartTime = new Time();
|
||||
var tStopTime = new Time();
|
||||
tStartTime.parseTime(StartTime);
|
||||
tStopTime.parseTime(StopTime);
|
||||
var fileColor;
|
||||
switch (iType) {
|
||||
case 1:
|
||||
fileColor = this.scheFileColor;
|
||||
break;
|
||||
case 2:
|
||||
fileColor = this.alarmFileColor;
|
||||
break;
|
||||
case 3:
|
||||
fileColor = this.cmdFileColor;
|
||||
break;
|
||||
case 4:
|
||||
fileColor = this.manualFileColor;
|
||||
break;
|
||||
case 5:
|
||||
fileColor = this.anrFileColor;
|
||||
break;
|
||||
default:
|
||||
fileColor = this.defaultFileColor;
|
||||
break;
|
||||
}
|
||||
var iXLeftSeconds = parseInt((tStartTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
|
||||
var iFilePosLeft = this.m_iMiddleLinePos + parseInt(parseFloat(iXLeftSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
|
||||
|
||||
var iXRightSeconds = parseInt((tStopTime.m_iMilliseconds - this.m_tCurrentMidTime.m_iMilliseconds) / 1000, 10);
|
||||
|
||||
var iFilePosRight = this.m_iMiddleLinePos + parseInt(parseFloat(iXRightSeconds / (3600 * this.m_fCellTime)) * this.m_iCellWidth, 10);
|
||||
|
||||
var fileInfo = new FileInfo(iFilePosLeft, this.m_iTimeRectHeight + parseInt(this.m_iBlankHeight / 2, 10), iFilePosRight - iFilePosLeft, this.m_iFileRectHeight + 2, iType, fileColor, tStartTime, tStopTime);
|
||||
fileInfo.setPosRange(this.m_iFileListStartPos, this.m_iFileListStartPos + parseInt(this.m_iCellWidth * this.ScaleInfoNum, 10));
|
||||
if (arguments.length >= 4) {
|
||||
this.FileInfoSet[arguments[3]].push(fileInfo);
|
||||
} else {
|
||||
this.FileInfoSet[this.m_iSelWnd].push(fileInfo);
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
Function: clearWndFileList
|
||||
Description: 清空某个窗口的文件信息
|
||||
Input: iWndNum 窗口号 0-15 默认当前选中窗口
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
TimeBar.prototype.clearWndFileList = function ()/*iWndNum*/ {
|
||||
var iWndParam;
|
||||
if (arguments.length === 0) {
|
||||
iWndParam = this.m_iSelWnd;
|
||||
} else {
|
||||
iWndParam = arguments[0];
|
||||
}
|
||||
if (iWndParam < 0) {
|
||||
iWndParam = 0;
|
||||
}
|
||||
if (iWndParam >= 16) {
|
||||
iWndParam = 15;
|
||||
}
|
||||
this.FileInfoSet[iWndParam].length = 0;
|
||||
};
|
||||
|
||||
/*
|
||||
Function: setMidLineTime
|
||||
Description: 设置中轴线时间
|
||||
Input: szTime yyyy-MM-dd HH:mm:ss
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
TimeBar.prototype.setMidLineTime = function (szTime) {
|
||||
var tCurTime = new Time();
|
||||
tCurTime.parseTime(szTime);
|
||||
this.m_tCurrentMidTime.setTimeByMis(tCurTime.m_iMilliseconds);
|
||||
this.repaint();
|
||||
};
|
||||
|
||||
TimeBar.prototype.setMouseDownCallback = function (callbackFunc) {
|
||||
this.mouseDownCallbackFunc = callbackFunc;
|
||||
};
|
||||
/*
|
||||
Function: setMouseUpCallback
|
||||
Description: 设置鼠标弹起回调函数
|
||||
Input: func 回调函数 function(tStartTime, tStopTime)
|
||||
Output: 无
|
||||
return: 无
|
||||
*************************************************/
|
||||
TimeBar.prototype.setMouseUpCallback = function (callbackFunc) {
|
||||
this.mouseUpCallbackFunc = callbackFunc;
|
||||
};
|
||||
|
||||
TimeBar.prototype.setMouseMoveCallback = function (callbackFunc) {
|
||||
this.mouseMoveCallbackFunc = callbackFunc;
|
||||
};
|
||||
|
||||
6630
web/public/codebase/jsPlugin/transform/libSystemTransform.js
Normal file
6630
web/public/codebase/jsPlugin/transform/libSystemTransform.js
Normal file
File diff suppressed because it is too large
Load Diff
BIN
web/public/codebase/jsPlugin/transform/libSystemTransform.wasm
Normal file
BIN
web/public/codebase/jsPlugin/transform/libSystemTransform.wasm
Normal file
Binary file not shown.
240
web/public/codebase/jsPlugin/transform/systemTransform-worker.js
Normal file
240
web/public/codebase/jsPlugin/transform/systemTransform-worker.js
Normal file
@@ -0,0 +1,240 @@
|
||||
importScripts('libSystemTransform.js');
|
||||
const RECORDRTP = 0; //录制一份未经过转封装的码流原始数据,用于定位问题
|
||||
let dataType = 1;
|
||||
|
||||
// 字母字符串转byte数组
|
||||
function stringToBytes (str) {
|
||||
var ch;
|
||||
var st;
|
||||
var re = [];
|
||||
for (var i = 0; i < str.length; i++) {
|
||||
ch = str.charCodeAt(i); // get char
|
||||
st = []; // set up "stack"
|
||||
do {
|
||||
st.push(ch & 0xFF); // push byte to stack
|
||||
ch = ch >> 8; // shift value down by 1 byte
|
||||
}
|
||||
while (ch);
|
||||
// add stack contents to result
|
||||
// done because chars have "wrong" endianness
|
||||
re = re.concat(st.reverse());
|
||||
}
|
||||
// return an array of bytes
|
||||
return re;
|
||||
}
|
||||
|
||||
// 转封装库回调函数
|
||||
self.STCallBack = function (fileIndex, indexLen, data, dataLen) {
|
||||
//stFrameInfo的类型见DETAIL_FRAME_INFO
|
||||
let stFrameInfo = Module._GetDetialFrameInfo();
|
||||
let nIsMp4Index = stFrameInfo.nIsMp4Index;
|
||||
|
||||
//console.log("FrameType is " , stFrameInfo);
|
||||
//console.log("nIsMp4Index is " + nIsMp4Index);
|
||||
//debugger
|
||||
var pData = null;
|
||||
pData = new Uint8Array(dataLen);
|
||||
pData.set(Module.HEAPU8.subarray(data, data + dataLen));
|
||||
if (dataType === 1) {
|
||||
postMessage({ type: "outputData",
|
||||
buf: pData.buffer,
|
||||
dType: 1,
|
||||
frameInfo: stFrameInfo }, [pData.buffer]);
|
||||
dataType = 2;
|
||||
} else {
|
||||
if (nIsMp4Index) {
|
||||
postMessage({ type: "outputData",
|
||||
buf: pData.buffer,
|
||||
dType: 6,
|
||||
frameInfo: stFrameInfo }, [pData.buffer]); //6:索引类型
|
||||
} else {
|
||||
postMessage({ type: "outputData",
|
||||
buf: pData.buffer,
|
||||
dType: 2,
|
||||
frameInfo: stFrameInfo }, [pData.buffer]); //2:码流
|
||||
}
|
||||
}
|
||||
|
||||
//stFrameInfo的类型见DETAIL_FRAME_INFO
|
||||
//let stFrameInfo = Module._GetDetialFrameInfo();
|
||||
//let stFrameType = stFrameInfo.nFrameType;
|
||||
//let nFrameNum = stFrameInfo.nFrameNum;
|
||||
//let nTimeStamp = stFrameInfo.nTimeStamp;
|
||||
//let nIsMp4Index = stFrameInfo.nIsMp4Index;
|
||||
|
||||
//console.log("FrameType is " + stFrameType);
|
||||
//console.log("nIsMp4Index is " + nIsMp4Index);
|
||||
};
|
||||
|
||||
// self.Module = { memoryInitializerRequest: loadMemInitFile(), TOTAL_MEMORY: 128*1024*1024 };
|
||||
// importScripts('SystemTransform.js');
|
||||
|
||||
self.Module['onRuntimeInitialized'] = function () {
|
||||
postMessage({type: "loaded"});
|
||||
};
|
||||
onmessage = function (e) {
|
||||
var data = e.data;
|
||||
if ("create" === data.type) {
|
||||
if (RECORDRTP) {
|
||||
postMessage({ type: "created" });
|
||||
postMessage({ type: "outputData",
|
||||
buf: data.buf,
|
||||
dType: 1 }, [data.buf]);
|
||||
} else {
|
||||
var iHeadLen = data.len;
|
||||
var pHead = Module._malloc(iHeadLen);
|
||||
if (pHead === null) {
|
||||
console.log("inputdata malloc failed!!!");
|
||||
return -1;
|
||||
}
|
||||
var iTransType = data.packType;//目标格式
|
||||
var iRet = 0;
|
||||
var buf = new Uint8Array(data.buf);
|
||||
//PS流(只有ps支持探测),并且编码格式异常(正常是265和264,11位和10位 不可能全是0,全0 并且是ps就探测策略)的情况下,使用探测策略
|
||||
if (buf[9] === 0 && buf[8] === 2 && buf[11] === 0 && buf[10] === 0) {
|
||||
iRet = Module._CreatHandle(0, iTransType, iHeadLen); //用探测的策略
|
||||
} else {
|
||||
self.writeArrayToMemory(buf, pHead);
|
||||
iRet = Module._CreatHandle(pHead, iTransType, iHeadLen);
|
||||
//-2147483645代表的是参数错误,此种情况,大概率发生在头信息错误,例如大华设备的情况,此时用 无头探测的策略
|
||||
//其他情况 按海康标准处理流程,不要做任何特殊处理
|
||||
if (iRet == -2147483645) {
|
||||
iRet = Module._CreatHandle(0, iTransType, iHeadLen); //失败了,用探测的策略再试一次
|
||||
}
|
||||
}
|
||||
if (iRet != 0) {
|
||||
if (iRet == -2147483647) {
|
||||
postMessage({ type: "outputData",
|
||||
dType: 1501 }); //标记为格式不支持
|
||||
} else {
|
||||
postMessage({ type: "outputData",
|
||||
dType: 1501 }); //转封装创建失败,也同样提示码流格式不支持,如果后续要细化再区分
|
||||
}
|
||||
console.log("_CreatHandle failed!" + iRet);
|
||||
} else {
|
||||
if (data.options && typeof data.options.pKeyData !== "undefined" && data.options.pKeyData !== null) {
|
||||
if ((2 === iTransType && "" === data.options.pKeyData)) {
|
||||
//转ps的时候,如果密码是空是允许的,即使码流加密了,导出加密后的码流就行
|
||||
//此时不要设置密码否则反而会提示密码错误
|
||||
} else {
|
||||
var secretInfo = data.options;
|
||||
var keyLen = secretInfo.nKeyLen;
|
||||
var pKeyData = Module._malloc(keyLen);
|
||||
if (pKeyData === null) {
|
||||
console.log("setEncryptKey malloc failed!!!");
|
||||
return -1;
|
||||
}
|
||||
var nKeySize = secretInfo.pKeyData.length;
|
||||
var bufData = stringToBytes(secretInfo.pKeyData);
|
||||
|
||||
let inputData = new Uint8Array(bufData);
|
||||
Module.writeArrayToMemory(inputData, pKeyData);
|
||||
inputData = null;
|
||||
|
||||
iRet = Module._SysTransSetEncryptKey(secretInfo.nKeyType, pKeyData, keyLen, nKeySize);
|
||||
if (iRet != 0) {
|
||||
console.log("_SysTransSetEncryptKey failed!");
|
||||
}
|
||||
if (pKeyData != null) {
|
||||
Module._free(pKeyData);
|
||||
pKeyData = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
//带samplingParam参数,代表需要 用到 音频替换功能
|
||||
if (data.options && typeof data.options.samplingParam !== "undefined") {
|
||||
var oParam = data.options.samplingParam;
|
||||
var nCapacityType = 1; //写死1 代表 剔除音频
|
||||
var nType = 3; //写死3 代表 修改输出目标的海康头配置,内部包含视频参数、音频参数
|
||||
var nAudioEnable = 1; //音频参数修改使能开关,0=不启用,1=启用
|
||||
var nAudioFormat = oParam.iAudioType; //音频编码类型 对应关系参考海康媒体头规范,PCM 0x7001 G711_U 0x7110 G711_A 0x7111 AAC 0x2001
|
||||
var nAudioChannels = oParam.iChannel; //音频通道数直接设置为
|
||||
var nAudioBitsPerSample = oParam.iAudioBitWidth; //音频位样率
|
||||
var nAudioSamplesrate = oParam.iAudioSamplingRate; //音频采样率
|
||||
var nAudioBitrate = oParam.iAudioBitRate; //音频比特率
|
||||
iRet = Module._SysTransConfig(nCapacityType, nType, nAudioEnable, nAudioFormat,
|
||||
nAudioChannels, nAudioBitsPerSample, nAudioSamplesrate, nAudioBitrate);
|
||||
if (iRet != 0) {
|
||||
console.log("_SysTransConfig Failed:" + iRet);
|
||||
}
|
||||
} else {
|
||||
iRet = Module._SysTransConfig(128, 0, 0, 0, 0, 0, 0, 0); //nCapacityType = 0x00000080 代表开启私有信息回调 解决转mp4后,私有信息丢失问题
|
||||
if (iRet != 0) {
|
||||
console.log("_SysTransConfig Failed:" + iRet);
|
||||
}
|
||||
}
|
||||
iRet = Module._SysTransRegisterDataCallBack();
|
||||
if (iRet != 0) {
|
||||
console.log("_SysTransRegisterDataCallBack Failed:" + iRet);
|
||||
}
|
||||
|
||||
iRet = Module._SysTransStart(null, null);
|
||||
if (iRet != 0) {
|
||||
console.log("_SysTransStart Failed:" + iRet);
|
||||
}
|
||||
postMessage({type: "created"});
|
||||
}
|
||||
if (pHead != null) {
|
||||
Module._free(pHead);
|
||||
pHead = null;
|
||||
}
|
||||
}
|
||||
} else if ("inputData" === data.type) {
|
||||
if (RECORDRTP) {
|
||||
var aFileData = new Uint8Array(data.buf); // 拷贝一份
|
||||
var iBufferLen = aFileData.length;
|
||||
var szBufferLen = iBufferLen.toString(16);
|
||||
if (szBufferLen.length === 1) {
|
||||
szBufferLen = "000" + szBufferLen;
|
||||
} else if (szBufferLen.length === 2) {
|
||||
szBufferLen = "00" + szBufferLen;
|
||||
} else if (szBufferLen.length === 3) {
|
||||
szBufferLen = "0" + szBufferLen;
|
||||
}
|
||||
var aData = [0, 0, parseInt(szBufferLen.substring(0, 2), 16), parseInt(szBufferLen.substring(2, 4), 16)];
|
||||
for (var iIndex = 0, iDataLength = aFileData.length; iIndex < iDataLength; iIndex++) {
|
||||
aData[iIndex + 4] = aFileData[iIndex];
|
||||
}
|
||||
var dataUint8 = new Uint8Array(aData);
|
||||
postMessage({type: "outputData",
|
||||
buf: dataUint8.buffer,
|
||||
dType: 2});
|
||||
} else {
|
||||
let inputMode = 0; //代表输入原始数据
|
||||
if (data.samplingParam) {
|
||||
iRet = Module._SysTransInputAudioPara(5, data.samplingParam.iChannel, data.samplingParam.iAudioBitWidth,
|
||||
data.samplingParam.iAudioSamplingRate, data.samplingParam.iTimeStamp, data.samplingParam.iAudioBitRate); //参数含义和_SysTransConfig类似
|
||||
if (iRet != 0) {
|
||||
console.log("_SysTransInputAudioPara Failed:" + iRet);
|
||||
}
|
||||
inputMode = 2; //输入替换的音频
|
||||
}
|
||||
var pInputDataBuf = Module._malloc(data.len);
|
||||
var idataLen = data.len;
|
||||
self.writeArrayToMemory(new Uint8Array(data.buf), pInputDataBuf);
|
||||
// 输入数据,每次最多2m
|
||||
let pp = Module._SysTransInputData(inputMode, pInputDataBuf, idataLen);
|
||||
if (pp == -2147483627) {
|
||||
//-2147483627 对应十六进制的80000015
|
||||
postMessage({ type: "outputData",
|
||||
dType: 1500 }); //标记为密码错误
|
||||
} else if (pp == -2147483647) {
|
||||
postMessage({ type: "outputData",
|
||||
dType: 1501 }); //标记为格式不支持
|
||||
} else if (pp != 0) {
|
||||
console.log("InputData Failed:" + pp);
|
||||
}
|
||||
Module._free(pInputDataBuf);
|
||||
}
|
||||
} else if ("release" === data.type) {
|
||||
var iRet = Module._SysTransStop();
|
||||
if (iRet != 0) {
|
||||
console.log("_SysTransStop failed!");
|
||||
}
|
||||
Module._SysTransRelease();
|
||||
if (iRet != 0) {
|
||||
console.log("_SysTransRelease failed!");
|
||||
}
|
||||
close();
|
||||
}
|
||||
};
|
||||
1
web/public/codebase/webVideoCtrl.js
Normal file
1
web/public/codebase/webVideoCtrl.js
Normal file
File diff suppressed because one or more lines are too long
@@ -753,7 +753,7 @@ export const deviceOptions = [
|
||||
label: '厂家',
|
||||
value: '',
|
||||
key: 'factory',
|
||||
type: 'input'
|
||||
type: 'textarea'
|
||||
},
|
||||
{
|
||||
label: '厂家电话',
|
||||
|
||||
@@ -6,7 +6,17 @@
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
|
||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico" />
|
||||
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||
<link rel="stylesheet" href="http://at.alicdn.com/t/c/font_5010233_6lxuclaoex9.css" />
|
||||
|
||||
|
||||
<script type="text/JavaScript" src="codebase/jsPlugin/jquery.min.js"></script>
|
||||
<script type="text/JavaScript" src="codebase/encryption/AES.js"></script>
|
||||
<script type="text/JavaScript" src="codebase/encryption/cryptico.min.js"></script>
|
||||
<script type="text/JavaScript" src="codebase/encryption/crypto-3.1.2.min.js"></script>
|
||||
<script type="text/JavaScript" src="codebase/webVideoCtrl.js"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
|
||||
Reference in New Issue
Block a user