this.pmd5 = new md5(); this.paes = new aes(); // Something wrong? if (!this.usedKey) return false; return this.usedKey; // Something wrong? if (!str) return false; if (!key) return false; // Generate MD5 out of the password var md5Key = pmd5.hex_md5(key); // Store the generated key this.setAttribute("usedKey", md5Key); // Cut down the string and encrypt it: var encStr = this.encrypt(str, md5Key); // Something wrong? if (!encStr) return false; // done return encStr; // Something wrong? if (!str) return false; if (!key) return false; // Store the generated key this.setAttribute("usedKey", key); // Cut down the string and encrypt it: var encStr = this.encrypt(str, key); // Something wrong? if (!encStr) return false; // done return encStr; // Something wrong? if (!str) return false; if (!key) return false; // Generate MD5 out of the password var md5Key = pmd5.hex_md5(key); // Store the generated key this.setAttribute("usedKey", md5Key); // Cut down the string and decrypt it: var encStr = this.decrypt(str, md5Key); // Something wrong? if (!encStr) return false; // done return encStr; // Something wrong? if (!str) return false; if (!key) return false; // Store the generated key this.setAttribute("usedKey", key); // Cut down the string and decrypt it: var encStr = this.decrypt(str, key); // Something wrong? if (!encStr) return false; // done return encStr; 0) { // Every string, that is encoded with AES needs to be 128 bits or 16 // ASCII characters. So lets cut the whole string down. var tmpenc = tmp.substr(0, 16) tmp = tmp.substr(16, tmp.length-16); // if tmpenc is smaller than 16, fill it with 0x10 //while (tmpenc.length < 16) //{ // tmpenc += String.fromCharCode("0x00"); //} // encrypt tmpenc = paes.aes_encrypt(tmpenc, key); if (enc.length > 0) enc += " " enc += tmpenc; } return enc; ]]> 0) { // Every string, that is encoded with AES needs to be 128 bits or 32 // HEX digits. So lets cut the whole string down. var tmpenc = tmp.substr(0, 32) tmp = tmp.substr(32, tmp.length-32); // encrypt tmpenc = paes.aes_decrypt(tmpenc, key); enc += tmpenc; } return enc; ]]> accumulated_output_info = accumulated_output_info + str + "\n"; >>4)&0x0f; return vh.toString(16) + (val&0x0f).toString(16); ]]> this.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); this.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); this.AES_output = new Array(16); =0; i-- ) { v = (val>>>(i*4))&0x0f; str += v.toString(16); } return str; ]]> = 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 Debug.write( 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 Debug.write( str.charAt(2)+" is not a valid hex digit" ); return -1; } // all is ok, return the value return val1*16 + val2; ]]> accumulated_output_info += label + cvt_hex8(val) + "\n"; return (x*4) + y; 0 ) { if ( a&1 ) 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 ) // if the high-order bit is set res ^= modulus; // XOR with the modulus // prepare for the next loop hbit >>= 1; modulus >>= 1; } return res; ]]> return new Array( word_ary[1], word_ary[2], word_ary[3], word_ary[0] ); 0 ) { if ( exp & 1 ) result = aes_mul( result, val ); // square the value val = aes_mul( val, val ); // move to the next bit exp >>= 1; } return result; ]]> >>2 ); accumulate_wordarray( " ^ Rcon()=", temp ); } // word = word ^ temp for( j=0; j<4; j++ ) w[i*4+j] = w[(i-4)*4+j] ^ temp[j]; accumulate_wordarray( "w["+i+"] = ", w.slice( i*4, i*4+4 ) ); i++; } return w; ]]> 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; 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; =1; round-- ) { accumulate_array( "Round " + round, state ); state = InvShiftRows(state); accumulate_array( "After InvShiftRows", state ); state = SubBytes(state, S_dec); accumulate_array( "After SubBytes", state ); // display the round key - Transpose due to the way it is stored/used accumulate_array( "Round Key", transpose(w.slice( round*4*4, round*16+16 )) ); // note here the spec uses 32-bit words, we are using bytes, so an extra *4 state = AddRoundKey(state, w, round*4*4); accumulate_array( "After AddRoundKey", state ); state = InvMixColumns(state); } InvShiftRows(state); accumulate_array( "After InvShiftRows", state ); SubBytes(state, S_dec); accumulate_array( "After SubBytes", state ); AddRoundKey(state, w, 0); accumulate_array( "Output", state ); // process output AES_output = transpose( state ); return format_AES_output(true); //Debug.write(accumulated_output_info); ]]> return binl2hex(core_md5(str2binl(s), s.length * chrsz)); > 5] |= 0x80 << ((len) % 32); x[(((len + 64) >>> 9) << 4) + 14] = len; var a =1732584193; var b = -271733879; var c = -1732584194; var d =271733878; for(var i = 0; i < x.length; i += 16) { var olda = a; var oldb = b; var oldc = c; var oldd = d; a = this.md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); d = this.md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); c = this.md5_ff(c, d, a, b, x[i+ 2], 17,606105819); b = this.md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); a = this.md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); d = this.md5_ff(d, a, b, c, x[i+ 5], 12,1200080426); c = this.md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); b = this.md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); a = this.md5_ff(a, b, c, d, x[i+ 8], 7 ,1770035416); d = this.md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); c = this.md5_ff(c, d, a, b, x[i+10], 17, -42063); b = this.md5_ff(b, c, d, a, x[i+11], 22, -1990404162); a = this.md5_ff(a, b, c, d, x[i+12], 7 ,1804603682); d = this.md5_ff(d, a, b, c, x[i+13], 12, -40341101); c = this.md5_ff(c, d, a, b, x[i+14], 17, -1502002290); b = this.md5_ff(b, c, d, a, x[i+15], 22,1236535329); a = this.md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); d = this.md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); c = this.md5_gg(c, d, a, b, x[i+11], 14,643717713); b = this.md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); a = this.md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); d = this.md5_gg(d, a, b, c, x[i+10], 9 ,38016083); c = this.md5_gg(c, d, a, b, x[i+15], 14, -660478335); b = this.md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); a = this.md5_gg(a, b, c, d, x[i+ 9], 5 ,568446438); d = this.md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); c = this.md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); b = this.md5_gg(b, c, d, a, x[i+ 8], 20,1163531501); a = this.md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); d = this.md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); c = this.md5_gg(c, d, a, b, x[i+ 7], 14,1735328473); b = this.md5_gg(b, c, d, a, x[i+12], 20, -1926607734); a = this.md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); d = this.md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); c = this.md5_hh(c, d, a, b, x[i+11], 16,1839030562); b = this.md5_hh(b, c, d, a, x[i+14], 23, -35309556); a = this.md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); d = this.md5_hh(d, a, b, c, x[i+ 4], 11,1272893353); c = this.md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); b = this.md5_hh(b, c, d, a, x[i+10], 23, -1094730640); a = this.md5_hh(a, b, c, d, x[i+13], 4 ,681279174); d = this.md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); c = this.md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); b = this.md5_hh(b, c, d, a, x[i+ 6], 23,76029189); a = this.md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); d = this.md5_hh(d, a, b, c, x[i+12], 11, -421815835); c = this.md5_hh(c, d, a, b, x[i+15], 16,530742520); b = this.md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); a = this.md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); d = this.md5_ii(d, a, b, c, x[i+ 7], 10,1126891415); c = this.md5_ii(c, d, a, b, x[i+14], 15, -1416354905); b = this.md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); a = this.md5_ii(a, b, c, d, x[i+12], 6 ,1700485571); d = this.md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); c = this.md5_ii(c, d, a, b, x[i+10], 15, -1051523); b = this.md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); a = this.md5_ii(a, b, c, d, x[i+ 8], 6 ,1873313359); d = this.md5_ii(d, a, b, c, x[i+15], 10, -30611744); c = this.md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); b = this.md5_ii(b, c, d, a, x[i+13], 21,1309151649); a = this.md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); d = this.md5_ii(d, a, b, c, x[i+11], 10, -1120210379); c = this.md5_ii(c, d, a, b, x[i+ 2], 15,718787259); b = this.md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); a = this.safe_add( a, olda ); b = this.safe_add( b, oldb ); c = this.safe_add( c, oldc ); d = this.safe_add( d, oldd ); } return Array( a, b, c, d ); ]]> return this.safe_add( this.bit_rol( this.safe_add( this.safe_add(a, q), this.safe_add(x, t)), s),b); return this.md5_cmn(b ^ c ^ d, a, b, x, s, t); return this.md5_cmn(c ^ (b | (~d)), a, b, x, s, t); > 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xFFFF); ]]> >> (32 - cnt)); ]]> >5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32); return bin; ]]> >2] >> ((i%4)*8+4)) & 0xF) + hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF); } return str; ]]>