Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <html>
- <head>
- <title>My small part of the cccam protocol implementation demonstration in javascript</title>
- <script type='text/javascript'>
- function print_r( array, return_val ) {
- // Prints human-readable information about a variable
- //
- // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_print_r/
- // + version: 809.2411
- // + original by: Michael White (http://getsprink.com)
- // + improved by: Ben Bryan
- // * example 1: print_r(1, true);
- // * returns 1: 1
- var output = "", pad_char = " ", pad_val = 4;
- var formatArray = function (obj, cur_depth, pad_val, pad_char) {
- if (cur_depth > 0) {
- cur_depth++;
- }
- var base_pad = repeat_char(pad_val*cur_depth, pad_char);
- var thick_pad = repeat_char(pad_val*(cur_depth+1), pad_char);
- var str = "";
- if (obj instanceof Array || obj instanceof Object) {
- str += "Array\n" + base_pad + "(\n";
- for (var key in obj) {
- if (obj[key] instanceof Array) {
- str += thick_pad + "["+key+"] => "+formatArray(obj[key], cur_depth+1, pad_val, pad_char);
- } else {
- str += thick_pad + "["+key+"] => " + obj[key] + "\n";
- }
- }
- str += base_pad + ")\n";
- } else if(obj == null || obj == undefined) {
- str = '';
- } else {
- str = obj.toString();
- }
- return str;
- };
- var repeat_char = function (len, pad_char) {
- var str = "";
- for (var i=0; i < len; i++) {
- str += pad_char;
- };
- return str;
- };
- output = formatArray(array, 0, pad_val, pad_char);
- if (return_val !== true) {
- document.write("<pre>" + output + "</pre>");
- return true;
- } else {
- return output;
- }
- }
- function count(mixed_var, mode) {
- // Count elements in an array, or properties in an object
- //
- // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_count/
- // + version: 809.522
- // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
- // + input by: _argos
- // * example 1: count([[0,0],[0,-4]], 'COUNT_RECURSIVE');
- // * returns 1: 6
- // * example 2: count({'one' : [1,2,3,4,5]}, 'COUNT_RECURSIVE');
- // * returns 2: 6
- var key, cnt = 0;
- if (mode == 'COUNT_RECURSIVE') mode = 1;
- if (mode != 1) mode = 0;
- for (key in mixed_var){
- cnt++;
- if (mode==1 && mixed_var[key] && (mixed_var[key].constructor === Array || mixed_var[key].constructor === Object)) {
- cnt += count(mixed_var[key], 1);
- }
- }
- return cnt;
- }
- function strlen(string) {
- // Get string length
- //
- // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_strlen/
- // + version: 810.616
- // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
- // + improved by: Sakimori
- // + input by: Kirk Strobeck
- // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
- // + bugfixed by: Onno Marsman
- // * example 1: strlen('Kevin van Zonneveld');
- // * returns 1: 19
- return (string+'').length;
- }
- function substr(f_string, f_start, f_length) {
- // Return part of a string
- //
- // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_substr/
- // + version: 810.819
- // + original by: Martijn Wieringa
- // + bugfixed by: T.Wild
- // + tweaked by: Onno Marsman
- // * example 1: substr('abcdef', 0, -1);
- // * returns 1: 'abcde'
- // * example 2: substr(2, 0, -6);
- // * returns 2: ''
- f_string += '';
- if(f_start < 0) {
- f_start += f_string.length;
- }
- if (f_length == undefined) {
- f_length = f_string.length;
- } else if (f_length < 0){
- f_length += f_string.length;
- } else {
- f_length += f_start;
- }
- if (f_length < f_start) {
- f_length = f_start;
- }
- return f_string.substring(f_start, f_length);
- }
- function sprintf( ) {
- // Return a formatted string
- //
- // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_sprintf/
- // + version: 810.1015
- // + original by: Ash Searle (http://hexmen.com/blog/)
- // + namespaced by: Michael White (http://getsprink.com)
- // + tweaked by: Jack
- // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
- // * example 1: sprintf("%01.2f", 123.1);
- // * returns 1: 123.10
- var regex = /%%|%(\d+\$)?([-+#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuidfegEG])/g;
- var a = arguments, i = 0, format = a[i++];
- // pad()
- var pad = function(str, len, chr, leftJustify) {
- var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr);
- return leftJustify ? str + padding : padding + str;
- };
- // justify()
- var justify = function(value, prefix, leftJustify, minWidth, zeroPad) {
- var diff = minWidth - value.length;
- if (diff > 0) {
- if (leftJustify || !zeroPad) {
- value = pad(value, minWidth, ' ', leftJustify);
- } else {
- value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length);
- }
- }
- return value;
- };
- // formatBaseX()
- var formatBaseX = function(value, base, prefix, leftJustify, minWidth, precision, zeroPad) {
- // Note: casts negative numbers to positive ones
- var number = value >>> 0;
- prefix = prefix && number && {'2': '0b', '8': '0', '16': '0x'}[base] || '';
- value = prefix + pad(number.toString(base), precision || 0, '0', false);
- return justify(value, prefix, leftJustify, minWidth, zeroPad);
- };
- // formatString()
- var formatString = function(value, leftJustify, minWidth, precision, zeroPad) {
- if (precision != null) {
- value = value.slice(0, precision);
- }
- return justify(value, '', leftJustify, minWidth, zeroPad);
- };
- // finalFormat()
- var doFormat = function(substring, valueIndex, flags, minWidth, _, precision, type) {
- if (substring == '%%') return '%';
- // parse flags
- var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false;
- var flagsl = flags.length;
- for (var j = 0; flags && j < flagsl; j++) switch (flags.charAt(j)) {
- case ' ': positivePrefix = ' '; break;
- case '+': positivePrefix = '+'; break;
- case '-': leftJustify = true; break;
- case '0': zeroPad = true; break;
- case '#': prefixBaseX = true; break;
- }
- // parameters may be null, undefined, empty-string or real valued
- // we want to ignore null, undefined and empty-string values
- if (!minWidth) {
- minWidth = 0;
- } else if (minWidth == '*') {
- minWidth = +a[i++];
- } else if (minWidth.charAt(0) == '*') {
- minWidth = +a[minWidth.slice(1, -1)];
- } else {
- minWidth = +minWidth;
- }
- // Note: undocumented perl feature:
- if (minWidth < 0) {
- minWidth = -minWidth;
- leftJustify = true;
- }
- if (!isFinite(minWidth)) {
- throw new Error('sprintf: (minimum-)width must be finite');
- }
- if (!precision) {
- precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : void(0);
- } else if (precision == '*') {
- precision = +a[i++];
- } else if (precision.charAt(0) == '*') {
- precision = +a[precision.slice(1, -1)];
- } else {
- precision = +precision;
- }
- // grab value using valueIndex if required?
- var value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++];
- switch (type) {
- case 's': return formatString(String(value), leftJustify, minWidth, precision, zeroPad);
- case 'c': return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad);
- case 'b': return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
- case 'o': return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
- case 'x': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
- case 'X': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad).toUpperCase();
- case 'u': return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
- case 'i':
- case 'd':
- {
- var number = parseInt(+value);
- var prefix = number < 0 ? '-' : positivePrefix;
- value = prefix + pad(String(Math.abs(number)), precision, '0', false);
- return justify(value, prefix, leftJustify, minWidth, zeroPad);
- }
- case 'e':
- case 'E':
- case 'f':
- case 'F':
- case 'g':
- case 'G':
- {
- var number = +value;
- var prefix = number < 0 ? '-' : positivePrefix;
- var method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())];
- var textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2];
- value = prefix + Math.abs(number)[method](precision);
- return justify(value, prefix, leftJustify, minWidth, zeroPad)[textTransform]();
- }
- default: return substring;
- }
- };
- return format.replace(regex, doFormat);
- }
- function str_split(f_string, f_split_length) {
- // Convert a string to an array
- //
- // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_str_split/
- // + version: 810.621
- // + original by: Martijn Wieringa
- // + improved by: Brett Zamir
- // + bugfixed by: Onno Marsman
- // * example 1: str_split('Hello Friend', 3);
- // * returns 1: ['Hel', 'lo ', 'Fri', 'end']
- f_string += '';
- if (f_split_length == undefined) {
- f_split_length = 1;
- }
- if (f_split_length > 0) {
- var result = [];
- while(f_string.length > f_split_length) {
- result[result.length] = f_string.substring(0, f_split_length);
- f_string = f_string.substring(f_split_length);
- }
- result[result.length] = f_string;
- return result;
- }
- return false;
- }
- function chr(ascii) {
- // Return a specific character
- //
- // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_chr/
- // + version: 809.522
- // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
- // * example 1: chr(75);
- // * returns 1: 'K'
- return String.fromCharCode(ascii);
- }
- function ord(string) {
- // Return ASCII value of character
- //
- // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_ord/
- // + version: 810.621
- // + original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
- // + bugfixed by: Onno Marsman
- // * example 1: ord('K');
- // * returns 1: 75
- return (string+'').charCodeAt(0);
- }
- function dechex(number) {
- // Decimal to hexadecimal
- //
- // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_dechex/
- // + version: 810.612
- // + original by: Philippe Baumann
- // + bugfixed by: Onno Marsman
- // * example 1: dechex(10);
- // * returns 1: 'a'
- // * example 2: dechex(47);
- // * returns 2: '2f'
- return parseInt(number).toString(16).toUpperCase();
- }
- function hexdec(hex_string) {
- // Hexadecimal to decimal
- //
- // + discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_hexdec/
- // + version: 810.300
- // + original by: Philippe Baumann
- // * example 1: hexdec('that');
- // * returns 1: 10
- // * example 2: hexdec('a0');
- // * returns 2: 160
- hex_string = (hex_string+'').replace(/[^a-f0-9]/gi, '');
- return parseInt(hex_string, 16);
- }
- function sha1(str, is_binary=0) {
- // discuss at: http://locutus.io/php/sha1/
- // original by: Webtoolkit.info (http://www.webtoolkit.info/)
- // improved by: Michael White (http://getsprink.com)
- // improved by: Kevin van Zonneveld (http://kvz.io)
- // modified by: savan (added parameter to switch between hashing binary or text mode)
- // input by: Brett Zamir (http://brett-zamir.me)
- // note 1: Keep in mind that in accordance with PHP, the whole string is buffered and then
- // note 1: hashed. If available, we'd recommend using Node's native crypto modules directly
- // note 1: in a steaming fashion for faster and more efficient hashing
- // example 1: sha1('Kevin van Zonneveld')
- // returns 1: '54916d2e62f65b3afa6e192e6a601cdbe5cb5897'
- var hash
- try {
- var crypto = require('crypto')
- var sha1sum = crypto.createHash('sha1')
- sha1sum.update(str)
- hash = sha1sum.digest('hex')
- } catch (e) {
- hash = undefined
- }
- if (hash !== undefined) {
- return hash
- }
- var _rotLeft = function (n, s) {
- var t4 = (n << s) | (n >>> (32 - s))
- return t4
- }
- var _cvtHex = function (val) {
- var str = ''
- var i
- var v
- for (i = 7; i >= 0; i--) {
- v = (val >>> (i * 4)) & 0x0f
- str += v.toString(16)
- }
- return str
- }
- var blockstart
- var i, j
- var W = new Array(80)
- var H0 = 0x67452301
- var H1 = 0xEFCDAB89
- var H2 = 0x98BADCFE
- var H3 = 0x10325476
- var H4 = 0xC3D2E1F0
- var A, B, C, D, E
- var temp
- // utf8_encode
- if (is_binary==0) {
- str = unescape(encodeURIComponent(str))
- }
- var strLen = str.length
- var wordArray = []
- for (i = 0; i < strLen - 3; i += 4) {
- j = str.charCodeAt(i) << 24 |
- str.charCodeAt(i + 1) << 16 |
- str.charCodeAt(i + 2) << 8 |
- str.charCodeAt(i + 3)
- wordArray.push(j)
- }
- switch (strLen % 4) {
- case 0:
- i = 0x080000000
- break
- case 1:
- i = str.charCodeAt(strLen - 1) << 24 | 0x0800000
- break
- case 2:
- i = str.charCodeAt(strLen - 2) << 24 | str.charCodeAt(strLen - 1) << 16 | 0x08000
- break
- case 3:
- i = str.charCodeAt(strLen - 3) << 24 | str.charCodeAt(strLen - 2) << 16 | str.charCodeAt(strLen - 1) << 8 | 0x80
- break
- }
- wordArray.push(i)
- while ((wordArray.length % 16) !== 14) {
- wordArray.push(0)
- }
- wordArray.push(strLen >>> 29)
- wordArray.push((strLen << 3) & 0x0ffffffff)
- for (blockstart = 0; blockstart < wordArray.length; blockstart += 16) {
- for (i = 0; i < 16; i++) {
- W[i] = wordArray[blockstart + i]
- }
- for (i = 16; i <= 79; i++) {
- W[i] = _rotLeft(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1)
- }
- A = H0
- B = H1
- C = H2
- D = H3
- E = H4
- for (i = 0; i <= 19; i++) {
- temp = (_rotLeft(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5A827999) & 0x0ffffffff
- E = D
- D = C
- C = _rotLeft(B, 30)
- B = A
- A = temp
- }
- for (i = 20; i <= 39; i++) {
- temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff
- E = D
- D = C
- C = _rotLeft(B, 30)
- B = A
- A = temp
- }
- for (i = 40; i <= 59; i++) {
- temp = (_rotLeft(A, 5) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff
- E = D
- D = C
- C = _rotLeft(B, 30)
- B = A
- A = temp
- }
- for (i = 60; i <= 79; i++) {
- temp = (_rotLeft(A, 5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff
- E = D
- D = C
- C = _rotLeft(B, 30)
- B = A
- A = temp
- }
- H0 = (H0 + A) & 0x0ffffffff
- H1 = (H1 + B) & 0x0ffffffff
- H2 = (H2 + C) & 0x0ffffffff
- H3 = (H3 + D) & 0x0ffffffff
- H4 = (H4 + E) & 0x0ffffffff
- }
- temp = _cvtHex(H0) + _cvtHex(H1) + _cvtHex(H2) + _cvtHex(H3) + _cvtHex(H4)
- return temp.toLowerCase()
- }
- // by savan: all part from here until the end of file is port from oscam and my php cccam protocol code
- var keytable = {};
- keytable['client'] = {};
- keytable['client']['table'] = {};
- keytable['client']['state'] = "00";
- keytable['client']['counter'] = 0;
- keytable['client']['sum'] = 0;
- keytable['server'] = {};
- keytable['server']['table'] = {};
- keytable['server']['state'] = "00";
- keytable['server']['counter'] = 0;
- keytable['server']['sum'] = 0;
- function hexToStr(hex) {
- var string = "";
- for (var i=0; i < strlen(hex)-1; i+=2) {
- string += chr(hexdec(hex[i] + "" + hex[i+1]));
- }
- return string;
- }
- function strToHex(string) {
- var hex_string = "";
- for (var i=0; i < strlen(string); i++) {
- hex_string += sprintf("%02X", ord(string[i]));
- }
- return hex_string;
- }
- function hexToBin(hexString) {
- var hexLenght = strlen(hexString);
- if (hexLenght % 2 != 0 || hexString.match("/[^\da-fA-F]/")) return hexString;
- else {
- var binString = "";
- for (var x = 1; x <= hexLenght/2; x++) {
- binString += chr(hexdec(substr(hexString, 2*x-2, 2)));
- }
- return binString;
- }
- }
- function initialize_encryption(sourcetable, keybin, len) {
- var i = 0;
- var j = 0;
- var key = {};
- for (i=0; i<len; i++) key[i] = strToHex(substr(keybin, i, 1));
- for (i=0; i<256; i++) keytable[sourcetable]['table'][i] = i;
- for (i=0; i<256; i++) {
- j += hexdec(key[i % len]) + keytable[sourcetable]['table'][i];
- j = j & 0xff;
- //swap
- var tmp = keytable[sourcetable]['table'][i];
- keytable[sourcetable]['table'][i] = keytable[sourcetable]['table'][j];
- keytable[sourcetable]['table'][j] = tmp;
- }
- keytable[sourcetable]['state'] = key[0];
- keytable[sourcetable]['counter'] = 0;
- keytable[sourcetable]['sum'] = 0;
- for (i=0; i<256; i++) keytable[sourcetable]['table'][i] = sprintf("%02X", keytable[sourcetable]['table'][i] & 0xff);
- }
- function xorr(bufbin) {
- var cccam = str_split("CCcam");
- var buf = {};
- var out = "";
- var i = 0;
- for (i=0; i<strlen(bufbin); i++) buf[i] = strToHex(substr(bufbin, i, 1));
- for (i=0; i<8; i++) {
- buf[8 + i] = sprintf("%02X", (i * hexdec(buf[i])) & 0xff);
- if (i < 5) buf[i] = sprintf("%02X", ord(hexToBin(buf[i])) ^ ord(cccam[i]));
- }
- for (i=0; i<count(buf); i++) out += buf[i];
- return out;
- }
- function encrypt(sourcetable, databin, len) {
- var out = "";
- var i = 0;
- var data = {};
- for (i=0; i<len; i++) data[i] = strToHex(substr(databin, i, 1));
- for (i=0; i<len; i++) {
- keytable[sourcetable]['counter'] = 0xff & (keytable[sourcetable]['counter']+1);
- keytable[sourcetable]['sum'] += hexdec(keytable[sourcetable]['table'][keytable[sourcetable]['counter']]);
- keytable[sourcetable]['sum'] = keytable[sourcetable]['sum'] & 0xff;
- //swap
- var tmp = keytable[sourcetable]['table'][keytable[sourcetable]['counter']];
- keytable[sourcetable]['table'][keytable[sourcetable]['counter']] = keytable[sourcetable]['table'][keytable[sourcetable]['sum']];
- keytable[sourcetable]['table'][keytable[sourcetable]['sum']] = tmp;
- var z = data[i];
- data[i] = ord(hexToBin(z)) ^ ord(hexToBin(keytable[sourcetable]['table'][ (hexdec(keytable[sourcetable]['table'][keytable[sourcetable]['counter']]) + hexdec(keytable[sourcetable]['table'][keytable[sourcetable]['sum']])) & 0xff ]));
- data[i] ^= ord(hexToBin(keytable[sourcetable]['state']));
- data[i] = sprintf("%02X", data[i] & 0xff);
- keytable[sourcetable]['state'] = sprintf("%02X", ord(hexToBin(keytable[sourcetable]['state'])) ^ ord(hexToBin(z)));
- }
- for (i=0; i<len; i++) out += data[i];
- return out;
- }
- function decrypt(sourcetable, databin, len) {
- var out = "";
- var i = 0;
- var data = {};
- for (i=0; i<len; i++) data[i] = strToHex(substr(databin, i, 1));
- for (i=0; i<len; i++) {
- keytable[sourcetable]['counter'] = 0xff & (keytable[sourcetable]['counter']+1);
- keytable[sourcetable]['sum'] += hexdec(keytable[sourcetable]['table'][keytable[sourcetable]['counter']]);
- keytable[sourcetable]['sum'] = keytable[sourcetable]['sum'] & 0xff;
- //swap
- var tmp = keytable[sourcetable]['table'][keytable[sourcetable]['counter']];
- keytable[sourcetable]['table'][keytable[sourcetable]['counter']] = keytable[sourcetable]['table'][keytable[sourcetable]['sum']];
- keytable[sourcetable]['table'][keytable[sourcetable]['sum']] = tmp;
- var z = data[i];
- data[i] = ord(hexToBin(z)) ^ ord(hexToBin(keytable[sourcetable]['table'][ (hexdec(keytable[sourcetable]['table'][keytable[sourcetable]['counter']]) + hexdec(keytable[sourcetable]['table'][keytable[sourcetable]['sum']])) & 0xff ]));
- data[i] ^= ord(hexToBin(keytable[sourcetable]['state']));
- data[i] = sprintf("%02X", data[i] & 0xff);
- z = data[i];
- keytable[sourcetable]['state'] = sprintf("%02X", ord(hexToBin(keytable[sourcetable]['state'])) ^ ord(hexToBin(z)));
- }
- for (i=0; i<len; i++) out += data[i];
- return out;
- }
- function cc_crypt_cw(nodeid, card_id, cws) {
- var n = 0;
- var nod = {};
- var i=0;
- for(i=0; i<8; i++) nod[i] = nodeid[7-i];
- for (i=0; i<16; i++) {
- if (i & 1) {
- if (i != 15) n = (nod[i>>1]>>4) | (nod[(i>>1)+1]<<4);
- else n = nod[i>>1]>>4;
- } else {
- n = nod[i>>1];
- }
- n = n & 0xff;
- var tmp = cws[i] ^ n;
- if (i & 1) tmp = ~tmp;
- cws[i] = dechex(((card_id >> (2 * i)) ^ tmp) & 0xff);
- }
- return cws;
- }
- </script>
- </head>
- <body>
- <script type='text/javascript'>
- /**
- * got seed from server: 61E26A37037920BF4881CE23ACDC5819
- * Checksum of connection packet is valid.
- * seed xor = 22A109566E7920BF00E2D4A50C5DC039
- * Using this encryption key: DB6C27ABEC0CFCAAF3C7CB3FCEE0609DF3DA787A
- * decrypt = 534F94D4037D54C03D06FE1AC56035C9
- * decrypt hash = 81A3506833762E4929646A8BD6A264023420919A
- * encrypt hash = 8CF20A81EAF066994F3872C6267D013B82644F94
- * user = exampleuser
- * password = 57961D2F13521DDABED3B0B0E98D6E
- * cccam = 95C4384FAE6E
- **/
- // changeable variables
- var USER = "exampleuser";
- var PASSWORD = "examplepassword";
- var REMOTECCCAMHOST = "example.dyndns.org";
- var REMOTECCCAMPORT = 1234;
- // variables
- var data = "";
- var enc_key = "";
- var decrypt_seed = "";
- var decrypt_hash = "";
- var encrypt_hash = "";
- var username = {};
- var user = "";
- var userenc = "";
- var password = "";
- var cccam = "";
- var example_seed_received_from_first_cccam_packet = "61E26A37037920BF4881CE23ACDC5819";
- document.write("got seed from server: " + example_seed_received_from_first_cccam_packet + "<br />\n");
- data = hexToBin(example_seed_received_from_first_cccam_packet);
- data = xorr(data);
- document.write("seed xor = " + data + "<br />\n");
- data = hexToBin(data);
- enc_key = sha1(data, 1).toUpperCase();
- document.write("Using this encryption key: " + enc_key + "<br />\n");
- enc_key = hexToBin(enc_key);
- initialize_encryption('client', enc_key, strlen(enc_key));
- decrypt_seed = decrypt('client', data, strlen(data));
- document.write("decrypt = " + decrypt_seed + "<br />\n");
- // copy table
- keytable['server'] = keytable['client'];
- decrypt_seed = hexToBin(decrypt_seed);
- initialize_encryption('client', decrypt_seed, strlen(decrypt_seed));
- decrypt_hash = decrypt('client', enc_key, strlen(enc_key));
- document.write("decrypt hash = " + decrypt_hash + "<br />\n");
- decrypt_hash = hexToBin(decrypt_hash);
- encrypt_hash = encrypt('client', decrypt_hash, strlen(decrypt_hash));
- document.write("encrypt hash = " + encrypt_hash + "<br />\n");
- encrypt_hash = hexToBin(encrypt_hash);
- for (i=0; i<20; i++) username[i] = "00";
- for (i=0; i<strlen(USER); i++) username[i] = strToHex(substr(USER, i, 1));
- for (i=0; i<20; i++) user += username[i];
- user = hexToBin(user);
- userenc = encrypt('client', user, strlen(user));
- document.write("user = " + user + "<br />\n");
- userenc = hexToBin(userenc);
- password = encrypt('client', PASSWORD, strlen(PASSWORD));
- document.write("password = " + password + "<br />\n");
- password = hexToBin(password);
- cccam = encrypt('client', "CCcam" + "\x00", 6);
- document.write("cccam = " + cccam + "<br />\n");
- cccam = hexToBin(cccam);
- </script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement